§
    ž²Åjì ã                  ó^
  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZmZm Z  d dl!m"Z" d dlm#Z# d dl$m%Z% d d	l&m&Z&m'Z' d d
l(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8Z8d dl9m:Z; d dl8m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZB d dlCmDZDmEZEmFZF d dlGmHZH d dlImJZJmKZK d dlLmMZMmNZN d dlOmPZP d dlQmRZR d dlSmDZT ddlUmVZV ddlWmXZX ddlYmZZZ ddl[m\Z\  e6d¦  «        Z]e5r$d dl^m_Z_ ddl`maZambZb ddlcmdZdmeZe ddlUmfZfmgZg ddlhmiZi 	 d d ljmkZkmlZlmmZmmnZnmoZompZpmqZqmrZr d d!lsmtZt d d"lumvZvmwZwmxZx d d#lymzZzm{Z{ d d$l|m}Z}m~Z~mZm€Z€ d d%l�m‚Z‚ d d&lƒm„Z„m…Z…m†Z† d d'l‡mˆZˆm‰Z‰mŠZŠ e5rd d(l‹mŒZŒ d d)l�mŽZŽ d d*l�m�Z� d d+l‘m’Z’m“Z“ ej”         •                    e–¦  «        Z—ej”         ˜                    ej”         ˜                    e—¦  «        ¦  «        Z™ej”         š                    e™d,¦  «        Z›ejœ        d-k    Z� eDjž        ¦   «         rd d.lŸm Z  d d/l¡m¢Z¢ d d0l£m¤Z¤m¥Z¥m¦Z¦m§Z§ ndÑd6„Z¤dÑd7„Z¥dÑd8„Z¦dÒd:„Z§e8j¨         ©                    eªd;¦  «        Z«d<Z¬ejœ        d-k    Z� ej­        eª¦  «        Z®dÓd?„Z¯dÔd@„Z° ej±        d¦  «        dÕdC„¦   «         Z² G dD„ dE¦  «        Z³ G dF„ dGe³¦  «        Z´ G dH„ dIe³¦  «        ZµdÔdJ„Z¶dÖdM„Z·d×dØdR„Z¸	 d×dÙdW„Z¹	 dÚdÛdZ„Zº	 	 	 dÜdÝd\„Z»dÞd^„Z¼	 	 dßdàdc„Z½ej¾         G dd„ de¦  «        ¦   «         Z¿dádg„ZÀdâdk„ZÁ G dl„ dmejÂ        ¦  «        ZÃdãds„ZÄ ej±        d¦  «        dädt„¦   «         ZÅdÔdu„ZÆej¾         G dv„ dw¦  «        ¦   «         ZÇ G dx„ dyeÈ¦  «        ZÉ G dz„ d{¦  «        ZÊdåd…„ZËdædˆ„ZÌ G d‰„ dŠ¦  «        ZÍdçdŒ„ZÎ ej±        d¦  «        dèdŽ„¦   «         ZÏe~ G d�„ d�¦  «        ¦   «         ZÐ G d‘„ d’¦  «        ZÑe~ej±        dÔd“„¦   «         ¦   «         ZÒdÔd”„ZÓdédš„ZÔdéd›„ZÕdaÖdœe×d�<   dêd „ZØe~ G d¡„ d¢¦  «        ¦   «         ZÙdëd¨„ZÚe~ G d©„ dªeÙ¦  «        ¦   «         ZÛe~ G d«„ d¬eÛ¦  «        ¦   «         ZÜe~ G d­„ d®eÛ¦  «        ¦   «         ZÝdìd²„ZÞdíd´„Zße~ G dµ„ d¶¦  «        ¦   «         Zà G d·„ d¸¦  «        Zádîdº„Zâdïd»„Zãdïd¼„Zädïd½„Zådïd¾„Zæ	 dðdñdÄ„Zç G dÅ„ dÆ¦  «        Zèe~ G dÇ„ dÈ¦  «        ¦   «         Zée~ G dÉ„ dÊ¦  «        ¦   «         Zê G dË„ dÌ¦  «        Zë G dÍ„ dÎeë¦  «        Zì G dÏ„ dÐeë¦  «        ZídS )òé    )ÚannotationsN)Úbisect_right)Úcopy)Úc_void_pÚCDLLÚcdll)Ú	timedelta)Úpartial)ÚPath)ÚtimeÚtime_ns)Ú
ModuleType)ÚAnyÚCallableÚcastÚDictÚ	GeneratorÚListÚNoReturnÚOptionalÚSequenceÚTupleÚTYPE_CHECKINGÚTypeVarÚUnion)ÚSymIntÚTensor)ÚcountersÚdynamo_timedÚget_chromium_event_loggerÚget_metrics_context)ÚconfigÚexcÚmetrics)Úcuda_env)Úrocm_compile_commandÚrocm_compiler)ÚCustomGraphPassÚCustomGraphPassType)Úhas_frozen_params)Úlog_cache_bypass)r"   é   )Úcreate_cache)Úautotune_cache)ÚAutotuneCacheBundler)ÚTritonBundlerÚT)ÚKeysView)Ú_CompileFxKwargsÚCompiledFxGraph)ÚCompiledFxGraphConstantsÚ
OutputCode)Ú
JsonDataTyÚRemoteCache)Ú	InputType)Ú_set_gpu_runtime_envÚ_transform_cuda_pathsÚ
CppBuilderÚ
CppOptionsÚCppTorchDeviceOptionsÚget_compiler_version_infoÚ&get_name_and_dir_from_output_file_pathÚnormalize_path_separator)Úpick_vec_isa)Ú_module_to_triton_kernelÚ_reload_python_moduleÚ _reload_python_module_in_subproc)Ú	cache_dirÚdefault_cache_dir)ÚALIGN_BYTESÚclear_on_fresh_inductor_cacheÚis_linuxÚ
is_windows)Útrace_structured)Úextract_tensor_metadataÚ
FakeTensorÚTensorMetadata)Úhas_hintÚhint_intÚShapeEnv)ÚFuture©ÚGraphLowering)ÚChoiceCaller)ÚHalideInputSpecÚ
HalideMetaz_inductor/script.ldÚwin32)Úbuild_paths)Ú_run_build_command)Úlog_global_cache_errorsÚlog_global_cache_statsÚlog_global_cache_valsÚuse_global_cacheÚargsr   ÚkwargsÚreturnÚNonec                 ó   — d S ©N© ©r`   ra   s     úJC:\Projects\Historical\venv\Lib\site-packages\torch/_inductor/codecache.pyr\   r\   —   ó   € Øˆó    c                 ó   — d S re   rf   rg   s     rh   r]   r]   š   ri   rj   c                 ó   — d S re   rf   rg   s     rh   r^   r^   �   ri   rj   Úboolc                 ó   — dS ©NFrf   rf   rj   rh   r_   r_       s   € Øˆurj   Úoutput_codeiX  ÚnameÚstrc                ó˜  — t           j        j        €dn'dt           j        j                             dd¦  «        › �}dt          j        j        › t          j        j        › �}|› d|› �}t          j	         
                    t          ¦   «         |¦  «        }t          j	         
                    || ¦  «        }t          j        |d¬¦  «         |S )	NÚcpuÚcuú.Ú ÚpyÚ_T©Úexist_ok)ÚtorchÚversionÚcudaÚreplaceÚsysÚversion_infoÚmajorÚminorÚosÚpathÚjoinrF   Úmakedirs)rq   Úcu_strÚpython_versionÚbuild_folderÚcpp_wrapper_dirÚcpp_wrapper_build_directorys         rh   Úcpp_wrapper_cache_dirr�   ®   sº   € õ Œ=ÔÐ%ð 	ˆà7•%”-Ô$×,Ò,¨S°"Ñ5Ô5Ð7Ð7ð ð
 K�#Ô*Ô0ÐJµ#Ô2BÔ2HÐJÐJ€NØ$Ð/Ð/ vÐ/Ð/€Lå”g—l’l¥9¡;¤;°Ñ=Ô=€OÝ"$¤'§,¢,¨ÀÑ"EÔ"EÐÝ„KÐ+°dÐ;Ñ;Ô;Ð;Ø&Ð&rj   c                 ó,   — t           j        j        €dndS )NÚ
cubin_pathÚ
hsaco_path)r|   r}   Úhiprf   rj   rh   Úget_cpp_wrapper_cubin_path_namer’   ½   s   € Ý œ=Ô,Ð4ˆ<ˆ<¸,ÐFrj   Úglobal_cache_dirúOptional[Path]c                óž   — | �Jt          t          j                             | t                               ¦   «         d         ¦  «        ¦  «        nd S )NÚhash)r   r„   r…   r†   Ú	CacheBaseÚ
get_system)r“   s    rh   Úget_global_cache_path_implr™   Á   sD   € ð Ð'õ 	�RŒW�\Š\Ð*­I×,@Ò,@Ñ,BÔ,BÀ6Ô,JÑKÔKÑLÔLÐLàðrj   c                  óÖ   — e Zd Ze ej        d¦  «        dd„¦   «         ¦   «         Zee ej        d¦  «        dd„¦   «         ¦   «         ¦   «         Zedd„¦   «         Z	dd
„Z
dd„Zdd„ZdS )r—   Nrb   úDict[str, Any]c                 óx  — 	 ddl m}   | ¦   «         }n# t          $ r d }Y nw xY w	 dd id|idœ}t          j                             t          j                             ¦   «         ¦  «        }t          j        j        �+|j        |d         d<   t          j        j        |d         d<   n*|j	        |d         d<   t          j        j
        |d         d	<   n# t          t          f$ r i }Y nw xY wt          j        t          j        |d
¬¦  «                             d¦  «        ¦  «                             ¦   «         |d<   |S )Nr   )Ú
triton_keyrq   Útriton)Údevicer}   rŸ   r}   r~   r‘   T)Ú	sort_keysúutf-8r–   )Útriton.compiler.compilerr�   ÚModuleNotFoundErrorr|   r~   Úget_device_propertiesÚcurrent_devicer}   rq   ÚgcnArchNamer‘   ÚAssertionErrorÚRuntimeErrorÚhashlibÚsha256ÚjsonÚdumpsÚencodeÚ	hexdigest)r�   Útriton_versionÚsystemÚdevice_propertiess       rh   r˜   zCacheBase.get_systemË   si  € ð	"Ø;Ð;Ð;Ð;Ð;Ð;ð (˜Z™\œ\ˆNˆNøÝ"ð 	"ð 	"ð 	"Ø!ˆNˆNˆNð	"øøøð	à! 4˜.à˜nðð&ð &ˆFõ !&¤
× @Ò @Ý”
×)Ò)Ñ+Ô+ñ!ô !Ðõ Œ}Ô!Ð-Ø+<Ô+A��xÔ  Ñ(Ý,1¬MÔ,>��yÔ! &Ñ)Ð)à+<Ô+H��xÔ  Ñ(Ý+0¬=Ô+<��yÔ! %Ñ(øøÝ¥Ð-ð 	ð 	ð 	àˆFˆFˆFð	øøøõ !œÝŒJ�v¨Ð.Ñ.Ô.×5Ò5°gÑ>Ô>ñ
ô 
ç
Š)‰+Œ+ð 	ˆv‰ð ˆs   ‚ “"¡"¦B*C ÃC'Ã&C'r   c                 ó°   — t          t          j                             t	          ¦   «         dt
                               ¦   «         d         ¦  «        ¦  «        S )NÚcacher–   )r   r„   r…   r†   rF   r—   r˜   rf   rj   rh   Úget_local_cache_pathzCacheBase.get_local_cache_pathñ   s9   € õ •B”G—L’L¥¡¤¨gµy×7KÒ7KÑ7MÔ7MÈfÔ7UÑVÔVÑWÔWÐWrj   r”   c                 ó4   — t          t          j        ¦  «        S re   )r™   r"   r“   rf   rj   rh   Úget_global_cache_pathzCacheBase.get_global_cache_path÷   s   € å)­&Ô*AÑBÔBÐBrj   rc   c                óB   — t                                ¦   «         | _        d S re   )r—   r˜   r°   ©Úselfs    rh   Ú__init__zCacheBase.__init__û   s   € Ý×*Ò*Ñ,Ô,ˆŒˆˆrj   c                óÜ   — |                       ¦   «         }|                     ¦   «         si S t          |¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |d         S ©Nr³   )r´   Úis_fileÚopenr«   Úload)r¹   Úlocal_cache_pathÚlocal_cache_fpÚlocal_caches       rh   Úget_local_cachezCacheBase.get_local_cacheþ   s¨   € Ø×4Ò4Ñ6Ô6ÐØ×'Ò'Ñ)Ô)ð 	ØˆIÝÐ"Ñ#Ô#ð 	4 ~Ýœ) NÑ3Ô3ˆKð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4à˜7Ô#Ð#s   ºAÁAÁ"ArÂ   c                ó¤   — |                       ¦   «         }t          t          |¦  «        t          j        | j        |dœd¬¦  «        d¬¦  «         d S )N)r°   r³   é   )ÚindentT©Ú	make_dirs)r´   Úwrite_atomicrr   r«   r¬   r°   )r¹   rÂ   rÀ   s      rh   Úupdate_local_cachezCacheBase.update_local_cache  s`   € Ø×4Ò4Ñ6Ô6ÐÝÝÐ Ñ!Ô!ÝŒJ $¤+¸ÐDÐDÈQÐOÑOÔOØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
rj   ©rb   r›   )rb   r   )rb   r”   ©rb   rc   )rÂ   r›   rb   rc   )Ú__name__Ú
__module__Ú__qualname__ÚstaticmethodÚ	functoolsÚ	lru_cacher˜   rI   r´   r¶   rº   rÃ   rÊ   rf   rj   rh   r—   r—   Ê   sò   € € € € € ØØ€YÔ˜ÑÔð"ð "ð "ñ Ôñ „\ð"ðH Ø"Ø€YÔ˜ÑÔðXð Xð Xñ Ôñ #Ô"ñ „\ðXð ðCð Cð Cñ „\ðCð-ð -ð -ð -ð$ð $ð $ð $ð
ð 
ð 
ð 
ð 
ð 
rj   r—   c                  ó   — e Zd Zdd„Zdd	„Zd
S )Ú
LocalCacheÚkeysrr   rb   úOptional[Dict[str, Any]]c                óZ   — |                       ¦   «         }|}|D ]}||v r	||         }Œ d S |S re   )rÃ   )r¹   rÕ   r³   Ú	sub_cacheÚkeys        rh   ÚlookupzLocalCache.lookup  sH   € Ø×$Ò$Ñ&Ô&ˆàˆ	Øð 	ð 	ˆCØ�eˆ|ˆ|Ø! #œJ�	�	à�t�tàÐrj   Úvaluer   rc   c               óÈ   — |                       ¦   «         }|}|dd…         D ] }|                     |i ¦  «         ||         }Œ!|||d         <   |                      |¦  «         d S )Nr   éÿÿÿÿ)rÃ   Ú
setdefaultrÊ   )r¹   rÛ   rÕ   r³   rØ   rÙ   s         rh   Ú	set_valuezLocalCache.set_value  sx   € Ø×$Ò$Ñ&Ô&ˆàˆ	Ø˜˜"˜”:ð 	'ð 	'ˆCØ× Ò   bÑ)Ô)Ð)Ø! #œˆIˆIØ#ˆ	�$�r”(Ñà×Ò Ñ&Ô&Ð&Ð&Ð&rj   N)rÕ   rr   rb   rÖ   )rÕ   rr   rÛ   r   rb   rc   )rÍ   rÎ   rÏ   rÚ   rß   rf   rj   rh   rÔ   rÔ     s<   € € € € € ð
ð 
ð 
ð 
ð	'ð 	'ð 	'ð 	'ð 	'ð 	'rj   rÔ   c                  óJ   — e Zd Z ej        d¦  «        dd„¦   «         Zdd„ZdS )ÚPersistentCacheNrb   r›   c                óà   — |                       ¦   «         }|�|                     ¦   «         si S t          |¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |d         S r¼   )r¶   r½   r¾   r«   r¿   )r¹   Úglobal_cache_pathÚglobal_cache_fpÚglobal_caches       rh   Úget_global_cachez PersistentCache.get_global_cache)  s¬   € à ×6Ò6Ñ8Ô8ÐØÐ$Ð,=×,EÒ,EÑ,GÔ,GÐ$ØˆIÝÐ#Ñ$Ô$ð 	6¨Ýœ9 _Ñ5Ô5ˆLð	6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6øøøð 	6ð 	6ð 	6ð 	6à˜GÔ$Ð$s   ¼AÁA!Á$A!ÚchoicesúList[ChoiceCaller]Úoprr   ÚinputsÚ	benchmarkú4Optional[Callable[[Any], Dict[ChoiceCaller, float]]]úDict[ChoiceCaller, float]c                óJ  ‡‡‡‡‡— t          j        ¦   «         Št          t          | j        ‰‰‰¦  «        }t          t
          | j        ‰‰‰¦  «        }t          t          | j        ‰‰‰¦  «        }i Šddˆˆˆˆˆfd„}t          j        st          j	        �r`t          j
        r|                      ¦   «         ni }	 ||	¦  «        �s1t          ¦   «         r  ||                      ¦   «         |¬	¦  «        �s|�� 	  |‰¦  «        Št          ˆfd
„‰D ¦   «         ¦  «        sJ ‚|	                     ‰i ¦  «         |	‰                              ‰i ¦  «                             ‰i ¦  «         ‰                     ¦   «         D ].\  }
}||	‰         ‰         ‰         |
                     ¦   «         <   Œ/n# t$          $ r} ||¦  «         |‚d}~ww xY w|                      |	¦  «         ˆfd„‰D ¦   «         } ||¦  «         n-t          ¦   «         r ||                      ¦   «         |¬	¦  «         ‰S )aG  
        Check to see if we have benchmarked the given choice callers. For each
        choice caller:

            1. Check global_cache[op][inputs][choice][precision], return benchmark if cached.
            2. Check local_cache[op][inputs][choice][precision], return benchmark if cached.
            3. 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.
        Nr³   r›   Úcallbackr   rb   rm   c                ó  •— d}‰D ]v}|                      ¦   «         }||                      ‰i ¦  «                             ‰i ¦  «                             ‰i ¦  «        v r| ‰         ‰         ‰         |         ‰	|<   Œtd} |r ||¬¦  «         |S )z2Check if `cache` contains data for all the choicesTF)Úcached)Úhash_keyÚget)
r³   rï   ÚhitÚchoiceÚchoice_hashrç   rê   ré   Ú	precisionÚtimingss
        €€€€€rh   Úcheck_cachez+PersistentCache.lookup.<locals>.check_cacheM  s¨   ø€ àˆCØ!ð ð �Ø$ŸošoÑ/Ô/�Ø %§)¢)¨B°Ñ"3Ô"3×"7Ò"7¸ÀÑ"CÔ"C×"GÒ"GÈ	ÐSUÑ"VÔ"VÐVÐVà&+¨B¤i°Ô&7¸	Ô&BÀ;Ô&O�G˜F‘O�Oð  �CØØð %Ø� Ð$Ñ$Ô$Ð$ØˆJrj   )rï   c              3  ó    •K  — | ]}|‰v V — Œ	d S re   rf   ©Ú.0rõ   rø   s     €rh   ú	<genexpr>z)PersistentCache.lookup.<locals>.<genexpr>k  s(   øè è € ÐGÐG°V˜v¨Ð0ÐGÐGÐGÐGÐGÐGrj   c                óF   •— i | ]}|                      ¦   «         ‰|         “ŒS rf   )rò   rû   s     €rh   ú
<dictcomp>z*PersistentCache.lookup.<locals>.<dictcomp>w  s6   ø€ ð "ð "ð "Ø;A�F—O’OÑ%Ô% w¨v¤ð"ð "ð "rj   re   )r³   r›   rï   r   rb   rm   )r|   Úget_float32_matmul_precisionr
   r]   r°   r^   r\   r"   Úmax_autotuneÚmax_autotune_gemmÚautotune_local_cacherÃ   r_   ræ   ÚallrÞ   Úitemsrò   r¨   rÊ   )r¹   rç   ré   rê   rë   Ú	log_statsÚlog_valsÚ
log_errorsrù   rÂ   rõ   ÚtimingÚeÚtimings_to_logr÷   rø   s    ```          @@rh   rÚ   zPersistentCache.lookup2  s©  øøøøø€ õ$ Ô6Ñ8Ô8ˆ	åÕ2°D´KÀÀVÈYÑWÔWˆ	ÝÕ0°$´+¸rÀ6È9ÑUÔUˆÝÝ# T¤[°"°f¸iñ
ô 
ˆ
ð ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ  Ôð  	E¥&Ô":ñ  	EÝ4:Ô4OÐW˜$×.Ò.Ñ0Ô0Ð0ÐUWˆKð  �K Ñ,Ô,ñ)õ %Ñ&Ô&ð)ð $˜ D×$9Ò$9Ñ$;Ô$;ÀiÐPÑPÔPñ	)ð Ñ)ðà'˜i¨Ñ0Ô0�GÝÐGÐGÐGÐG¸wÐGÑGÔGÑGÔGÐGÐGÐGØ×*Ò*¨2¨rÑ2Ô2Ð2Ø ”O×.Ò.¨v°rÑ:Ô:×EÒEÀiÐQSÑTÔTÐTØ*1¯-ª-©/¬/ð Wð W™˜ ØPV˜ Bœ¨Ô/°	Ô:¸6¿?º?Ñ;LÔ;LÑMÐMðWøå#ð ð ð à�J˜q‘M”M�MØ�Gøøøøðøøøð
 ×'Ò'¨Ñ4Ô4Ð4ð"ð "ð "ð "ØELð"ñ "ô "�ð �˜Ñ(Ô(Ð(øÝÑÔð 	EàˆK˜×-Ò-Ñ/Ô/¸)ÐDÑDÔDÐDð ˆs   Ã6B1F( Æ(
GÆ2F?Æ?GrË   )
rç   rè   ré   rr   rê   rr   rë   rì   rb   rí   )rÍ   rÎ   rÏ   rÑ   rÒ   ræ   rÚ   rf   rj   rh   rá   rá   (  sZ   € € € € € Ø€YÔ˜ÑÔð%ð %ð %ñ Ôð%ðNð Nð Nð Nð Nð Nrj   rá   c                 óÈ   — t           j                             t          ¦   «         d¦  «        } t           j                             | ¦  «        st          j        | d¬¦  «         | S )NÚlocksTrz   )r„   r…   r†   rF   Úexistsr‡   )Úlock_dirs    rh   Úget_lock_dirr  ƒ  sK   € ÝŒw�|Š|�I™KœK¨Ñ1Ô1€HÝŒ7�>Š>˜(Ñ#Ô#ð -Ý
Œ�H tÐ,Ñ,Ô,Ð,Ø€Orj   ÚdataÚbytesc                óÌ   — t          j        t          j        | ¦  «                             ¦   «         ¦  «        d d…                              d¦  «                             ¦   «         S )Né3   r¡   )Úbase64Ú	b32encoder©   rª   ÚdigestÚdecodeÚlower)r  s    rh   Úsha256_hashr  Š  sL   € åÔ�GœN¨4Ñ0Ô0×7Ò7Ñ9Ô9Ñ:Ô:¸3¸B¸3Ô?×FÒFÀwÑOÔO×UÒUÑWÔWÐWrj   rw   ÚcodeúUnion[str, bytes]Úextrac                óÀ   — t          | t          ¦  «        r| n|                      d¦  «        }|dk    r|dz   |                     d¦  «        z   }dt          |¦  «        z   S )Nr¡   rw   s   ||Úc)Ú
isinstancer  r­   r  )r  r  Úhashing_strs      rh   Ú	code_hashr"  �  s]   € Ý$ T­5Ñ1Ô1ÐK�$�$°t·{²{À7Ñ7KÔ7K€KØ�‚{€{Ø! EÑ)¨E¯LªL¸Ñ,AÔ,AÑAˆØ•˜[Ñ)Ô)Ñ)Ð)rj   ÚbasenameÚ	extensionÚspecified_dirúTuple[str, str, str]c                ó`  — |rOt           j                             |¦  «        r|}nat           j                             t	          ¦   «         |¦  «        }n4t           j                             t	          ¦   «         | dd…         ¦  «        }t           j                             || › d|› �¦  «        }| ||fS )Nr,   é   rv   )r„   r…   Úisabsr†   rF   )r#  r$  r%  Úsubdirr…   s        rh   Úget_pathr+  –  s•   € ð ð :ÝŒ7�=Š=˜Ñ'Ô'ð 	>Ø"ˆFˆFå”W—\’\¥)¡+¤+¨}Ñ=Ô=ˆFˆFå”—’�i™kœk¨8°A°a°C¬=Ñ9Ô9ˆÝŒ7�<Š<˜ 8Ð 9Ð 9¨iÐ 9Ð 9Ñ:Ô:€DØ�V˜TÐ!Ð!rj   ÚcontentÚ	hash_typec                ó’   — |dk    rt          | |¦  «        S |dv rt          t          | ¦  «        ¦  «        S t          d|› �¦  «        ‚)Nr  )ÚcubinÚhsacoÚspvzUnknown hash type )r"  Úreprr§   )r,  r  r-  s      rh   Úget_hashr3  ¤  sV   € ð �FÒÐÝ˜ %Ñ(Ô(Ð(ØÐ-Ð-Ð-Ý�˜g™œÑ'Ô'Ð'Ý
Ð9¨iÐ9Ð9Ñ
:Ô
:Ð:rj   úTuple[str, str]c                óè   — t          |                      ¦   «         ||¦  «        }t          |||¦  «        \  }}}|dk    }	t          j                             |¦  «        st          || d¬¦  «         ||fS )Nr  TrÇ   )r3  Ústripr+  r„   r…   r  rÉ   )
r,  r$  r  r-  r%  rÙ   r#  r*  r…   Úencode_utf_8s
             rh   Úwriter8  ®  st   € õ ˜Ÿš™œ¨°	Ñ:Ô:€CÝ% c¨9°mÑDÔDÑ€Hˆf�dØ" fÒ,€LÝŒ7�>Š>˜$ÑÔð 4Ý�T˜7¨dÐ3Ñ3Ô3Ð3Ø�Tˆ>Ðrj   Útextc                ó.   — t          | d¦  «        d         S )zT
    Write the `text` to a file and return the path computed based on the hash.
    Útxtr,   ©r8  )r9  s    rh   Ú
write_textr=  À  s   € õ ��uÑÔ˜aÔ Ð rj   FÚpath_rÈ   r7  c                ó–  — t          |t          t          f¦  «        s
J d¦   «         ‚t          | ¦  «        }|r|j                             dd¬¦  «         |j        dt          j        ¦   «         › dt          j	        ¦   «         › d�z  }t          |t          ¦  «        rdnd}| 
                    ||rdnd ¬	¦  «        5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   	 |                     |¬
¦  «         d S # t          $ r=}t          s‚ t          j        ||¬¦  «         t          j        |¦  «         Y d }~d S d }~ww xY w)Nz6Only strings and byte arrays can be saved in the cacheT)Úparentsr{   rv   z.tmpÚwÚwbr¡   )Úencoding)Útarget)ÚsrcÚdst)r   rr   r  r   ÚparentÚmkdirr„   ÚgetpidÚ	threadingÚ	get_identr¾   r8  ÚrenameÚFileExistsErrorÚ_IS_WINDOWSÚshutilÚcopy2Úremove)	r>  r,  rÈ   r7  r…   Útmp_pathÚ
write_modeÚfÚe_file_exists	            rh   rÉ   rÉ   Ç  s·  € õ Ø•#•u�ñô ð @ð @à?ñ@ô @ð õ �‰;Œ;€DØð 7ØŒ×Ò $°ÐÑ6Ô6Ð6ØŒ{ÐJ¥¤¡¤ÐJÐJ­yÔ/BÑ/DÔ/DÐJÐJÐJÑJ€HÝ" 7­CÑ0Ô0Ð:��°d€JØ	�Š�z°|Ð,M¨G¨GÈˆÑ	NÔ	Nð ÐRSØ	�Š�ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
Ø�Š˜tˆÑ$Ô$Ð$Ð$Ð$øÝð ð ð Ýð 	Øõ 	Œ˜ tÐ,Ñ,Ô,Ð,å
Œ	�(ÑÔÐÐÐÐÐÐÐøøøøðøøøs*   Â;CÃC!Ã$C!Ã)D Ä
EÄ2EÅEc                  ó(   — e Zd ZU dZded<   ded<   dS )ÚTensorMetadataAndValueszk
    TensorMetadata plus the elements as a list of raw values.
    Used for hashing inlined constants.
    rO   Útensor_metadataú	List[Any]ÚvaluesN©rÍ   rÎ   rÏ   Ú__doc__Ú__annotations__rf   rj   rh   rW  rW  æ  s6   € € € € € € ðð ð
 $Ð#Ð#Ñ#ØÐÐÑÐÐrj   rW  Úxc                ó   — | S re   rf   ©r^  s    rh   Ú_identra  ñ  s   € Ø€Hrj   Útr   rO   c                ór   — t          | ¦  «        }t          | d¦  «        st          j        |dd¬¦  «        }|S )zs
    Extracts the tensor metadata and removes fields of the TensorMetadata
    that are not needed for caching
    Ú_is_inductor_staticr   N)Ústorage_offsetÚstorage_bytes)rM   ÚhasattrÚdataclassesr   )rb  Úmetas     rh   Ú%extract_tensor_metadata_for_cache_keyrj  õ  sA   € õ
 # 1Ñ%Ô%€DÝ�1Ð+Ñ,Ô,ð OÝÔ" 4¸ÈÐNÑNÔNˆà€Krj   c                  ój   ‡ — e Zd ZdZ	 	 d$d%ˆ fd„Zd&d„Zd'd„Zd(d„Zd)d„Zd*d„Z	d+d„Z
d,d„Zd-d#„Zˆ xZS ).ÚFxGraphCachePicklera:  
    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.
    TFÚgmútorch.fx.GraphModuleÚinclude_non_inlinedrm   Úhas_user_defined_triton_kernelsrb   rc   c                ó–  •— t          j        ¦   «         | _        t          ¦   «                              | j        ¦  «         || _        t          j                             ¦   «         | _        | j         	                    t          t          j        | j        ¦  «        t          j        t          j        | j        ¦  «        t          j        t          j        | j        ¦  «        t          j        j        j        j        t          j        | j        ¦  «        i¦  «         |r&t          j        | j        ¦  «        | j        |j        <   d| _        dS )a2  
        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º   ro  ÚcopyregÚdispatch_tabler   ÚupdaterN   rÑ   r
   Ú_reduce_fake_tensorr|   r   Ú_reduce_tensorr   Ú_reduce_symintÚfxÚexperimentalÚ_backward_stateÚBackwardStateÚ_reduce_unsupportedÚ_reduce_graph_moduleÚ	__class__Úfast)r¹   rm  ro  rp  r‚  s       €rh   rº   zFxGraphCachePickler.__init__	  s  ø€ õ ”z‘|”|ˆŒÝ‰Œ×Ò˜œÑ&Ô&Ð&à#6ˆÔ å%Ô4×9Ò9Ñ;Ô;ˆÔØÔ×"Ò"å�IÔ-¨dÔ.FÑGÔGÝ”�iÔ/°Ô0CÑDÔDÝ”�iÔ/°Ô0CÑDÔDÝ”Ô%Ô5ÔCÅYÔEVØÔ,ñFô Fð	ñ		
ô 		
ð 		
ð +ð 	å09Ô0AØÔ)ñ1ô 1ˆDÔ ¤Ñ-ð ˆŒ	ˆ	ˆ	rj   rb  r   ú.Tuple[Callable[[T], T], Tuple[TensorMetadata]]c                ó4   — t          |¦  «        }t          |ffS )z7
        Custom reducer to pickle FakeTensors.
        )rj  ra  )r¹   rb  Úmetadatas      rh   ry  z'FxGraphCachePickler._reduce_fake_tensor/  s   € õ 9¸Ñ;Ô;ˆÝ˜˜Ð$Ð$rj   úNTuple[Callable[[T], T], Tuple[Union[TensorMetadata, TensorMetadataAndValues]]]c                ón  — ddl m} |j        rt          d¦  «        ‚t	          |¦  «        } |j        |¦  «        s| j        rjt          ¦   «         }|                     ¦   «         }t          ¦   «         |z
  }|dk    rt          j
        d|d›d�¦  «         t          t          ||¦  «        ffS t          |ffS )z’
        Custom reducer to pickle Tensors.  If we see tensors, we know they're constants
        stored as attributes on the GraphModule.
        r,   rT   zmkldnn tensors unpickleableg      ð?z0FX graph cache copying of a large constant took z.1zs. Please file an issue.)ÚgraphrU   Ú	is_mkldnnÚBypassFxGraphCacherj  Úcan_inline_constantro  r   ÚtolistÚwarningsÚwarnra  rW  )r¹   rb  rU   r†  ÚstartrZ  Úelapseds          rh   rz  z"FxGraphCachePickler._reduce_tensor8  sç   € ð 	)Ð(Ð(Ð(Ð(Ð(àŒ;ð 	Dõ %Ð%BÑCÔCÐCõ 9¸Ñ;Ô;ˆØ,ˆ=Ô,¨QÑ/Ô/ð 	J°4Ô3Kð 	Jõ ‘F”FˆEØ—X’X‘Z”ZˆFÝ‘f”f˜u‘nˆGØ˜Š}ˆ}Ý”ð,ÀwÐVð ,ð ,ð ,ñô ð õ
 Õ4°X¸vÑFÔFÐHÐIÐIõ ˜˜Ð$Ð$rj   Úsr   ú#Tuple[Callable[[T], T], Tuple[str]]c                ó0   — t           t          |¦  «        ffS )z3
        Custom reducer to pickle SymInts.
        )ra  rr   ©r¹   r’  s     rh   r{  z"FxGraphCachePickler._reduce_symint\  s   € õ �˜Q™œ˜	Ð"Ð"rj   r   r   c                ó    — t          d¦  «        ‚)z{
        Custom reducer to handle any objects that we don't support and therefore
        raise to bypass caching.
        zReduce unsupported)r‹  r•  s     rh   r€  z'FxGraphCachePickler._reduce_unsupportede  s   € õ
 !Ð!5Ñ6Ô6Ð6rj   ú&Tuple[Any, Tuple[Dict[str, Any], str]]c                ó´   — |                      ¦   «         \  }\  }}|d         }t          j        dd|¦  «        }t          j        dd|¦  «        }||d<   |||ffS )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 indicies 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+rw   zconstant_args_idx = \d+)Ú
__reduce__ÚreÚsub)r¹   rm  Úfnr  Úimportsr  s         rh   r�  z(FxGraphCachePickler._reduce_graph_modulel  sc   € ð !Ÿmšm™oœoÑˆ‰OˆT�7Ø�GŒ}ˆÝŒvÐ)¨2¨tÑ4Ô4ˆÝŒvÐ0°"°dÑ;Ô;ˆØˆˆW‰Ø�D˜'�?Ð"Ð"rj   Úobjr  c                óÄ  — 	 |                       |¦  «         | j                             ¦   «         | j                             d¦  «         | j                             d¦  «         S # t
          t          f$ r1}t                               dd¬¦  «         t          d¦  «        |‚d}~ww xY w# | j                             d¦  «         | j                             d¦  «         w xY w)z<
        Pickle an object and return a byte string.
        r   zFailed to pickle cache keyT©Úexc_infoN)
Údumprt  ÚgetvalueÚseekÚtruncateÚ	TypeErrorÚAttributeErrorÚlogÚwarningr‹  )r¹   rŸ  r
  s      rh   r¬   zFxGraphCachePickler.dumps  sß   € ð
	%Ø�IŠI�c‰NŒNˆNØ”<×(Ò(Ñ*Ô*ð ŒL×Ò˜aÑ Ô Ð ØŒL×!Ò! !Ñ$Ô$Ð$Ð$øõ �>Ð*ð 	Jð 	Jð 	Jå�KŠKÐ4¸tˆKÑDÔDÐDÝ$Ð%AÑBÔBÈÐIøøøøð	Jøøøøð ŒL×Ò˜aÑ Ô Ð ØŒL×!Ò! !Ñ$Ô$Ð$Ð$øøøs#   ‚-A$ Á$B&Á5,B!Â!B&Â&B) Â)6Crr   c                óJ   — |                       |¦  «        }t          |¦  «        S )zE
        Serialize an object and return a hash of the bytes.
        )r¬   r  )r¹   rŸ  Úserialized_datas      rh   r3  zFxGraphCachePickler.get_hash�  s!   € ð Ÿ*š* S™/œ/ˆÝ˜?Ñ+Ô+Ð+rj   ÚinpÚFxGraphHashDetailsú	List[str]c                óÀ  ‡ — d
ˆ fd„}g }t          |¦  «                             ¦   «         D �]1\  }}t          |t          ¦  «        rkt	          t          |¦  «        ¦  «        D ]M}‰                      ||         ¦  «        }|                     d|› d|› d|› d |||         ¦  «        › �¦  «         ŒNŒ†t          |t          ¦  «        rZ|                     ¦   «         D ]D\  }}	‰                      |	¦  «        }|                     d|› d|› d|› d ||	¦  «        › �¦  «         ŒEŒõ‰                      |¦  «        }|                     d|› d|› d	 ||¦  «        › �¦  «         �Œ3|S )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.
        rŸ  r   rb   rr   c                óT  •— t          | t          j        ¦  «        rt          t	          | ¦  «        ¦  «        S t          | t
          ¦  «        rdS t          | ¦  «        ‰j        v r6t           ‰j        t          | ¦  «                 | ¦  «        d         ¦  «        S t          | ¦  «        S )Nz<bytes>r,   )r   r|   r   rr   rj  r  Útyperw  )rŸ  r¹   s    €rh   Úget_strz0FxGraphCachePickler.debug_lines.<locals>.get_str�  s�   ø€ Ý˜#�uœ|Ñ,Ô,ð  ÝÕ@ÀÑEÔEÑFÔFÐFÝ˜C¥Ñ'Ô'ð  Ø �yÝ�c‘”˜dÔ1Ð1Ð1åÐ9˜4Ô.­t°C©y¬yÔ9¸#Ñ>Ô>¸qÔAÑBÔBÐBå˜3‘x”x�rj   ú[z] z]: z: ©rŸ  r   rb   rr   )	Úvarsr  r   ÚlistÚrangeÚlenr3  ÚappendÚdict)
r¹   r­  r³  ÚlinesÚattrrŸ  ÚiiÚhÚkÚvs
   `         rh   Údebug_lineszFxGraphCachePickler.debug_lines–  s­  ø€ ð		 ð 		 ð 		 ð 		 ð 		 ð 		 ð ˆÝ˜c™œŸšÑ*Ô*ð 	>ñ 	>‰IˆD�#Ý˜#�tÑ$Ô$ð 
>Ý¥ C¡¤™/œ/ð Lð L�BØŸš c¨"¤gÑ.Ô.�AØ—L’LÐ!J QÐ!JÐ!J¨$Ð!JÐ!J°Ð!JÐ!J¸¸ÀÀBÄÑ8HÔ8HÐ!JÐ!JÑKÔKÐKÐKðLõ ˜C¥Ñ&Ô&ð >ØŸIšI™KœKð Eð E‘D�A�qØŸš aÑ(Ô(�AØ—L’LÐ!C QÐ!CÐ!C¨$Ð!CÐ!C°Ð!CÐ!C°w°w¸q±z´zÐ!CÐ!CÑDÔDÐDÐDðEð —M’M #Ñ&Ô&�Ø—’Ð< Ð<Ð< dÐ<Ð<¨g¨g°c©l¬lÐ<Ð<Ñ=Ô=Ð=Ñ=Øˆrj   )TF)rm  rn  ro  rm   rp  rm   rb   rc   )rb  r   rb   r„  )rb  r   rb   r‡  )r’  r   rb   r“  )r’  r   rb   r   )rm  rn  rb   r—  )rŸ  r   rb   r  rµ  )r­  r®  rb   r¯  )rÍ   rÎ   rÏ   r\  rº   ry  rz  r{  r€  r�  r¬   r3  rÂ  Ú__classcell__)r‚  s   @rh   rl  rl    sö   ø€ € € € € ðð ð %)Ø05ð	$ð $ð $ð $ð $ð $ð $ðL%ð %ð %ð %ð"%ð "%ð "%ð "%ðH#ð #ð #ð #ð7ð 7ð 7ð 7ð#ð #ð #ð #ð&%ð %ð %ð %ð ,ð ,ð ,ð ,ðð ð ð ð ð ð ð rj   rl  ÚrootsúList[str] | NoneÚprefixÚhasherúhashlib._Hashc                óö  — t          t          j        | |¦  «        d„ ¬¦  «        D ]Ò}|j                             |j        d ¦  «        }|€J ‚|j        }|€J ‚t          |d¦  «        5 }|                     |j         	                    d¦  «        ¦  «         |                     | 
                    ¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   |j        rt          |j        |j        › d�|¦  «         ŒÓd S )Nc                ó   — | j         S re   )rq   r`  s    rh   ú<lambda>z!build_code_hash.<locals>.<lambda>»  s   € ÈÌ€ rj   ©rÙ   Úrbr¡   rv   )ÚsortedÚpkgutilÚiter_modulesÚmodule_finderÚ	find_specrq   Úoriginr¾   rx  r­   ÚreadÚispkgÚbuild_code_hashÚsubmodule_search_locations)rÄ  rÆ  rÇ  ÚlibÚspecÚmodulerT  s          rh   rÖ  rÖ  ¸  sA  € õ •gÔ*¨5°&Ñ9Ô9Ð?OÐ?OÐPÑPÔPð 
Vð 
VˆØÔ ×*Ò*¨3¬8°TÑ:Ô:ˆØÐÐÐØ”ˆØÐ!Ð!Ð!Ý�&˜$ÑÔð 	$ 1Ø�MŠM˜$œ)×*Ò*¨7Ñ3Ô3Ñ4Ô4Ð4Ø�MŠM˜!Ÿ&š&™(œ(Ñ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð Œ9ð 	Vå˜DÔ;ÀÄ	¸_¸_¸_ÈfÑUÔUÐUøð
Vð 
Vs   Á'ACÃC	ÃC	c                 ó>  — t          dd¬¦  «        5  t          j        ¦   «         s dd„}  | t          ¦  «        cd	d	d	¦  «         S d
dlm} |                     d¦  «                             ¦   «                              d¦  «        cd	d	d	¦  «         S # 1 swxY w Y   d	S )zS
    Compute a key that contains relevant information about torch source files
    Úinductor_codecache_torch_keyT©Úlog_pt2_compile_eventÚrootrr   rb   r  c                ó(  ‡— d}t           j                             t          ¦  «        Šˆfd„|D ¦   «         }t	          j        ¦   «         }|                     t          j         	                    d¦  «        ¦  «         t          | gd|¦  «         |D ]p}t           j                             |¦  «        rOt          |d¦  «        5 }|                     |                     ¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   Œq|                     ¦   «         S )N)z"codegen/aoti_runtime/interface.cppz'codegen/aoti_runtime/implementation.cppúcodegen/cpp_prefix.hú	script.ldc                óP   •— g | ]"}t           j                             ‰|¦  «        ‘Œ#S rf   )r„   r…   r†   )rü   r^  Úinductor_roots     €rh   ú
<listcomp>z4torch_key.<locals>.get_code_hash.<locals>.<listcomp>Û  s)   ø€ ÐSÐSÐSÀ!�rœwŸ|š|¨M¸1Ñ=Ô=ÐSÐSÐSrj   r¡   rw   rÍ  )r„   r…   ÚdirnameÚ__file__r©   rª   rx  r|   Ú__version__r­   rÖ  r  r¾   rÔ  r  )rß  Úextra_filesrÇ  r…   rT  rä  s        @rh   Úget_code_hashz torch_key.<locals>.get_code_hashÐ  s,  ø€ ð�õ !#¤§¢µÑ 9Ô 9�ØSÐSÐSÐSÀ{ÐSÑSÔS�Ý œÑ)Ô)�Ø—’�eÔ/×6Ò6°wÑ?Ô?Ñ@Ô@Ð@Ý  ¨¨FÑ3Ô3Ð3Ø'ð 4ð 4�DÝ”w—~’~ dÑ+Ô+ð 4Ý! $¨Ñ-Ô-ð 4°Ø"ŸMšM¨!¯&ª&©(¬(Ñ3Ô3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4øà—}’}‘”Ð&s   Ã (C4Ã4C8	Ã;C8	Nr   ©Úparutilztorch/src_hash.txtÚascii)rß  rr   rb   r  )	r   r"   Ú	is_fbcodeÚ_TORCH_PATHÚlibfb.pyrì  Úget_file_contentsÚrstripr­   )rê  rì  s     rh   Ú	torch_keyró  È  s4  € õ
 
Ð4ÈDÐ	QÑ	QÔ	Qð Xð XÝÔÑ!Ô!ð 	.ð'ð 'ð 'ð 'ð* !�=¥Ñ-Ô-ð1Xð Xð Xð Xñ Xô Xð Xð Xð4 	%Ð$Ð$Ð$Ð$Ð$à×(Ò(Ð)=Ñ>Ô>×EÒEÑGÔG×NÒNÈwÑWÔWð9Xð Xð Xð Xñ Xô Xð Xð Xð Xð Xð Xð Xøøøð Xð Xð Xð Xð Xð Xs   ’'BÁ?BÂBÂBc                 óJ   — t           j                             t          ¦  «        S re   )r„   r…   ræ  rç  rf   rj   rh   Úget_inductor_rootrõ  ì  s   € ÝŒ7�?Š?�8Ñ$Ô$Ð$rj   c                  ó   — e Zd ZU dZded<   dS )ÚOrderedSetHolderzb
    See FxGraphHashDetails. Holds a sorted list to support stable hashing
    of set kwargs.
    rY  r  Nr[  rf   rj   rh   r÷  r÷  ð  s*   € € € € € € ðð ð
 ÐÐÑÐÐrj   r÷  c                  ó   — e Zd ZdZdS )r‹  zI
    Exception to indicate that the FxGraphCache should be bypassed.
    N)rÍ   rÎ   rÏ   r\  rf   rj   rh   r‹  r‹  ú  s   € € € € € ðð ð ð rj   r‹  c                  ó(   — e Zd ZdZdgZdd„Zdd„ZdS )r®  zz
    Object to capture all the details for a compiled FX graph relevant to computing
    a safe and stable cache key.
    Úgraph_idrm  rn  Úexample_inputsúSequence[InputType]Ú	fx_kwargsr3   Úinputs_to_checkúSequence[int]rb   rc   c                óØ  — || _         || _        t          j        | _        i | _        t          |                     ¦   «         ¦  «        D ]S\  }}|| j        vrEt          |¦  «        t          u r%t          t          |¦  «        ¦  «        | j        |<   ŒI|| j        |<   ŒTddlm}m}m}	 ddlm}
 g | _        |��|                     ¦   «         D ]ò}t'          |t(          j        j        ¦  «        sŒ"t/          j        |j                             d|¬¦  «        |j                             d|	¬¦  «        ¦  «        D ]†}ddlm} |                     |j        d         ¦  «        }t'          ||¦  «        r|j        } |
|¦  «        }|                      |j        d         ¦  «        }| j         !                    ||f¦  «         Œ‡Œó|| _"        t)          j#        ¦   «         t)          j$        ¦   «         t(          j%        j&        j'        f| _(        t(          j)        j*        j+        j,        t(          j)        j*        j+        j-        t(          j)        j*        j+        j.        f| _/        ta          ¦   «         | _1        td           3                    ¦   «         | _4        tk          j6        ¦   «         | _7        |  8                    tj          j9        ¦  «        | _9        |  8                    tj          j:        ¦  «        | _:        d S )	Nr   )Úkernel_side_tableÚ triton_kernel_wrapper_functionalÚtriton_kernel_wrapper_mutation)Ú9user_defined_triton_kernel_transitive_closure_source_codeÚcall_function)ré   rD  )Ú	AutotunerÚ
kernel_idxÚconstant_args_idx);rm  rû  ÚcconfigÚcache_key_tagrý  rÎ  r  ÚEXCLUDED_KWARGSr²  Úsetr÷  Ú*torch._higher_order_ops.triton_kernel_wrapr  r  r  Útorch._inductor.codegen.wrapperr  Úuser_defined_triton_sourceÚmodulesr   r|   r|  ÚGraphModuleÚ	itertoolsÚchainr‰  Ú
find_nodesÚtriton.runtime.autotunerr  Ú
get_kernelra   r�  Úget_constant_argsrº  rþ  Ú$are_deterministic_algorithms_enabledÚ-is_deterministic_algorithms_warn_only_enabledÚutilsÚdeterministicÚfill_uninitialized_memoryÚ!deterministic_algorithms_settingsÚbackendsr~   ÚmatmulÚ
allow_tf32Ú&allow_fp16_reduced_precision_reductionÚ&allow_bf16_reduced_precision_reductionÚcuda_matmul_settingsró  Útorch_versionr—   r˜   Úsystem_infor"   Úsave_config_portableÚinductor_configÚ_get_custom_pass_detailÚpost_grad_custom_pre_passÚpost_grad_custom_post_pass)r¹   rm  rû  rý  rþ  rÀ  rÁ  r  r  r  r  rÚ  Únoder  ÚkernelÚkernel_sourceÚconstant_argss                    rh   rº   zFxGraphHashDetails.__init__	  s  € ð ˆŒØ,ˆÔÝ$Ô2ˆÔð
 -/ˆŒÝ˜9Ÿ?š?Ñ,Ô,Ñ-Ô-ð 	*ð 	*‰DˆAˆqØ˜Ô,Ð,Ð,Ý˜‘7”7�c�>�>õ )9½À¹¼Ñ(CÔ(C�D”N 1Ñ%Ð%à()�D”N 1Ñ%øð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 68ˆÔ'Ø‰>ØŸ*š*™,œ,ð ð �Ý! &­%¬(Ô*>Ñ?Ô?ð ØÝ%œOØ”L×+Ò+Ø*Ð3Sð ,ñ ô ð ”L×+Ò+Ø*Ð3Qð ,ñ ô ñ	ô ð ð �Dð CÐBÐBÐBÐBÐBà.×9Ò9¸$¼+ÀlÔ:SÑTÔT�FÝ! &¨)Ñ4Ô4ð +Ø!'¤˜ð RÐQØ"ñô ð "ð
 %6×$GÒ$GØœÐ$7Ô8ñ%ô %�Mð Ô3×:Ò:Ø&¨Ð6ñô ð ð ð-ð6  /ˆÔõ Ô6Ñ8Ô8ÝÔ?ÑAÔAÝŒKÔ%Ô?ð2
ˆÔ.õ ŒNÔÔ&Ô1ÝŒNÔÔ&ÔMÝŒNÔÔ&ÔMð%
ˆÔ!õ '™[œ[ˆÔÝ$×/Ò/Ñ1Ô1ˆÔÝ%Ô:Ñ<Ô<ˆÔà)-×)EÒ)EÝÔ,ñ*
ô *
ˆÔ&ð +/×*FÒ*FÝÔ-ñ+
ô +
ˆÔ'Ð'Ð'rj   Úcustom_passr)   úOptional[Any]c                ó`   — |sd S t          |t          ¦  «        sJ ‚|                     ¦   «         S re   )r   r(   Úuuid)r¹   r/  s     rh   r(  z*FxGraphHashDetails._get_custom_pass_detailh  s9   € ð ð 	Ø�4Ý˜+¥Ñ7Ô7Ð7Ð7Ð7Ø×ÒÑ!Ô!Ð!rj   N)
rm  rn  rû  rü  rý  r3   rþ  rÿ  rb   rc   )r/  r)   rb   r0  )rÍ   rÎ   rÏ   r\  r  rº   r(  rf   rj   rh   r®  r®     sT   € € € € € ðð ð "�l€Oð]
ð ]
ð ]
ð ]
ð~"ð "ð "ð "ð "ð "rj   r®  rm  rn  rû  rü  rý  r3   rþ  rÿ  úTuple[str, List[str]]c                ód  — t          | ¦  «         }t          | |||¦  «        }t          |j        ¦  «        dk    }t	          | ||¦  «        }d|                     |¦  «        z   }|                     |¦  «        }	d                     |	¦  «        }
t           	                    d|› d|
› �¦  «         ||	fS )z=
    Generate a unique hash of the FX graph for caching.
    r   rT  ú
z$FX graph cache hash details for key z:
)
r*   r®  r¹  r  rl  r3  rÂ  r†   r©  Údebug)rm  rû  rý  rþ  ro  Údetailsrp  ÚpicklerrÙ   rÂ  Ú	debug_strs              rh   Úcompiled_fx_graph_hashr:  q  sÃ   € õ 0°Ñ3Ô3Ð3Ðå   ^°YÀÑPÔP€GÝ&)¨'Ô*LÑ&MÔ&MÐQRÒ&RÐ#Ý!Ø
ÐÐ!@ñô €Gð
 �× Ò  Ñ)Ô)Ñ
)€CØ×%Ò% gÑ.Ô.€KØ—	’	˜+Ñ&Ô&€IÝ‡I‚IÐH°SÐHÐH¸YÐHÐHÑIÔIÐIØ�ÐÐrj   Útime_saved_nsÚintc                ó  — t           j                             ¦   «         rt           j                             ¦   «         sdS t	          | dz  ¦  «        }t          j        ¦   «         rSt           j                             d¦  «        }t           
                    d||¦  «         |t	          ||z  dz  ¦  «        z  }t           
                    d|¦  «         t          j                             t          |¬¦  «        ¦  «         |S )z}
    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|   ÚdistributedÚis_availableÚis_initializedr<  r"   rî  Ú_utils_internalÚjustknobs_getval_intr©  ÚinfoÚdistÚdistributed_c10dÚ"_add_ephemeral_timeout_for_all_pgsr	   )r;  Úincreased_timeout_secÚfudge_factors      rh   Ú.add_ephemeral_timeout_increase_for_distributedrK  �  sÿ   € õ
 Ô×)Ò)Ñ+Ô+ð µ5Ô3D×3SÒ3SÑ3UÔ3Uð Øˆqå °Ñ 4Ñ5Ô5ÐåÔÑÔð 	QÝÔ,×AÒAØLñ
ô 
ˆõ 	�ŠØ\ØØ!ñ	
ô 	
ð 	
ð
 	¥Ð%:¸\Ñ%IÈCÑ%OÑ!PÔ!PÑPÐå‡H‚HÐ,Ð.CÑDÔDÐDÝÔ×<Ò<ÝÐ/Ð0Ñ0Ô0ñô ð ð !Ð rj   c                  ó  — e Zd ZdZed+d„¦   «         Zed,d„¦   «         Zed-d
„¦   «         Zed.d„¦   «         Zed/d„¦   «         Z	ed0d„¦   «         Z
ed1d„¦   «         Zed2d#„¦   «         Zed3d$„¦   «         Zed4d(„¦   «         Zed5d)„¦   «         Zd*S )6ÚFxGraphCachea7  
    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 metatdata>
    - 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.
    rb   rr   c                 óZ   — t           j                             t          ¦   «         d¦  «        S )zS
        Get the toplevel temporary directory for storing compiled graphs.
        Úfxgraph)r„   r…   r†   rF   rf   rj   rh   Ú_get_tmp_dirzFxGraphCache._get_tmp_dirÇ  s   € õ
 Œw�|Š|�I™KœK¨Ñ3Ô3Ð3rj   rÙ   c                ó‚   — t           j                             t                               ¦   «         | dd…         | ¦  «        S )zA
        Return the disk location for a given cache key.
        r,   r(  )r„   r…   r†   rM  rP  rÌ  s    rh   Ú_get_tmp_dir_for_keyz!FxGraphCache._get_tmp_dir_for_keyÎ  s0   € õ
 Œw�|Š|�L×5Ò5Ñ7Ô7¸¸Q¸q¸S¼À3ÑGÔGÐGrj   rê   rü  úList[torch.SymInt]c                ó   — d„ | D ¦   «         S )z�
        Get the backed SymInt objects from the input list. Note that we can never
        have guards that depend on unbacked symint.
        c                ód   — g | ]-}t          |t          j        ¦  «        ¯t          |¦  «        ¯+|‘Œ.S rf   )r   r|   r   rP   ©rü   r’  s     rh   rå  z7FxGraphCache._filter_backed_symints.<locals>.<listcomp>Û  s4   € ÐQÐQÐQ�a¥Z°µ5´<Ñ%@Ô%@ÐQÅXÈaÁ[Ä[ÐQ�ÐQÐQÐQrj   rf   )rê   s    rh   Ú_filter_backed_symintsz#FxGraphCache._filter_backed_symintsÕ  s   € ð RÐQ˜6ÐQÑQÔQÐQrj   úOptional[ShapeEnv]c                 óh   — t           j        j                             ¦   «         } | sdS | j        j        S )zG
        Helper to get the shape env from the tracing context.
        N)r|   Ú_guardsÚTracingContextÚtry_getÚ	fake_modeÚ	shape_env)Úctxs    rh   Ú_get_shape_envzFxGraphCache._get_shape_envÝ  s2   € õ
 ŒmÔ*×2Ò2Ñ4Ô4ˆØð 	Ø�4ØŒ}Ô&Ð&rj   rû  Úlocalrm   Úremote_cacheú!Optional[RemoteCache[JsonDataTy]]Ú	constantsr5   ú0Tuple[Optional[CompiledFxGraph], Dict[str, Any]]c                ó|  ‡ ‡‡‡‡— t                                ¦   «         }|€J ‚t                                |¦  «        }d„ |D ¦   «         }dˆ ˆˆfd„}d}	t          ¦   «         }
 |¦   «         D ]^}|j        s|}	 nRt          |                     |j        |¦  «        ¦  «        }t                               d‰ |j        ||¦  «         |r|}	 nŒ_|	€d|
fS |	j	        x}r¤t          j        |¦  «        }|x}�Œt          |¦  «        |
d<   t          ¦   «         }d|                     ¦   «         v r|                     d|j        ¬	¦  «         t#          |j        ¦  «        d
k    r"t%          ¦   «                              dd¦  «         	 |	                     |¦  «        Šn# t*          $ r d|
fcY S w xY wt-          j        ¦   «         }|	j        Št3          j        |‰¬¦  «         |	j        rOt          |                     |	j        |¦  «        ¦  «        }|du sJ ‚t                               d‰ |j        ¦  «         t8          j                             |	j        ¦  «         t@          dxx         |	j!        z  cc<   tD                               d‰¦  «         tD                               d‰¦  «         tG          dˆfd„ˆfd„¬¦  «         |	|
fS )z˜
        Lookup a compiled graph in the cache by key. On a hit, return the
        deserialized CompiledFxGraph object. On a miss, return None.
        Nc                ó,   — g | ]}t          |¦  «        ‘ŒS rf   )rQ   rV  s     rh   rå  z.FxGraphCache._lookup_graph.<locals>.<listcomp>÷  s   € Ð.Ð.Ð. •˜!‘”Ð.Ð.Ð.rj   rb   ú&Generator[CompiledFxGraph, None, None]c               3  ó@  •K  — ‰ræt                                ‰¦  «        } t          j                             | ¦  «        r­t          t          j        | ¦  «        ¦  «        D ]‹}	 t          t          j                             | |¦  «        d¦  «        5 }t          j
        |¦  «        V — d d d ¦  «         n# 1 swxY w Y   Œ`# t          $ r t                               dd¬¦  «         Y Œˆw xY w‰r°	 ‰                     ‰¦  «        x}�it          |t           ¦  «        sJ ‚|d         }t          |t"          t$          f¦  «        sJ ‚t'          j        |¦  «        }t          j        |¦  «        V — d S d S # t          $ r  t                               dd¬¦  «         Y d S w xY wd S )NrÍ  z,fx graph cache unable to load compiled graphTr¡  r  )rM  rR  r„   r…   r  rÎ  Úlistdirr¾   r†   Úpickler¿   Ú	Exceptionr©  rª  ró   r   r»  rr   r  r  Ú	b64decodeÚloads)	r*  r…   rT  Ú
cache_datar  r,  rÙ   ra  rb  s	         €€€rh   Úiterate_over_candidatesz;FxGraphCache._lookup_graph.<locals>.iterate_over_candidatesù  s  øè è € Øð Ý%×:Ò:¸3Ñ?Ô?�Ý”7—>’> &Ñ)Ô)ð 	Ý &¥r¤z°&Ñ'9Ô'9Ñ :Ô :ð ð ˜ðÝ!%¥b¤g§l¢l°6¸4Ñ&@Ô&@À$Ñ!GÔ!Gð 5È1Ý&,¤k°!¡n¤nÐ 4Ð 4Ð 4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5øøå(ð ð ð ÝŸKšKØ NØ)-ð (ñ ô ð ð ð ðøøøð ð ð
Ø&2×&6Ò&6°sÑ&;Ô&;Ð;˜
ÐHÝ)¨*µdÑ;Ô;Ð;Ð;Ð;Ø)¨&Ô1˜Ý)¨$µµe°Ñ=Ô=Ð=Ð=Ð=Ý"(Ô"2°4Ñ"8Ô"8˜Ý$œl¨7Ñ3Ô3Ð3Ð3Ð3Ð3Ð3ð IÐHøõ !ð ð ð Ý—K’KØFÐQUð  ñ ô ð ð ð ð ðøøøðð sI   Á#.C ÂB4Â(C Â4B8	Â8C Â;B8	Â<C Ã &C)Ã(C)Ã/A>E1 Å1&FÆFzEfx graph cache key %s evaluating guards [%s] with values %s => hit=%sÚtriton_bundler_metaÚinductor_compile)Úcached_kernel_namesr   Únum_triton_bundlesr,   ©r  Tz*fx graph cache key %s post-load guards: %sÚinductorúOutput code written to: %szOutput code: 
%sÚinductor_output_codec                 ó   •— d‰ iS )NÚfilenamerf   )Úartifact_paths   €rh   rË  z,FxGraphCache._lookup_graph.<locals>.<lambda>a  s   ø€ �Z Ð/€ rj   c                 ó   •— ‰ S re   rf   ru  s   €rh   rË  z,FxGraphCache._lookup_graph.<locals>.<lambda>b  s   ø€ ˜t€ rj   ©Ú
payload_fn)rb   rh  )$rM  r`  rW  r»  Úguards_exprrm   Úevaluate_guards_expressionr©  r6  Ú_triton_bundler0   Úread_and_emitrr   r    Ú	get_stackÚadd_event_datars  r¹  r!   Ú	incrementÚafter_deserializationÚOSErrorr.   Úinductor_meta_from_configÚsource_coder/   Úbegin_compileÚguardsr$   ÚCachedMetricsHelperÚapply_deltasÚmetrics_deltasr   Úcounter_deltasÚoutput_code_logrL   )rÙ   rû  ra  rb  rd  r^  ÚsymintsÚhintsrp  r‰  Ú
cache_infoÚ	candidaterô   Úbundlerq  ri  ÚloggerÚinductor_metaÚcheckr{  r  s   ` ``               @@rh   Ú_lookup_graphzFxGraphCache._lookup_graphç  sc  øøøøø€ õ !×/Ò/Ñ1Ô1ˆ	ØÐ$Ð$Ð$å×5Ò5°nÑEÔEˆØ.Ð. gÐ.Ñ.Ô.ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð: ˆÝ%)¡V¤Vˆ
à0Ð0Ñ2Ô2ð 	ð 	ˆIØÔ(ð à!�Ø�õ Ø×4Ò4°YÔ5JÈEÑRÔRñô ˆCõ �IŠIØWØØÔ%ØØñô ð ð ð Ø!�Ø�ðð ˆ=Ø˜Ð#Ð#àÔ)Ð)ˆ6ð 	MÝ"/Ô"=¸fÑ"EÔ"EÐØ+Ð+�Ð8Ý47¸±I´I�
Ð0Ñ1Ý2Ñ4Ô4�Ø%¨×)9Ò)9Ñ);Ô);Ð;Ð;à×)Ò)Ø*ÀÔ@Xð *ñ ô ð õ �tÔ/Ñ0Ô0°1Ò4Ð4Ý'Ñ)Ô)×3Ò3Ð4HÈ!ÑLÔLÐLð	$Ø!×7Ò7¸	ÑBÔBˆMˆMøÝð 	$ð 	$ð 	$ð ˜Ð#Ð#Ð#Ð#ð	$øøøõ
 'Ô@ÑBÔBˆØÔ ˆÝÔ*¨=¸tÐDÑDÔDÐDð Ôð 	ÝØ×4Ò4°UÔ5FÈÑPÔPñô ˆEð ˜D�=�=�=�=Ý�IŠIØ<¸cÀ9ÔCSñô ð õ 	Ô#×0Ò0°Ô1EÑFÔFÐFÝ�ÐÐÔ Ô 4Ñ4ÐÐÑå×ÒÐ:¸MÑJÔJÐJÝ×ÒÐ1°4Ñ8Ô8Ð8åØ"Ø/Ð/Ð/Ð/Ø#�|�|�|ð	
ñ 	
ô 	
ð 	
ð
 �jÐ Ð s   Å>F ÆF%Æ$F%Úcompiled_graphr6   rc   c                ó¦  — ddl m} t          ||¦  «        sJ dt          |¦  «        › d�¦   «         ‚t	          |¦  «        }|                     ¦   «          t                               ¦   «         }|€J ‚t                               |¦  «        }| 	                    |¦  «        }	| 
                    ||	¬¦  «        |_        	 t          j        |¦  «        }
nH# t          $ r; t                               dd¬	¦  «         t"          d
         dxx         dz  cc<   Y dS w xY w	 |rŽt                               | ¦  «        }t&          j                             |¦  «        st'          j        |d¬¦  «         t&          j                             |t1          |
¦  «        ¦  «        }t3          ||
d¬¦  «         |r[t5          |j        pddz  ¦  «        }t9          j        |
¦  «                             d¦  «        |dœ}|                     | |¦  «         dS dS # t          $ r; t                               dd¬	¦  «         t"          d
         dxx         dz  cc<   Y dS w xY w)z=
        Store a serialized CompiledFxGraph on disk.
        r,   )r4   zserialization for z NYIN)Úplaceholdersr‹  z1fx graph cache unable to serialize compiled graphTr¡  rv  Úfxgraph_cache_pickle_errorrz   rÇ   r   g    €„.Arí  )r  Útime_taken_msz!fx graph unable to write to cacheÚfxgraph_cache_write_error) Ú
compile_fxr4   r   r²  r   Úprepare_for_serializationrM  r`  rW  Úget_pruned_guardsÚproduce_guards_expressionr  rk  r¬   rl  r©  rª  r   rR  r„   r…   r  r‡   r†   r  rÉ   r<  Ú_time_taken_nsr  Ú	b64encoder  Úput)rÙ   rš  rû  ra  rb  r4   Údisk_compiled_graphr^  r‘  r‹  r,  r*  r…   rž  ro  s                  rh   Ú_save_graphzFxGraphCache._save_graphf  s¹  € ð 	0Ð/Ð/Ð/Ð/Ð/åØ˜Oñ
ô 
ð 	;ð 	;à:¥ ^Ñ 4Ô 4Ð:Ð:Ð:ñ	;ô 	;ð 
õ # >Ñ2Ô2ÐØ×5Ò5Ñ7Ô7Ð7õ !×/Ò/Ñ1Ô1ˆ	ØÐ$Ð$Ð$Ý×5Ò5°nÑEÔEˆØ×,Ò,¨WÑ5Ô5ˆØ*3×*MÒ*MØ ¨ð +Nñ +
ô +
ÐÔ'ð	Ý”lÐ#6Ñ7Ô7ˆGˆGøÝð 	ð 	ð 	Ý�KŠKØCÈdð ñ ô ð õ �ZÔ Ð!=Ð>Ð>Ô>À!ÑCÐ>Ð>Ñ>ØˆFˆFð	øøøð	CØð 	<Ý%×:Ò:¸3Ñ?Ô?�Ý”w—~’~ fÑ-Ô-ð 7Ý”K °Ð6Ñ6Ô6Ð6õ
 ”w—|’| F­K¸Ñ,@Ô,@ÑAÔA�Ý˜T 7°dÐ;Ñ;Ô;Ð;àð 2Ý #Ð%8Ô%GÐ%LÈ1ÐQTÑ$TÑ UÔ U�å"Ô,¨WÑ5Ô5×<Ò<¸WÑEÔEØ%2ð*ð *�
ð × Ò   jÑ1Ô1Ð1Ð1Ð1ð2ð 2øõ ð 	Cð 	Cð 	CÝ�KŠKÐ;ÀdˆKÑKÔKÐKÝ�ZÔ Ð!<Ð=Ð=Ô=ÀÑBÐ=Ð=Ñ=Ð=Ð=Ð=ð	Cøøøs'   Â>C ÃADÄDÄC+H ÈAIÉIrm  rn  c                ó:  — t           j        t           j        fD ]<}|r8t          |t          ¦  «        r|                     ¦   «         st          d¦  «        ‚Œ=t          | ¦  «        r.t          j	         
                    d¦  «        st          d¦  «        ‚t           j        j        rt          d¦  «        ‚ddlm} |j        r!t                                d¦  «         t          ‚t$                               ¦   «         €)t                                d	¦  «         t          d
¦  «        ‚|                      ¦   «         D ]ã}t          |t          j        j        ¦  «        sŒ"|j        j        D ]´}t          |j        t          j        j        ¦  «        rB|j                             ¦   «         s)t          d|j                             ¦   «         › �¦  «        ‚|j        dk    rAt          t?          | |j        ¦  «        t          j         j!        ¦  «        rt          d¦  «        ‚ŒµŒädS )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,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 enabledNzfx graph cache no shape envzNo shape envz!Can't cache HigherOrderOperator: ÚgetattrzCan't cache torchbind objects)"r"   r)  r*  r   r(   r2  r‹  r*   r|   rC  Újustknobs_checkÚaot_inductorÚuse_runtime_constant_foldingÚ!torch._inductor.compiler_bisectorrª  Úbisection_enabledr©  r6  rM  r`  r  r|  r  r‰  ÚnodesrD  Ú_opsÚHigherOrderOperatorÚ	cacheablerq   ré   r«  Ú_CÚScriptObject)rm  Úprª  rÚ  r+  s        rh   Ú_check_can_cachezFxGraphCache._check_can_cache¦  s/  € õ Ô2µFÔ4UÐVð 	Nð 	NˆAØð N�* Q­Ñ8Ô8ð NÀÇÂÁÄð NÝ(Ð)LÑMÔMÐMøõ ˜RÑ Ô ð 	M­Ô)>×)NÒ)NØ:ñ*
ô *
ð 	Mõ %Ð%KÑLÔLÐLåÔÔ;ð 	Ý$ð%ñô ð ð
 	GÐFÐFÐFÐFÐFàÔ-ð 	%Ý�IŠIÐ<Ñ=Ô=Ð=Ý$Ð$õ ×&Ò&Ñ(Ô(Ð0Ý�IŠIÐ3Ñ4Ô4Ð4Ý$ ^Ñ4Ô4Ð4ð —j’j‘l”lð 	Nð 	NˆFÝ˜f¥e¤hÔ&:Ñ;Ô;ð ØØœÔ*ð Nð N�å˜tœ{­E¬JÔ,JÑKÔKðà œK×1Ò1Ñ3Ô3ðõ -ØP¸D¼K×<LÒ<LÑ<NÔ<NÐPÐPñô ð ð ”7˜iÒ'Ð'­JÝ˜B ¤Ñ,Ô,­e¬hÔ.Cñ-ô -Ð'õ -Ð-LÑMÔMÐMøðNð	Nð 	Nrj   rý  r3   rþ  rÿ  Úremoteú6Tuple[Optional[Tuple[str, List[str]]], Dict[str, Any]]c                óŽ  — 	 t                                | ¦  «         t          | |||¦  «        \  }}n�# t          $ r‚}t          d         dxx         dz  cc<   t
                               d|¦  «         |rt          dt          |¦  «        ¦  «         dt          |¦  «        t          ¦   «         dœ}d|fcY d}~S d}~ww xY w||fi fS )	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.
        rv  Úfxgraph_cache_bypassr,   z%Bypassing FX Graph Cache because '%s'Úbypass_fx_graphÚbypass)Úcache_stateÚcache_bypass_reasonÚcache_event_timeN)
rM  r¸  r:  r‹  r   r©  rE  r+   rr   r   )	rm  rû  rý  rþ  r¹  rÙ   rÂ  r
  r“  s	            rh   Úprepare_keyzFxGraphCache.prepare_keyÛ  sþ   € ð$	$Ý×)Ò)¨"Ñ-Ô-Ð-Ý5Ø�N I¨ñ ô  ÑˆC��øõ "ð 
	$ð 
	$ð 
	$Ý�ZÔ Ð!7Ð8Ð8Ô8¸AÑ=Ð8Ð8Ñ8Ý�HŠHÐ<¸aÑ@Ô@Ð@Øð <Ý Ð!2µC¸±F´FÑ;Ô;Ð;à'Ý'*¨1¡v¤vÝ$+¡I¤Iðð ˆJð
 ˜Ð#Ð#Ð#Ð#Ð#Ð#Ð#øøøøð
	$øøøð �[Ð! 2Ð%Ð%s   ‚/2 ²
B>¼A7B9Â3B>Â9B>c                 óL   — d} t          | t          j        ¦   «         dd¦  «        S )zK
        Attempts to load the remote cache, returns None on error.
        zfx-graph-v1ÚFbRemoteFxGraphCacheÚRemoteFxGraphCache)r-   r"   rî  )Úcache_ids    rh   Úget_remote_cachezFxGraphCache.get_remote_cache   s0   € ð
 !ˆÝØÝÔÑÔØ"Ø ñ	
ô 
ð 	
rj   rÂ  r¯  Úis_backwardc                ó  — t                                | ||||¦  «        \  }}i |¥| |t          ¦   «         dœ¥}|�Ït                               d| ¦  «         t
          d         dxx         dz  cc<   d|d<   |rDt          ¦   «                              d	d¦  «         t          ¦   «                              d
| ¦  «         |j	        x}	�D|	|d<   t          ¦   «                              d|	dz  ¦  «         t          |	¦  «        x}
dk    r|
|d<   n�|rDt          ¦   «                              dd¦  «         t          ¦   «                              d| ¦  «         t                               d| ¦  «         t
          d         dxx         dz  cc<   d|d<   ||fS )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Á  Nzfx graph cache hit for key %srv  Úfxgraph_cache_hitr,   rô   r¿  Ú"inductor_fx_remote_cache_hit_countÚ!inductor_fx_remote_cache_hit_keysr;  Ú distributed_ephemeral_timeout_usiè  r   Úephemeral_timeout_increaseÚ#inductor_fx_remote_cache_miss_countÚ"inductor_fx_remote_cache_miss_keyszfx graph cache miss for key %sÚfxgraph_cache_missÚmiss)rM  r™  r   r©  rE  r   r!   r…  Ú
add_to_setr¤  rK  )rÙ   rÂ  rû  ra  rb  rÈ  rd  rš  r“  r;  Úephemeral_increases              rh   Úload_with_keyzFxGraphCache.load_with_key  s   € õ &2×%?Ò%?Ø� ¨°iñ&
ô &
Ñ"ˆ˜
ð
Øð
àØ%Ý '¡	¤	ð	
ð 
ð 
ˆ
ð Ð%Ý�HŠHÐ4°cÑ:Ô:Ð:Ý�ZÔ Ð!4Ð5Ð5Ô5¸Ñ:Ð5Ð5Ñ5Ø(-ˆJ�}Ñ%Øð å#Ñ%Ô%×/Ò/Ð0TÐVWÑXÔXÐXÝ#Ñ%Ô%×0Ò0Ø7¸ñô ð ð "0Ô!>Ð>�ÐKØ.;�
˜?Ñ+Ý#Ñ%Ô%×/Ò/Ø6¸ÈÑ8Mñô ð õ +YØ%ñ+ô +ð Ð&ð ò	ð ð
 @R�JÐ;Ñ<øàð å#Ñ%Ô%×/Ò/Ø9¸1ñô ð õ $Ñ%Ô%×0Ò0Ø8¸#ñô ð õ �HŠHÐ5°sÑ;Ô;Ð;Ý�ZÔ Ð!5Ð6Ð6Ô6¸!Ñ;Ð6Ð6Ñ6Ø(.ˆJ�}Ñ%à˜zÐ)Ð)rj   c                 ó€   — 	 t          j        t                               ¦   «         ¦  «         dS # t          $ r Y dS w xY w)z.
        Clear out the on-disk cache.
        N)rO  ÚrmtreerM  rP  ÚFileNotFoundErrorrf   rj   rh   ÚclearzFxGraphCache.clearJ  sK   € ð
	ÝŒM�,×3Ò3Ñ5Ô5Ñ6Ô6Ð6Ð6Ð6øÝ ð 	ð 	ð 	ØˆDˆDð	øøøs   ‚+/ ¯
=¼=N©rb   rr   )rÙ   rr   rb   rr   )rê   rü  rb   rS  )rb   rX  )rÙ   rr   rû  rü  ra  rm   rb  rc  rd  r5   rb   re  )rÙ   rr   rš  r6   rû  rü  ra  rm   rb  rc  rb   rc   )rm  rn  rb   rc   )rm  rn  rû  rü  rý  r3   rþ  rÿ  r¹  rm   rb   rº  )rb   rc  )rÙ   rr   rÂ  r¯  rû  rü  ra  rm   rb  rc  rÈ  rm   rd  r5   rb   re  rÌ   )rÍ   rÎ   rÏ   r\  rÐ   rP  rR  rW  r`  r™  r¨  r¸  rÂ  rÇ  rÖ  rÚ  rf   rj   rh   rM  rM  ©  s—  € € € € € ðð ð: ð4ð 4ð 4ñ „\ð4ð ðHð Hð Hñ „\ðHð ðRð Rð Rñ „\ðRð ð'ð 'ð 'ñ „\ð'ð ð|!ð |!ð |!ñ „\ð|!ð| ð=Cð =Cð =Cñ „\ð=Cð~ ð2Nð 2Nð 2Nñ „\ð2Nðh ð"&ð "&ð "&ñ „\ð"&ðH ð

ð 

ð 

ñ „\ð

ð ð:*ð :*ð :*ñ „\ð:*ðx ðð ð ñ „\ðð ð rj   rM  Úcmd_c                ó  — t          dd¬¦  «        5  t          j        | ¦  «        }	 t          j        |¦  «         n2# t          j        $ r }t          j        ||j        ¦  «        |‚d }~ww xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚrun_command_and_checkTrÝ  )	r   ÚshlexÚsplitÚ
subprocessÚ
check_callÚCalledProcessErrorr#   ÚCppCompileErrorÚoutput)rÜ  Úcmdr
  s      rh   rÞ  rÞ  U  sà   € Ý	Ð-ÀTÐ	JÑ	JÔ	Jð <ð <ÝŒk˜$ÑÔˆð	<ÝÔ! #Ñ&Ô&Ð&Ð&øÝÔ,ð 	<ð 	<ð 	<ÝÔ% c¨1¬8Ñ4Ô4¸!Ð;øøøøð	<øøøð 'ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð <ð <s1   ’A=¨=¼A=½A,ÁA'Á'A,Á,A=Á=BÂBr…   c                óÚ   — |                       d¦  «        rt          j                             | ¦  «        S |                       d¦  «        rt          j                             | ¦  «        S | dfS )zDReturns the path where the AOT Inductor compiled kernels are stored.ú.soz.pt2rw   )Úendswithr„   r…   rà  )r…   s    rh   Úsplit_aot_inductor_output_pathrê  ^  s]   € ð ‡}‚}�UÑÔð ÝŒw�}Š}˜TÑ"Ô"Ð"Ø	�Š�vÑ	Ô	ð ÝŒw�}Š}˜TÑ"Ô"Ð"à�Rˆxˆrj   c                  ó†   — e Zd ZU i Zded<    eej        ¦  «        Zedd„¦   «         Z	edd„¦   «         Z
edd„¦   «         ZdS )ÚCudaKernelParamCachezDict[str, Dict[str, str]]r³   rÙ   rr   ÚparamsúDict[str, str]r/  Úbin_typerb   rc   c                ó¬   — t          |||t          t          j        j        ¦  «        d         ¬¦  «        \  }}||t          ¦   «         <   || j        |<   d S )Nr   )r-  r%  )r8  rê  r"   r­  Úoutput_pathr’   r³   )ÚclsrÙ   rí  r/  rï  ry   r…   s          rh   r  zCudaKernelParamCache.setn  sc   € åØØØÝ8ÝÔ#Ô/ñô àôð	
ñ 
ô 
‰ˆˆ4ð 59ˆÕ.Ñ0Ô0Ñ1àˆŒ	�#‰ˆˆrj   úOptional[Dict[str, str]]c                ó8   — | j                              |d ¦  «        S re   )r³   ró   )rò  rÙ   s     rh   ró   zCudaKernelParamCache.get|  s   € àŒy�}Š}˜S $Ñ'Ô'Ð'rj   úKeysView[str]c                ó4   — | j                              ¦   «         S re   )r³   rÕ   )rò  s    rh   Úget_keyszCudaKernelParamCache.get_keys€  s   € àŒy�~Š~ÑÔÐrj   N)
rÙ   rr   rí  rî  r/  rr   rï  rr   rb   rc   )rÙ   rr   rb   ró  )rb   rõ  )rÍ   rÎ   rÏ   r³   r]  rÐ   rÚ  Úcache_clearÚclassmethodr  ró   r÷  rf   rj   rh   rì  rì  i  s–   € € € € € € à')€EÐ)Ð)Ð)Ñ)Ø�,˜uœ{Ñ+Ô+€Kàð ð  ð  ñ „[ð ð ð(ð (ð (ñ „[ð(ð ð ð  ð  ñ „[ð ð  ð  rj   rì  c                  ó&   — e Zd Zedd„¦   «         ZdS )ÚAotCodeCompilerr‰  rU   r‰  rr   Úserialized_extern_kernel_nodesúOptional[str]Údevice_typeÚadditional_filesr¯  rb   úUnion[List[str], str]c           
     ó  ‡‡‡‡5‡6‡7‡8‡9‡:— |}t           j        dk    rt          d¦  «        ‚t          ¦   «          t	          ¦   «         }t          ddt          |‰‰j        ¬¦  «        ¬¦  «        }t          | 	                    ¦   «         ¦  «        }	t          j        ¦   «         o‰dk    o‰j        Š8‰8Š:t          t          j        j        ¦  «        \  }
}t          ‰d|	|
¬	¦  «        \  }Š9t          j        j        r|                     ‰9¦  «         t$                               d
‰9¦  «         t)          dˆ9fd„ˆfd„¬¦  «         t*          j                             t*          j                             ‰9¦  «        d         |¦  «        Š7dDˆ7ˆˆ8ˆˆ:fd„}ddlm} t7          ¦   «         } |t*          j                             ||dz   ¦  «        t8          ¬¦  «        }|5  |r‹t*          j                             ‰9¦  «        d         dz   }t=          |d¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          j        j        r|                     |¦  «         t          j        j        }‰|d<   t*          j                             ‰9¦  «        d         dz   }t          j        j                              ¦   «         D ]9\  }}tC          |tD          ¦  «        rtC          |tD          ¦  «        s
J d¦   «         ‚Œ:t=          |d¦  «        5 }|                     tG          j$        t          j        j        ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t          j        j        r|                     |¦  «         |rt          j        j        n't*          j                             ‰9¦  «        d         dz   }t*          j                             ‰9¦  «        d         d z   }tK          ˆfd!„‰j&         '                    ¦   «         D ¦   «         ¦  «        Š6dEd&„Š5t          j        j(        r;d'                     ˆ5ˆ6ˆfd(„‰j&         '                    ¦   «         D ¦   «         ¦  «        }nd'}tS          |¦  «        }t          j        ¦   «          o|d)k    }t          j        j*        rd*}tW          ‰9¦  «        \  }}t          |‰‰j        d*‰:|¬+¦  «        }t          |‰9||¬,¦  «        }| 	                    ¦   «         } | ,                    ¦   «         }tZ           .                    d-| ¦  «         t          j        j/        sr‰8rat*          j                             ‰9¦  «        d         d z   }ta          ‰9||                      ¦   «         ¦  «         t+          j1        |d.¦  «         nte          | ¦  «         t          j        j/        rRt*          j                             ‰9¦  «        d         d/z   }!| 3                    |!¦  «         |                     |!¦  «         |s|}"d}#nuti          tj          tm          j7        dtm          j8        tl          j9        ¦  «        j:        d0¦  «         ;                    ¦   «         ¦  «        }#ty          j=        d1|d2z   |#¦  «        }" ||"t           j        ¦  «        }$tl          j>        j?        rt�          ¦   «         ntƒ          ¦   «         }%d3„ |%jB         C                    ¦   «         D ¦   «         }&d4                     |&¦  «        }&tW          |¦  «        \  }'}(t          |‰‰j        ‰:¬5¦  «        })t          |'||$|&g|(|)¬,¦  «        }*|* 	                    ¦   «         }+|* ,                    ¦   «         }tZ           .                    d6|+¦  «         t=          ‰9d7¦  «        5 }|                     d8¦  «         |                     d9| › d8�¦  «         |                     d:|+› d8�¦  «         ddd¦  «         n# 1 swxY w Y   t          j        j/        �r"t*          j                             ‰9¦  «        d         d;z   },|) 3                    |,¦  «         |                     |,¦  «         |r¢t*          j                             ‰9¦  «        d         d<z   }-t=          |-d=¦  «        5 }.|.                     |¦  «         |.                     ty          j=        d>|#¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |                     |-¦  «         |                     |$¦  «         |                     |&¦  «         �n°‰8rv|rt          j        j        n't*          j                             ‰9¦  «        d         dz   }ta          ||$g||+                     ¦   «         ¦  «         t+          j1        |d?¦  «         nte          |+¦  «         ||$t*          j                             |$¦  «        d         d@z   fD ]}/t+          jD        |/¦  «         Œ|r¿ddlE}0|0 F                    ¦   «         }1tu          dA|1¦  «        }2t=          |dB¦  «        5 }3|3 G                    ¦   «         }4|3                     dC|2|4|2z  z
  z  ¦  «         |3                     |¦  «         |3                     ty          j=        d>|#¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t          j        j        r|                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          j        j        r|S |S )Fzƒ
        Returns the .so path, or returns a list of files that were generated if
        config.aot_inductor.package=True.
        rY   z.AotCodeCompiler not yet supported for inductorÚoÚi)Úvec_isarþ  Úaot_mode©rq   ÚsourcesÚBuildOptionrt   Úcpp)r  r%  rw  Ú
graph_dumpc                 ó   •— dd‰ dœS )NÚinductor_aot_coder	  )rq   r²  rz  rf   )Ú
input_paths   €rh   rË  z)AotCodeCompiler.compile.<locals>.<lambda>Â  s   ø€ Ø+ØØ&ðð € rj   c                 ó   •— ‰ S re   rf   )r‰  s   €rh   rË  z)AotCodeCompiler.compile.<locals>.<lambda>Ç  s   ø€ ˜{€ rj   r}  r   Úconstsr  Úplatformrr   rb   c                ó„  •— |dk    rX‰j         t          ‰j                             ¦   «         ¦  «        z  r%t	          | ¦  «        dk    rt          d¦  «        ‚d}nd}d}n|dk    rd}d	}nt          d
|› �¦  «        ‚t	          | ¦  «        dk    }d|› d�}|dt          › d�z  }|d|› d�z  }||› d�z  }|s| D ]}|d|› d�z  }Œ| s|dz  }n|dz  }|dt	          | ¦  «        dz
  › d�z  }|d|› d�z  }||› d�z  }t          |d‰¬¦  «        \  }}t          |¦  «        \  }	}
t          ‰dk    r‰nd‰j        d‰¬¦  «        }t          |	||
|¬ ¦  «        }|                     ¦   «         }|                     ¦   «         }‰rat          j                             |¦  «        d!         d"z   }t%          |||                     ¦   «         ¦  «         t          j        |d#¦  «         nt+          |¦  «         |rÎt-          |d$¦  «        5 }|                     d!¦  «         |                     d¦  «        }|                     d%¦  «        }|d&k    sJ ‚|                     |¦  «         d!}|t	          | ¦  «        k     r5|                     | |d …         ¦  «        }||z  }|t	          | ¦  «        k     °5d d d ¦  «         n# 1 swxY w Y   |S )'NÚlinuxé ”5wzPModels with buffer mutation included doesn't support constants greater than 2GB!z.ldata, "aw"z.lrodata, "a"rw   Údarwinz__DATA,__datary   zUnsupported platform: i   z
	.section	r5  z		.balign z	.globl	z_binary_constants_bin_start
z_binary_constants_bin_start:
z	.byte z
	.space 1
z	.quad 0x1234567899abcdef
z	.space é   z.globl	z_binary_constants_bin_end
z_binary_constants_bin_end:
ÚS)r%  Úxpurt   T)rþ  r  Úcompile_onlyÚuse_absolute_path©rq   r  Ú
output_dirr  r   ú.oé¤  zr+bs   ïÍ«™xV4rÝ   )Úmutated_buffersr  rd  rÕ   r¹  Ú
ValueErrorr¨   rH   r8  r@   r>   r  r<   Úget_command_lineÚget_target_file_pathr„   r…   ÚsplitextÚcompile_filerà  ÚchmodrÞ  r¾   r¥  rÔ  Úfind)r  r  Úsection_attrÚsymbol_prefixÚis_large_constsÚ
consts_asmr  ry   Úconsts_sÚobject_output_nameÚobject_output_dirÚobject_build_optionsÚobject_builderÚcompile_cmdÚconsts_orT  ÚhdrÚ	start_idxÚposÚrcÚconsts_specified_dirrþ  Úfbcode_aot_cpu_rer‰  r  s                       €€€€€rh   Ú_compile_constsz0AotCodeCompiler.compile.<locals>._compile_constsÏ  s»  ø€ Ø˜7Ò"Ð"ØÔ(­3¨u¬×/CÒ/CÑ/EÔ/EÑ+FÔ+FÑFð 
3õ ˜6‘{”{ ]Ò2Ð2Ý(Ønñô ð ð $2�L�Là#2�LØ "��Ø˜XÒ%Ð%Ø.�Ø #��å"Ð#F¸HÐ#FÐ#FÑGÔGÐGå! &™kœk¨DÒ0ˆOØ8¨Ð8Ð8Ð8ˆJØÐ6¥{Ð6Ð6Ð6Ñ6ˆJØÐS }ÐSÐSÐSÑSˆJØ˜]ÐJÐJÐJÑJˆJØ"ð 	>Øð 3ð 3�AØÐ"2¨QÐ"2Ð"2Ð"2Ñ2�J�Jð ð 1Ø .Ñ0�JøàÐ<Ñ<�
ØÐ=­#¨f©+¬+¸©/Ð=Ð=Ð=Ñ=�
ØÐO ]ÐOÐOÐOÑOˆJØ˜]ÐHÐHÐHÑHˆJÝØØØ2ðñ ô ‰KˆAˆxõ 7°xÑ@Ô@ñØ"Ø!å#8ð ,7¸%Ò+?Ð+?˜K˜KÀUØœØ!Ø"3ð$ñ $ô $Ð õ (Ø'Ø Ø,Ø0ð	ñ ô ˆNð )×9Ò9Ñ;Ô;ˆKØ%×:Ò:Ñ<Ô<ˆHØ ð 3åœ7×+Ò+¨HÑ5Ô5°aÔ8¸4Ñ?�Ý˜X x°×1BÒ1BÑ1DÔ1DÑEÔEÐEÝ”˜ 5Ñ)Ô)Ð)Ð)å% kÑ2Ô2Ð2àð "Ý˜( EÑ*Ô*ð 
"¨aØ—F’F˜1‘I”I�IØŸ&š& ™,œ,�Cà #§¢Ð)LÑ MÔ M�IØ$¨š?˜?˜?˜?Ø—F’F˜9Ñ%Ô%Ð%Ø�CØ¥ F¡¤Ò+Ð+ØŸWšW V¨C¨D¨D¤\Ñ2Ô2˜Ø˜r™	˜ð ¥ F¡¤Ò+Ð+ð
"ð 
"ð 
"ñ 
"ô 
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"øøøð 
"ð 
"ð 
"ð 
"ð ˆOs   ÈB'J5Ê5J9Ê<J9©ÚFileLockú.lock©Útimeoutz.jsonrA  NÚAOTI_DEVICE_KEYz_metadata.jsonz"Metadata must only contain stringsrè  r  c              3  ó^   •K  — | ]'}|‰j         v¯‰                     |¦  «        j        V — Œ(d S re   )Úfolded_constantsÚget_original_value_of_constantÚis_cuda)rü   rq   r‰  s     €rh   rý   z*AotCodeCompiler.compile.<locals>.<genexpr>H  sN   øè è € ð ð àØ˜uÔ5Ð5Ð5ð ×4Ò4°TÑ:Ô:ÔBà5Ð5Ð5Ð5ðð rj   rb  útorch.TensorÚall_cudarm   c                ó*  — dd„}dd l }|                      ¦   «         dk    rdS | j        rIt          j        j                             | ¦  «        }t          j        j                             | ¦  «        }nN|                      ¦   «          	                    ¦   «         }|                     ¦   «         }| 
                    ¦   «         }|                     ||                     |j        |z  ¦  «        ¦  «        }t          |j        ¦  «        }|r|n
 ||¦  «        S )NÚ	raw_bytesr  rb   c                ó‚   — |                       t          | ¦  «        t          z   dz
  t          z  t          z  d¦  «        }|S )Nr,   ó    )Úljustr¹  rH   )rE  Úpadded_bytess     rh   Ú_pad_to_alignmentzEAotCodeCompiler.compile.<locals>._to_bytes.<locals>._pad_to_alignmentO  s=   € Ø#,§?¢?Ý˜Y™œ­+Ñ5¸Ñ9½kÑIÍKÑWØñ$ô $�Lð (Ð'rj   r   rj   )rE  r  rb   r  )ÚctypesÚnumelrŠ  r|   ÚopsÚmkldnnÚdata_ptrÚ_nbytesÚuntyped_storagert   Únbytesr   ÚPOINTERÚc_ubyter  Úcontents)	rb  rC  rJ  rK  rO  rR  Út_cpuÚ	raw_arrayrE  s	            rh   Ú	_to_bytesz*AotCodeCompiler.compile.<locals>._to_bytesN  s  € ð(ð (ð (ð (ð ���à—7’7‘9”9 ’>�>Ø˜3à”;ð ,Ý$œyÔ/×8Ò8¸Ñ;Ô;�HÝ"œYÔ-×5Ò5°aÑ8Ô8�F�Fà×-Ò-Ñ/Ô/×3Ò3Ñ5Ô5�EØ$Ÿ~š~Ñ/Ô/�HØ"Ÿ\š\™^œ^�Fà"ŸKšKØØ—N’N 6¤>°FÑ#:Ñ;Ô;ñô �	õ " )Ô"4Ñ5Ô5�	Ø$,ÐN�y�yÐ2CÐ2CÀIÑ2NÔ2NÐNrj   rj   c              3  óh   •K  — | ],}|‰j         v¯ ‰‰                     |¦  «        ‰¦  «        V — Œ-d S re   )r?  r@  )rü   rq   rX  rC  r‰  s     €€€rh   rý   z*AotCodeCompiler.compile.<locals>.<genexpr>m  sW   øè è € ð .ð .àØ 5Ô#9Ð9Ð9ð �I˜e×BÒBÀ4ÑHÔHÈ(ÑSÔSà9Ð9Ð9Ð9ð.ð .rj   r  T)r  rþ  r  r  r  Úuse_mmap_weightsr  zaot compilation command: %sr  z_compile_flags.json)r,   Úqqr  c                óP   — g | ]#}|j                              d ¦  «        ¯|j         ‘Œ$S )r  )rñ  ré  )rü   Úentrys     rh   rå  z+AotCodeCompiler.compile.<locals>.<listcomp>¬  sB   € ð ð ð àØÔ$×-Ò-¨dÑ3Ô3ðØÔ!ðð ð rj   ú )r  rþ  r  r  zaot linkage command: %sÚar5  z// Compile cmd
// z// Link cmd
// z_linker_flags.jsonz_serialized_weights.binrB  Úqií  z.Si @  za+bó    )r  r  r  rr   rb   rr   )rb  rB  rC  rm   rb   r  )Hr€   r  r¨   r:   rB   r<   r>   r  r2  r   r"   rî  rê  r­  rñ  r8  Úpackagerº  r�  rE  rL   r„   r…   r†   rà  Úfilelockr9  r  ÚLOCK_TIMEOUTr"  r¾   r†  r  r   rr   r«   r¬   r  rd  rÕ   Úpackage_constants_in_sor¹  Úforce_mmap_weightsr@   r!  r©  r6  Úpackage_cpp_onlyr#  r$  rÞ  Úsave_flags_to_filer   r<  r|   ÚrandintÚiinfoÚint64ÚmaxÚitemÚstructÚpackr}   r‘   ÚROCmCodeCacheÚCUDACodeCacher³   rZ  rQ  ÚresourceÚgetpagesizeÚtell);rò  r‰  r‰  rü  rþ  rÿ  Úgenerated_filesÚpicked_vec_isaÚvec_isa_cmd_genÚcpp_commandÚspecified_output_pathÚspecified_so_namerÙ   r7  r9  r  ÚlockÚextern_kernel_nodes_jsonrT  r†  Ú	meta_jsonrÀ  rÁ  Ú	output_soÚoutput_oÚserialized_weightsÚconsts_sizerZ  r+  r,  r-  r.  r/  Úcompile_flagsÚaot_constantsÚmagic_numberr0  Úgpu_codecacheÚ	kernels_oÚoutput_namer  Úso_build_optionsÚ
so_builderÚlink_cmdÚlinker_flagsÚweight_fileÚ	f_weightsÚo_filerr  Ú
page_size_Ú	page_sizeÚf_soÚso_sizerX  rC  r5  r6  r  r  s;    `` `                                                @@@@@@rh   ÚcompilezAotCodeCompiler.compile†  s"  øøøøøøøøø€ ð +ˆåŒ<˜7Ò"Ð"ÝÐOÑPÔPÐPåÑÔÐå%™œˆÝ$ØØÝ-Ø&Ø'Øœðñ ô ð
ñ 
ô 
ˆõ ˜?×;Ò;Ñ=Ô=Ñ>Ô>ˆõ ÔÑÔÐJ ;°%Ò#7ÐJ¸E¼Nð 	ð .Ðõ
 +­6Ô+>Ô+JÑKÔKñ	
Ø!ØåØØØØ/ð	
ñ 
ô 
‰ˆˆZõ ÔÔ&ð 	/Ø×"Ò" :Ñ.Ô.Ð.å×ÒÐ9¸:ÑFÔFÐFÝØðð ð ð ð
 +Ð*Ð*Ð*ð	
ñ 	
ô 	
ð 	
õ  "œwŸ|š|­B¬G¯MªM¸*Ñ,EÔ,EÀaÔ,HÈ#ÑNÔNÐðR	ð R	ð R	ð R	ð R	ð R	ð R	ð R	ð R	ð R	ðh 	&Ð%Ð%Ð%Ð%Ð%å‘>”>ˆØˆx�œŸš X¨s°W©}Ñ=Ô=Å|ÐTÑTÔTˆØð \	6ð \	6Ø-ð EÝ+-¬7×+;Ò+;¸JÑ+GÔ+GÈÔ+JÈWÑ+TÐ(ÝÐ2°CÑ8Ô8ð <¸AØ—G’GÐ:Ñ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <õ Ô&Ô.ð EØ#×*Ò*Ð+CÑDÔDÐDåÔ*Ô3ˆHØ*5ˆHÐ&Ñ'õ œ×(Ò(¨Ñ4Ô4°QÔ7Ð:JÑJˆIÝÔ+Ô4×:Ò:Ñ<Ô<ð 8ð 8‘��1Ý! !¥SÑ)Ô)ð 8­jØ�ñ/ô /ð 8ð 8à7ñ8ô 8ð ð 8õ �i Ñ%Ô%ð B¨Ø—’�œ
¥6Ô#6Ô#?Ñ@Ô@ÑAÔAÐAðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bõ Ô"Ô*ð 2Ø×&Ò& yÑ1Ô1Ð1ð %ð=•Ô#Ô/Ð/å”W×%Ò% jÑ1Ô1°!Ô4°uÑ<ð õ ”w×'Ò'¨
Ñ3Ô3°AÔ6¸Ñ=ˆHåð ð ð ð à!œO×0Ò0Ñ2Ô2ðñ ô ñ ô ˆHðOð Oð Oð Oõ< Ô"Ô:ð )Ø%(§X¢Xð .ð .ð .ð .ð .ð .à %¤× 4Ò 4Ñ 6Ô 6ð.ñ .ô .ñ &ô &Ð"Ð"ð &)Ð"åÐ0Ñ1Ô1ˆKõ $*Ô#3Ñ#5Ô#5Ð5ÐU¸+ÈÒ:UÐÝÔ"Ô5ð (Ø#'Ð õ
 7°zÑBÔBñØ"Ø!å#8Ø&Ø'ØœØ!Ø"3Ø!1ð$ñ $ô $Ð õ (Ø'Ø"Ø,Ø0ð	ñ ô ˆNð )×9Ò9Ñ;Ô;ˆKØ%×:Ò:Ñ<Ô<ˆHå�IŠIÐ3°[ÑAÔAÐAÝÔ&Ô7ð 7Ø$ð 7Ý!œw×/Ò/°
Ñ;Ô;¸AÔ>ÀÑE�HÝ  ¨X°{×7HÒ7HÑ7JÔ7JÑKÔKÐKÝ”H˜X uÑ-Ô-Ð-Ð-å)¨+Ñ6Ô6Ð6åÔ"Ô3ð 6Ý "¤× 0Ò 0°Ñ <Ô <¸QÔ ?ÐBWÑ W�Ø$×7Ò7¸ÑFÔFÐFØ×&Ò& }Ñ5Ô5Ð5à#ð QØ 2�Ø ��å#Ý�œ q­%¬+µe´kÑ*BÔ*BÔ*FÈÑMÔM×RÒRÑTÔTñ ô  �õ !'¤¨D°+À±/À<Ñ PÔ P�à&� }µc´lÑCÔCˆHå#(¤=Ô#4ÐI•‘”�½-¹/¼/ð ðð à*Ô0×7Ò7Ñ9Ô9ðñ ô ˆIð
 Ÿš Ñ+Ô+ˆIå&LÈYÑ&WÔ&WÑ#ˆK˜Ý4Ø&Ø'ØœØ"3ð	 ñ  ô  Ðõ $Ø Ø! 8¨YÐ7Ø%Ø,ð	ñ ô ˆJð "×2Ò2Ñ4Ô4ˆHØ"×7Ò7Ñ9Ô9ˆIå�IŠIÐ/°Ñ:Ô:Ð:õ �j #Ñ&Ô&ð 9¨!Ø—’˜‘”�Ø—’Ð=¨kÐ=Ð=Ð=Ñ>Ô>Ð>Ø—’Ð7¨8Ð7Ð7Ð7Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9õ
 Ô"Ô3ñ 76Ý!œw×/Ò/°
Ñ;Ô;¸AÔ>ÐAUÑU�Ø ×3Ò3°LÑAÔAÐAØ×&Ò& |Ñ4Ô4Ð4ð
 $ð 8åœ×(Ò(¨Ñ4Ô4°QÔ7Ð:SÑSð  õ ˜k¨4Ñ0Ô0ð H°IØ!ŸšÐ(:Ñ;Ô;Ð;Ø!Ÿš­¬°C¸Ñ(FÔ(FÑGÔGÐGðHð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hð $×*Ò*¨;Ñ7Ô7Ð7à×&Ò& xÑ0Ô0Ð0Ø×&Ò& yÑ1Ô1Ð1Ñ1ð %ð 	4ð -ðE�Ô+Ô7Ð7åœW×-Ò-¨jÑ9Ô9¸!Ô<¸uÑDð õ
 ! (¨HÐ!5°yÀ(Ç.Â.ÑBRÔBRÑSÔSÐSÝ”H˜Y¨Ñ.Ô.Ð.Ð.å)¨(Ñ3Ô3Ð3ð ØÝ”G×$Ò$ XÑ.Ô.¨qÔ1°DÑ8ðð &ð &�Fõ ”I˜fÑ%Ô%Ð%Ð%à#ð CØ#�O�O�Oà!)×!5Ò!5Ñ!7Ô!7�JÝ # E¨:Ñ 6Ô 6�Iå˜i¨Ñ/Ô/ð C°4Ø"&§)¢)¡+¤+˜àŸ
š
 4¨9°wÀÑ7JÑ+JÑ#KÑLÔLÐLØŸ
š
Ð#5Ñ6Ô6Ð6ØŸ
š
¥6¤;¨s°LÑ#AÔ#AÑBÔBÐBðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cõ Ô&Ô.ð 6Ø#×*Ò*¨9Ñ5Ô5Ð5ðy\	6ð \	6ð \	6ñ \	6ô \	6ð \	6ð \	6ð \	6ð \	6ð \	6ð \	6øøøð \	6ð \	6ð \	6ð \	6õ| ÔÔ&ð 	#ð #Ð"àÐsÌ   Ç;k(ÈH4È(k(È4H8	È8k(È;H8	È<Ck(Ì7MÍk(ÍM	Ík(ÍM	ÍP>k(ÞA_-ß!k(ß-_1	ß1k(ß4_1	ß5B!k(â>c ãk(ã c$	ã$k(ã'c$	ã(Ek(è/A0j+êk(ê+j/	ê/k(ê2j/	ê3)k(ë(k,ë/k,N)r‰  rU   r‰  rr   rü  rý  rþ  rr   rÿ  r¯  rb   r   )rÍ   rÎ   rÏ   rù  r“  rf   rj   rh   rû  rû  …  s8   € € € € € ØðDð Dð Dñ „[ðDð Dð Drj   rû  c                 óþ   — t          t          ¦  «        j        dz  } |                      ¦   «         5 }|                     ¦   «         }t          |d¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   t          |¦  «        S )Nrá  r¿  )r   rç  rG  r¾   rÔ  r8  rA   )r…   rT  r,  ry   rz  s        rh   Úcpp_prefix_pathr•    s®   € õ •‰>Œ>Ô Ð#9Ñ9€DØ	�Š‰Œð 
˜Ø—&’&‘(”(ˆÝØØñ
ô 
‰ˆˆ8ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ $ HÑ-Ô-Ð-s   ±(A%Á%A)Á,A)c                 ó–   — t          ¦   «         } t          j        ¦   «         r#dt          j                             | ¦  «        › d�S d| › d�S )Nz
#include "ú")r•  r"   rî  r„   r…   r#  ©rz  s    rh   Ú
cpp_prefixr™  #  sR   € ÝÑ Ô €HÝÔÑÔð (ð :�BœG×,Ò,¨XÑ6Ô6Ð9Ð9Ð9Ð9à'˜HÐ'Ð'Ð'Ð'rj   r  úUnion[str, List[str]]rñ  ræ  r¯  c                óv   — t          d¦  «        5  t          | ||¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr#  )r   Ú_compile_file)r  rñ  ræ  s      rh   r#  r#  /  s…   € õ 
�nÑ	%Ô	%ð ;ð ;Ý˜Z¨°cÑ:Ô:ð;ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ;ð ;s   �.®2µ2c           	     óP  — t          | t          ¦  «        r| gn| }d„ |D ¦   «         }	 t          j        ¦   «         �rât	          ¦   «         }t
          j                             |¦  «        }t
          j                             |¦  «        }t
          j                             t          d¦  «        }t          j        ¦   «         5 }	t          j        |t
          j                             |	|¦  «        ¦  «         t          j        t          t
          j                             |	d¦  «        ¦  «         t          ||¦  «        D ]8\  }
}t          j        |
t
          j                             |	|¦  «        ¦  «         Œ9t
          j                             |	d¦  «        }t          j        ||¦  «         t#          ||	|¦  «        }t
          j                             |¦  «        rt          j        |¦  «         t          j        ||¦  «         d d d ¦  «         n# 1 swxY w Y   d S d S t)          j        |t(          j        ¬¦  «         d S # t(          j        $ rV}|j                             d¦  «        }d|v pd|v }|rt4          j        dk    rd	}||z  }t9          j        ||¦  «        |‚d }~ww xY w)
Nc                óv   — g | ]6}t          j        ¦   «         rt          j                             |¦  «        n|‘Œ7S rf   )r"   rî  r„   r…   r#  )rü   Úips     rh   rå  z!_compile_file.<locals>.<listcomp>:  sH   € ð ð ð Ø?A¥Ô 0Ñ 2Ô 2Ð:�Œ×Ò˜ÑÔÐ¸ðð ð rj   Úincluderâ  )Ústderrr¡   z'omp.h' file not foundÚlibompr  a¢  

OpenMP support not found. Please try one of the following solutions:
(1) Set the `CXX` environment variable to a compiler other than Apple clang++/g++ that has builtin OpenMP support;
(2) install OpenMP via conda: `conda install llvm-openmp`;
(3) install libomp via brew: `brew install libomp`;
(4) manually setup OpenMP and set the `OMP_PREFIX` environment variable to point to a path with `include/omp.h` under it.)r   rr   r"   rî  r•  r„   r…   r#  r†   rï  ÚtempfileÚTemporaryDirectoryrO  r   Ú_LINKER_SCRIPTÚzipÚcopytreer[   r  rQ  rá  Úcheck_outputÚSTDOUTrã  rå  r  r€   r  r#   rä  )r  rñ  ræ  Úinput_pathsÚinput_filesÚheader_pathÚheader_namer‡  Útorch_includes_pathÚtmp_dirr·  rT  Údest_include_pathÚoutput_file_pathr
  rå  Úopenmp_problemÚinstructions                     rh   rœ  rœ  6  s¹  € õ #-¨Z½Ñ"=Ô"=ÐM�:�,�,À:€Kðð ØEPðñ ô €Kð(6ÝÔÑÔñ 	Cå)Ñ+Ô+ˆKÝœ'×*Ò*¨;Ñ7Ô7ˆKÝœ'×*Ò*¨;Ñ7Ô7ˆKõ #%¤'§,¢,­{¸IÑ"FÔ"FÐÝÔ,Ñ.Ô.ð ;°'å”˜K­¬¯ª°g¸{Ñ)KÔ)KÑLÔLÐLÝ”�N­B¬G¯LªL¸À+Ñ,NÔ,NÑOÔOÐOÝ ¨[Ñ9Ô9ð =ð =‘D�A�qÝ”K ¥2¤7§<¢<°¸Ñ#;Ô#;Ñ<Ô<Ð<Ð<Ý$&¤G§L¢L°¸)Ñ$DÔ$DÐ!Ý”Ð 3Ð5FÑGÔGÐGå#5°c¸7ÀKÑ#PÔ#PÐ å”7—>’> +Ñ.Ô.ð +Ý”I˜kÑ*Ô*Ð*Ý”Ð,¨kÑ:Ô:Ð:ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;õ Ô# Cµ
Ô0AÐBÑBÔBÐBÐBÐBøÝÔ(ð 6ð 6ð 6Ø”—’ Ñ)Ô)ˆØ1°VÐ;ÐQ¸xÈ6Ð?QˆØð 
	"�cœl¨hÒ6Ð6ð2ð ð �kÑ!ˆFÝÔ! # vÑ.Ô.°AÐ5øøøøð6øøøsD   ¨BI  Ã EHÈI  ÈHÈI  ÈHÈI  È I  É J%ÉAJ Ê J%zOptional[CDLL]Ú_libgompré   úUnion[list[c_void_p], c_void_p]c                ó®  ‡— dˆfd„Šˆfd„|D ¦   «         }|                       d¦  «        sJ | dz   ¦   «         ‚d }t          |                      d¦  «        ¦  «        D ]/\  }}|d	k    rt          j        |¦  «        }t          ||¦  «        }Œ0t          |¦  «        sJ | d
z   ¦   «         ‚t          ¦   «         }t          |j	        j
        |¦  «        D ]\  }}|j        r
|||j        <   Œ|r|t          |¦  «         d …=  ||i |¤Ž}	t          |	t          t           f¦  «        rld„ |	D ¦   «         }	t          |	¦  «        D ],\  }}
t          |
t"          j        ¦  «        sJ | dz   ¦   «         ‚Œ-t"          j        j                             |	¦  «        S t          |	t"          j        ¦  «        sJ | dz   ¦   «         ‚t"          j        j                             |	¦  «        S )NÚargr   rb   c                ó  •— t          t          | ¦  «        ¦  «        dk    r$t          j        j                             | ¦  «        S t          | t          t          f¦  «        r$ t          | ¦  «        ˆfd„| D ¦   «         ¦  «        S | S )Nz<class 'PyCapsule'>c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S re   rf   )rü   r_  Úconvert_args     €rh   rý   z9custom_op_wrapper.<locals>.convert_arg.<locals>.<genexpr>s  s+   øè è € Ð9Ð9°˜[˜[¨™^œ^Ð9Ð9Ð9Ð9Ð9Ð9rj   )	rr   r²  r|   rµ  Ú_aotiÚ&alloc_tensor_by_stealing_from_void_ptrr   r·  Útuple)r·  rº  s    €rh   rº  z&custom_op_wrapper.<locals>.convert_argn  sy   ø€ Ý�t�C‰yŒy‰>Œ>Ð2Ò2Ð2å”8”>×HÒHÈÑMÔMÐMÝ˜�d¥E˜]Ñ+Ô+ð 	Ø•4˜‘9”9Ð9Ð9Ð9Ð9°SÐ9Ñ9Ô9Ñ9Ô9Ð9àˆJrj   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS rf   rf   )rü   r·  rº  s     €rh   rå  z%custom_op_wrapper.<locals>.<listcomp>w  s#   ø€ Ð7Ð7Ð7¨3�k�k #Ñ&Ô&Ð7Ð7Ð7rj   z
torch.ops.z, can not be called through custom_op_wrapperrv   r   z, can not be loaded through custom_op_wrapperc                ó>   — g | ]}|€t          j        g ¦  «        n|‘ŒS re   )r|   Útensor)rü   Úrs     rh   rå  z%custom_op_wrapper.<locals>.<listcomp>�  s+   € ÐGÐGÐG¸1 a i•%”,˜rÑ"Ô"Ð"°QÐGÐGÐGrj   z returns a list of non-tensorsz returns a non-tensor)r·  r   rb   r   )Ú
startswithÚ	enumeraterà  Ú	importlibÚimport_moduler«  Úcallabler»  r¦  Ú_schemaÚ	argumentsÚ
kwarg_onlyrq   r¹  r   r·  r½  r|   r   rµ  r»  Ú#unsafe_alloc_void_ptrs_from_tensorsÚ!unsafe_alloc_void_ptr_from_tensor)ré   r`   Úconverted_argsÚfuncr  r’  ra   Úfunc_argÚconv_argÚresultrÁ  rº  s              @rh   Úcustom_op_wrapperrÑ  k  s  ø€ ðð ð ð ð ð ð 8Ð7Ð7Ð7°$Ð7Ñ7Ô7€Nà�=Š=˜Ñ&Ô&ð ð Ø
Ð;Ñ;ñô Ð&ð €DÝ˜"Ÿ(š( 3™-œ-Ñ(Ô(ð  ð  ‰ˆˆ1Ø�Š6ˆ6ÝÔ*¨1Ñ-Ô-ˆDÝ�t˜QÑÔˆˆå�D‰>Œ>ÐNÐN˜2Ð NÑNÑNÔNˆ>õ ‰VŒV€FÝ! $¤,Ô"8¸.ÑIÔIð -ð -Ñˆ�(ØÔð 	-Ø$,ˆF�8”=Ñ!øØð +Ø�C ™KœK˜<˜>˜>Ð*àˆT�>Ð, VÐ,Ð,€FÝ�&�4¥˜-Ñ(Ô(ð HàGÐGÀÐGÑGÔGˆÝ˜fÑ%Ô%ð 	Vð 	V‰DˆAˆqÝ˜a¥¤Ñ.Ô.ÐUÐU°Ð5UÑ0UÑUÔUÐ.ÐUÝŒxŒ~×AÒAÀ&ÑIÔIÐIå˜&¥%¤,Ñ/Ô/ÐMÐM°Ð6MÑ1MÑMÔMÐ/ÝŒxŒ~×?Ò?ÀÑGÔGÐGrj   c                  ó¶   — e Zd ZU i Zded<    eej        ¦  «        Zi Zded<   edd
„¦   «         Z	e
dd„¦   «         Ze
	 	 	 ddd„¦   «         Ze
ddd„¦   «         ZdS )ÚCppCodeCacheú0Dict[str, Callable[[], Union[CDLL, ModuleType]]]r³   r›   Úcpp_compile_command_flagsr…   rr   rÙ   rb   úUnion[CDLL, ModuleType]c                ó*   — t          j        | ¦  «        S re   )r   ÚLoadLibrary)r…   rÙ   s     rh   Ú_load_library_innerz CppCodeCache._load_library_innerž  s   € åÔ Ñ%Ô%Ð%rj   c           	     óÞ  — 	 |                       ||¦  «        }||_        |S # t          t          f$ rº}dt	          |¦  «        v rWt
          j                             d¦  «        r8t          j	        d¦  «        a
|                       ||¦  «        }||_        |cY d }~S dt	          |¦  «        v r;t          |› dt          j        ¦   «         › dt          j        ¦   «         › d�¦  «        |‚‚ d }~ww xY w)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.)rÙ  rÙ   ÚImportErrorr‡  rr   r„   r…   r  r   rØ  r´  r£  Ú
gettempdir)rò  r…   rÙ   rÐ  r
  s        rh   Ú_load_libraryzCppCodeCache._load_library¢  s   € ð	Ø×,Ò,¨T°3Ñ7Ô7ˆFØˆFŒJØˆMøÝ�WÐ%ð 	ð 	ð 	Ø�˜Q™œÐÐ¥B¤G§N¢NÐ3LÑ$MÔ$MÐõ  Ô+Ð,EÑFÔF�Ø×0Ò0°°sÑ;Ô;�Ø �”
Ø������Ø9½SÀ¹V¼VÐCÐCÝØð ]ð ]ÍXÔM`ÑMbÔMbð ]ð ]å3;Ô3FÑ3HÔ3Hð]ð ]ð ]ñô ð
 ðð øøøøð	øøøs"   ‚! ¡C,²A"C'ÂC,ÂAC'Ã'C,rt   Nrf   r‰  rþ  Ú	submit_fnr   Úextra_flagsúSequence[str]c           	     óž  ‡ ‡‡‡‡‡— i ‰ j         ¥|t          ¦   «         |dœ¥}t          ¦   «          t          ddt	          di |¤Ž¬¦  «        }t          |                     ¦   «         ¦  «        }t          |d|¬¦  «        \  Š}‰‰ j        v�r6ddl	m
}	 t          j                             t          ¦   «         ‰d	z   ¦  «        }
t          |¦  «        \  }}	 |d d
…         dz   }d Šd Št	          di |¤Ž}t          ||||¬¦  «        }t!          j        t$          |
|||¦  «        Št'          t)          j        ¦   «         r|n|                     ¦   «         ¦  «        Šdˆˆ ˆˆˆˆfd„}|�T |	|
t.          ¬¦  «        5  t          j                             ‰¦  «        s |‰¦  «        Šd d d ¦  «         n# 1 swxY w Y   |‰ j        ‰<   ‰ j        ‰         S )N)rþ  r  rà  r  r  r  r	  ©r  r   r8  r:  éýÿÿÿÚsor  rb   r   c                 óˆ   •— ‰€>‰�‰                      ¦   «           ‰¦   «         } | �J ‚‰                     ‰‰¦  «        Š‰€J ‚‰S re   )rÐ  rÞ  )rÐ  Úbinary_pathrò  ÚfuturerÙ   rØ  Ú	worker_fns    €€€€€€rh   Úload_fnz(CppCodeCache.load_async.<locals>.load_fnø  sR   ø€ à�;ØÐ)ØŸš™œ˜Ø&˜Y™[œ[�FØ!˜>˜>˜>Ø×+Ò+¨K¸Ñ=Ô=�CØ˜?˜?˜?Ø�
rj   r;  rf   ©rb   r   )rÕ  rB   r:   r<   r>   r2  r   r8  r³   rc  r9  r„   r…   r†   r  r@   rÑ   r
   Ú_worker_compile_cpprA   r"   rî  r!  rd  r  )rò  r‰  rþ  rß  rà  Úcompile_commandÚcommand_genÚvec_isa_cmdr  r9  Ú	lock_pathr‡  r  Úfb_output_pathÚcpp_build_optionÚcpp_builderrê  rç  rè  rÙ   rØ  ré  s   `                @@@@@rh   Ú
load_asynczCppCodeCache.load_async¹  s…  øøøøøø€ ð
ØÔ+ð
à&Ý#‘~”~Ø&ð	
ð 
ð 
ˆõ 	ÑÔÐå Ø˜cÕ/DÐ/WÐ/WÀÐ/WÐ/Wð
ñ 
ô 
ˆõ ˜;×7Ò7Ñ9Ô9Ñ:Ô:ˆÝ ¨U¸+ÐFÑFÔF‰ˆˆZà�c”iÐÑØ)Ð)Ð)Ð)Ð)Ð)åœŸš¥\¡^¤^°S¸7±]ÑCÔCˆIÝ&LÈZÑ&XÔ&XÑ#ˆK˜ðð (¨¨¨œ_¨tÑ3ˆNØ,0ˆFØˆCå4ÐGÐG°ÐGÐGÐÝ$Ø Ø"Ø%Ø,ð	ñ ô ˆKõ "Ô)Ý#ØØØØñô ˆIõ 3åÔ#Ñ%Ô%ð8��à ×5Ò5Ñ7Ô7ñô ˆKð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð Ð$Ø�X˜iµÐ>Ñ>Ô>ð 6ð 6Ýœ7Ÿ>š>¨+Ñ6Ô6ð 6Ø!* ¨9Ñ!5Ô!5˜ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð %ˆCŒI�c‰NàŒy˜Œ~Ðs   Å6+F-Æ-F1Æ4F1c                ó>   —  |                       ||¦  «        ¦   «         S re   )rô  )rò  r‰  rþ  s      rh   r¿   zCppCodeCache.load  s   € à7ˆs�~Š~˜k¨;Ñ7Ô7Ñ9Ô9Ð9rj   )r…   rr   rÙ   rr   rb   rÖ  )rt   Nrf   )
r‰  rr   rþ  rr   rß  r   rà  rá  rb   r   )rt   )r‰  rr   rþ  rr   rb   r   )rÍ   rÎ   rÏ   r³   r]  rÐ   rÚ  rø  rÕ  rÙ  rù  rÞ  rô  r¿   rf   rj   rh   rÓ  rÓ  ˜  sã   € € € € € € à>@€EÐ@Ð@Ð@Ñ@Ø�,˜uœ{Ñ+Ô+€KØ02ÐÐ2Ð2Ð2Ñ2àð&ð &ð &ñ „\ð&ð ðð ð ñ „[ðð, ð !ØØ%'ðPð Pð Pð Pñ „[ðPðd ð:ð :ð :ð :ñ „[ð:ð :ð :rj   rÓ  rð  ró  r<   Úfb_input_pathrñ  c           	     ó²  — ddl m}  || t          ¬¦  «        5  t          j        ¦   «         r|n|                     ¦   «         }t          j                             |¦  «        s]t          j        ¦   «         r6t          ||t          j        |                     ¦   «         ¦  «        ¦  «         n|                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r8  r;  )rc  r9  rd  r"   rî  r!  r„   r…   r  r#  rß  rà  r   Úbuild)rð  ró  rö  rñ  r9  rç  s         rh   rì  rì    s(  € ð "Ð!Ð!Ð!Ð!Ð!à	ˆ�)¥\Ð	2Ñ	2Ô	2ð $ð $å$Ô.Ñ0Ô0ÐXˆNˆN°k×6VÒ6VÑ6XÔ6Xð 	õ Œw�~Š~˜kÑ*Ô*ð 	$ÝÔÑ!Ô!ð $ÝØ!Ø"Ý”K × <Ò <Ñ >Ô >Ñ?Ô?ñô ð ð ð ×!Ò!Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   ™B&CÃCÃCc                  óÆ   — e Zd ZU i Zded<    eej        ¦  «        ZdddœZdZ	dZ
dZ ej        d	¦  «        Zed"d„¦   «         Ze	 	 	 	 d#d$d„¦   «         Zed%d!„¦   «         ZdS )&ÚCppPythonBindingsCodeCacherÔ  r³   FT©Úinclude_pytorchÚsharedr,  zkernel(%s);Py_RETURN_NONE;rw   aÎ  
        // Python bindings to call %s():
        #define PY_SSIZE_T_CLEAN
        #include <Python.h>
        #include <sstream>
        #include <cstdlib>

        #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);
        }

        %s

        static PyObject* %s_py(PyObject* self, PyObject* args) {
            try {
                if(unlikely(!PyTuple_CheckExact(args)))
                    throw std::runtime_error("tuple args required");
                if(unlikely(PyTuple_GET_SIZE(args) != %s))
                    throw std::runtime_error("requires %s args");
                %s
            } 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[] = {
            {"%s", %s_py, METH_VARARGS, ""},
            {NULL, NULL, 0, NULL}};

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

        PyMODINIT_FUNC PyInit_%s(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;
            }
            std::istringstream iss(str_addr);
            uintptr_t addr = 0;
            iss >> addr;
            _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(mod, Py_MOD_GIL_NOT_USED);
            #endif
            return module;
        }
        r…   rr   rÙ   rb   r   c                ó¦  — t          t          j        j        j        j        ¦  «        t          j        d<   |› d| j        › �}	 t          j
        |         S # t          $ r Y nw xY wt          j                             ||¦  «        }|€J ‚t          j                             |¦  «        }|t          j
        |<   |j                             |¦  «         |S )NÚ'_TORCHINDUCTOR_PYOBJECT_TENSOR_DATA_PTRrv   )rr   r|   rµ  Ú_dynamor‹  Ú'_torchinductor_pyobject_tensor_data_ptrr„   ÚenvironÚentry_functionr€   r  ÚKeyErrorrÄ  ÚutilÚspec_from_file_locationÚmodule_from_specÚloaderÚexec_module)rò  r…   rÙ   Úmodule_namerÙ  rÚ  s         rh   rÙ  z.CppPythonBindingsCodeCache._load_library_innerŽ  sÒ   € å@CÝŒHÔÔ#ÔKñA
ô A
�Œ
Ð<Ñ=ð Ð3Ð3˜sÔ1Ð3Ð3ˆð	Ý”;˜{Ô+Ð+øÝð 	ð 	ð 	ØˆDð	øøøåŒ~×5Ò5°kÀ4ÑHÔHˆØÐÐÐÝ”×0Ò0°Ñ6Ô6ˆØ#)�Œ�KÑ ØŒ×Ò Ñ'Ô'Ð'Øˆs   ÁA Á
A"Á!A"rt   rÝ   Nrf   Úargtypesr¯  r‰  rþ  Únum_outputsr<  rß  r   rà  rá  c                óz  ‡ ‡
‡— d                      d„ t          |¦  «        D ¦   «         ¦  «        }‰ j        ‰ j        ‰ j        r
‰ j        |z  nd‰ j        t          |¦  «        t          |¦  «        ‰ j        |z  ‰ j        ‰ j        ‰ j        ‰ j        f
z  }‰                      ||z   |||¬¦  «        Š
dŠd	ˆ ˆ
ˆfd„}	|	S )
a5  
        Wrap a C++ function in fast Python bindings.

        Args:
            argtypes: The types of args to ENTRY_FUNCTION(), e.g. ["float*", "long"]
            source_code: C++ source code containing a ENTRY_FUNCTION() function

        Returns:
            A python version of ENTRY_FUNCTION()
        ú, c              3  óV   K  — | ]$\  }}d |                      dd¦  «        › d|› d�V — Œ%dS )z
parse_arg<zconst rw   z>(args, ú)N)r   )rü   ÚnÚargtypes      rh   rý   zBCppPythonBindingsCodeCache.load_pybinding_async.<locals>.<genexpr>³  s\   è è € ð 
ð 
á��7ð E˜Ÿš¨°2Ñ6Ô6ÐDÐDÀÐDÐDÐDð
ð 
ð 
ð 
ð 
ð 
rj   rw   )rß  rà  Nrb   r   c                 ót   •— ‰€! ‰¦   «         Št          ‰t          ¦  «        sJ ‚t          ‰‰ j        ¦  «        S re   )r   r   r«  r  )rò  Ú
get_resultrÐ  s   €€€rh   rè  z?CppPythonBindingsCodeCache.load_pybinding_async.<locals>.futureË  s<   ø€ àˆ~Ø#˜™œ�Ý! &­*Ñ5Ô5Ð5Ð5Ð5Ý˜6 3Ô#5Ñ6Ô6Ð6rj   rë  )r†   rÃ  Úsuffix_templater  Úextra_parse_argr¹  Úcall_entry_functionrô  )rò  r  r‰  rþ  r  rß  rà  Ú	parseargsÚsuffixrè  r  rÐ  s   `         @@rh   Úload_pybinding_asyncz/CppPythonBindingsCodeCache.load_pybinding_asyncŸ  s  øøø€ ð( —I’Ið 
ð 
å'¨Ñ1Ô1ð
ñ 
ô 
ñ 
ô 
ˆ	ð Ô$ØÔØ14Ô1DÐLˆCÔ +Ñ-Ð-È"ØÔÝ�‰MŒMÝ�‰MŒMØÔ# iÑ/ØÔØÔØÔØÔð(
ñ 
ˆð —^’^Ø˜&Ñ ØØØ#ð	 $ñ 
ô 
ˆ
ð ˆð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð ˆrj   r`   ra   c                ó,   —   | j         |i |¤Ž¦   «         S re   )r  ©rò  r`   ra   s      rh   Úload_pybindingz)CppPythonBindingsCodeCache.load_pybindingÔ  s#   € à8Ð'ˆsÔ'¨Ð8°Ð8Ð8Ñ:Ô:Ð:rj   )r…   rr   rÙ   rr   rb   r   )rt   rÝ   Nrf   )r  r¯  r‰  rr   rþ  rr   r  r<  rß  r   rà  rá  rb   r   )r`   r   ra   r   rb   r   )rÍ   rÎ   rÏ   r³   r]  rÐ   rÚ  rø  rÕ  r  r  r  ÚtextwrapÚdedentr  rù  rÙ  r  r  rf   rj   rh   rú  rú  )  sï   € € € € € € à>@€EÐ@Ð@Ð@Ñ@Ø�,˜uœ{Ñ+Ô+€Kð !Øð!ð !Ðð
 €NØ6ÐØ€OØ%�h”oðU	ñWô W€Oðr ðð ð ñ „[ðð  ð
 !ØØØ%'ð2ð 2ð 2ð 2ñ „[ð2ðh ð;ð ;ð ;ñ „[ð;ð ;ð ;rj   rú  c                  óp   — e Zd ZU i Zded<    eej        ¦  «        ZdddœZdZ	dZ
 ej        d¦  «        ZdS )	ÚCppWrapperCodeCacherÔ  r³   Trû  Úinductor_entry_cppzreturn inductor_entry_cpp(%s);a3	  
        #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::vector<AtenTensorHandle>& cppvec) {
            size_t result_len = cppvec.size();
            PyObject* result = PyList_New(static_cast<Py_ssize_t>(result_len));
            for (size_t i = 0; i < result_len; i++) {
                PyObject *elem =
                    cppvec[i] == nullptr
                        ? Py_None
                        // Store AtenTensorHandle as PyCapsulate
                        : PyCapsule_New(reinterpret_cast<void*>(cppvec[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 a vector to hold returned tensor handles,
            // not allocating the actual output tensor storage here
            std::vector<AtenTensorHandle> output_handles(%s);
            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;
            }
        }
        N)rÍ   rÎ   rÏ   r³   r]  rÐ   rÚ  rø  rÕ  r  r  r  r  r  rf   rj   rh   r!  r!  Ù  sj   € € € € € € à>@€EÐ@Ð@Ð@Ñ@Ø�,˜uœ{Ñ+Ô+€KàØð!ð !Ðð *€NØ:ÐØ%�h”oð3	ñ5ô 5€O€O€Orj   r!  c                  ó8  — e Zd ZU i Zded<    eej        ¦  «        ZdZded<    e	j
        d¦  «        Ze e	j
        d¦  «        z   Ze e	j
        d¦  «        z   Z e	j
        d	¦  «        Zed'd„¦   «         Zed(d„¦   «         Ze ej        d¦  «        d)d„¦   «         ¦   «         Zed*d„¦   «         Ze ej        d¦  «        d+d„¦   «         ¦   «         Ze ej        d¦  «        d+d„¦   «         ¦   «         Ze	 d,d-d"„¦   «         Zed.d%„¦   «         Zed)d&„¦   «         ZdS )/ÚHalideCodeCachez0Dict[str, Callable[[], Union[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();
        rq   rr   r·  rW   r~   rm   rb   r¯  c                óZ  — |j         €J ‚|j        �*t          |j         ¦  «        t          |j        ¦  «        k    sJ ‚|j        €J ‚|j        p|j        › d|j        › �}|rd|› d�}d}d}d}nd}d}d|› d�}d	}g }	t          |j         |j        ¦  «        D ]!\  }
}|	                     d
|
› d|› d�¦  «         Œ"d|› d�d|› dd                     |	¦  «        › d�|› d|› d�|› d|› d�|› d|› d�|› d|› d�|› d| 	                    ¦   «         › d�|› dt          |	¦  «        › d�|› d|› d�|› d�g
S )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 ú;zhalide_dimension_t z_dims[] = {z};z
.device = z.device_interface = z.host = z	.flags = z.type = z.dimensions = z.dim = z_dims;z.padding = nullptr;)
ÚshapeÚstrider¹  ÚoffsetÚalias_ofrq   r¦  rº  r†   Úhalide_type)rò  rq   r·  r~   rO  rŸ   Údevice_interfaceÚhostÚflagsÚdimsÚsizer.  s               rh   Ú_codegen_bufferzHalideCodeCache._codegen_bufferi	  sâ  € àŒyÐ$Ð$Ð$ØŒzÐ%­#¨c¬i©.¬.½CÀÄ
¹O¼OÒ*KÐ*KÐ*KÐKØŒzÐ%Ð%Ð%Ø”lÐ. c¤hÐ?Ð?°3´:Ð?Ð?ˆØð 		4Ø>°8Ð>Ð>Ð>ˆFØ/ÐØˆDØ5ˆEˆEàˆFØ(ÐØ<°Ð<Ð<Ð<ˆDØ3ˆEàˆÝ ¤	¨3¬:Ñ6Ô6ð 	Dð 	D‰LˆD�&Ø�KŠKÐB°ÐBÐB¸ÐBÐBÐBÑCÔCÐCÐCð '˜tÐ&Ð&Ð&ØH $ÐHÐH°D·I²I¸d±O´OÐHÐHÐHØÐ(Ð(˜vÐ(Ð(Ð(ØÐ<Ð<Ð)9Ð<Ð<Ð<ØÐ$Ð$˜TÐ$Ð$Ð$ØÐ&Ð&˜eÐ&Ð&Ð&ØÐ1Ð1˜SŸ_š_Ñ.Ô.Ð1Ð1Ð1ØÐ/Ð/¥3 t¡9¤9Ð/Ð/Ð/ØÐ(Ð(˜DÐ(Ð(Ð(ØÐ(Ð(Ð(ð
ð 	
rj   ri  rX   Ú
headerfileÚobjectc           	     óæ  — |                      ¦   «         }|d|j        v u sJ ‚d|j        v sJ ‚g }g }t          |j        ¦  «        D ]„\  }}|                     ¦   «         rF|                     d|› �¦  «         |                     |                      d|› �||¦  «        ¦  «         Œ_d|j        vsJ ‚|                     |j	        ¦  «         Œ…d 
                    d„ |D ¦   «         ¦  «                             ¦   «         }|r| j        n| j        }|                     |                      |rdnd	¦  «        |d
 
                    d„ |j        D ¦   «         ¦  «        |d
 
                    |¦  «        ¬¦  «        }	|	S )NÚuser_contextÚ
no_runtimez&hl_buf_Úhl_buf_Ú*r5  c                ó   — g | ]}d |› �‘ŒS )ú    rf   )rü   Úlines     rh   rå  z1HalideCodeCache._codegen_glue.<locals>.<listcomp>™	  s   € Ð?Ð?Ð?¨t˜] D˜]˜]Ð?Ð?Ð?rj   úHalideRuntimeCuda.hzHalideRuntime.hr  c              3  ó`   K  — | ])}|j         ­	|                     ¦   «         › d|j        › �V — Œ*d S )Nr^  )r0  Úbindings_typerq   )rü   r_  s     rh   rý   z0HalideCodeCache._codegen_glue.<locals>.<genexpr>¡	  sP   è è € ð ð àØ”:Ð%ð —?’?Ñ$Ô$Ð/Ð/ q¤vÐ/Ð/à%Ð%Ð%Ð%ðð rj   )Úhalideruntime_hr8  ÚargdefsÚbuffersÚbuffer_names)rA  rD  rÃ  r  Ú	is_bufferrº  Úextendr7  Úctyperq   r†   ÚlstripÚglue_template_cudaÚglue_template_cppÚformatÚfind_header)
rò  ri  r8  rA  rG  rH  r  r·  Úglue_templateÚ	glue_codes
             rh   Ú_codegen_gluezHalideCodeCache._codegen_glue‹	  s¯  € à—,’,‘.”.ˆØ˜>¨T¬[Ð8Ð9Ð9Ð9Ð9Ø˜tœ{Ð*Ð*Ð*Ð*ØˆØˆÝ ¤Ñ.Ô.ð 	.ð 	.‰FˆAˆsØ�}Š}‰Œð .Ø×#Ò# N¨q N NÑ3Ô3Ð3Ø—’˜s×2Ò2°=¸Q°=°=À#ÀwÑOÔOÑPÔPÐPÐPà #¤)Ð+Ð+Ð+Ð+Ø×#Ò# C¤HÑ-Ô-Ð-Ð-Ø—)’)Ð?Ð?°wÐ?Ñ?Ô?Ñ@Ô@×GÒGÑIÔIˆà29ÐT˜Ô.Ð.¸sÔ?TˆØ!×(Ò(ØŸOšOØ)0ÐGÐ%Ð%Ð6Gñô ð "Ø—I’Ið ð àœðñ ô ñ ô ð
 ØŸš <Ñ0Ô0ð )ñ 
ô 
ˆ	ð Ðrj   c                óö   — t          ddt          ¦   «         ¬¦  «        }|                     ¦   «         }t          d                     | j        | j        | j        |g¦  «                             d¦  «        ¦  «        S )NÚOÚIr  r5  r¡   )	r<   r=   r   r  r†   rN  rM  Ústandalone_runtime_cuda_initr­   )rò  rî  Úcommand_lines      rh   Úconfig_hashzHalideCodeCache.config_hash«	  s‚   € õ !ØØÝ"™œð
ñ 
ô 
ˆð
 #×3Ò3Ñ5Ô5ˆÝØ�IŠIàÔ)ØÔ*ØÔ4Ø ð	ñô ÷ Šf�W‰oŒoñ	
ô 	
ð 		
rj   r  Úerrmsgc                ób  — t           j        j                             d¦  «        }|�|j        st          d¦  «        ‚	 |j        d         }t          j        |¦  «        D �]}|                     d¦  «        �r	 t          j
        dt          j                             ||¦  «        g¦  «        }n# t          j        $ r Y Œ`w xY wt          j        d|                     d¦  «        ¦  «        }|r�t          j                             t          j                             |                     d¦  «        ¦  «        | ¦  «        }t          j                             |¦  «        r!t          j                             |¦  «        c S �Œ n"# t(          $ r}t          |¦  «        |‚d }~ww xY wt          |¦  «        ‚)	NÚhalidez$halide python bindings not installedr   rè  Úlddz(/.*)/libHalide.sor¡   r,   )rÄ  Ú	machineryÚ
PathFinderrÒ  r×  r¨   r„   rj  ré  rá  r¨  r…   r†   ÚSubprocessErrorr›  Úsearchr  ÚabspathÚgroupr  rl  )	r  rZ  rÙ  ra  ÚfileÚoutÚmr…   r
  s	            rh   Ú_search_for_filez HalideCodeCache._search_for_file¿	  s“  € åÔ"Ô-×7Ò7¸ÑAÔAˆØˆ<˜tÔ>ˆ<ÝÐEÑFÔFÐFð	.ØÔ4°QÔ7ˆFÝœ
 6Ñ*Ô*ð 9ñ 9�Ø—=’= Ñ'Ô'ñ 9ð!Ý(Ô5Ø"¥B¤G§L¢L°¸Ñ$>Ô$>Ð?ñô ˜˜øõ &Ô5ð !ð !ð !Ø ˜ð!øøøåœ	Ð"7¸¿ºÀGÑ9LÔ9LÑMÔM�AØð 9Ý!œwŸ|š|­B¬G¯OªO¸A¿GºGÀA¹J¼JÑ,GÔ,GÈÑPÔP˜Ýœ7Ÿ>š>¨$Ñ/Ô/ð 9Ý#%¤7§?¢?°4Ñ#8Ô#8Ð8Ð8Ð8ùð9øõ ð 	.ð 	.ð 	.Ý˜vÑ&Ô&¨AÐ-øøøøð	.øøøå˜6Ñ"Ô"Ð"sB   ¾:F  Á94B.Â-F  Â.C Â=F  Â?C Ã B<F  Å=F  Æ 
FÆ
FÆFc                ó2  — d|                       ¦   «         › d�}dt          j        v rQt          j                             t          j        d         |¦  «        }t          j                             |¦  «        r|S d|› d�}t                               ||¦  «        S )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$  rg  )rq   Úsofiler…   rZ  s       rh   Úfind_libautoschedulez$HalideCodeCache.find_libautoschedule×	  s‹   € ð 6 D§J¢J¡L¤LÐ5Ð5Ð5ˆØ�2œ:Ð%Ð%Ý”7—<’<¥¤
¨<Ô 8¸&ÑAÔAˆDÝŒw�~Š~˜dÑ#Ô#ð Ø�àU˜&ÐUÐUÐUð 	õ ×/Ò/°¸Ñ?Ô?Ð?rj   c                ó  — dt           j        v rQt           j                             t           j        d         | ¦  «        }t           j                             |¦  «        r|S dt           j        v rqt           j                             t           j                             t           j        d         d| › �¦  «        ¦  «        }t           j                             |¦  «        r|S d| › d�}t                               d| › �|¦  «        S )NÚHALIDE_INCLUDErj  z../include/rk  z7, set env HALIDE_INCLUDE to the directory containing it)r„   r  r…   r†   r  rb  r$  rg  )rq   r…   rZ  s      rh   rP  zHalideCodeCache.find_headerä	  sß   € ð �rœzÐ)Ð)Ý”7—<’<¥¤
Ð+;Ô <¸dÑCÔCˆDÝŒw�~Š~˜dÑ#Ô#ð Ø�Ø�2œ:Ð%Ð%Ý”7—?’?Ý”—’�RœZ¨Ô5Ð7KÀTÐ7KÐ7KÑLÔLñô ˆDõ Œw�~Š~˜dÑ#Ô#ð Ø�àW˜$ÐWÐWÐWð 	õ ×/Ò/Ð0D¸dÐ0DÐ0DÀfÑMÔMÐMrj   r‰  rß  r   úCallable[[], Any]c                óZ  ‡‡— t          t          t          |t          |                      ¦   «         |f¦  «        ¬¦  «        d¦  «        d         ¦  «        }t          j        |d¬¦  «         d Št          |dz  ¦  «        }t          |dz  ¦  «        }t          |dz  ¦  «        }t          |d	z  ¦  «        }t          |d
z  ¦  «        }	t
          j         	                    |¦  «         }
g }|
r¶t          ||¦  «         t          j        |ddd|› ddddg
}|j        r/|                     d|                      |j        ¦  «        g¦  «         |                     |                     ¦   «         ¦  «         |                     t%          j        t(          j        |¦  «        ¦  «         d„ |j        D ¦   «         }|                     ¦   «         r|                     d¦  «         |                      ||                      ||¦  «        ||                      ¦   «         f|
r|j        nd |                     ¦   «         rdnd¬¦  «        Š|
re|                     t%          j        t6          |¦  «        ¦  «         t%          j        t8          |	|¦  «        }|r ||¦  «        j        Šn
 |¦   «          dˆˆfd„}|S )Nrã  r\  é   Trz   zgenerate_kernel.pyzhalide_kernel.azhalide_kernel.hÚdoner{  ú-gr,  ú-oz-fÚhalide_kernelz-ezstatic_library,h,schedulez-pc                óD   — g | ]}|j         ­	|                     ¦   «         ‘ŒS re   )r0  rD  )rü   r·  s     rh   rå  z9HalideCodeCache.generate_halide_async.<locals>.<listcomp>
  s2   € ð 
ð 
ð 
Ø$'¸C¼LÐ<PˆC×ÒÑÔÐ<PÐ<PÐ<Prj   Ú	uintptr_tr~   rt   )rà  rß  rþ  rb   rp  c                 ó0   •— ‰r
 ‰¦   «           ‰ ¦   «         S re   rf   )Úbindings_futureÚwait_for_compiles   €€rh   r¿   z3HalideCodeCache.generate_halide_async.<locals>.load4
  s(   ø€ Øð #Ø Ð Ñ"Ô"Ð"Ø"�?Ñ$Ô$Ð$rj   )rb   rp  )r   r+  r"  r2  rY  r„   r‡   rr   r…   r  rÉ   r€   Ú
executableÚ	schedulerrJ  rm  r`   rº  rÑ   r
   rá  râ  r  rA  r  rS  Úbuild_standalone_runtimeÚtouchÚ_worker_task_haliderÐ  )rò  ri  r‰  rß  ÚdirpathÚgenfileÚlibfiler8  ÚdonefileÚlockfileÚneed_compileÚjobsræ  Úbinding_typesÚtaskr¿   rz  r{  s                   @@rh   Úgenerate_halide_asyncz%HalideCodeCache.generate_halide_asyncö	  sâ  øø€ õ ÝÝØÝ §¢Ñ 1Ô 1°4Ð8Ñ9Ô9ðñ ô ð ñô ð ôñ
ô 
ˆõ 	Œ�G dÐ+Ñ+Ô+Ð+ØÐÝ�gÐ 4Ñ4Ñ5Ô5ˆÝ�gÐ 1Ñ1Ñ2Ô2ˆÝ˜Ð#4Ñ4Ñ5Ô5ˆ
Ý�w Ñ'Ñ(Ô(ˆÝ�w Ñ'Ñ(Ô(ˆÝœ7Ÿ>š>¨(Ñ3Ô3Ð3ˆØˆØð 	GÝ˜ +Ñ.Ô.Ð.å”ØØØØØ�ØØØØ+ðˆCð Œ~ð MØ—
’
˜D #×":Ò":¸4¼>Ñ"JÔ"JÐKÑLÔLÐLØ�JŠJ�t—y’y‘{”{Ñ#Ô#Ð#Ø�KŠK�	Ô)­*Ô*?ÀÑEÔEÑFÔFÐFð
ð 
Ø+/¬=ð
ñ 
ô 
ˆð �<Š<‰>Œ>ð 	.Ø× Ò  Ñ-Ô-Ð-Ø×2Ò2ØØ×Ò˜d JÑ/Ô/Ø  #×">Ò">Ñ"@Ô"@ÐAØ%1Ð;�d”k�k°tØ"&§,¢,¡.¤.Ð;˜˜°eð 3ñ 
ô 
ˆð ð 	Ø�KŠK�	Ô)­%°Ñ:Ô:Ñ;Ô;Ð;ÝÔ$Õ%8¸(ÀDÑIÔIˆDØð Ø#, 9¨T¡?¤?Ô#9Ð Ð à�‘”�ð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð
 ˆrj   r`   ra   c                ó,   —   | j         |i |¤Ž¦   «         S re   )rŠ  r  s      rh   Úgenerate_halidezHalideCodeCache.generate_halide;
  s#   € à9Ð(ˆsÔ(¨$Ð9°&Ð9Ð9Ñ;Ô;Ð;rj   c           	     óú  — | j         r+t          j                             | j         ¦  «        r| j         S t          j                             ¦   «         rdnd}d}|dk    rdnd}| j         r5t          j                             | j         ¦  «        rJ ‚t          ¦   «         }nt          ¦   «         }t          |¦  «        d|› d|  
                    ¦   «         › �z  }t          j        |d¬	¦  «         t          |d
z  ¦  «        }t          |dz  ¦  «        }t          |dz  ¦  «        }t          |dz  ¦  «        }	t          ||z  ¦  «        }
t          j                             |¦  «        �sndd l}dd l}|                     |t           ¦  «        5  t          j                             |¦  «        �st#          |d¦  «        5 }|dk    r@|                     | j                             |                      d¦  «        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |                     |	|                     |¦  «        ¦  «         t1          |
¦  «        \  }}t3          |||	g|t5          |¬¦  «        ¬¦  «        }t7          j        t;          j        |                     ¦   «         ¦  «        ¦  «         tA          |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j                             |
¦  «        sJ ‚|
| _         |
S )Nr~   rt   zlibStandaloneHalideRuntime.soz	host-cudar3  zhalide-runtime-ú-Trz   rs  r{  z	hooks.cppzstandalone_halide_runtime.ar   rA  rB  ©rþ  r  )!r%  r„   r…   r  r|   r~   rA  rG   rF   r   rY  r‡   rr   rc  r\  r9  rd  r¾   r8  rW  rO  rP  Úcompile_standalone_runtimeÚTargetr@   r<   r>   rá  râ  rß  rà  r   r  )rò  rþ  ÚlibnamerD  Úbaser�  r„  r…  ÚhookfileÚafilerl  rc  ÚhlrT  rq   r  Úhalide_cmd_gens                    rh   r~  z(HalideCodeCache.build_standalone_runtime?
  sl  € àÔ'ð 	0­B¬G¯NªNØÔ(ñ-
ô -
ð 	0ð Ô/Ð/Ý %¤
× 7Ò 7Ñ 9Ô 9ÐD�f�f¸uˆØ1ˆØ +¨vÒ 5Ð 5��¸6ˆØÔ'ð 	Ý”w—~’~ cÔ&BÑCÔCÐCÐCÐCõ
 %Ñ&Ô&ˆDˆDå‘;”;ˆDÝ�t‘*”*ÐM°ÐMÐM¸#¿/º/Ñ:KÔ:KÐMÐMÑMˆÝ
Œ�G dÐ+Ñ+Ô+Ð+Ý�w Ñ'Ñ(Ô(ˆÝ�w Ñ'Ñ(Ô(ˆÝ�w Ñ,Ñ-Ô-ˆÝ�GÐ;Ñ;Ñ<Ô<ˆÝ�W˜wÑ&Ñ'Ô'ˆÝŒw�~Š~˜hÑ'Ô'ñ 	$ØˆOˆOˆOØÐÐÐà×"Ò" 8­\Ñ:Ô:ð $ð $Ý”w—~’~ hÑ/Ô/ñ $Ý˜h¨Ñ,Ô,ð °Ø&¨&Ò0Ð0ØŸGšGØ #Ô @× GÒ GØ$'§O¢OÐ4IÑ$JÔ$Jñ!"ô !"ñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ×1Ò1°%¸¿ºÀ6Ñ9JÔ9JÑKÔKÐKå'MÈfÑ'UÔ'UÑ$�D˜*Ý%/Ø!Ø!)¨5Ð 1Ø#-Ý$9Ø(3ð%ñ %ô %ð	&ñ &ô &�Nõ Ô)Ýœ N×$CÒ$CÑ$EÔ$EÑFÔFñô ð õ ˜(‘O”O�Oð1$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $õ2 Œw�~Š~˜fÑ%Ô%Ð%Ð%Ð%Ø'-ˆÔ$Øˆs8   Æ1KÆ9AHÈ KÈH	ÈKÈH	ÈB(KËKËK)rq   rr   r·  rW   r~   rm   rb   r¯  )ri  rX   r8  r9  rb   rr   rÛ  )r  rr   rZ  rr   rb   rr   ©rq   rr   rb   rr   re   )ri  rX   r‰  rr   rß  r   rb   rp  )r`   r   ra   r   rb   rp  )rÍ   rÎ   rÏ   r³   r]  rÐ   rÚ  rø  r%  r  r  rÆ  rN  rM  rW  rù  r7  rS  rÑ   rÒ   rY  rg  rm  rP  rŠ  rŒ  r~  rf   rj   rh   r$  r$  	  sA  € € € € € € à>@€EÐ@Ð@Ð@Ñ@Ø�,˜uœ{Ñ+Ô+€KØ.2ÐÐ2Ð2Ð2Ñ2ØˆXŒ_ð	ñô €Fð&   ¤ð	ñ"ô "ñ Ðð   / (¤/ð		ñ#ô #ñ Ðð $3 8¤?ð	ñ$ô $Ð ðB ð
ð 
ð 
ñ „[ð
ðB ðð ð ñ „[ðð> Ø€YÔ˜ÑÔð
ð 
ð 
ñ Ôñ „[ð
ð$ ð#ð #ð #ñ „\ð#ð. Ø€YÔ˜ÑÔð	@ð 	@ð 	@ñ Ôñ „\ð	@ð Ø€YÔ˜ÑÔðNð Nð Nñ Ôñ „\ðNð  àBFðBð Bð Bð Bñ „[ðBðH ð<ð <ð <ñ „[ð<ð ð7ð 7ð 7ñ „[ð7ð 7ð 7rj   r$  r…  r‡  úList[partial[Any]]c                ó¸  — ddl m} 	  || t          ¦  «        5  |D ]} |¦   «          Œ	 d d d ¦  «         d S # 1 swxY w Y   d S # t          j        $ �r…}t
          j                             d¦  «        dk    �r[t          |dd¦  «        ^}}}t
          j	         
                    |¦  «                             d¦  «        �rt          |¦  «                             ¦   «         }d}	|                     |	¦  «        d	k    sJ ‚ G d
„ d¦  «        }
 |
¦   «         ||                     d¦  «        d	z   <   t!          j        t!          j        ddg|¢›d�¦  «        d¦  «        }|                     |	|¦  «        }t          dd¦  «        5 }|                     |                     ¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   t-          d|› �¦  «        |‚‚ d }~ww xY w)Nr   r8  ÚHALIDE_REPROÚ1ræ  )rw   rw   rw   Úpythonz    hl.main()r,   c                  ó   — e Zd Zdd„ZdS )ú _worker_task_halide.<locals>.Outrb   rr   c                ó   — dS )Nre  rf   r¸   s    rh   Ú__repr__z)_worker_task_halide.<locals>.Out.__repr__Š
  s   € Ø$˜urj   NrÛ  )rÍ   rÎ   rÏ   r¡  rf   rj   rh   ÚOutrŸ  ‰
  s(   € € € € € ð%ð %ð %ð %ð %ð %rj   r¢  ru  z—                        import sys, tempfile
                        with tempfile.TemporaryDirectory() as out:
                            sys.argv = zrepro.pyz?
                            hl.main()
                        r@  rA  zwrote repro.py: )rc  r9  rd  rá  r`  r„   r  ró   r«  r…   r#  rÂ  r¾   rÔ  ÚcountÚindexr  rÆ   r  r   r8  rL  r¨   )r…  r‡  r9  Újobr
  r�  Úscriptræ  r  Úmainr¢  ÚreplÚfds                rh   r€  r€  z
  s¡  € Ø!Ð!Ð!Ð!Ð!Ð!ð ØˆX�h¥Ñ-Ô-ð 	ð 	Øð ð �Ø�‘”��ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	øõ Ô%ð ñ ð ÝŒ:�>Š>˜.Ñ)Ô)¨SÒ0Ñ0Ý#*¨1¨e°\Ñ#BÔ#BÐ ˆF�F˜SÝŒw×Ò Ñ'Ô'×2Ò2°8Ñ<Ô<ñ BÝ˜F‘|”|×(Ò(Ñ*Ô*�Ø&�Ø—z’z $Ñ'Ô'¨1Ò,Ð,Ð,Ð,ð%ð %ð %ð %ð %ñ %ô %ð %ð ,/¨3©5¬5��C—I’I˜d‘O”O aÑ'Ñ(Ý”Ý”Oðð *4Ð(:°cÐ(:ðð ð ñô ð ñ
ô 
�ð —|’| D¨$Ñ/Ô/�Ý˜* cÑ*Ô*ð ,¨bØ—H’H˜TŸ[š[™]œ]Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,å"Ð#9°aÐ#9Ð#9Ñ:Ô:ÀÐAØøøøøð9øøøsW   ˆA ™7ªA ·;»A ¾;¿A ÁGÁD-GÆ(F5Æ)GÆ5F9	Æ9GÆ<F9	Æ=GÇGrz  c                óJ   — t          | d¦  «                             ¦   «          d S )Nr_  )r¾   Úcloser˜  s    rh   r  r   
  s$   € Ýˆ�3ÑÔ×ÒÑÔÐÐÐrj   c                  óâ   — e Zd ZU g Zded<   i Zded<   edd d„¦   «         Ze	 	 	 d!d"d„¦   «         Ze	 	 d#d$d„¦   «         Z	ed%d&d„¦   «         Z
e ej        d¦  «        d'd„¦   «         ¦   «         ZdS )(ÚPyCodeCachezList[ModuleType]r  z Dict[str, List[Tuple[Any, ...]]]Úlinemapsrw   r‰  rr   r  rb   r4  c                ó&   — t          |d|¬¦  «        S ©Nrx   rã  r<  )rò  r‰  r  s      rh   r8  zPyCodeCache.write­
  s   € å�[ $¨eÐ4Ñ4Ô4Ð4rj   NÚlinemapúOptional[List[Tuple[int, str]]]ÚattrsrÖ   r   c                ó\   — t          |d|¬¦  «        \  }}|                      ||||¦  «        S r°  )r8  Úload_by_key_path)rò  r‰  r  r±  r³  rÙ   r…   s          rh   r¿   zPyCodeCache.load±
  s6   € õ ˜+ t°5Ð9Ñ9Ô9‰	ˆˆTØ×#Ò# C¨¨w¸Ñ>Ô>Ð>rj   rÙ   r…   c                ó@  — |€g }t          ||¦  «        }t          t          |Ž ¦  «        | j        |<   |�+|                     ¦   «         D ]\  }}t          |||¦  «         Œ|s"|s t          j        t          ||¦  «        |_	        | j
                             |¦  «         |S re   )rD   r·  r¦  r®  r  ÚsetattrrÑ   r
   rE   Ú_reload_in_subprocr  rº  )rò  rÙ   r…   r±  r³  ÚmodrÀ  rÁ  s           rh   rµ  zPyCodeCache.load_by_key_path¼
  sµ   € ð ˆ?ØˆGå# C¨Ñ.Ô.ˆõ "¥# w -Ñ0Ô0ˆŒ�TÑàÐØŸš™œð #ð #‘��1Ý˜˜Q Ñ"Ô"Ð"Ð"àð 	˜5ð 	Ý%.Ô%6Ý0°#°tñ&ô &ˆCÔ"ð 	Œ×Ò˜3ÑÔÐØˆ
rj   FÚpurgerm   rc   c                ó¶   — |r=| j         D ]5}	 |j        sJ ‚t          j        |j        ¦  «         Œ&# t          $ r Y Œ2w xY w| j                              ¦   «          dS )z‚
        Clear the in-memory module cache. If purge=True, also delete all the
        corresponding on-disk source files.
        N)r  rç  r„   rQ  rÙ  rÚ  )rò  rº  r¹  s      rh   rø  zPyCodeCache.cache_clearØ
  s~   € ð ð 	Ø”{ð ð �ðØœ<Ð'Ð'˜<Ý”I˜cœlÑ+Ô+Ð+Ð+øÝ(ð ð ð Ø�DðøøøàŒ×ÒÑÔÐÐÐs   �"0°
=¼=Úlinenor<  úOptional[List[Dict[str, Any]]]c                ó¤   — || j         vrd S | j         |         \  }}t          ||¦  «        }|dk    rd S ||dz
           }|sd S dd„} ||¦  «        S )	Nr   r,   Ústack_tracerr   rb   úList[Dict[str, Any]]c                ób   — d}t          j        || ¦  «        }d„ t          |¦  «        D ¦   «         S )Nz"File "(.+)", line (\d+), in (.+)\nc                ó<   — g | ]\  }}}|t          |¦  «        |d œ‘ŒS ))rz  rA  rq   )r<  )rü   rT  Úlr  s       rh   rå  zPPyCodeCache.stack_frames_for_code.<locals>.parse_stack_trace.<locals>.<listcomp>ü
  s>   € ð ð ð á�A�q˜!ð ­¨A©¬¸Ð:Ð:ðð ð rj   )r›  ÚfindallÚreversed)r¿  ÚregexÚmatchess      rh   Úparse_stack_tracez<PyCodeCache.stack_frames_for_code.<locals>.parse_stack_trace÷
  sC   € ð :ˆEÝ”j ¨Ñ4Ô4ˆGðð å'¨Ñ0Ô0ðñ ô ð rj   )r¿  rr   rb   rÀ  )r®  r   )rò  r…   r¼  r¼  r±  r·  r]  rÈ  s           rh   Ústack_frames_for_codez!PyCodeCache.stack_frames_for_codeç
  s„   € ð
 �s”|Ð#Ð#Ø�4à”| DÔ)‰ˆˆuÝ˜ Ñ'Ô'ˆØ�Š6ˆ6Ø�4Ø�a˜!‘e”ˆØð 	Ø�4ð	ð 	ð 	ð 	ð !Ð  Ñ'Ô'Ð'rj   ©rw   )r‰  rr   r  rr   rb   r4  )rw   NN)
r‰  rr   r  rr   r±  r²  r³  rÖ   rb   r   )NN)
rÙ   rr   r…   rr   r±  r²  r³  rÖ   rb   r   )F)rº  rm   rb   rc   )r…   rr   r¼  r<  rb   r½  )rÍ   rÎ   rÏ   r  r]  r®  rù  r8  r¿   rµ  rø  rÑ   rÒ   rÉ  rf   rj   rh   r­  r­  ¤
  s  € € € € € € ð !#€GÐ"Ð"Ð"Ñ"Ø13€HÐ3Ð3Ð3Ñ3àð5ð 5ð 5ð 5ñ „[ð5ð ð Ø37Ø*.ð?ð ?ð ?ð ?ñ „[ð?ð ð
 48Ø*.ðð ð ð ñ „[ðð6 ðð ð ð ñ „[ðð Ø€YÔ˜ÑÔð(ð (ð (ñ Ôñ „[ð(ð (ð (rj   r­  c                  ó&   — e Zd Zedd„¦   «         ZdS )	ÚTritonCodeCacheÚkernel_namerr   r‰  rb   r   c                óR   — t          t                               |¦  «        |¦  «        S re   )rC   r­  r¿   )rò  rÍ  r‰  s      rh   r¿   zTritonCodeCache.load  s    € å'­×(8Ò(8¸Ñ(EÔ(EÀ{ÑSÔSÐSrj   N)rÍ  rr   r‰  rr   rb   r   )rÍ   rÎ   rÏ   rù  r¿   rf   rj   rh   rÌ  rÌ    s8   € € € € € ØðTð Tð Tñ „[ðTð Tð Trj   rÌ  rý  c                 óL  — t          j        t          j        j        ¦  «        rt          j        j        S t          j        ¦   «         r+t          j                             t          j
        dd¦  «        S t          j        t          j        d¦  «        ¦  «        rt          j        dd¦  «        S t          j        t          j        d¦  «        ¦  «        rPt          j                             t          j                             t          j        dd¦  «        d¦  «        ¦  «        S dS )NÚbinÚnvccÚCUDACXXrw   Ú	CUDA_HOMEzbin/nvcc)r%   Ú
nvcc_existr"   r~   Úcuda_cxxrî  r„   r…   r†   rZ   Úsdk_homeÚgetenvÚrealpathrf   rj   rh   Ú_cuda_compilerrÙ  
  sÖ   € ÝÔ�6œ;Ô/Ñ0Ô0ð $ÝŒ{Ô#Ð#ÝÔÑÔð AÝŒw�|Š|�KÔ0°%¸Ñ@Ô@Ð@ÝÔ�2œ9 YÑ/Ô/Ñ0Ô0ð (ÝŒy˜ BÑ'Ô'Ð'ÝÔ�2œ9 [Ñ1Ô1Ñ2Ô2ð VÝŒw×Ò¥¤§¢­R¬Y°{ÀBÑ-GÔ-GÈÑ TÔ TÑUÔUÐUØˆ6rj   c            	     óf  — t          j        ¦   «         rddlm}  |                      d¦  «        }nt           j        j        }t          j         	                    t          j         
                    |d¦  «        ¦  «        t          j         	                    t          j         
                    |d¦  «        ¦  «        t          j         	                    t          j         
                    |d¦  «        ¦  «        t          j         	                    t          j         
                    |d¦  «        ¦  «        gS )Nr   rë  zcutlass-3-headersr   ztools/library/includeztools/library/srcztools/util/include)r"   rî  rð  rì  Úget_dir_pathr~   Úcutlass_dirr„   r…   rØ  r†   )rì  Úcutlass_paths     rh   Ú_cutlass_include_pathsrÞ    sà   € ÝÔÑÔð /Ø$Ð$Ð$Ð$Ð$Ð$à×+Ò+Ð,?Ñ@Ô@ˆˆå”{Ô.ˆõ 	Œ×Ò�œŸš l°IÑ>Ô>Ñ?Ô?Ý
Œ×Ò�œŸš lÐ4KÑLÔLÑMÔMÝ
Œ×Ò�œŸš lÐ4GÑHÔHÑIÔIÝ
Œ×Ò�œŸš lÐ4HÑIÔIÑJÔJðð rj   c                 ó~  — t          ¦   «          ddlm}  |                      d¬¦  «        t	          j        d¦  «        gz   }g }t          ¦   «         r]t          |¦  «         |D ] }|                     d|› �dd|› �g¦  «         Œ!| 	                    d	¦  «         | 	                    d
¦  «         nt          d¦  «        ‚|S )Nr   )Úcpp_extensionr~   r�  ÚLIBDIRz-Lz-Xlinkerz-rpath=z-lcudaz-lcudartzMUnsupported env, failed to find cuda libs! Currently only Linux is supported.)r:   Útorch.utilsrà  Úlibrary_pathsÚ	sysconfigÚget_config_varrJ   r;   rJ  rº  ÚNotImplementedError)rà  ÚlpathsÚextra_ldflagsr…   s       rh   Ú_cuda_lib_optionsré  &  sø   € ÝÑÔÐØ)Ð)Ð)Ð)Ð)Ð)à×(Ò(°VÐ(Ñ<Ô<ÝÔ  Ñ*Ô*ð@ñ €Fð  "€MÝ�z„zð 
Ý˜fÑ%Ô%Ð%Øð 	Nð 	NˆDð × Ò  + t + +¨zÐ;KÀTÐ;KÐ;KÐ!LÑMÔMÐMÐMØ×Ò˜XÑ&Ô&Ð&Ø×Ò˜ZÑ(Ô(Ð(Ð(å!Ø[ñ
ô 
ð 	
ð Ðrj   c                 ó
   — g d¢S )N)z-fPICz-fno-strict-aliasingz-fvisibility=hiddenz-Wconversionrf   rf   rj   rh   Ú_nvcc_host_compiler_optionsrë  =  s   € ðð ð ð rj   c                 ó€  — t          j        ¦   «         } | dk    rd} d| › �d| › �g}t          j        j        r	|d| › �gz  }dddd	d
d| › dd                     |¦  «        › d�t          j        j        dddg
}t          j        ¦   «         r>|                     dt          j
                             t          j        ¦  «        g¦  «         t          j        j        r|                     g d¢¦  «         t          j        j        r|                     g d¢¦  «         t          j        j        r|                     ddg¦  «         |S )NÚ90Ú90aÚsm_Úcompute_Últo_z-t=0z"-DCUTLASS_ENABLE_TENSOR_CORE_MMA=1z+-DCUTLASS_ENABLE_SM90_EXTENDED_MMA_SHAPES=1z'-DCUTE_SM90_EXTENDED_MMA_SHAPES_ENABLEDz-wz-gencode=arch=compute_z,code=[ú,ú]z
-std=c++17z--expt-relaxed-constexprz-DNDEBUGz-ccbin)z	-lineinfort  z-DCUTLASS_DEBUG_TRACE_LEVEL=1)z--keepz,--ptxas-options=--warn-on-local-memory-usagez --ptxas-options=--warn-on-spillsz--resource-usagez--source-in-ptxz--use_fast_mathz -DCUTLASS_USE_TANH_FOR_SIGMOID=1)r%   Úget_cuda_archr"   r~   Úenable_cuda_ltor†   Úcompile_opt_levelrî  rJ  r„   r…   ræ  rZ   ÚgccÚenable_debug_infoÚenable_ptxas_infoÚuse_fast_math)Úarchr  Úoptionss      rh   Ú_nvcc_compiler_optionsrý  F  sh  € ÝÔ!Ñ#Ô#€DØˆt‚|€|àˆØ�$ˆLˆLÐ+ TÐ+Ð+Ð,€DÝ„{Ô"ð  Ø�˜���ÑˆàØ,Ø5Ø1ØØ? Ð?Ð?¨c¯hªh°t©n¬nÐ?Ð?Ð?ÝŒÔ%ØØ"Øð€Gõ ÔÑÔð EØ�Š˜¥"¤'§/¢/µ+´/Ñ"BÔ"BÐCÑDÔDÐDÝ„{Ô$ð MØ�ŠÐKÐKÐKÑLÔLÐLÝ„{Ô$ð 	
Ø�Šðð ð ñ	
ô 	
ð 	
õ „{Ô ð 
Ø�Šà!Ø2ðñ	
ô 	
ð 	
ð €Nrj   Ú	src_filesÚdst_fileÚdst_file_extÚ
extra_argsúOptional[List[str]]c                ó¨  — |€g }t          ¦   «         }t          ¦   «         }t          ¦   «         }t          ¦   «         }||z   d„ |D ¦   «         z   d„ |D ¦   «         z   |z   }d                     | ¦  «        }	d}
|dk    r-t          ¦   «         › dd                     |¦  «        › d|› d|	› �}
nŽ|dk    rB|                     d¦  «         t          ¦   «         › dd                     |¦  «        › d	|› d|	› �}
nF|d
k    r-t          ¦   «         › dd                     |¦  «        › d	|› d|	› �}
nt          d|› d�¦  «        ‚t           	                    d|
¦  «         |
S )Nc                ó*   — g | ]}d |v rd|› �nd|› �‘ŒS )ú=z-Xcompiler z-Xcompiler=rf   )rü   Úopts     rh   rå  z(cuda_compile_command.<locals>.<listcomp>�  sG   € ð 
ð 
ð 
àð $'¨# : :Ð˜#ÐÐÐÐ3FÀÐ3FÐ3Fð
ð 
ð 
rj   c                ó   — g | ]}d |z   ‘ŒS )z-Irf   )rü   r…   s     rh   rå  z(cuda_compile_command.<locals>.<listcomp>…  s   € Ð
1Ð
1Ð
1˜4ˆ4�$‰;Ð
1Ð
1Ð
1rj   r^  rw   r  z -c -o rå  z-sharedz -o ÚexezUnsupported output file suffix ú!zCUDA command: %s)
rÞ  ré  rë  rý  r†   rÙ  rº  ræ  r©  r6  )rþ  rÿ  r   r  Úinclude_pathsÚcuda_lib_optionsÚnvcc_host_compiler_optionsÚnvcc_compiler_optionsrü  Úsrc_fileÚress              rh   Úcuda_compile_commandr  r  sµ  € ð ÐØˆ
Ý*Ñ,Ô,€MÝ(Ñ*Ô*ÐÝ!<Ñ!>Ô!>ÐÝ2Ñ4Ô4ÐàØ
ñ	ð
ð 
à1ð
ñ 
ô 
ñ	
ð 2Ð
1 =Ð
1Ñ
1Ô
1ñ	2ð ñ	ð ð �xŠx˜	Ñ"Ô"€HØ
€CØ�sÒÐÝÑ!Ô!ÐSÐS C§H¢H¨WÑ$5Ô$5ÐSÐS¸hÐSÐSÈÐSÐSˆˆØ	˜Ò	Ð	Ø�Š�yÑ!Ô!Ð!ÝÑ!Ô!ÐPÐP C§H¢H¨WÑ$5Ô$5ÐPÐP¸8ÐPÐPÀhÐPÐPˆˆØ	˜Ò	Ð	ÝÑ!Ô!ÐPÐP C§H¢H¨WÑ$5Ô$5ÐPÐP¸8ÐPÐPÀhÐPÐPˆˆå!Ð"SÀLÐ"SÐ"SÐ"SÑTÔTÐTÝ‡I‚IÐ  #Ñ&Ô&Ð&Ø€Jrj   c                  óJ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dS )Ú
DLLWrapperz A wrapper for a dynamic library.Úlib_pathrr   rb   rc   c                ób   — || _         d| _        t          j        |¦  «        | _        d| _        d S )NFT)r  Úis_openr   rØ  ÚDLL)r¹   r  s     rh   rº   zDLLWrapper.__init__š  s/   € ð !ˆŒØˆŒÝÔ# HÑ-Ô-ˆŒØˆŒˆˆrj   c                óN   — | j         r|                      ¦   «          d| _         d S d S ro   )r  Ú_dlcloser¸   s    rh   r«  zDLLWrapper.close£  s.   € ØŒ<ð 	!Ø�MŠM‰OŒOˆOØ ˆDŒLˆLˆLð	!ð 	!rj   c                óJ  — d }t          ¦   «         rFt          d ¦  «        }t          |d¦  «        st          d¦  «        }t          |d¦  «        r|j        }n@t	          ¦   «         r#dd l}|                     dd¬¦  «        }|j        }nt          d¦  «        ‚|�pt          ¦   «         r$t          g|_	         || j
        j        ¦  «         d S t	          ¦   «         r.dd l}ddlm} |j        g|_	         || j
        j        ¦  «         d S d S t                               d	¦  «         d S )
NÚdlclosezlibc.sor   Úkernel32T)Úuse_last_errorz&Unsupported env, failed to do dlclose!)ÚwintypeszKdll unloading function was not found, library may not be unloaded properly!)rJ   r   rg  r  rK   rK  ÚFreeLibraryræ  r   r  r  Ú_handler  ÚHMODULEr©  rª  )r¹   Ú	f_dlcloseÚsymsrK  r  r  s         rh   r  zDLLWrapper._dlclose¨  sP  € Øˆ	å‰:Œ:ð 	PÝ˜‘:”:ˆDÝ˜4 Ñ+Ô+ð 'å˜I‘”�å�t˜YÑ'Ô'ð )Ø œL�	øÝ‰\Œ\ð 	PØˆMˆMˆMà—{’{ :¸d�{ÑCÔCˆHà Ô,ˆIˆIå%Ð&NÑOÔOÐOàÐ Ý‰zŒzð ,Ý&. Z�	Ô"Ø�	˜$œ(Ô*Ñ+Ô+Ð+Ð+Ð+Ý‘”ð ,Ø���Ø+Ð+Ð+Ð+Ð+Ð+à&.Ô&6Ð%7�	Ô"Ø�	˜$œ(Ô*Ñ+Ô+Ð+Ð+Ð+ð,ð ,õ �KŠKØ]ñô ð ð ð rj   rq   úCallable[..., None]c                óz   ‡— | j         st          d| j        › �¦  «        ‚t          | j        |¦  «        Šdˆfd„}|S )NzCannot use closed DLL library: r`   r   rb   rc   c                 óD   •—  ‰| Ž }|rt          d‰j        › �¦  «        ‚d S )NzError in function: )r¨   rÍ   )r`   ÚerrÚmethods     €rh   Ú_wrapped_funcz-DLLWrapper.__getattr__.<locals>._wrapped_funcÑ  s<   ø€ Ø�&˜$�-ˆCØð LÝ"Ð#J¸¼Ð#JÐ#JÑKÔKÐKðLð Lrj   ©r`   r   rb   rc   )r  r¨   r  r«  r  )r¹   rq   r(  r'  s      @rh   Ú__getattr__zDLLWrapper.__getattr__Ë  sd   ø€ ØŒ|ð 	RÝÐPÀÄÐPÐPÑQÔQÐQå˜œ 4Ñ(Ô(ˆð	Lð 	Lð 	Lð 	Lð 	Lð 	Lð
 Ðrj   c                ó   — | S re   rf   r¸   s    rh   Ú	__enter__zDLLWrapper.__enter__Ø  s   € Øˆrj   r`   r   c                ó.   — |                       ¦   «          d S re   ©r«  )r¹   r`   s     rh   Ú__exit__zDLLWrapper.__exit__Û  ó   € Ø�
Š
‰Œˆˆˆrj   c                ó.   — |                       ¦   «          d S re   r.  r¸   s    rh   Ú__del__zDLLWrapper.__del__Þ  r0  rj   N)r  rr   rb   rc   rÌ   )rq   rr   rb   r#  )rb   r  r)  )rÍ   rÎ   rÏ   r\  rº   r«  r  r*  r,  r/  r2  rf   rj   rh   r  r  —  s§   € € € € € Ø*Ð*ðð ð ð ð!ð !ð !ð !ð
!ð !ð !ð !ðFð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð rj   r  c                  óÂ   — e Zd ZU ej         G d„ d¦  «        ¦   «         Zi Zded<    eej	        ¦  «        Z
dZedd„¦   «         Ze	 ddd„¦   «         Zedd„¦   «         ZdS )rq  c                  ó$   — e Zd ZU ded<   ded<   dS )úCUDACodeCache.CacheEntryrr   r  rñ  N©rÍ   rÎ   rÏ   r]  rf   rj   rh   Ú
CacheEntryr5  ä  ó'   € € € € € € àˆˆ‰ØÐÐÑÐÐrj   r7  úDict[str, CacheEntry]r³   ru   r‰  rr   r   rb   r4  c                ó|   — t          t          dgd|¦  «        ¦  «        }t          || j        |¬¦  «        \  }}||fS ©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_outputrã  )r2  r  r8  Ú_SOURCE_CODE_SUFFIX©rò  r‰  r   Úcuda_commandrÙ   r  s         rh   r8  zCUDACodeCache.writeí  óT   € õ Ý  - °.À,ÑOÔOñ
ô 
ˆõ  Ø˜Ô0¸ð
ñ 
ô 
‰ˆˆZð �JˆÐrj   Nr  r  r&  c                óö  — |                       ||¦  «        \  }}|| j        v�rÂddlm} t	          ¦   «         } |t
          j                             ||dz   ¦  «        t          ¬¦  «        }|5  |dt          | j
        ¦  «         …         |z   }	t
          j                             |	¦  «        sät          |g|	||¦  «        }
t          ¦   «         }t                               d|
¦  «         |
                     d¦  «        }	 t#          j        |t"          j        t
          j        ¬¦  «         n2# t"          j        $ r }t-          j        ||j        ¦  «        |‚d}~ww xY wt          ¦   «         }d	||z
  › d
|
› �}t                               |¦  «         nt                               d|¦  «         t4                               ||	¦  «        | j        |<   ddd¦  «         n# 1 swxY w Y   | j        |         j        ||fS )z™
        Compiles CUDA source_code into a file with dst_file_ext extension.
        Returns a tuple of dst_file_path, hash_key, source_code_path
        r   r8  r:  r;  NzCUDA Compilation: %sr^  )r¡  ÚenvzCUDA Compilation took ú seconds. Compile command: z8CUDA Compilation skipped: %s since output already exists)r8  r³   rc  r9  r  r„   r…   r†   rd  r¹  r>  r  r  r   r©  r6  rà  rá  r¨  r©  r  rã  r#   ÚCUDACompileErrorrå  rE  rq  r7  rñ  )rò  r‰  r   r  rÙ   r  r9  r  r{  rñ  ræ  Ú
start_timeÚ	cmd_partsÚerrorÚend_timeÚlog_duration_msgs                   rh   r“  zCUDACodeCache.compileü  sV  € ð Ÿ)š) K°Ñ>Ô>‰ˆˆZØ�c”iÐÑØ)Ð)Ð)Ð)Ð)Ð)å#‘~”~ˆHØ�8�BœGŸLšL¨°3¸±=ÑAÔAÍ<ÐXÑXÔXˆDØð Sð SØ(Ð)H­C°Ô0GÑ,HÔ,HÐ+HÐ)HÔIÈLÑX�Ý”w—~’~ kÑ2Ô2ð Ý.Ø#˜ k°<Àñô �Cõ "&¡¤�JÝ—I’IÐ4°cÑ:Ô:Ð:Ø #§	¢	¨#¡¤�IðWÝ"Ô/Ø%­jÔ.?ÅRÄZðñ ô ð ð øõ &Ô8ð Wð Wð WÝ!Ô2°9¸e¼lÑKÔKÐQVÐVøøøøðWøøøå#™vœv�HØ'wÀÈ:Ñ@UÐ'wÐ'wÐruÐ'wÐ'wÐ$Ý—H’HÐ-Ñ.Ô.Ð.Ð.å—I’IØRØ"ñô ð õ "/×!9Ò!9¸*ÀkÑ!RÔ!R�”	˜#‘ð/Sð Sð Sñ Sô Sð Sð Sð Sð Sð Sð Søøøð Sð Sð Sð Sð2 ”	˜#”Ô*¨C°Ð<Ð<s8   Á-BGÃ?+D+Ä*GÄ+EÄ:EÅEÅA5GÇGÇ"GúTuple[DLLWrapper, str, str]c                ó�   — |dk    rt          d|› d|› �¦  «        ‚|                      ||¦  «        \  }}}t          |¦  «        ||fS ©zŠ
        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“  r  ©rò  r‰  r   Údst_file_pathrò   Úsource_code_paths         rh   r¿   zCUDACodeCache.load%  ó   € ð ˜4ÒÐÝðXØ-9ðXð XØJUðXð Xñô ð ð 58·K²KØ˜ñ5
ô 5
Ñ1ˆ�xÐ!1õ ˜=Ñ)Ô)¨8Ð5EÐFÐFrj   ©r‰  rr   r   rr   rb   r4  re   ©r‰  rr   r   rr   r  r  rb   r&  ©r‰  rr   r   rr   rb   rK  )rÍ   rÎ   rÏ   rh  Ú	dataclassr7  r³   r]  rÐ   rÚ  rø  r>  rù  r8  r“  r¿   rf   rj   rh   rq  rq  â  sã   € € € € € € àÔðð ð ð ð ñ ô ñ Ôðð $&€EÐ%Ð%Ð%Ñ%Ø�,˜uœ{Ñ+Ô+€KØÐàðð ð ñ „[ðð àTXð&=ð &=ð &=ð &=ñ „[ð&=ðP ðGð Gð Gñ „[ðGð Gð Grj   rq  c                  óÆ   — e Zd ZU ej         G d„ d¦  «        ¦   «         Zi Zded<    eej	        ¦  «        Z
dZdZedd„¦   «         Ze	 ddd„¦   «         Zedd„¦   «         ZdS )rp  c                  ó$   — e Zd ZU ded<   ded<   dS )úROCmCodeCache.CacheEntryrr   r  rñ  Nr6  rf   rj   rh   r7  rY  9  r8  rj   r7  r9  r³   r	  Fr‰  rr   r   rb   r4  c                ó|   — t          t          dgd|¦  «        ¦  «        }t          || j        |¬¦  «        \  }}||fS r;  )r2  r&   r8  r>  r?  s         rh   r8  zROCmCodeCache.writeC  rA  rj   Nr  r  r&  c                ó–  — | j         sGd| _         t                               t          t	          t          ¦   «         ¦  «        ¦  «        ¦  «         |                      ||¦  «        \  }}|| j        v�rÄddlm	} t          ¦   «         } |t          j                             ||dz   ¦  «        t          ¬¦  «        }|5  |dt          | j        ¦  «         …         |z   }	t          j                             |	¦  «        såt%          |g|	||¦  «        }
t'          ¦   «         }|
                     d¦  «        }	 t+          j        |t*          j        dt          j        ¬¦  «        }t                               d	|¦  «         n2# t*          j        $ r }t5          j        ||j        ¦  «        |‚d}~ww xY wt'          ¦   «         }d
||z
  › d|
› �}t                               |¦  «         nt                               d||	¦  «         t<                               ||	¦  «        | j        |<   ddd¦  «         n# 1 swxY w Y   | j        |         j         ||fS )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   r8  r:  r;  Nr^  )r¡  r9  rC  zCompilation output: %szCompilation took rD  z+Skip compiling %s: output %s already exists)!Ú_logged_compiler_versionr©  r6  r?   rr   r'   r8  r³   rc  r9  r  r„   r…   r†   rd  r¹  r>  r  r&   r   rà  rá  r¨  r©  r  rã  r#   rE  rå  rE  rp  r7  rñ  )rò  r‰  r   r  rÙ   r  r9  r  r{  rñ  ræ  rF  rG  rå  rH  rI  rJ  s                    rh   r“  zROCmCodeCache.compileR  s”  € ð Ô+ð 	GØ+/ˆCÔ(Ý�IŠIÕ/µµM±O´OÑ0DÔ0DÑEÔEÑFÔFÐFàŸ)š) K°Ñ>Ô>‰ˆˆZØ�c”iÐÑØ)Ð)Ð)Ð)Ð)Ð)å#‘~”~ˆHØ�8�BœGŸLšL¨°3¸±=ÑAÔAÍ<ÐXÑXÔXˆDØð Sð SØ(Ð)H­C°Ô0GÑ,HÔ,HÐ+HÐ)HÔIÈLÑX�Ý”w—~’~ kÑ2Ô2ð Ý.Ø#˜ k°<Àñô �Cõ "&¡¤�JØ #§	¢	¨#¡¤�Ið	WÝ!+Ô!8Ø%Ý#-Ô#4Ø!%Ý "¤
ð	"ñ "ô "˜õ Ÿ	š	Ð":¸FÑCÔCÐCÐCøÝ%Ô8ð Wð Wð WÝ!Ô2°9¸e¼lÑKÔKÐQVÐVøøøøðWøøøå#™vœv�HØ'r¸8ÀjÑ;PÐ'rÐ'rÐmpÐ'rÐ'rÐ$Ý—H’HÐ-Ñ.Ô.Ð.Ð.å—I’IØEØ"Ø#ñô ð õ
 "/×!9Ò!9¸*ÀkÑ!RÔ!R�”	˜#‘ð7Sð Sð Sñ Sô Sð Sð Sð Sð Sð Sð Søøøð Sð Sð Sð Sð: ”	˜#”Ô*¨C°Ð<Ð<s9   Â;A6H+Ä2AE:Å9H+Å:F)Æ	F$Æ$F)Æ)A6H+È+H/È2H/rK  c                ó�   — |dk    rt          d|› d|› �¦  «        ‚|                      ||¦  «        \  }}}t          |¦  «        ||fS rM  rN  rO  s         rh   r¿   zROCmCodeCache.load„  rR  rj   rS  re   rT  rU  )rÍ   rÎ   rÏ   rh  rV  r7  r³   r]  rÐ   rÚ  rø  r>  r\  rù  r8  r“  r¿   rf   rj   rh   rp  rp  7  sé   € € € € € € àÔðð ð ð ð ñ ô ñ Ôðð $&€EÐ%Ð%Ð%Ñ%Ø�,˜uœ{Ñ+Ô+€KØÐØ$Ðàðð ð ñ „[ðð àTXð/=ð /=ð /=ð /=ñ „[ð/=ðb ðGð Gð Gñ „[ðGð Gð Grj   rp  c                  ó   — e Zd Zdd„ZdS )ÚCodeCacheFuturerb   rc   c                ó   — t           ‚re   )ræ  r¸   s    rh   rÐ  zCodeCacheFuture.result—  s   € Ý!Ð!rj   NrÌ   )rÍ   rÎ   rÏ   rÐ  rf   rj   rh   r_  r_  –  s(   € € € € € ð"ð "ð "ð "ð "ð "rj   r_  c                  ó*   — e Zd ZU ded<   dd„Zdd	„Zd
S )ÚTritonFuturer   r,  r   rè  úOptional[Future[Any]]rb   rc   c                ó"   — || _         || _        d S re   )r,  rè  )r¹   r,  rè  s      rh   rº   zTritonFuture.__init__ž  s   € ð
 ˆŒØˆŒˆˆrj   c                ó˜   — | j         �=| j                              ¦   «         }|�J ‚d | _         | j                             ¦   «          | j        S re   )rè  rÐ  r,  Ú
precompile)r¹   rÐ  s     rh   rÐ  zTritonFuture.result¦  sI   € ØŒ;Ð"à”[×'Ò'Ñ)Ô)ˆFØ�>�>�>ØˆDŒKØŒK×"Ò"Ñ$Ô$Ð$ØŒ{Ðrj   N)r,  r   rè  rc  rb   rc   )rb   r   )rÍ   rÎ   rÏ   r]  rº   rÐ  rf   rj   rh   rb  rb  ›  sJ   € € € € € € ØÐÐÑðð ð ð ðð ð ð ð ð rj   rb  c                  ó   — e Zd Zdd„Zd	d„ZdS )
ÚLambdaFutureÚ	result_fnúCallable[..., Any]rb   rc   c                ó   — || _         d S re   ©ri  )r¹   ri  s     rh   rº   zLambdaFuture.__init__±  s   € Ø"ˆŒˆˆrj   c                ó*   — |                       ¦   «         S re   rl  r¸   s    rh   rÐ  zLambdaFuture.result´  s   € Ø�~Š~ÑÔÐrj   N)ri  rj  rb   rc   )rb   rj  )rÍ   rÎ   rÏ   rº   rÐ  rf   rj   rh   rh  rh  °  s<   € € € € € ð#ð #ð #ð #ð ð  ð  ð  ð  ð  rj   rh  )r`   r   ra   r   rb   rc   )rb   rm   r˜  rÛ  )r“   rr   rb   r”   )r  r  rb   rr   rÊ  )r  r  r  rr   rb   rr   )r#  rr   r$  rr   r%  rr   rb   r&  )rw   r  )r,  r  r  rr   r-  rr   rb   rr   )rw   r  rw   )r,  r  r$  rr   r  rr   r-  rr   r%  rr   rb   r4  )r9  rr   rb   rr   )FF)
r>  rr   r,  r  rÈ   rm   r7  rm   rb   rc   )r^  r1   rb   r1   )rb  r   rb   rO   )rÄ  rÅ  rÆ  rr   rÇ  rÈ  rb   rc   )rb   r  )
rm  rn  rû  rü  rý  r3   rþ  rÿ  rb   r3  )r;  r<  rb   r<  )rÜ  rr   rb   rc   )r…   rr   rb   r4  )r  rš  rñ  rr   ræ  r¯  rb   rc   )ré   rr   r`   r   rb   rµ  )
rð  rr   ró  r<   rö  rr   rñ  rr   rb   rc   )r…  rr   r‡  r™  rb   rc   )rz  rr   )rb   rý  )rb   r¯  re   )
rþ  r¯  rÿ  rr   r   rr   r  r  rb   rr   )îÚ
__future__r   r  rv  rh  rÑ   r©   rÄ  rr  r  r«   Úloggingr„   rk  rÏ  r›  rß  rO  rn  rá  r€   rä  r£  r  rJ  rŽ  Úbisectr   r   rK  r   r   r   Údatetimer	   r
   Úpathlibr   r   r   Útypesr   Útypingr   r   r   r   r   r   r   r   r   r   r   r   r   r|   Útorch.distributedr@  rF  r   r   Útorch._dynamo.utilsr   r   r    r!   Útorch._inductorr"   r#   r$   Útorch._inductor.codegen.cudar%   Ú,torch._inductor.codegen.rocm.compile_commandr&   r'   Ú!torch._inductor.custom_graph_passr(   r)   Útorch._inductor.output_coder*   Útorch._utils_internalr+   Útorch.compilerr	  rb  r-   Úruntimer.   Úruntime.autotune_cacher/   Útriton_bundlerr0   r1   Úcollections.abcr2   r   r3   r4   rp   r5   r6   r7   r8   r  r9   Útorch._inductor.cpp_builderr:   r;   r<   r=   r>   r?   r@   rA   Útorch._inductor.cpu_vec_isarB   Ú%torch._inductor.runtime.compile_tasksrC   rD   rE   Ú%torch._inductor.runtime.runtime_utilsrF   rG   Útorch._inductor.utilsrH   rI   rJ   rK   Útorch._loggingrL   Útorch._subclasses.fake_tensorrM   rN   rO   Ú%torch.fx.experimental.symbolic_shapesrP   rQ   rR   Úconcurrent.futuresrS   Útorch._inductor.graphrU   Útorch._inductor.irrV   Útorch._inductor.runtime.hintsrW   rX   r…   rb  rç  Ú_HEREræ  rï  r†   r¥  r  rN  rî  Ú	triton.fbrZ   Útriton.fb.buildr[   Útorch._inductor.fb.utilsr\   r]   r^   r_   Ú_loggingÚgetArtifactLoggerrÍ   r�  rd  Ú	getLoggerr©  r�   r’   rÒ   r™   r—   rÔ   rá   r  r  r"  r+  r3  r8  r=  rÉ   rV  rW  ra  rj  ÚPicklerrl  rÖ  ró  rõ  r÷  rl  r‹  r®  r:  rK  rM  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  rq  rp  r_  rb  rh  rf   rj   rh   ú<module>r–     sš  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,à &Ð &Ð &Ð &Ð &Ð &Ø #Ð #Ð #Ð #Ð #Ð #Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø )Ð )Ð )Ð )Ð )Ð )ð €GˆC�L„L€ð ð !Ø(Ð(Ð(Ð(Ð(Ð(à=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ØAÐAÐAÐAÐAÐAÐAÐAØ5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø Ð Ð Ð Ð Ð ðð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 5Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð
 OÐ NÐ NÐ NÐ NÐ NÐ NÐ Nðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð
 OÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nð ð JØ)Ð)Ð)Ð)Ð)Ð)à3Ð3Ð3Ð3Ð3Ð3Ø/Ð/Ð/Ð/Ð/Ð/ØIÐIÐIÐIÐIÐIÐIÐIð 	Œ�Š˜Ñ!Ô!€ØŒg�oŠo˜bœgŸošo¨eÑ4Ô4Ñ5Ô5€Ø”—’˜kÐ+@ÑAÔA€àŒl˜gÒ%€à€6ÔÑÔð Ø%Ð%Ð%Ð%Ð%Ð%Ø2Ð2Ð2Ð2Ð2Ð2ðð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ð ”.×2Ò2°8¸]ÑKÔK€à€àŒl˜gÒ%€ð €gÔ˜Ñ!Ô!€ð'ð 'ð 'ð 'ðGð Gð Gð Gð €Ô�TÑÔðð ð ñ ÔððB
ð B
ð B
ð B
ð B
ñ B
ô B
ð B
ðJ'ð 'ð 'ð 'ð '�ñ 'ô 'ð 'ð2Xð Xð Xð Xð X�iñ Xô Xð Xðvð ð ð ðXð Xð Xð Xð
*ð *ð *ð *ð *ð 9;ð"ð "ð "ð "ð "ð CIð;ð ;ð ;ð ;ð ;ð ØØðð ð ð ð ð$!ð !ð !ð !ð Øð	ð ð ð ð ð> Ôðð ð ð ð ñ ô ñ Ôððð ð ð ð	ð 	ð 	ð 	ðtð tð tð tð t˜&œ.ñ tô tð tðnVð Vð Vð Vð  €Ô�TÑÔð Xð  Xð  Xñ Ôð XðF%ð %ð %ð %ð Ôðð ð ð ð ñ ô ñ Ôððð ð ð ð ˜ñ ô ð ðn"ð n"ð n"ð n"ð n"ñ n"ô n"ð n"ðbð ð ð ð8!ð !ð !ð !ð8ið ið ið ið iñ iô ið iðX<ð <ð <ð <ð €Ô�TÑÔðð ð ñ Ôðð ð ð  ð  ð  ð  ñ  ô  ñ Ôð ð6Fð Fð Fð Fð Fñ Fô Fð Fðb Ø
Ôð.ð .ð .ñ Ôñ Ôð.ð(ð (ð (ð (ð;ð ;ð ;ð ;ð/6ð /6ð /6ð /6ðd  €Ð Ð Ð Ñ ð*Hð *Hð *Hð *HðZ ðu:ð u:ð u:ð u:ð u:ñ u:ô u:ñ Ôðu:ðp$ð $ð $ð $ð0 ðl;ð l;ð l;ð l;ð l; ñ l;ô l;ñ Ôðl;ð^ ð>ð >ð >ð >ð >Ð4ñ >ô >ñ Ôð>ðB ð[ð [ð [ð [ð [Ð0ñ [ô [ñ Ôð[ð|
#ð #ð #ð #ðL ð  ð  ð  ð ð\(ð \(ð \(ð \(ð \(ñ \(ô \(ñ Ôð\(ð~Tð Tð Tð Tð Tñ Tô Tð Tð	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð.ð ð ð ð)ð )ð )ð )ð` '+ð	"ð "ð "ð "ð "ðJHð Hð Hð Hð Hñ Hô Hð HðV ðQGð QGð QGð QGð QGñ QGô QGñ ÔðQGðh ð[Gð [Gð [Gð [Gð [Gñ [Gô [Gñ Ôð[Gð|"ð "ð "ð "ð "ñ "ô "ð "ð
ð ð ð ð �?ñ ô ð ð* ð  ð  ð  ð  �?ñ  ô  ð  ð  ð  rj   