§
    ŠŠtj5 ã                  ó„  — 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Zd dlm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'm(Z( d d	l)m*Z* d d
lm+Z+ d dl,m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@ d dlAZAd dlBmCc mDZD d dlEmFZG d dlAmHZHmIZI d dlJmKZK d dlLmMZM d dlNmOZOmPZPmQZQmRZR d dlSmTZTmUZUmVZVmWZW d dlXmYZYmZZZm[Z[ d dl\m]Z^ d dl_m`Z`maZa d dlbmcZc d dldmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZr d dlsmtZtmuZu d dlvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~ d dlm€Z€m�Z� d dl‚mƒZƒ d dl„m…Z…m†Z† d dl‡mˆZˆm‰Z‰mŠZŠm‹Z‹mŒZŒm�Z�mŽZŽ d dl�m�Z� d d lBm‘Z‘ d d!l’m“Z“ d d"l”m•Z•m–Z–m—Z— d d#l˜m™Z™ d d$lšmTZ› d d%lœm�Z�mžZžmŸZŸ d d&l m¡Z¡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®m¯Z¯m°Z°m±Z± d+d-l²m³Z³ d+d.l´mµZµm¶Z¶ d+d/l·m¸Z¸ d+d0l¹mºZº d+d1l»m¼Z¼ d+d2l½m¾Z¾  e;d3¦  «        Z¿ G d4„ d5e@¦  «        ZÀ G d6„ d7e@d8¬9¦  «        ZÁ G d:„ d;e@¦  «        ZÂ G d<„ d=e@d8¬9¦  «        ZÃe:rNd d>lmÄZÄmÅZÅmÆZÆmÇZÇ d d?lÈmÉZÉ d+d@lÊmËZË d+dAlÌmÍZÍ d+dBlÎmÏZÏ d+dClÐmÑZÑ d+dDl²mÒZÒmÓZÓ d+dEl´mÔZÔmÕZÕ d+dFlÖm×Z×mØZØ d+dGlÙmÚZÚ d+dHlÛmÜZÜ ej        dIk    ZÝeTjÞ        ZßeAjà         á                    eâdJ¦  «        ZãeAjà         á                    eâdK¦  «        Zä ejå        eâ¦  «        ZædLZç�ddQ„Zè e'd¦  «        �ddS„¦   «         Zé e'd¦  «        �ddT„¦   «         Zê�d	dU„Zë�d
dW„Zì�ddZ„Zíd d[lîmïZð eð�dd]„¦   «         Zñ G d^„ d_¦  «        Zò G d`„ daeò¦  «        Zó G db„ dceò¦  «        Zô�d	dd„Zõ�ddg„Zö�d�ddl„Z÷	 �d�ddq„Zø�d�ddt„Zù G du„ dv¦  «        Zú	 	 	 	 �d�ddy„Zû�dd{„Zü	 	 �d�dd�„Zýejþ         G d‚„ dƒ¦  «        ¦   «         Zÿ�dd…„�Z �dd‡„�Z�dd‹„�Ze1e/e0e2�ef�Z�ddŽ„�Z G d�„ d�e�j        ¦  «        �Z�dd–„�Zeð�dd—„¦   «         �Z	�d	d˜„�Z
ejþ         G d™„ dš¦  «        ¦   «         �Z G d›„ dœ�e¦  «        �Z ejþ        d�¬ž¦  «         G dŸ„ d ¦  «        ¦   «         �Z e¬¦   «         �Zd¡�ed¢<   �dd¤„�Z�dd¥„�Z�d d§„�Zejþ         G d¨„ d©¦  «        ¦   «         �Z G dª„ d«¦  «        �Z�d!dµ„�Z�d"d¸„�Z G d¹„ dºe7e¿         ¦  «        �Zež�j         G d»„ d¼e�¦  «        ¦   «         �Z G d½„ d¾�ee³         ¦  «        �Ze�j        �d#dÀ„¦   «         �Ze‰ G dÁ„ dÂ¦  «        ¦   «         �Ze‰ G dÃ„ dÄ¦  «        ¦   «         �Z G dÅ„ dÆ¦  «        �Z d�a!dÇ�edÈ<   �d$dÌ„�Z"e�j#        � $                     e†¦   «         dÍ¦  «        �Z%e�j#        � $                    �e%dÎ¦  «        �Z&dÏ�Z'e�j        �d%dÓ„¦   «         �Z(�d&dÔ„�Z)�d'�d(dÖ„�Z*�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.¦  «        ¦   «         �Z0�d+dë„�Z1�d,dí„�Z2e‰ G dî„ dï¦  «        ¦   «         �Z3�d-dó„�Z4eð�ddô„¦   «         �Z5 G dõ„ dö¦  «        �Z6e'�d.dø„¦   «         �Z7 G dù„ dú¦  «        �Z8e‰ G dû„ dü�e8¦  «        ¦   «         �Z9d d�l:m]�Z; e‰ G dý„ dþ�e8¦  «        ¦   «         �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)ÚSet)Úcopy)Úc_void_pÚCDLLÚcdll)Ú	timedelta)Ú	lru_cacheÚpartial)ÚPath)Ú_TemporaryFileWrapper)ÚtimeÚtime_ns)ÚBuiltinFunctionTypeÚBuiltinMethodTypeÚFunctionTypeÚ
MethodTypeÚ
ModuleType)ÚAnyÚcastÚGenericÚLiteralÚNoReturnÚTYPE_CHECKINGÚTypeVar)ÚNotRequiredÚoverrideÚSelfÚ	TypedDict)ÚSymIntÚTensor)Úget_interface_for_device)Ú	SkipFrame)ÚCompileEventLoggerÚcountersÚdynamo_timedÚget_metrics_context)ÚconfigÚconfig_commsÚexcÚmetrics)Úcustom_backend_codegen_configsÚcustom_backend_passesÚinit_backend_registration)Úcompile_utils)Úrocm_compile_commandÚrocm_compiler)Úin_toplevel_process)Ú_LINKER_SCRIPTÚ_set_gpu_runtime_envÚ_TORCH_PATHÚbatch_convert_cubins_to_objÚconvert_cubin_to_objÚ
CppBuilderÚ
CppOptionsÚCppTorchDeviceOptionsÚget_compiler_version_infoÚget_cpp_compilerÚget_ld_and_objcopyÚ&get_name_and_dir_from_output_file_pathÚnormalize_path_separatorÚrun_asm_build_object)Úinvalid_vec_isaÚpick_vec_isa)ÚCustomGraphModulePassÚCustomGraphPassÚCustomGraphPassCallableÚCustomPartitionerFnÚCustomPartitionerFnTypeÚCustomPassBaseÚCustomSchedulerPassÚget_custom_graph_passes)Úhas_frozen_paramsÚis_frozen_param)Ú_reload_python_module)Ú	cache_dirÚdefault_cache_dir)ÚALIGN_BYTESÚclear_on_fresh_cacheÚdetermine_aoti_mmap_flagsÚis_linuxÚ
is_windowsÚparallel_num_threadsÚXPU_KERNEL_FORMAT)ÚFakeScriptObject)Úis_opaque_reference_type)Útrace_structured)Úextract_tensor_metadataÚ
FakeTensorÚTensorMetadata)Úlog_cache_bypass)r)   )ÚCacheArtifactÚCacheArtifactFactoryÚCacheArtifactRecorder)ÚTensorPropertiesÚWeights)ÚCUSTOM_OBJ_FILENAME_PREFIX)Úguarding_hint_or_throwÚhas_guarding_hintÚShapeEnv)Ú_device_constructors)Ú
OrderedSeté   )ÚCODE_CACHE_KEY_STRATEGYÚCOMPACT_CACHE_KEY_STRATEGYÚFX_GRAPH_CACHE_KEY_STRATEGYÚSYSTEM_CACHE_KEY_STRATEGY©ÚCompiledFxGraph)Úcache_statsÚcreate_cache)Úautotune_cache)ÚAutotuneCacheBundler)ÚTritonBundler)ÚVÚTc                  ó   — e Zd ZU ded<   dS )ÚSystemDeviceInfoú
str | NoneÚnameN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_inductor/codecache.pyry   ry   ˜   s   € € € € € € ØÐÐÑÐÐr‚   ry   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚSystemVersionInforz   ÚtritonÚstrÚcudaÚhipNr|   r�   r‚   rƒ   r…   r…   œ   s.   € € € € € € ØÐÐÑØ€I€I�IØ€O€O�O€O€Or‚   r…   F)Útotalc                  ó.   — e Zd ZU ded<   ded<   ded<   dS )Ú
SystemInfor‡   ÚhashzNotRequired[SystemDeviceInfo]ÚdevicezNotRequired[SystemVersionInfo]ÚversionNr|   r�   r‚   rƒ   rŒ   rŒ   ¢   s3   € € € € € € Ø€I€I�IØ)Ð)Ð)Ñ)Ø+Ð+Ð+Ñ+Ð+Ð+r‚   rŒ   c                  óœ   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   dS )Ú	CacheInfoz Literal['bypass', 'hit', 'miss']Úcache_stater‡   Úcache_status_detailedÚcache_status_guard_exprÚtriton_bundler_metaÚintÚtime_saved_nsÚtime_taken_nsÚephemeral_timeout_increaseÚcache_bypass_reasonÚcache_event_timeÚkeyú	list[str]Ú
componentsÚcache_bypass_exception_typeÚcache_bypass_tracebackÚboolÚcache_bypass_hard_exceptionNr|   r�   r‚   rƒ   r‘   r‘   ¨   s·   € € € € € € Ø1Ð1Ð1Ñ1ØÐÐÑØ Ð Ð Ñ ØÐÐÑØÐÐÑØÐÐÑØ#Ð#Ð#Ñ#ØÐÐÑØÐÐÑØ€H€H�HØÐÐÑØ$Ð$Ð$Ñ$Ø%Ð%Ð%Ñ%Ø%Ð%Ð%Ñ%Ð%Ð%r‚   r‘   )ÚCallableÚ	GeneratorÚKeysViewÚSequence)ÚFuture)Ú_CompileFxKwargs)ÚBuildOptionsBase©ÚGraphLowering)ÚChoiceCaller)ÚCompiledFxGraphConstantsÚ
OutputCode)Ú
JsonDataTyÚRemoteCache)ÚHalideInputSpecÚ
HalideMeta)ÚCachingAutotuner)Ú	InputTypeÚwin32Úoutput_codeÚ
autotuningÚaÚtargetr   Úreturnr‡   c           
     ó¼   — d                      d„ t          | dd ¦  «        t          | dd ¦  «        t          | dd ¦  «        t          | ¦  «        fD ¦   «         ¦  «        S )Nú.c              3  ó   K  — | ]}|¯|V — Œ	d S ©Nr�   ©Ú.0Úxs     rƒ   ú	<genexpr>z/_device_constructor_sort_key.<locals>.<genexpr>Ó   s>   è è € ð 	ð 	àð ð	Ø	ð	ð 	ð 	ð 	ð 	ð 	r‚   r~   r   r}   )ÚjoinÚgetattrÚrepr©r¹   s    rƒ   Ú_device_constructor_sort_keyrÇ   Ò   sn   € Ø�8Š8ð 	ð 	õ �F˜L¨$Ñ/Ô/Ý�F˜N¨DÑ1Ô1Ý�F˜J¨Ñ-Ô-Ý�‰LŒLð	
ð	ñ 	ô 	ñ 	ô 	ð 	r‚   útuple[Any, ...]c                 ó`   — t          t          t          ¦   «         t          ¬¦  «        ¦  «        S )N©rœ   )ÚtupleÚsortedrh   rÇ   r�   r‚   rƒ   Ú#_default_device_constructor_targetsrÍ   ß   s%   € å•Õ,Ñ.Ô.Õ4PÐQÑQÔQÑRÔRÐRr‚   c                 óÜ   — g } t          ¦   «         D ]M}t          |dd ¦  «        x}€Œt          t          j        j        |d ¦  «        x}�|                      |¦  «         ŒNt          | ¦  «        S )Nr}   )rÍ   rÄ   ÚtorchÚopsÚatenÚappendrË   )Úpacketsr¹   r{   Úpackets       rƒ   Ú,_default_device_constructor_overload_packetsrÕ   ä   sp   € à€GÝ5Ñ7Ô7ð #ð #ˆÝ˜F J°Ñ5Ô5Ð5ˆDÐ>ØÝ�eœiœn¨d°DÑ9Ô9Ð9ˆFÐFØ�NŠN˜6Ñ"Ô"Ð"øÝ�‰>Œ>Ðr‚   c                 ó,   — t           j        j        €dndS )NÚ
cubin_pathÚ
hsaco_path)rÏ   r�   r‰   r�   r‚   rƒ   Úget_cpp_wrapper_cubin_path_namerÙ   ï   s   € Ý œ=Ô,Ð4ˆ<ˆ<¸,ÐFr‚   rŽ   c                óV   — | dk    rt           j        j        €dndS | dk    rt          S dS )Nrˆ   ÚcubinÚhsacoÚxpuÚ )rÏ   r�   r‰   rW   ©rŽ   s    rƒ   Úget_kernel_bin_formatrà   ó   s5   € Ø�ÒÐÝœ-Ô+Ð3ˆwˆw¸Ð@Ø	�5ŠˆÝ Ð àˆrr‚   Údevice_typeúdict[str, str]c                ó"  — t           j        t          j        ¦   «         t          t          j        j                             ¦   «         ¦  «                             ¦   «         t          t          | ¦  «         
                    ¦   «         ¦  «        dœ}|S )zJ
    Gets all the current device information used to compile the .so.
    )ÚAOTI_PLATFORMÚAOTI_MACHINEÚAOTI_CPU_ISAÚAOTI_COMPUTE_CAPABILITY)ÚsysÚplatformÚmachiner‡   rÏ   Ú	_inductorÚcpu_vec_isarC   Úupperr#   Úget_compute_capability)rá   Úmetadatas     rƒ   Úget_device_informationrð   ü   st   € õ
 œÝ Ô(Ñ*Ô*Ý�EœOÔ7×DÒDÑFÔFÑGÔG×MÒMÑOÔOÝ#&Ý$ [Ñ1Ô1×HÒHÑJÔJñ$
ô $
ð	 ð  €Hð €Or‚   )Úprefetchable_cacherz   c                 ó.   — ddl m} m} | r
 |¦   «         S d S )Nr   )Ú
HAS_TRITONÚ
triton_key)Ú%torch._inductor.runtime.triton_compatró   rô   )ró   Ú_triton_key_impls     rƒ   rô   rô     sH   € ðð ð ð ð ð ð ð ð ð "ØÐÑ!Ô!Ð!Øˆ4r‚   c                  óš   — e Zd Zeej        dd„¦   «         ¦   «         Zeeej        dd„¦   «         ¦   «         ¦   «         Zdd„Z	dd	„Z
dd„ZdS )Ú	CacheBaserº   rŒ   c                 ó$  — t          d¦  «        5  t          ¦   «         } d d d ¦  «         n# 1 swxY w Y   	 dd i}d| i}t          j                             t          j                             ¦   «         ¦  «        }t          j        j        �|j        |d<   t          j        j        |d<   n|j        |d<   t          j        j	        |d<   ||dœ}||t          j        |¦  «        dœS # t          t          f$ r dt          j        i ¦  «        icY S w xY w)	NzCacheBase.get_system.triton_keyr{   r†   rˆ   r‰   )rŽ   r�   )rŽ   r�   r�   r�   )r'   rô   rÏ   rˆ   Úget_device_propertiesÚcurrent_devicer�   r{   ÚgcnArchNamer‰   rn   Úkey_from_jsonÚAssertionErrorÚRuntimeError)Útriton_versionÚdevice_infoÚversion_infoÚdevice_propertiesÚ
hash_inputs        rƒ   Ú
get_systemzCacheBase.get_system  su  € õ Ð;Ñ<Ô<ð 	*ð 	*Ý'™\œ\ˆNð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð	IØ-3°T¨NˆKØ/7¸Ð.HˆLÝ %¤
× @Ò @Ý”
×)Ò)Ñ+Ô+ñ!ô !Ðõ Œ}Ô!Ð-Ø&7Ô&<�˜FÑ#Ý',¤}Ô'9�˜VÑ$Ð$à&7Ô&C�˜FÑ#Ý&+¤mÔ&7�˜UÑ#à%Ø'ð*ð *ˆJð
 &Ø'Ý1Ô?À
ÑKÔKðð ð øõ
 ¥Ð-ð 	Ið 	Ið 	IàÕ5ÔCÀBÑGÔGÐHÐHÐHÐHð	Iøøøs   �+«/²/·B-C% Ã%'DÄDr   c                 ó°   — t          t          j                             t	          ¦   «         dt
                               ¦   «         d         ¦  «        ¦  «        S )NÚcacher�   )r   ÚosÚpathrÃ   rO   rø   r  r�   r‚   rƒ   Ú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ÐWr‚   ÚNonec                óB   — t                                ¦   «         | _        d S r¾   )rø   r  Úsystem©Úselfs    rƒ   Ú__init__zCacheBase.__init__B  s   € Ý×*Ò*Ñ,Ô,ˆŒˆˆr‚   údict[str, Any]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ÚopenÚjsonÚload)r  Úlocal_cache_pathÚlocal_cache_fpÚlocal_caches       rƒ   Úget_local_cachezCacheBase.get_local_cacheE  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_atomicr‡   r  Údumpsr  )r  r  r  s      rƒ   Úupdate_local_cachezCacheBase.update_local_cacheM  s`   € Ø×4Ò4Ñ6Ô6ÐÝÝÐ Ñ!Ô!ÝŒJ $¤+¸ÐDÐDÈQÐOÑOÔOØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r‚   N)rº   rŒ   )rº   r   ©rº   r  )rº   r  )r  r  rº   r  )r}   r~   r   ÚstaticmethodÚ	functoolsr  r  rR   r
  r  r  r#  r�   r‚   rƒ   rø   rø     s¹   € € € € € ØØ„_ðIð Ið Iñ „_ñ „\ðIð: ØØ„_ðXð Xð Xñ „_ñ Ôñ „\ðXð-ð -ð -ð -ð$ð $ð $ð $ð
ð 
ð 
ð 
ð 
ð 
r‚   rø   c                  ó   — e Zd Zdd„Zdd	„Zd
S )Ú
LocalCacheÚkeysr‡   rº   údict[str, Any] | Nonec                óZ   — |                       ¦   «         }|}|D ]}||v r	||         }Œ d S |S r¾   )r  )r  r)  r  Ú	sub_cacherœ   s        rƒ   ÚlookupzLocalCache.lookupW  sH   € Ø×$Ò$Ñ&Ô&ˆàˆ	Øð 	ð 	ˆCØ�eˆ|ˆ|Ø! #œJ�	�	à�t�tàÐr‚   Úvaluer   r  c               óÈ   — |                       ¦   «         }|}|dd…         D ] }|                     |i ¦  «         ||         }Œ!|||d         <   |                      |¦  «         d S )Nr   éÿÿÿÿ)r  Ú
setdefaultr#  )r  r.  r)  r  r,  rœ   s         rƒ   Ú	set_valuezLocalCache.set_valuec  sx   € Ø×$Ò$Ñ&Ô&ˆàˆ	Ø˜˜"˜”:ð 	'ð 	'ˆCØ× Ò   bÑ)Ô)Ð)Ø! #œˆIˆIØ#ˆ	�$�r”(Ñà×Ò Ñ&Ô&Ð&Ð&Ð&r‚   N)r)  r‡   rº   r*  )r)  r‡   r.  r   rº   r  )r}   r~   r   r-  r2  r�   r‚   rƒ   r(  r(  V  s<   € € € € € ð
ð 
ð 
ð 
ð	'ð 	'ð 	'ð 	'ð 	'ð 	'r‚   r(  c                  ó   — e Zd Z	 ddd„ZdS )ÚPersistentCacheNÚchoicesúlist[ChoiceCaller]Úopr‡   ÚinputsÚ	benchmarkú1Callable[[Any], dict[ChoiceCaller, float]] | NoneÚhint_overrideú
int | Nonerº   údict[ChoiceCaller, float]c                óN  ‡‡‡
‡‡— t          j        ¦   «         Š|�|› d|› �n|Š
i Šd	ˆ
ˆˆˆˆfd„}t          j        r|                      ¦   «         ni } ||¦  «        sÈ|�Æ |‰¦  «        Št          ˆfd„‰D ¦   «         ¦  «        sJ ‚|                     ‰i ¦  «         |‰                              ‰
i ¦  «                             ‰i ¦  «         ‰                     ¦   «         D ].\  }}	|	|‰         ‰
         ‰         |                     ¦   «         <   Œ/|  	                    |¦  «         ‰S )
aé  
        Check to see if we have benchmarked the given choice callers. For each
        choice caller:

            1. Check local_cache[op][inputs][choice][precision], return benchmark if cached.
            2. If benchmark is not None:
                a. `max_autotune_gemm=True`: benchmark the choice, update
                    local_cache[op][inputs][choice], and return the benchmark.
                b. `max_autotune_gemm=False`: don't benchmark the choice, return nothing.
        NÚ_r  r  rº   r¡   c                óþ   •— d}‰D ]v}|                      ¦   «         }||                      ‰i ¦  «                             ‰i ¦  «                             ‰i ¦  «        v r| ‰         ‰         ‰         |         ‰|<   Œtd} |S )z2Check if `cache` contains data for all the choicesTF)Úhash_keyÚget)	r  ÚhitÚchoiceÚchoice_hashÚ	cache_keyr5  r7  Ú	precisionÚtimingss	       €€€€€rƒ   Úcheck_cachez+PersistentCache.lookup.<locals>.check_cache‡  s—   ø€ àˆCØ!ð 
ð 
�Ø$ŸošoÑ/Ô/�Ø %§)¢)¨B°Ñ"3Ô"3×"7Ò"7¸	À2Ñ"FÔ"F×"JÒ"JØ˜rñ#ô #ð ð ð ',¨B¤i°	Ô&:¸9Ô&EÀkÔ&R�G˜F‘O�Oð  �CØØˆJr‚   c              3  ó    •K  — | ]}|‰v V — Œ	d S r¾   r�   )rÀ   rD  rH  s     €rƒ   rÂ   z)PersistentCache.lookup.<locals>.<genexpr>›  s(   øè è € Ð?Ð?¨V�v Ð(Ð?Ð?Ð?Ð?Ð?Ð?r‚   )r  r  rº   r¡   )
rÏ   Úget_float32_matmul_precisionr)   Úautotune_local_cacher  Úallr1  ÚitemsrA  r#  )r  r5  r7  r8  r9  r;  rI  r  rD  ÚtimingrF  rG  rH  s    ``       @@@rƒ   r-  zPersistentCache.lookupp  sw  øøøøø€ õ$ Ô6Ñ8Ô8ˆ	Ø3@Ð3L�vÐ/Ð/ Ð/Ð/Ð/ÐRXˆ	àˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ  17Ô0KÐS�d×*Ò*Ñ,Ô,Ð,ÐQSˆØ�˜KÑ(Ô(ð 		1¨yÐ/Dà�i Ñ(Ô(ˆGÝÐ?Ð?Ð?Ð?°wÐ?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ø×"Ò" 2 rÑ*Ô*Ð*Ø˜ŒO×&Ò& y°"Ñ5Ô5×@Ò@ÀÈBÑOÔOÐOØ")§-¢-¡/¤/ð Rð R‘�˜ØKQ�˜B” 	Ô*¨9Ô5°f·o²oÑ6GÔ6GÑHÐHà×#Ò# KÑ0Ô0Ð0àˆr‚   r¾   )r5  r6  r7  r‡   r8  r‡   r9  r:  r;  r<  rº   r=  )r}   r~   r   r-  r�   r‚   rƒ   r4  r4  o  s2   € € € € € ð %)ð3ð 3ð 3ð 3ð 3ð 3ð 3r‚   r4  c                 óÈ   — t           j                             t          ¦   «         d¦  «        } t           j                             | ¦  «        st          j        | d¬¦  «         | S )NÚlocksT©Úexist_ok)r  r	  rÃ   rO   ÚexistsÚmakedirs)Úlock_dirs    rƒ   Úget_lock_dirrW  ¦  sK   € ÝŒw�|Š|�I™KœK¨Ñ1Ô1€HÝŒ7�>Š>˜(Ñ#Ô#ð -Ý
Œ�H tÐ,Ñ,Ô,Ð,Ø€Or‚   ÚdataÚbytesc                ó*   — t          j        | ¦  «        S r¾   )rl   rœ   )rX  s    rƒ   Úsha256_hashr[  ­  s   € Ý%Ô)¨$Ñ/Ô/Ð/r‚   rÞ   Úcodeústr | bytesÚextrac                óX   — |rt          j        | |¦  «        S t          j        | ¦  «        S r¾   )rk   rœ   )r\  r^  s     rƒ   Ú	code_hashr`  ±  s.   € Øð 8Ý&Ô*¨4°Ñ7Ô7Ð7Ý"Ô& tÑ,Ô,Ð,r‚   Ú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 )Nrj   é   r¼   )r  r	  ÚisabsrÃ   rO   )ra  rb  rc  Úsubdirr	  s        rƒ   Úget_pathri  ·  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Ð!Ð!r‚   ÚcontentÚ	hash_typec                óž   — |dv rt          | |¦  «        S |ddt          hv rt          t          | ¦  «        ¦  «        S t          d|› �¦  «        ‚)N>   ÚptxÚspvr\  ÚamdgcnrÛ   rÜ   zUnknown hash type )r`  rW   rÅ   rþ   )rj  r^  rk  s      rƒ   Úget_hashrp  Å  s\   € ØÐ4Ð4Ð4Ý˜ %Ñ(Ô(Ð(Ø�W˜gÕ'8Ð9Ð9Ð9Ý�˜g™œÑ'Ô'Ð'Ý
Ð9¨iÐ9Ð9Ñ
:Ô
:Ð:r‚   c                  ó6   — e Zd ZdZ	 ddddœdd„Zdd„Zdd„ZdS )ÚWritableTempFileao  
    Avoid "Permission denied error" on Windows:
      with tempfile.NamedTemporaryFile("w", suffix=".gv") as temp_file:
        # Not writable on Windows:
        # https://docs.python.org/3/library/tempfile.html#tempfile.NamedTemporaryFile

    Example:
        with WritableTempFile("w", suffix=".gv") as temp_file:
            tree.to_dotfile(temp_file.name)
    ÚwN)ÚencodingÚsuffixÚmoder‡   rt  r   ru  rº   r  c               ó0   — || _         || _        || _        d S r¾   )rv  rt  ru  )r  rv  rt  ru  s       rƒ   r  zWritableTempFile.__init__Ù  s   € ð ˆŒ	Ø ˆŒØˆŒˆˆr‚   ú_TemporaryFileWrapper[Any]c                óh   — t          j        | j        | j        | j        d¬¦  «        | _        | j        S )NF)rt  ru  Údelete)ÚtempfileÚNamedTemporaryFilerv  rt  ru  Ú	temp_filer  s    rƒ   Ú	__enter__zWritableTempFile.__enter__à  s4   € Ý!Ô4ØŒI ¤°d´kÈ%ð
ñ 
ô 
ˆŒð Œ~Ðr‚   Úexc_typeÚexc_valÚexc_tbc                óº   — | j                              ¦   «          	 t          j        | j         j        ¦  «         d S # t
          $ r}t          rn|‚Y d }~d S d }~ww xY wr¾   )r}  Úcloser  Úunlinkr{   ÚOSErrorÚ_IS_WINDOWS)r  r  r€  r�  Úes        rƒ   Ú__exit__zWritableTempFile.__exit__æ  st   € ØŒ×ÒÑÔÐð	ÝŒI�d”nÔ)Ñ*Ô*Ð*Ð*Ð*øÝð 	ð 	ð 	Ýð àà�ð �����øøøøð	øøøs   ›; »
AÁ
AÁA)rs  )rv  r‡   rt  r   ru  r   rº   r  )rº   rx  )r  r   r€  r   r�  r   rº   r  )r}   r~   r   Ú__doc__r  r~  rˆ  r�   r‚   rƒ   rr  rr  Í  ss   € € € € € ð	ð 	ð ðØ26Àdðð ð ð ð ð ðð ð ð ð	ð 	ð 	ð 	ð 	ð 	r‚   rr  rœ   útuple[str, str]c                óà   — |€#t          |                      ¦   «         ||¦  «        }t          |||¦  «        \  }}}t          j                             |¦  «        st          || d¬¦  «         ||fS )NTr  )rp  Ústripri  r  r	  rT  r!  )	rj  rb  r^  rk  rc  rœ   ra  Ú_subdirr	  s	            rƒ   ÚwriterŽ  ò  sq   € ð €{õ �w—}’}‘”¨¨yÑ9Ô9ˆÝ& s¨I°}ÑEÔEÑ€Hˆg�tÝŒ7�>Š>˜$ÑÔð 4Ý�T˜7¨dÐ3Ñ3Ô3Ð3Ø�Tˆ>Ðr‚   Útextc                ó.   — t          | d¦  «        d         S )zT
    Write the `text` to a file and return the path computed based on the hash.
    Útxtrj   ©rŽ  )r�  s    rƒ   Ú
write_textr“    s   € õ ��uÑÔ˜aÔ Ð r‚   Úpath_r   r¡   Úencode_utf_8r  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          $ r6 t          s‚ t          j        ||¬¦  «         t          j        |¦  «         Y d S w xY w)Nz6Only strings and byte arrays can be saved in the cacheT)ÚparentsrS  r¼   z.tmprs  Úwbúutf-8©rt  rÆ   )ÚsrcÚdst)Ú
isinstancer‡   rY  r   ÚparentÚmkdirr  ÚgetpidÚ	threadingÚ	get_identr  rŽ  ÚrenameÚFileExistsErrorr†  ÚshutilÚcopy2Úremove)r”  rj  r   r•  r	  Útmp_pathÚ
write_modeÚfs           rƒ   r!  r!    sŸ  € õ �g¥¥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Å 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.
    r]   Útensor_metadataú	list[Any]ÚvaluesN©r}   r~   r   r‰  r€   r�   r‚   rƒ   r¬  r¬  +  s6   € € € € € € ðð ð
 $Ð#Ð#Ñ#ØÐÐÑÐÐr‚   r¬  rÁ   c                ó   — | S r¾   r�   ©rÁ   s    rƒ   Ú_identr³  6  s   € Ø€Hr‚   r   c                ó(   — t          d| ›d�¦  «        ‚)NzmAttempted to unpickle an object that was pickled only for cache-key hashing and cannot be reconstructed (key=ú))rÿ   rÊ   s    rƒ   Ú_unpicklable_errorr¶  :  s+   € Ý
ð	=Ø47ð	=ð 	=ð 	=ñô ð r‚   Útr"   r]   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)r[   ÚhasattrÚdataclassesÚreplace)r·  Úmetas     rƒ   Ú%extract_tensor_metadata_for_cache_keyrÀ  A  sA   € õ
 # 1Ñ%Ô%€DÝ�1Ð+Ñ,Ô,ð OÝÔ" 4¸ÈÐNÑNÔNˆà€Kr‚   ÚobjÚobjectc                ó  — t          | ¦  «        }|j        › d|j        › �}g }d„ d„ d„ fD ]>}	 |                     t	           || ¦  «        ¦  «        ¦  «         Œ/# t
          $ r Y Œ;w xY w|r|› dt          |¦  «        › �S dS )aã  Produce a deterministic string key for an otherwise-unpicklable object.

    Used by FxGraphCachePickler.reducer_override as a fallback for objects
    whose types don't support default pickling (e.g. pybind11 enums).

    The key is derived from the object's fully-qualified type name plus
    values obtained via known accessor patterns (pybind11 enum, Python enum,
    etc.).  Returns ``None`` if no accessor succeeds, letting the caller
    decide how to handle the failure.
    r¼   c                ó   — | j         j        S r¾   )Útyper{   ©Úos    rƒ   ú<lambda>z%_get_stable_obj_key.<locals>.<lambda>j  s
   € �!”&”+€ r‚   c                ó   — | j         S r¾   ©r{   rÆ  s    rƒ   rÈ  z%_get_stable_obj_key.<locals>.<lambda>k  s   € �!”&€ r‚   c                ó   — | j         S r¾   ©r.  rÆ  s    rƒ   rÈ  z%_get_stable_obj_key.<locals>.<lambda>l  s   € �!”'€ r‚   ú:N)rÅ  r~   r   rÒ   r‡   Ú	ExceptionrÅ   )rÁ  r·  Útype_idÚpartsÚaccessors        rƒ   Ú_get_stable_obj_keyrÒ  [  s¿   € õ 	ˆS‰	Œ	€AØ”Ð0Ð0 ¤Ð0Ð0€GØ€EàÐØÐØÐðð ð ˆð
	Ø�LŠL�˜X˜X c™]œ]Ñ+Ô+Ñ,Ô,Ð,Ð,øÝð 	ð 	ð 	ØˆHð	øøøàð *ØÐ)Ð)�D ™KœKÐ)Ð)Ð)Øˆ4s   ®+AÁ
A'Á&A'c                  ó²   ‡ — e Zd ZU dZi Zded<   	 	 d-d.ˆ fd„Zd/d„Zed/d„¦   «         Z	d0d„Z
d1d„Zd2d„Zd3d„Zd4d„Zd5d „Zd6d#„Zd7d%„Zd8d'„Zd8d(„Zd9d,„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.
    zdict[type, bool]Ú_pickleable_type_cacheFÚgmútorch.fx.GraphModuleÚhas_user_defined_triton_kernelsr¡   Údevice_id_agnosticrº   r  c                ór  •— t          j        ¦   «         | _        || _        t	          ¦   «                              | j        ¦  «         t          j                             ¦   «         | _        | j         	                    t          t          j        | j        ¦  «        t          j        t          j        | j        ¦  «        t          j        j        j        t          j        | j        ¦  «        t          j        t          j        | j        ¦  «        t          j        t          j        | j        ¦  «        t          j        j        j        j        t          j        | j        ¦  «        t:          t          j        | j        ¦  «        i¦  «         |r&t          j        | j        ¦  «        | j        |j         <   d| _!        dS )aØ  
        Create an FX graph pickler. If include_non_inlined=True, then pickling will
        include the _values_ for all Tensors. (Note that any tensors are constants
        attached as attributes to the GraphModule). Otherwise, pickling will include
        only the metadata for these tensors.

        If device_id_agnostic=True, device indices in TensorMetadata are normalized
        to 0, so that the same graph on different GPUs produces identical bytes.
        TN)"ÚioÚBytesIOÚ_streamÚ_device_id_agnosticÚsuperr  ÚcopyregÚdispatch_tabler   Úupdater\   r&  r   Ú_reduce_fake_tensorrÏ   r"   Ú_reduce_tensorÚnnÚ	parameterÚ	Parameterr!   Ú_reduce_symintÚSymBoolÚ_reduce_symboolÚfxÚexperimentalÚ_backward_stateÚBackwardStateÚ_reduce_unsupportedrX   Ú_reduce_fake_script_objectÚ_reduce_graph_moduleÚ	__class__Úfast)r  rÖ  rØ  rÙ  rò  s       €rƒ   r  zFxGraphCachePickler.__init__„  sK  ø€ õ ”z‘|”|ˆŒØ#5ˆÔ Ý‰Œ×Ò˜œÑ&Ô&Ð&å%Ô4×9Ò9Ñ;Ô;ˆÔØÔ×"Ò"å�IÔ-¨dÔ.FÑGÔGÝ”�iÔ/°Ô0CÑDÔDÝ”Ô"Ô,­iÔ.?ÀÔ@SÑ.TÔ.TÝ”�iÔ/°Ô0CÑDÔDÝ”�yÔ0°Ô1EÑFÔFÝ”Ô%Ô5ÔCÅYÔEVØÔ,ñFô Fõ !¥)Ô"3°DÔ4SÑ"TÔ"Tð
ñ	
ô 	
ð 	
ð +ð 	å09Ô0AØÔ)ñ1ô 1ˆDÔ ¤Ñ-ð ˆŒ	ˆ	ˆ	r‚   rÁ  r   c                ó@  — t          |¦  «        }|| j        v st          |t          ¦  «        rt          S | j                             |¦  «        x}�|s|                      |¦  «        S t          S 	 |                     t          j
        ¦  «        }n„# t          t          t          j        f$ r" d| j        |<   |                      |¦  «        cY S t          $ r;}dt          |¦  «        v r$d| j        |<   |                      |¦  «        cY d}~S ‚ d}~ww xY wd| j        |<   |S )a_  Fallback reducer for objects not registered in dispatch_table.

        This handles extension types (e.g. pybind11 enums) that don't support
        default pickling.  Instead of bypassing the FX graph cache entirely,
        we serialize a deterministic string representation of the object which
        is sufficient for cache-key hashing.
        NFúis not pickleableT)rÅ  rá  r�  Ú_PICKLE_NATIVE_TYPES_TUPLEÚNotImplementedrÕ  rB  Ú_reduce_unpicklableÚ__reduce_ex__ÚpickleÚDEFAULT_PROTOCOLÚ	TypeErrorÚAttributeErrorÚPicklingErrorrÿ   r‡   )r  rÁ  r·  Ú
pickleableÚresultr‡  s         rƒ   Úreducer_overridez$FxGraphCachePickler.reducer_override°  sJ  € õ �‰IŒIˆð
 �Ô#Ð#Ð#¥z°#Õ7QÑ'RÔ'RÐ#Ý!Ð!àÔ5×9Ò9¸!Ñ<Ô<Ð<ˆJÐIØð 5Ø×/Ò/°Ñ4Ô4Ð4Ý!Ð!ð		Ø×&Ò&¥vÔ'>Ñ?Ô?ˆFˆFøÝ�>­6Ô+?Ð@ð 	1ð 	1ð 	1Ø-2ˆDÔ'¨Ñ*Ø×+Ò+¨CÑ0Ô0Ð0Ð0Ð0Ýð 	ð 	ð 	Ø"¥c¨!¡f¤fÐ,Ð,Ø16�Ô+¨AÑ.Ø×/Ò/°Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Øøøøøð		øøøð *.ˆÔ# AÑ&Øˆs*   Á0B Â;DÃ	DÃ/DÄDÄDÄDc                ó€   — t          | ¦  «        }|€$t          dt          | ¦  «        j        › �¦  «        ‚t          |ffS )Nz5Cannot produce stable cache key for unpicklable type )rÒ  ÚBypassFxGraphCacherÅ  r   r¶  )rÁ  rœ   s     rƒ   rø  z'FxGraphCachePickler._reduce_unpicklableÓ  sP   € å! #Ñ&Ô&ˆØˆ;Ý$ð,Ý˜‘9”9Ô)ð,ð ,ñô ð õ " C 6Ð)Ð)r‚   r·  r"   ú.tuple[Callable[[T], T], tuple[TensorMetadata]]c                ó¨   — t          |¦  «        }| j        r3t          j        |t	          j        |j        j        d¦  «        ¬¦  «        }t          |ffS )z7
        Custom reducer to pickle FakeTensors.
        r   rß   )rÀ  rÞ  r½  r¾  rÏ   rŽ   rÅ  r³  )r  r·  rï   s      rƒ   rã  z'FxGraphCachePickler._reduce_fake_tensorÝ  sX   € õ 9¸Ñ;Ô;ˆØÔ#ð 	Ý"Ô*Ø¥¤¨h¬oÔ.BÀAÑ!FÔ!Fðñ ô ˆHõ ˜˜Ð$Ð$r‚   úHtuple[Callable[[T], T], tuple[TensorMetadata | TensorMetadataAndValues]]c                ó  — ddl m} |j        rt                               |¦  «         t          |¦  «        }| j        r3t          j        |t          j
        |j
        j        d¦  «        ¬¦  «        }t          |¦  «        r |j        |¦  «        s
t          |ffS t          ¦   «         }|                     ¦   «         }t          ¦   «         |z
  }|dk    rt#          j        d|d›d�¦  «         t          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.
        rj   rª   r   rß   g      ð?z0FX graph cache copying of a large constant took z.1zs. Please file an issue.)Úgraphr«   Ú	is_mkldnnÚCacheabilityValidatorÚcheck_tensorrÀ  rÞ  r½  r¾  rÏ   rŽ   rÅ  rM   Úcan_inline_constantr³  r   ÚtolistÚwarningsÚwarnr¬  )r  r·  r«   rï   Ústartr¯  Úelapseds          rƒ   rä  z"FxGraphCachePickler._reduce_tensorê  s%  € ð 	)Ð(Ð(Ð(Ð(Ð(àŒ;ð 	2õ "×.Ò.¨qÑ1Ô1Ð1å8¸Ñ;Ô;ˆØÔ#ð 	Ý"Ô*Ø¥¤¨h¬oÔ.BÀAÑ!FÔ!Fðñ ô ˆHõ
 ˜1ÑÔð 	)Ð&G mÔ&GÈÑ&JÔ&Jð 	)Ý˜X˜KÐ(Ð(õ ‘”ˆØ—’‘”ˆÝ‘&”&˜5‘.ˆØ�SŠ=ˆ=ÝŒMð(À7ÐRð (ð (ð (ñô ð õ
 Õ0°¸6ÑBÔBÐDÐEÐEr‚   Úsr!   ú#tuple[Callable[[T], T], tuple[str]]c                ó0   — t           t          |¦  «        ffS )z3
        Custom reducer to pickle SymInts.
        ©r³  r‡   ©r  r  s     rƒ   rè  z"FxGraphCachePickler._reduce_symint  s   € õ �˜Q™œ˜	Ð"Ð"r‚   útorch.SymBoolc                ó0   — t           t          |¦  «        ffS )z4
        Custom reducer to pickle SymBools.
        r  r  s     rƒ   rê  z#FxGraphCachePickler._reduce_symbool  s   € õ �˜Q™œ˜	Ð"Ð"r‚   r   c                ó:   — t                                d¦  «         dS )z{
        Custom reducer to handle any objects that we don't support and therefore
        raise to bypass caching.
        úReduce unsupportedN)r
  Úbypassr  s     rƒ   rï  z'FxGraphCachePickler._reduce_unsupported!  s   € õ
 	×$Ò$Ð%9Ñ:Ô:Ð:Ð:Ð:r‚   ú&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 indices into this side table. These arguments are not
        for hashing purposes since we included the source code into the cache
        key and the numbers are prone to give false negatives due to ordering.
        Ú_codezkernel_idx = \d+rÞ   zconstant_args_idx = \d+)Ú
__reduce__ÚreÚsub)r  rÖ  ÚfnrX  Úimportsr\  s         rƒ   rñ  z(FxGraphCachePickler._reduce_graph_module(  sc   € ð !Ÿmšm™oœoÑˆ‰OˆT�7Ø�GŒ}ˆÝŒvÐ)¨2¨tÑ4Ô4ˆÝŒvÐ0°"°dÑ;Ô;ˆØˆˆW‰Ø�D˜'�?Ð"Ð"r‚   rX   ú*tuple[Callable[..., Any], tuple[Any, ...]]c                ó:  — |j         �zt          |j         ¦  «        }t          j        |¦  «        r7t          j        |¦  «        r#t          j        |¦  «        st          |j        ffS t          j        |¦  «        rd| _        t          |j	        |j        |j         ffS ©NF)
Úreal_objrÅ  Úopaque_objectÚis_opaque_typeÚshould_hoistÚhas_membersr³  Úscript_class_nameró  Úwrapped_obj)r  r·  Úclss      rƒ   rð  z.FxGraphCachePickler._reduce_fake_script_object;  s    € ð Œ:Ð!Ý�q”zÑ"Ô"ˆCõ
 Ô,¨SÑ1Ô1ð8å!Ô.¨sÑ3Ô3ð8õ &Ô1°#Ñ6Ô6ð8õ
  Ô!4Ð 6Ð7Ð7ÝÔ+¨CÑ0Ô0ð "ð "�”	Ý˜œ¨Ô(;¸Q¼ZÐHÐIÐIr‚   rY  c                óÎ  — 	 |                       |¦  «         | j                             ¦   «         | j                             d¦  «         | j                             d¦  «         S # t
          t          t          j        t          f$ r$}t                               |¦  «         Y d}~nRd}~wt          $ rB}dt          |¦  «        v r+dt          |¦  «        v rt                               |¦  «         ‚ d}~ww xY w	 | j                             d¦  «         | j                             d¦  «         dS # | j                             d¦  «         | j                             d¦  «         w xY w)z<
        Pickle an object and return a byte string.
        r   NÚpybind11rõ  )ÚdumprÝ  ÚgetvalueÚseekÚtruncaterü  rý  rú  rþ  Ú
ValueErrorr
  Úbypass_for_pickle_errorrÿ   r‡   )r  rÁ  r‡  s      rƒ   r"  zFxGraphCachePickler.dumpsP  sg  € ð	%Ø�IŠI�c‰NŒNˆNØ”<×(Ò(Ñ*Ô*ð ŒL×Ò˜aÑ Ô Ð ØŒL×!Ò! !Ñ$Ô$Ð$Ð$øõ �>­6Ô+?ÅÐLð 	=ð 	=ð 	=Ý!×9Ò9¸!Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<øøøøÝð 	ð 	ð 	ð �S ™VœVÐ#Ð#Ð(;½sÀ1¹v¼vÐ(EÐ(EÝ%×=Ò=¸aÑ@Ô@Ð@Øøøøøð	øøøð =ð ŒL×Ò˜aÑ Ô Ð ØŒL×!Ò! !Ñ$Ô$Ð$Ð$Ð$øð ŒL×Ò˜aÑ Ô Ð ØŒL×!Ò! !Ñ$Ô$Ð$Ð$øøøs5   ‚-A$ Á$"C4ÂB%Â D. Â%C4Â2=C/Ã/C4Ã4D. Ä.6E$r‡   c                óT   — |                       |¦  «        }t          j        |¦  «        S )zE
        Serialize an object and return a hash of the bytes.
        )r"  rl   rœ   ©r  rÁ  Úserialized_datas      rƒ   rp  zFxGraphCachePickler.get_hashd  s$   € ð Ÿ*š* S™/œ/ˆÝ)Ô-¨oÑ>Ô>Ð>r‚   c                óT   — |                       |¦  «        }t          j        |¦  «        S )zG
        Serialize an object and return an FX graph cache key.
        )r"  rm   rœ   r8  s      rƒ   Úget_keyzFxGraphCachePickler.get_keyk  s$   € ð Ÿ*š* S™/œ/ˆÝ*Ô.¨Ñ?Ô?Ð?r‚   ÚinpÚFxGraphHashDetailsr�   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   rº   r‡   c                óÂ  •— t          | t          j        ¦  «        rt          t	          | ¦  «        ¦  «        S t          | t
          ¦  «        r9|                      dd¬¦  «        }t          |¦  «        dk    r|n|d d…         dz   S t          | ¦  «        ‰j	        v r6t           ‰j	        t          | ¦  «                 | ¦  «        d         ¦  «        S t          | ¦  «        S )Nr™  r¾  )Úerrorsé   z...rj   )
r�  rÏ   r"   r‡   rÀ  rY  ÚdecodeÚlenrÅ  rá  )rÁ  Úvalr  s     €rƒ   Úget_strz0FxGraphCachePickler.debug_lines.<locals>.get_stry  sÇ   ø€ Ý˜#�uœ|Ñ,Ô,ð 	 ÝÕ@ÀÑEÔEÑFÔFÐFÝ˜C¥Ñ'Ô'ð  Ø—j’j °�jÑ;Ô;�Ý! #™hœh¨$Ò.Ð.�s�s°C¸¸¸´JÀÑ4FÐFÝ�c‘”˜dÔ1Ð1Ð1åÐ9˜4Ô.­t°C©y¬yÔ9¸#Ñ>Ô>¸qÔAÑBÔBÐBå˜3‘x”x�r‚   ú[z] z]: z: ©rÁ  r   rº   r‡   )	ÚvarsrN  r�  ÚlistÚrangerC  rp  rÒ   Údict)
r  r<  rE  ÚlinesÚattrrÁ  ÚiiÚhÚkÚvs
   `         rƒ   Údebug_lineszFxGraphCachePickler.debug_linesr  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Ð<Ð<Ñ=Ô=Ð=Ñ=Øˆr‚   ©FF)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º   r  )r  r   rº   r   )rÖ  r×  rº   r  )r·  rX   rº   r$  )rÁ  r   rº   rY  rG  )r<  r=  rº   r�   )r}   r~   r   r‰  rÕ  r€   r  r  r%  rø  rã  rä  rè  rê  rï  rñ  rð  r"  rp  r;  rR  Ú__classcell__)rò  s   @rƒ   rÔ  rÔ  w  s‰  ø€ € € € € € ðð ð 02ÐÐ1Ð1Ð1Ñ1ð
 16Ø#(ð	)ð )ð )ð )ð )ð )ð )ðX!ð !ð !ð !ðF ð*ð *ð *ñ „\ð*ð%ð %ð %ð %ð$Fð $Fð $Fð $FðL#ð #ð #ð #ð#ð #ð #ð #ð;ð ;ð ;ð ;ð#ð #ð #ð #ð&Jð Jð Jð Jð*%ð %ð %ð %ð(?ð ?ð ?ð ?ð@ð @ð @ð @ð ð  ð  ð  ð  ð  ð  ð  r‚   rÔ  Ú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 r¾   rÊ  r²  s    rƒ   rÈ  z!build_code_hash.<locals>.<lambda>˜  s   € ÈÌ€ r‚   rÊ   Úrbr™  r¼   )rÌ   ÚpkgutilÚiter_modulesÚmodule_finderÚ	find_specr{   Úoriginr  râ  ÚencodeÚreadÚispkgÚbuild_code_hashÚsubmodule_search_locations)rU  rW  rX  ÚlibÚspecÚmodulerª  s          rƒ   re  re  •  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_keyF©Úlog_pt2_compile_eventÚrootr‡   rº   rY  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	script.ldc                óP   •— g | ]"}t           j                             ‰|¦  «        ‘Œ#S r�   )r  r	  rÃ   )rÀ   rÁ   Úinductor_roots     €rƒ   ú
<listcomp>z4torch_key.<locals>.get_code_hash.<locals>.<listcomp>¶  s)   ø€ ÐSÐSÐSÀ!�rœwŸ|š|¨M¸1Ñ=Ô=ÐSÐSÐSr‚   r™  rÞ   r\  )r  r	  ÚdirnameÚ__file__ÚhashlibÚsha256râ  rÏ   Ú__version__rb  re  rT  r  rc  Údigest)rn  Úextra_filesrX  r	  rª  rq  s        @rƒ   Ú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)rn  r‡   rº   rY  )	r'   r)   Ú	is_fbcoder6   Úlibfb.pyr{  Úget_file_contentsÚrstriprb  )rz  r{  s     rƒ   Ú	torch_keyr�  ¥  s4  € õ
 
Ð4ÈEÐ	RÑ	RÔ	Rð Xð XÝÔÑ!Ô!ð 	.ð'ð 'ð 'ð 'ð& !�=¥Ñ-Ô-ð-Xð Xð Xð Xñ Xô Xð Xð Xð0 	%Ð$Ð$Ð$Ð$Ð$à×(Ò(Ð)=Ñ>Ô>×EÒEÑGÔG×NÒNÈwÑWÔWð5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 r¾   )r  r	  rs  rt  r�   r‚   rƒ   Úget_inductor_rootrƒ  Ç  s   € ÝŒ7�?Š?�8Ñ$Ô$Ð$r‚   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.
    r®  rN  Nr°  r�   r‚   rƒ   r…  r…  Ë  s*   € € € € € € ðð ð
 ÐÐÑÐÐr‚   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‰  r�   r‚   rƒ   r  r  Õ  s   € € € € € ðð ð ð r‚   r  T)Úfrozenc                  óú   — e Zd ZU dZded<   dZded<   dZded	<   d
Zded<   dZded<   d+d„Z	d,d„Z
ed-d„¦   «         Zed.d„¦   «         Zed/d„¦   «         Zed0d!„¦   «         Zd+d"„Zd+d#„Zd+d$„Zd+d%„Zd+d&„Z	 d1d2d*„ZdS )3r
  zô
    Centralized validation for deciding whether an FX graph can use the cache.

    The cache key pickler still defends itself when serializing arbitrary objects,
    but non-cacheable inputs should be rejected here before hashing starts.
    r×  rÖ  r�   úSequence[InputType]Úexample_inputsNú_CompileFxKwargs | NoneÚ	fx_kwargsTr¡   Úrequire_shape_envúShapeEnv | NoneÚ	shape_envrº   r  c                ót  — |                       ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      d¬¦  «         |                      | j        ¦  «         | j        �|                      | j        ¦  «         d S d S )NT©Úinclude_constants)	Ú_check_custom_passesÚ_check_frozen_paramsÚ_check_runtime_constant_foldingÚ_check_compiler_bisectorÚ_check_shape_envÚvalidate_graphÚ_check_cache_key_objectrŠ  rŒ  r  s    rƒ   ÚvalidatezCacheabilityValidator.validateê  s¶   € Ø×!Ò!Ñ#Ô#Ð#Ø×!Ò!Ñ#Ô#Ð#Ø×,Ò,Ñ.Ô.Ð.Ø×%Ò%Ñ'Ô'Ð'Ø×ÒÑÔÐØ×Ò¨dÐÑ3Ô3Ð3Ø×$Ò$ TÔ%8Ñ9Ô9Ð9ØŒ>Ð%Ø×(Ò(¨¬Ñ8Ô8Ð8Ð8Ð8ð &Ð%r‚   r’  c                óÈ  — | j                              ¦   «         D �]F}t          |t          j        j        ¦  «        sŒ#|j        j        D �]}t          |j        t          j	        j
        ¦  «        rH|j                             ¦   «         s/|                      d|j                             ¦   «         › �¦  «         |j        dk    rLt          t          | j         |j        ¦  «        t          j        j        ¦  «        r|                      d¦  «         |rM|j        dk    rB	 |                      ||j        ¦  «        }n# t&          $ r Y Œüw xY w|                      |¦  «         �Œ�ŒHd S )Nz!Can't cache HigherOrderOperator: rÄ   zCan't cache torchbind objectsÚget_attr)rÖ  Úmodulesr�  rÏ   rë  ÚGraphModuler  Únodesr¹   Ú_opsÚHigherOrderOperatorÚ	cacheabler  r{   r7  rÄ   Ú_CÚScriptObjectÚ	_get_attrrý  r™  )r  r’  ri  ÚnoderM  s        rƒ   r˜  z$CacheabilityValidator.validate_graphõ  sj  € Ø”g—o’oÑ'Ô'ð 	7ñ 	7ˆFÝ˜f¥e¤hÔ&:Ñ;Ô;ð ØØœÔ*ð 7ñ 7�å˜tœ{­E¬JÔ,JÑKÔKðà œK×1Ò1Ñ3Ô3ðð —K’KØP¸D¼K×<LÒ<LÑ<NÔ<NÐPÐPñô ð ð ”7˜iÒ'Ð'­JÝ˜DœG T¤[Ñ1Ô1µ5´8Ô3Hñ-ô -Ð'ð —K’KÐ ?Ñ@Ô@Ð@Ø$ð 7¨¬°JÒ)>Ð)>ð!Ø#Ÿ~š~¨f°d´kÑBÔB˜˜øÝ)ð !ð !ð !Ø ˜ð!øøøà×0Ò0°Ñ6Ô6Ð6ùñ-7ð	7ð 	7s   ÄD9Ä9
EÅEr·  r"   c                óL   — | j         rt                               d¦  «         d S d S )Nzmkldnn tensors unpickleable)r	  r
  r  ©r·  s    rƒ   r  z"CacheabilityValidator.check_tensor  s4   € àŒ;ð 	HÝ!×(Ò(Ð)FÑGÔGÐGÐGÐGð	Hð 	Hr‚   Úreasonr‡   r   c                ó    — t          | ¦  «        ‚r¾   )r  )r©  s    rƒ   r  zCacheabilityValidator.bypass  s   € å  Ñ(Ô(Ð(r‚   r‡  rÎ  c                ó„   — t                                dt          | ¦  «        | | j        f¬¦  «         t	          d¦  «        | ‚)NzFailed to pickle cache key©Úexc_info)ÚlogÚwarningrÅ  Ú__traceback__r  )r‡  s    rƒ   r6  z-CacheabilityValidator.bypass_for_pickle_error  sE   € å�ŠØ(Ý˜1‘g”g˜q !¤/Ð2ð 	ñ 	
ô 	
ð 	
õ !Ð!=Ñ>Ô>ÀAÐEr‚   ri  r¹   r   c                ó&   — ddl m}  || |¦  «        S )Nr   )r¥  )Útorch.fx.graph_moduler¥  )ri  r¹   r¥  s      rƒ   r¥  zCacheabilityValidator._get_attr"  s&   € à3Ð3Ð3Ð3Ð3Ð3àˆy˜ Ñ(Ô(Ð(r‚   c                ó~  — t          ¦   «         dk    rZt          t          j        ¦  «        D ]@}t	          |t
          ¦  «        r|                     ¦   «         s|                      d¦  «         ŒAt          j	        t          t          j
        ¦  «        t          t          j        ¦  «        ¦  «        D ]@}t	          |t
          ¦  «        r|                     ¦   «         s|                      d¦  «         ŒAt          j	        t          t          j        ¦  «        t          t          j        ¦  «        ¦  «        D ]@}t	          |t
          ¦  «        r|                     ¦   «         s|                      d¦  «         ŒAt          j        �4t	          t          j        t          ¦  «        s|                      d¦  «         t          j        �4t	          t          j        t          ¦  «        s|                      d¦  «         t          j        D ];}t%          |¦  «        r*t	          |t
          ¦  «        s|                      d¦  «         Œ<d S )NÚearlyz Unsupported pre grad custom passz!Unsupported post grad custom passzUnsupported joint custom passz#Unsupported _pre_fusion_custom_passz$Unsupported _post_fusion_custom_passz(Unsupported _fuse_ddp_communication_pass)Úresolve_pre_grad_pass_timingrK   r)   Úpre_grad_custom_passr�  rE   Úuuidr  Ú	itertoolsÚchainÚpost_grad_custom_pre_passÚpost_grad_custom_post_passÚjoint_custom_pre_passÚjoint_custom_post_passÚ_pre_fusion_custom_passrJ   Ú_post_fusion_custom_passÚ_fuse_ddp_communication_passesÚcallable)r  Úps     rƒ   r“  z*CacheabilityValidator._check_custom_passes(  s  € õ
 (Ñ)Ô)¨WÒ4Ð4Ý,­VÔ-HÑIÔIð Dð D�Ý! !¥_Ñ5Ô5ð D¸Q¿VºV¹X¼Xð DØ—K’KÐ BÑCÔCÐCøÝ”Ý#¥FÔ$DÑEÔEÝ#¥FÔ$EÑFÔFñ
ô 
ð 	Að 	AˆAõ ˜a¥Ñ1Ô1ð A¸¿º¹¼ð AØ—’Ð?Ñ@Ô@Ð@øå”Ý#¥FÔ$@ÑAÔAÝ#¥FÔ$AÑBÔBñ
ô 
ð 	=ð 	=ˆAõ ˜a¥Ñ1Ô1ð =¸¿º¹¼ð =Ø—’Ð;Ñ<Ô<Ð<øõ Ô)Ð5Ý�fÔ<Õ>QÑRÔRð CØ—’ÐAÑBÔBÐBÝÔ*Ð6Ý�fÔ=Õ?RÑSÔSð DØ—’ÐBÑCÔCÐCÝÔ6ð 	Hð 	HˆAÝ˜‰{Œ{ð H¥:¨aµÑ#AÔ#Að HØ—’ÐFÑGÔGÐGøð	Hð 	Hr‚   c                óž   — t          | j        ¦  «        r6t          j                             d¦  «        s|                      d¦  «         d S d S d S )Nz,pytorch/inductor:allow_freezing_with_cachingz$Skipping graph with frozen constants)rL   rÖ  rÏ   Ú_utils_internalÚjustknobs_checkr  r  s    rƒ   r”  z*CacheabilityValidator._check_frozen_paramsJ  sf   € å˜TœWÑ%Ô%ð 	@­eÔ.C×.SÒ.SØ:ñ/
ô /
ð 	@ð �KŠKÐ>Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@ð 	@ð 	@r‚   c                óV   — t           j        j        r|                      d¦  «         d S d S )NzORuntime constant folding can introduce constants that aren't static across runs)r)   Úaot_inductorÚuse_runtime_constant_foldingr  r  s    rƒ   r•  z5CacheabilityValidator._check_runtime_constant_foldingQ  s?   € ÝÔÔ;ð 	Ø�KŠKð%ñô ð ð ð ð	ð 	r‚   c                ó‚   — ddl m} |j        r1t                               d¦  «         |                      d¦  «         d S d S )Nr   )ÚCompilerBisectorz%don't cache graph when bisect enabledzcompiler bisector enabled)Ú!torch._inductor.compiler_bisectorrÊ  Úbisection_enabledr®  Údebugr  )r  rÊ  s     rƒ   r–  z.CacheabilityValidator._check_compiler_bisectorX  sU   € ØFÐFÐFÐFÐFÐFàÔ-ð 	5Ý�IŠIÐ=Ñ>Ô>Ð>Ø�KŠKÐ3Ñ4Ô4Ð4Ð4Ð4ð	5ð 	5r‚   c                óˆ   — | j         r8| j        €3t                               d¦  «         |                      d¦  «         d S d S d S )Nzfx graph cache no shape envzNo shape env)r�  r�  r®  rÍ  r  r  s    rƒ   r—  z&CacheabilityValidator._check_shape_env_  sQ   € ð Ô!ð 	( d¤nÐ&<Ý�IŠIÐ3Ñ4Ô4Ð4Ø�KŠK˜Ñ'Ô'Ð'Ð'Ð'ð	(ð 	(Ð&<Ð&<r‚   rÁ  Úseenúset[int] | Nonec                ó”  — |€t          ¦   «         }t          |¦  «        }||v rd S |                     |¦  «         t          |t          j        ¦  «        r|                      |¦  «         d S t          |t          j        j        j	        j
        ¦  «        r|                      d¦  «         d S t          |t          ¦  «        rH|                     ¦   «         D ]1\  }}|                      ||¦  «         |                      ||¦  «         Œ2d S t          |t          t           t"          f¦  «        r|D ]}|                      ||¦  «         Œd S d S )Nr  )ÚsetÚidÚaddr�  rÏ   r"   r  rë  rì  rí  rî  r  rK  rN  r™  rI  rË   ÚAbstractSet)r  rÁ  rÏ  Úobj_idrœ   r.  Úitems          rƒ   r™  z-CacheabilityValidator._check_cache_key_objectf  s]  € ð
 ˆ<Ý‘5”5ˆDå�C‘”ˆØ�Tˆ>ˆ>ØˆFØ�Š�ÑÔÐå�c�5œ<Ñ(Ô(ð 	9Ø×Ò˜cÑ"Ô"Ð"ØˆFÝ˜�UœXÔ2ÔBÔPÑQÔQð 	9Ø�KŠKÐ,Ñ-Ô-Ð-Ð-Ð-Ý˜�TÑ"Ô"ð 	9Ø!Ÿiši™kœkð :ð :‘
��UØ×,Ò,¨S°$Ñ7Ô7Ð7Ø×,Ò,¨U°DÑ9Ô9Ð9Ð9ð:ð :õ ˜�d¥E­;Ð7Ñ8Ô8ð 	9Øð 9ð 9�Ø×,Ò,¨T°4Ñ8Ô8Ð8Ð8ð	9ð 	9ð9ð 9r‚   r$  )r’  r¡   rº   r  )r·  r"   rº   r  )r©  r‡   rº   r   )r‡  rÎ  rº   r   )ri  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  r6  r¥  r“  r”  r•  r–  r—  r™  r�   r‚   rƒ   r
  r
  Û  s®  € € € € € € ðð ð ÐÐÑØ*,€NÐ,Ð,Ð,Ñ,Ø)-€IÐ-Ð-Ð-Ñ-Ø"ÐÐ"Ð"Ð"Ñ"Ø!%€IÐ%Ð%Ð%Ñ%ð	9ð 	9ð 	9ð 	9ð7ð 7ð 7ð 7ð8 ðHð Hð Hñ „\ðHð ð)ð )ð )ñ „\ð)ð ðFð Fð Fñ „\ðFð ð)ð )ð )ñ „\ð)ð
 Hð  Hð  Hð  HðD@ð @ð @ð @ðð ð ð ð5ð 5ð 5ð 5ð(ð (ð (ð (ð !%ð9ð 9ð 9ð 9ð 9ð 9ð 9r‚   r
  úOrderedSet[str]Ú"_warned_pre_grad_pass_missing_uuidÚcustom_passc                óX   — t          | t          ¦  «        o|                      ¦   «         d uS r¾   )r�  rE   r·  ©rÚ  s    rƒ   Ú_custom_pass_has_uuidrÝ  „  s)   € Ý�k¥?Ñ3Ô3ÐV¸×8HÒ8HÑ8JÔ8JÐRVÐ8VÐVr‚   c                óL   — t          | dd ¦  «        pt          | ¦  «        j        S )Nr   )rÄ   rÅ  r   rÜ  s    rƒ   Ú_custom_pass_namerß  ˆ  s$   € Ý�; °Ñ5Ô5ÐW½¸kÑ9JÔ9JÔ9WÐWr‚   úLiteral['early', 'late']c                 ó¼  — t           j        } t          t           j        ¦  «        }d„ |D ¦   «         }|rd                     d„ |D ¦   «         ¦  «        nd}| dk    rf| }|rdnd} | dk    rW|rU|t
          vrLt
                               |¦  «         t                               d|¦  «         t          j
        d	d
|¬¦  «         | dk    r|rt          d|› d�¦  «        ‚| S )aŸ  Resolve the effective pre-grad pass timing from the config.

    "default" is resolved based on whether the custom pass provides a UUID:
    passes with a UUID (or no custom pass) run "late" (after cache lookup),
    passes without a UUID run "early" (before cache lookup).

    Raises RuntimeError if a custom pass without a UUID is explicitly set to
    run "late", since the cache key cannot account for it.
    c                ó0   — g | ]}t          |¦  «        °|‘ŒS r�   )rÝ  ©rÀ   rÚ  s     rƒ   rr  z0resolve_pre_grad_pass_timing.<locals>.<listcomp>˜  s6   € ð ð ð àÝ$ [Ñ1Ô1ðØðð ð r‚   ú, c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r¾   )rß  rã  s     rƒ   rÂ   z/resolve_pre_grad_pass_timing.<locals>.<genexpr>ž  s+   è è € ÐXÐX°[Õ# KÑ0Ô0ÐXÐXÐXÐXÐXÐXr‚   z<none>ÚdefaultÚlater´  z³pre_grad_custom_pass %s does not implement uuid(); falling back to early timing (pre-grad pass cache will be bypassed). Implement uuid() on your CustomGraphPass to enable caching.Úbackend_compileT)Úpre_grad_pass_missing_uuidÚpre_grad_pass_namezpre_grad_custom_pass zx must implement uuid() to run late (after cache lookup). Either implement uuid() or set pre_grad_pass_timing to 'early'.)r)   Úpre_grad_pass_timingrK   r¶  rÃ   rÙ  rÔ  r®  r¯  r%   Útry_add_pt2_compilerÿ   )rO  Úcustom_passesÚpasses_missing_uuidÚmissing_uuid_pass_namesÚsupports_lates        rƒ   rµ  rµ  Œ  sK  € õ 39Ô2M€FÝ+­FÔ,GÑHÔH€Mðð à(ðñ ô Ðð ð	ˆ�	Š	ÐXÐXÐDWÐXÑXÔXÑXÔXÐXàð ð �ÒÐØ/Ð/ˆØ(Ð5��¨gˆØ�WÒÐ ÐØ&Õ.PÐPÐPÝ2×6Ò6Ð7NÑOÔOÐOÝ—’ðRð ,ñ	ô ð õ #Ô6Ø%Ø/3Ø'>ðñ ô ð ð �ÒÐÐ/ÐÝð/Ð$;ð /ð /ð /ñ
ô 
ð 	
ð €Mr‚   c                  ó   — e Zd ZU ded<   dS )ÚHashableOpaqueValuer–   ÚordinalNr|   r�   r‚   rƒ   rò  rò  ¿  s   € € € € € € à€L€L�L€L€Lr‚   rò  c                  ó"  — e Zd ZdZddgZdZej        ej        ej	        ej
        ej        ej        ej        fZej        j        j        ej        j        j        ej        j        j	        ej        j        j
        ej        j        j        ej        j        j        ej        j        j        fZed*d	„¦   «         Zed*d
„¦   «         Zed+d„¦   «         Zed,d„¦   «         Zed-d„¦   «         Zed.d„¦   «         Zed/d„¦   «         Zd0d „Zd1d#„Zd2d%„Zd3d(„Zd)S )4r=  zz
    Object to capture all the details for a compiled FX graph relevant to computing
    a safe and stable cache key.
    Úgraph_idÚcompile_region_name)rD  Úexample_valuer.  r   rº   r¡   c                ó”  ‡ — t          |t          j        ¦  «        rdS t          |t          t          t
          t          f¦  «        rt          ˆ fd„|D ¦   «         ¦  «        S t          |t          ¦  «        rRt          ˆ fd„t          j
        |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         ¦  «        S dS )NTc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r¾   ©Ú_contains_tensor©rÀ   rÁ   r.  s     €rƒ   rÂ   z6FxGraphHashDetails._contains_tensor.<locals>.<genexpr>ç  s1   øè è € Ð>Ð>°1�s×+Ò+¨AÑ.Ô.Ð>Ð>Ð>Ð>Ð>Ð>r‚   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r¾   rú  rü  s     €rƒ   rÂ   z6FxGraphHashDetails._contains_tensor.<locals>.<genexpr>é  sE   øè è € ð ð àð ×$Ò$ QÑ'Ô'ðð ð ð ð ð r‚   F)r�  rÏ   r"   rI  rË   ri   Ú	frozensetÚanyrK  r¸  r¹  r)  r¯  ©r.  r.  s   ` rƒ   rû  z#FxGraphHashDetails._contains_tensorâ  sÇ   ø€ å�e�Uœ\Ñ*Ô*ð 	Ø�4Ý�e�d¥E­:µyÐAÑBÔBð 	?ÝÐ>Ð>Ð>Ð>¸Ð>Ñ>Ô>Ñ>Ô>Ð>Ý�e�TÑ"Ô"ð 	Ýð ð ð ð å"œ¨¯ª©¬°u·|²|±~´~ÑFÔFðñ ô ñ ô ð ð ˆur‚   c                ó°  ‡ — t          |t          j        ¦  «        r|j        j        dk    S t          |t
          t          t          t          f¦  «        rt          ˆ fd„|D ¦   «         ¦  «        S t          |t          ¦  «        rRt          ˆ fd„t          j        |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         ¦  «        S dS )NÚcpuc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r¾   ©Ú_contains_cpu_tensorrü  s     €rƒ   rÂ   z:FxGraphHashDetails._contains_cpu_tensor.<locals>.<genexpr>ô  s1   øè è € ÐBÐB°q�s×/Ò/°Ñ2Ô2ÐBÐBÐBÐBÐBÐBr‚   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r¾   r  rü  s     €rƒ   rÂ   z:FxGraphHashDetails._contains_cpu_tensor.<locals>.<genexpr>ö  sE   øè è € ð ð àð ×(Ò(¨Ñ+Ô+ðð ð ð ð ð r‚   F)r�  rÏ   r"   rŽ   rÅ  rI  rË   ri   rþ  rÿ  rK  r¸  r¹  r)  r¯  r   s   ` rƒ   r  z'FxGraphHashDetails._contains_cpu_tensorï  sÓ   ø€ å�e�Uœ\Ñ*Ô*ð 	.Ø”<Ô$¨Ò-Ð-Ý�e�d¥E­:µyÐAÑBÔBð 	CÝÐBÐBÐBÐB¸EÐBÑBÔBÑBÔBÐBÝ�e�TÑ"Ô"ð 	Ýð ð ð ð å"œ¨¯ª©¬°u·|²|±~´~ÑFÔFðñ ô ñ ô ð ð ˆur‚   rz   c                óÈ   — t          | t          j        ¦  «        r| j        S t          | t          ¦  «        r+	 t          j        | ¦  «        j        S # t
          $ r Y d S w xY wd S r¾   )r�  rÏ   rŽ   rÅ  r‡   rÿ   rÌ  s    rƒ   Ú_device_typezFxGraphHashDetails._device_typeü  so   € å�e�Uœ\Ñ*Ô*ð 	Ø”:ÐÝ�e�SÑ!Ô!ð 	ðÝ”| EÑ*Ô*Ô/Ð/øÝð ð ð Ø�t�tðøøøàˆts   ¸A Á
AÁAr¹   ÚtargetsrÈ   rÓ   c                ó@   — ||v s||v rdS t          |dd ¦  «        }||v S )NTÚoverloadpacket)rÄ   )r.  r¹   r	  rÓ   Úoverload_packets        rƒ   Ú_is_factory_targetz%FxGraphHashDetails._is_factory_target  s;   € ð �WÐÐ ¨'Ð 1Ð 1Ø�4Ý! &Ð*:¸DÑAÔAˆØ 'Ð)Ð)r‚   r¦  útorch.fx.Nodec                óD   ‡— t          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3  óD   •K  — | ]}|‰j         v ¯‰j         |         V — Œd S r¾   )r¿  )rÀ   rœ   r¦  s     €rƒ   rÂ   z6FxGraphHashDetails._tensor_metadata.<locals>.<genexpr>  s>   øè è € ð 
ð 
Ø"À#ÈÌÐBRÐBRˆDŒI�cŒNÐBRÐBRÐBRÐBRð
ð 
r‚   )rË   ÚTENSOR_METADATA_KEYS)r.  r¦  s    `rƒ   Ú_tensor_metadataz#FxGraphHashDetails._tensor_metadata  s>   ø€ åð 
ð 
ð 
ð 
Ø&)Ô&>ð
ñ 
ô 
ñ 
ô 
ð 	
r‚   c                óV  — |j         dk    rd S |                      |j        t          ¦   «         t	          ¦   «         ¦  «        }|                      |j        | j        | j        ¦  «        }|s|sd S |                      |j         	                    d¦  «        ¦  «        }|�|S t          |j        dd ¦  «        }|�Ft          |j        |j        ¦  «        D ]+\  }}|j        dk    r|                      |¦  «        }|�|c S Œ,|rd S t          j        t          j        ¦   «         ¦  «        j        S )NÚcall_functionrŽ   Ú_schema)r7  r  r¹   rÍ   rÕ   ÚLIKE_FACTORY_TARGETSÚLIKE_FACTORY_PACKETSr  ÚkwargsrB  rÄ   ÚzipÚ	argumentsÚargsr{   rÏ   rŽ   Úget_default_devicerÅ  )r.  r¦  Úis_default_device_factoryÚis_like_factoryrá   ÚschemaÚargr.  s           rƒ   Ú_factory_device_typez'FxGraphHashDetails._factory_device_type  sC  € àŒ7�oÒ%Ð%Ø�4à$'×$:Ò$:ØŒKÝ/Ñ1Ô1Ý8Ñ:Ô:ñ%
ô %
Ð!ð
 ×0Ò0ØŒKØÔ$ØÔ$ñ
ô 
ˆð
 *ð 	¨_ð 	Ø�4à×&Ò& t¤{§¢°xÑ'@Ô'@ÑAÔAˆØÐ"ØÐå˜œ i°Ñ6Ô6ˆØÐÝ! &Ô"2°D´IÑ>Ô>ð +ð +‘
��UØ”8˜xÒ'Ð'Ø"%×"2Ò"2°5Ñ"9Ô"9�KØ"Ð.Ø*Ð*Ð*Ð*øàð 	Ø�4ÝŒ|�EÔ4Ñ6Ô6Ñ7Ô7Ô<Ð<r‚   rÖ  útorch.fx.GraphModule | NonerŠ  r‰  c                óˆ  — |                       |¦  «        rdS |€dS |                     ¦   «         D ]‘}t          |t          j        j        ¦  «        sŒ"|j        j        D ]b}|                      |¦  «        }|                       |¦  «        r  dS |  	                    |¦  «        s|  
                    |¦  «        dk    r  dS ŒcŒ’dS )NTFr  )r  r�  r�  rÏ   rë  rž  r  rŸ  r  rû  r!  )r.  rÖ  rŠ  ri  r¦  r­  s         rƒ   Ú_may_generate_cpu_cpp_codez-FxGraphHashDetails._may_generate_cpu_cpp_code8  så   € ð ×#Ò# NÑ3Ô3ð 	Ø�4Øˆ:Ø�5Ø—j’j‘l”lð 
	 ð 
	 ˆFÝ˜f¥e¤hÔ&:Ñ;Ô;ð ØØœÔ*ð  ð  �Ø"%×"6Ò"6°tÑ"<Ô"<�Ø×+Ò+¨OÑ<Ô<ð  Ø˜4˜4˜4Ø×+Ò+¨OÑ<Ô<ð  Ø×,Ò,¨TÑ2Ô2°eÒ;Ð;à˜4˜4˜4øð ð ˆur‚   rŒ  r¨   Úinputs_to_checkúSequence[int]r  c                ót  — || _         g }i }|D ]™}t          t          |¦  «        ¦  «        rft          |¦  «        |vr,t	          t          |¦  «        ¦  «        |t          |¦  «        <   |                     |t          |¦  «                 ¦  «         Œ„|                     |¦  «         Œš|| _        t          j	        | _	        i | _
        t          |                     ¦   «         ¦  «        D ]Z\  }}	|| j        vrLt          |	¦  «        t          t          fv r%t!          t          |	¦  «        ¦  «        | j
        |<   ŒP|	| j
        |<   Œ[ddlm}
m}m} ddlm} g | _        |��>|                     ¦   «         D �](}t3          |t4          j        j        ¦  «        sŒ#t;          j        |j                              d|¬¦  «        |j                              d|¬¦  «        ¦  «        D ]»}ddl!m"} |
 #                    |j$        d         ¦  «        }d }t3          ||¦  «        r9|j%        r+tM          t          d„ |j%        D ¦   «         ¦  «        ¦  «        }|j'        } ||¦  «        }|
 (                    |j$        d	         ¦  «        }| j                             |||f¦  «         Œ¼�Œ*tS          d
„ |D ¦   «         ¦  «         }|rAt4          j*         +                    ¦   «         r#t4          j*         ,                    ¦   «         | _-        t5          j.        ¦   «         t5          j/        ¦   «         t4          j0        j1        j2        f| _3        th          j5        j6        dk     r:th          j5        j7        s)|  8                    ||¦  «        rts          ¦   «         | _:        th          j;        j<        | _<        t5          j=        ¦   «         | _>        t4          j?        j@        jA        jB        t4          j?        j@        jA        jC        t4          j?        j@        jA        jD        f| _E        |�‡|jF         G                    d¦  «        }|�kth          jH        jI        }|jJ        |jK        k    r|jJ        �|jJ        |k    r|jJ        | _L        n+|jJ        �|jJ        |k    s|jK        �|jK        |k    r|| _M        t�          ¦   «         | _O        t            Q                    ¦   «         | _R        ti          jS        dd¬¦  «        | _T        t«          jS        dd¬¦  «        | _V        t¯          ¦   «         dk    r$|  X                    th          jY        ¦  «        | _Y        |  X                    th          jZ        ¦  «        | _Z        t4          j[        j4        j\        | _]        |  X                    th          j^        ¦  «        | _^        |  X                    th          j_        ¦  «        | __        |  X                    th          j`        ¦  «        | _`        |  a                    th          jb        ¦  «        | _b        |  a                    th          jc        ¦  «        | _c        |  a                    th          jd        ¦  «        | _d        tË          ¦   «          tÍ          tÏ          | jX        tÑ          ji        ¦   «         ¦  «        ¦  «        | _h        d„ tÕ          j        ¦   «         D ¦   «         | _j        |  k                    th          jl        ¦  «        | _m        i | _n        tÞ           p                    ¦   «         }|�A|jn        r<d„ t          |jn                             ¦   «         d„ ¬¦  «        D ¦   «         | _n        d S d S d S )Nr   )Úkernel_side_tableÚ triton_kernel_wrapper_functionalÚtriton_kernel_wrapper_mutation)Ú9user_defined_triton_kernel_transitive_closure_source_coder  )r7  r¹   )Ú	AutotunerÚ
kernel_idxc              3  ó�   K  — | ]A}t          d „ |                     ¦   «                              ¦   «         D ¦   «         ¦  «        V — ŒBdS )c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r¾   ©r‡   )rÀ   Úkvs     rƒ   rÂ   z8FxGraphHashDetails.__init__.<locals>.<genexpr>.<genexpr>‘  s(   è è € Ð*TÐ*T°r­3¨r©7¬7Ð*TÐ*TÐ*TÐ*TÐ*TÐ*Tr‚   N)rÌ   Ú
all_kwargsrN  )rÀ   Úcs     rƒ   rÂ   z.FxGraphHashDetails.__init__.<locals>.<genexpr>�  sa   è è € ð '"ð '"à()õ %+Ð*TÐ*T¸Q¿\º\¹^¼^×=QÒ=QÑ=SÔ=SÐ*TÑ*TÔ*TÑ$TÔ$Tð'"ð '"ð '"ð '"ð '"ð '"r‚   Úconstant_args_idxc              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r¾   )r�  rÏ   r"   r¿   s     rƒ   rÂ   z.FxGraphHashDetails.__init__.<locals>.<genexpr>£  s.   è è € Ð"WÐ"WÀ1¥:¨aµ´Ñ#>Ô#>Ð"WÐ"WÐ"WÐ"WÐ"WÐ"Wr‚   rj   Úcudagraph_annotationFT©Úignore_private_configsÚreadonly_valuesr´  c                óH   — i | ]\  }}|®||                      dd¬¦  «        “Œ S )NFTr7  )Úsave_config_portable)rÀ   rŽ   Úcustom_configs      rƒ   ú
<dictcomp>z/FxGraphHashDetails.__init__.<locals>.<dictcomp>  sL   € ð /
ð /
ð /
ñ &�˜ØÐ(ð	 �M×6Ò6Ø',¸dð 7ñ ô ð )Ð(Ð(r‚   c                ó4   — i | ]\  }}t          |¦  «        |“ŒS r�   r0  )rÀ   ÚsymrD  s      rƒ   r=  z/FxGraphHashDetails.__init__.<locals>.<dictcomp>  s4   € ð )ð )ð )á�C˜õ �C‘”˜#ð)ð )ð )r‚   c                ó,   — t          | d         ¦  «        S ©Nr   r0  r²  s    rƒ   rÈ  z-FxGraphHashDetails.__init__.<locals>.<lambda>!  s   € Í#ÈaÐPQÌdÉ)Ì)€ r‚   rÊ   )qrÖ  rY   rÅ  rÓ  rò  rC  rÒ   rŠ  ÚcconfigÚcache_key_tagrŒ  rÌ   rN  ÚEXCLUDED_KWARGSrÒ  ri   r…  Ú*torch._higher_order_ops.triton_kernel_wrapr(  r)  r*  Útorch._inductor.codegen.wrapperr+  Úuser_defined_triton_sourcer�  r�  rÏ   rë  rž  r¸  r¹  r  Ú
find_nodesÚtriton.runtime.autotunerr,  Ú
get_kernelr  Úconfigsr‡   r"  Úget_constant_argsrÿ  ÚacceleratorÚis_availableÚcurrent_device_indexÚdefault_cuda_device_indexÚ$are_deterministic_algorithms_enabledÚ-is_deterministic_algorithms_warn_only_enabledÚutilsÚdeterministicÚfill_uninitialized_memoryÚ!deterministic_algorithms_settingsr)   ÚcppÚthreadsÚdynamic_threadsr$  rV   Úcpp_runtime_thread_countÚtraceÚprovenance_tracking_levelÚget_default_dtypeÚdefault_dtypeÚbackendsrˆ   ÚmatmulÚfp32_precisionÚ&allow_fp16_reduced_precision_reductionÚ&allow_bf16_reduced_precision_reductionÚcuda_matmul_settingsr¿  rB  r†   Ú
cudagraphsÚfwdÚbwdÚcudagraph_overrider6  r�  Útorch_versionrø   r  Úsystem_infor;  Úinductor_configr*   Úinductor_config_commsrµ  Ú_get_custom_pass_detailr¶  rº  Ú
_functorchÚbundled_autograd_cacheÚprecompile_enabledr»  r¼  r½  Ú_get_custom_pass_detail_unsafer¾  r¿  rÀ  r/   rË   Úmapr.   r¯  r-   Ú!_get_custom_partitioner_fn_detailÚcustom_partitioner_fnÚ_custom_partitioner_fnÚvar_to_hint_overrideÚFxGraphCacheÚ_get_shape_env)r  rÖ  rŠ  rŒ  r%  Úprocessed_inputsÚseen_opaquesr<  rP  rQ  r(  r)  r*  r+  ri  r¦  r,  ÚkernelrK  Úkernel_sourceÚconstant_argsÚno_tensor_inputsÚ
annotationræ  r�  s                            rƒ   r  zFxGraphHashDetails.__init__M  sl  € ð ˆŒð CEÐØ79ˆØ!ð 	-ð 	-ˆCÝ'­¨S©	¬	Ñ2Ô2ð -Ý�c‘7”7 ,Ð.Ð.Ý,?ÅÀLÑ@QÔ@QÑ,RÔ,R�L¥ C¡¤Ñ)Ø ×'Ò'¨µR¸±W´WÔ(=Ñ>Ô>Ð>Ð>à ×'Ò'¨Ñ,Ô,Ð,Ð,Ø.ˆÔÝ$Ô2ˆÔð
 -/ˆŒÝ˜9Ÿ?š?Ñ,Ô,Ñ-Ô-ð 	*ð 	*‰DˆAˆqØ˜Ô,Ð,Ð,Ý˜‘7”7�s¥JÐ/Ð/Ð/õ )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Ø"�GÝ! &¨)Ñ4Ô4ð +Ø!œ>ð Ý&)Ý &ð '"ð '"à-3¬^ð'"ñ '"ô '"ñ !"ô !"ñ'ô '˜Gð "(¤˜ð RÐQØ"ñô ð "ð
 %6×$GÒ$GØœÐ$7Ô8ñ%ô %�Mð Ô3×:Ò:Ø&¨°wÐ?ñô ð ð ñ= õD  #Ð"WÐ"WÈÐ"WÑ"WÔ"WÑWÔWÐWÐð ð 	V¥Ô 1× >Ò >Ñ @Ô @ð 	VÝ-2Ô->×-SÒ-SÑ-UÔ-UˆDÔ*õ Ô6Ñ8Ô8ÝÔ?ÑAÔAÝŒKÔ%Ô?ð2
ˆÔ.õ ŒJÔ Ò"Ð"Ý”JÔ.ð #à×/Ò/°°NÑCÔCð #õ -AÑ,BÔ,BˆDÔ)õ *0¬Ô)OˆÔ&õ #Ô4Ñ6Ô6ˆÔõ ŒNÔÔ&Ô5ÝŒNÔÔ&ÔMÝŒNÔÔ&ÔMð%
ˆÔ!ð ˆ>ØœŸšÐ%;Ñ<Ô<ˆJØÐ%Ý œ-Ô2�Ø”> Z¤^Ò3Ð3¸
¼Ð8RØ!”~¨Ò0Ð0Ø2<´.˜Ô/øØ ”nÐ0°Z´^ÀwÒ5NÐ5NØ”NÐ.°:´>ÀWÒ3LÐ3Là0:�DÔ-õ '™[œ[ˆÔÝ$×/Ò/Ñ1Ô1ˆÔÝ%Ô:Ø#(¸$ð 
ñ  
ô  
ˆÔõ &2Ô%FØ#(¸$ð&
ñ &
ô &
ˆÔ"õ
 (Ñ)Ô)¨WÒ4Ð4Ø(,×(DÒ(DÝÔ+ñ)ô )ˆDÔ%ð *.×)EÒ)EÝÔ,ñ*
ô *
ˆÔ&õ #(Ô"2Ô"9Ô"PˆÔØ*.×*FÒ*FÝÔ-ñ+
ô +
ˆÔ'ð &*×%AÒ%AÝÔ(ñ&
ô &
ˆÔ"ð '+×&BÒ&BÝÔ)ñ'
ô '
ˆÔ#ð (,×'JÒ'JÝÔ*ñ(
ô (
ˆÔ$ð )-×(KÒ(KÝÔ+ñ)
ô )
ˆÔ%ð /3×.QÒ.QÝÔ1ñ/
ô /
ˆÔ+õ
 	"Ñ#Ô#Ð#Ý%*Ý�Ô,Õ.CÔ.JÑ.LÔ.LÑMÔMñ&
ô &
ˆÔ"ð
/
ð /
õ *HÔ)MÑ)OÔ)Oð	/
ñ /
ô /
ˆÔ+ð '+×&LÒ&LÝÔ(ñ'
ô '
ˆÔ#ð 57ˆÔ!Ý ×/Ò/Ñ1Ô1ˆ	ØÐ  YÔ%CÐ ð)ð )å &ØÔ2×8Ò8Ñ:Ô:Ð@SÐ@Sð!ñ !ô !ð)ñ )ô )ˆDÔ%Ð%Ð%ð !Ð Ð Ð r‚   rÚ  ú
Any | Nonec                ó¬  ‡ — |sd S t          |t          ¦  «        rˆ fd„|D ¦   «         S t          |t          ¦  «        rt          ˆ fd„|D ¦   «         ¦  «        S t          |t          ¦  «        r|S t          |t          ¦  «        r|                     ¦   «         S t          |¦  «        rd S t          dt          t          |¦  «        ¦  «        › �¦  «        ‚)Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r�   ©rq  ©rÀ   rÁ   r  s     €rƒ   rr  zEFxGraphHashDetails._get_custom_pass_detail_unsafe.<locals>.<listcomp>3  s'   ø€ ÐPÐPÐP¸q�D×7Ò7¸Ñ:Ô:ÐPÐPÐPr‚   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r¾   rƒ  r„  s     €rƒ   rÂ   zDFxGraphHashDetails._get_custom_pass_detail_unsafe.<locals>.<genexpr>5  s1   øè è € ÐUÐUÀA˜×<Ò<¸QÑ?Ô?ÐUÐUÐUÐUÐUÐUr‚   zunknown config type: )	r�  rI  rË   r‡   rI   r·  rÁ  rþ   rÅ  ©r  rÚ  s   ` rƒ   rq  z1FxGraphHashDetails._get_custom_pass_detail_unsafe/  sí   ø€ Øð 	Ø�4Ý�k¥4Ñ(Ô(ð 	QØPÐPÐPÐPÀKÐPÑPÔPÐPÝ�k¥5Ñ)Ô)ð 	VÝÐUÐUÐUÐUÈÐUÑUÔUÑUÔUÐUÝ�k¥3Ñ'Ô'ð 	ØÐÝ�k¥>Ñ2Ô2ð 	&Ø×#Ò#Ñ%Ô%Ð%Ý�KÑ Ô ð 	ð �4ÝÐMµS½¸kÑ9JÔ9JÑ5KÔ5KÐMÐMÑNÔNÐNr‚   ú|CustomGraphPassCallable | list[CustomGraphPassCallable] | tuple[CustomGraphPassCallable, ...] | CustomGraphModulePass | Nonec                ó2  ‡ — |sd S t          |t          t          f¦  «        rt          ˆ fd„|D ¦   «         ¦  «        S t          |t          t          f¦  «        s,t          dt          t          |¦  «        ¦  «        › �¦  «        ‚|                     ¦   «         S )Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r¾   )rm  r„  s     €rƒ   rÂ   z=FxGraphHashDetails._get_custom_pass_detail.<locals>.<genexpr>N  s1   øè è € ÐNÐN¸Q˜×5Ò5°aÑ8Ô8ÐNÐNÐNÐNÐNÐNr‚   zunknown custom pass type: )	r�  rI  rË   rE   rD   rþ   r‡   rÅ  r·  r†  s   ` rƒ   rm  z*FxGraphHashDetails._get_custom_pass_detail@  sž   ø€ ð ð 	à�4Ý�k¥D­% =Ñ1Ô1ð 	OÝÐNÐNÐNÐNÀ+ÐNÑNÔNÑNÔNÐNÝ˜+­Õ9NÐ'OÑPÔPð 	XÝ Ð!V½cÅ$À{ÑBSÔBSÑ>TÔ>TÐ!VÐ!VÑWÔWÐWØ×ÒÑ!Ô!Ð!r‚   rt  rH   c                ó`   — |sd S t          |t          ¦  «        sJ ‚|                     ¦   «         S r¾   )r�  rG   r·  )r  rt  s     rƒ   rs  z4FxGraphHashDetails._get_custom_partitioner_fn_detailS  s;   € ð %ð 	Ø�4ÝÐ/Õ1DÑEÔEÐEÐEÐEØ$×)Ò)Ñ+Ô+Ð+r‚   N)r.  r   rº   r¡   )r.  r   rº   rz   )r¹   r   r	  rÈ   rÓ   rÈ   rº   r¡   )r¦  r  rº   rÈ   )r¦  r  rº   rz   )rÖ  r"  rŠ  r‰  rº   r¡   )
rÖ  r"  rŠ  r‰  rŒ  r¨   r%  r&  rº   r  )rÚ  r   rº   r€  )rÚ  r‡  rº   r€  )rt  rH   rº   r€  )r}   r~   r   r‰  rD  r  rÏ   Ú
empty_likeÚ	full_likeÚ	ones_likeÚ	rand_likeÚrandint_likeÚ
randn_likeÚ
zeros_liker  rÐ   rÑ   r  Úclassmethodrû  r  r%  r  r  r  r!  r$  r  rq  rm  rs  r�   r‚   rƒ   r=  r=  Ä  sê  € € € € € ðð ð "Ð#8Ð9€OØ3ÐàÔØŒØŒØŒØÔØÔØÔðÐð 	Œ	ŒÔ!ØŒ	ŒÔ ØŒ	ŒÔ ØŒ	ŒÔ ØŒ	ŒÔ#ØŒ	ŒÔ!ØŒ	ŒÔ!ðÐð ð
ð 
ð 
ñ „[ð
ð ð
ð 
ð 
ñ „[ð
ð ðð ð ñ „\ðð ð*ð *ð *ñ „[ð*ð ð
ð 
ð 
ñ „[ð
ð
 ð=ð =ð =ñ „[ð=ðB ðð ð ñ „[ðð(Vð Vð Vð VðDOð Oð Oð Oð""ð "ð "ð "ð&,ð ,ð ,ð ,ð ,ð ,r‚   r=  rÖ  r×  rŠ  r‰  rŒ  r¨   r%  r&  útuple[str, list[str]]c                ó<  — t          | |||¦  «        }t          |j        ¦  «        dk    }t          | |¦  «        }|                     |¦  «        }|                     |¦  «        }d                     |¦  «        }	t                               d|› d|	› �¦  «         ||fS )z=
    Generate a unique hash of the FX graph for caching.
    r   ú
z$FX graph cache hash details for key z:
)	r=  rC  rG  rÔ  r;  rR  rÃ   r®  rÍ  )
rÖ  rŠ  rŒ  r%  ÚdetailsrØ  Úpicklerrœ   rR  Ú	debug_strs
             rƒ   Úcompiled_fx_graph_hashr™  \  s£   € õ !  ^°YÀÑPÔP€GÝ&)¨'Ô*LÑ&MÔ&MÐQRÒ&RÐ#Ý! "Ð&EÑFÔF€Gð �/Š/˜'Ñ
"Ô
"€CØ×%Ò% gÑ.Ô.€KØ—	’	˜+Ñ&Ô&€IÝ‡I‚IÐH°SÐHÐH¸YÐHÐHÑIÔIÐIØ�ÐÐr‚   r—   r–   c                ó  — 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Ï   ÚdistributedrN  Úis_initializedr–   r)   r}  rÄ  Újustknobs_getval_intr®  ÚinfoÚdistÚdistributed_c10dÚ"_add_ephemeral_timeout_for_all_pgsr
   )r—   Úincreased_timeout_secÚfudge_factors      rƒ   Ú.add_ephemeral_timeout_increase_for_distributedr¦  r  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ñô ð ð !Ð r‚   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d'd „¦   «         Z
d!S )(ÚGuardedCachezJ
    Mixin for caches that have guards associated with their entries.
    r.  útype[GuardedCache[T]]Ú_keyr‡   rº   c                ó    — t          d¦  «        ‚)Nz.Implement _get_tmp_dir_for_key on parent class©ÚNotImplementedError)r.  rª  s     rƒ   Ú_get_tmp_dir_for_keyz!GuardedCache._get_tmp_dir_for_key“  s   € å!Ð"RÑSÔSÐSr‚   rœ   Ú	local_hitr¡   Ú
local_missÚ
remote_hitÚremote_missr  c                ó    — t          d¦  «        ‚)Nz(Implement _record_result on parent classr¬  ©r.  rœ   r¯  r°  r±  r²  s         rƒ   Ú_record_resultzGuardedCache._record_result—  s   € õ "Ð"LÑMÔMÐMr‚   ÚlocalÚremote_cacheúRemoteCache[JsonDataTy] | Noneú,Generator[tuple[T, bytes, bool], None, None]c              #  ó¢  K  — |�r|                       |¦  «        }t          j                             |¦  «        rÚt	          t          j        |¦  «        ¦  «        D ]¸}|                     d¦  «        rŒ	 t          t          j                             ||¦  «        d¦  «        5 }| 	                    ¦   «         }t          j        |¦  «        |dfV — d d d ¦  «         n# 1 swxY w Y   Œ�# t          $ r t                               dd¬¦  «         Y Œµw xY w|r¹	 |                     |¦  «        x}�lt!          |t"          ¦  «        sJ ‚|d         }	t!          |	t$          t&          f¦  «        sJ ‚t)          j        |	¦  «        }t          j        |¦  «        |dfV — d S d S # t          $ r& t                               d| j        d¬¦  «         Y d S w xY wd S )	Nr¼   r\  Tz,fx graph cache unable to load compiled graphr¬  rX  Fz %s unable to load compiled graph)r®  r  r	  rT  rÌ   ÚlistdirÚ
startswithr  rÃ   rc  rú  ÚloadsrÎ  r®  r¯  rB  r�  rK  r‡   rY  Úbase64Ú	b64decoder}   )
r.  r¶  r·  rœ   rh  r	  rª  rj  Ú
cache_datarX  s
             rƒ   Úiterate_over_candidatesz$GuardedCache.iterate_over_candidates¢  sc  è è € ð ñ 	Ø×-Ò-¨cÑ2Ô2ˆFÝŒw�~Š~˜fÑ%Ô%ð Ý"¥2¤:¨fÑ#5Ô#5Ñ6Ô6ð ð �DØ—’ sÑ+Ô+ð !Ø ðÝ!¥"¤'§,¢,¨v°tÑ"<Ô"<¸dÑCÔCð GÀqØ&'§f¢f¡h¤h˜GÝ"(¤,¨wÑ"7Ô"7¸À$Ð"FÐFÐFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gøøõ %ð ð ð ÝŸšØJØ%)ð $ñ ô ð ð ð ðøøøð ð 	ð
Ø".×"2Ò"2°3Ñ"7Ô"7Ð7�JÐDÝ% jµ$Ñ7Ô7Ð7Ð7Ð7Ø% fÔ-�DÝ% d­Sµ%¨LÑ9Ô9Ð9Ð9Ð9Ý$Ô.¨tÑ4Ô4�GÝ œ, wÑ/Ô/°¸%Ð?Ð?Ð?Ð?Ð?Ð?ð EÐDøõ ð ð ð Ý—’Ø6¸¼Ètð ñ ô ð ð ð ð ðøøøð	ð 	sI   Á4.C(Â".CÃC(ÃC 	Ã C(Ã#C 	Ã$C(Ã(&DÄDÄBF Æ,GÇGÚevaluate_guardsú5Callable[[str, list[int] | list[torch.SymInt]], bool]Úhintsú	list[int]ú(tuple[T | None, bytes | None, CacheInfo]c                ó’  — d}d}d}d}	d}
|                       |||¦  «        D ]_\  }}}
t          |d¦  «        sJ ‚|j        s|}|}d} n9t           ||j        |¦  «        ¦  «        }|r|}|}d}|j        }	 n
d}|j        }	Œ`d|i}|	�|	|d<   |duo|
}|duo|
 }|du s|o|}|du o|du}|                      |||||¬	¦  «         |||fS )
aY  
        Find the first cache entry in iterate_over_candidates that passes `evaluate_guards`.

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

        Returns:
            A tuple of (graph, pickled_content) if found, or (None, None) if not found
        NÚ	full_missFÚguards_exprrC  Ú
guard_missr“   r”   )r¯  r°  r±  r²  )rÁ  r¼  rÉ  r¡   rµ  )r.  rœ   r¶  r·  rÂ  rÄ  r  Úpickled_contentÚresult_statusÚsample_guards_exprÚin_localÚ	candidaterj  rC  r   r¯  r±  r°  r²  s                      rƒ   Úfind_guarded_entryzGuardedCache.find_guarded_entryÆ  sx  € ð. ˆØˆØ#ˆØ!ÐØˆð
 -0×,GÒ,GØ�< ñ-
ô -
ð 	;ð 	;Ñ(ˆI�w õ ˜9 mÑ4Ô4Ð4Ð4Ð4ØÔ(ð à!�Ø")�Ø %�Ø�õ �� yÔ'<¸eÑDÔDÑEÔEˆCØð 	;Ø!�Ø")�Ø %�Ø%.Ô%:Ð"Ø�ð !-�Ø%.Ô%:Ð"Ð"à2°MÐBˆØÐ)Ø.@ˆDÐ*Ñ+ð  Ð%Ð2¨(ˆ	Ø $Ð&Ð7¨x¨<ˆ
Ø˜t�mÐ1 zÐ<°uˆ
Ø˜t�mÐ@¨¸DÐ(@ˆØ×ÒØØØ!Ø!Ø#ð 	ñ 	
ô 	
ð 	
ð �o tÐ+Ð+r‚   r8  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 r�   )r�  rÏ   r!   rf   ©rÀ   r  s     rƒ   rr  z7GuardedCache._filter_backed_symints.<locals>.<listcomp>  sJ   € ð 
ð 
ð 
Ø¥¨A­u¬|Ñ!<Ô!<ð
ÝARÐSTÑAUÔAUð
Øð
ð 
ð 
r‚   r�   )r.  r8  s     rƒ   Ú_filter_backed_symintsz#GuardedCache._filter_backed_symints  s#   € ð
ð 
Øð
ñ 
ô 
ð 	
r‚   rŽ  c                óv   — t           j        j                             ¦   «         }|r|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_moder�  )r.  Úctxs     rƒ   rx  zGuardedCache._get_shape_env!  s;   € õ
 ŒmÔ*×2Ò2Ñ4Ô4ˆØð 	˜#œ-ð 	Ø�4ØŒ}Ô&Ð&r‚   N)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œ   r‡   rº   r¹  )r.  r©  rœ   r‡   r¶  r¡   r·  r¸  rÂ  rÃ  rÄ  rÅ  rº   rÆ  )r.  r©  r8  r‰  rº   rÑ  )r.  r©  rº   rŽ  )r}   r~   r   r‰  r’  r®  rµ  rÁ  rÐ  rÕ  rx  r�   r‚   rƒ   r¨  r¨  Ž  sì   € € € € € ðð ð ðTð Tð Tñ „[ðTð ðNð Nð Nñ „[ðNð ð!ð !ð !ñ „[ð!ðF ðL,ð L,ð L,ñ „[ðL,ð\ ð	
ð 	
ð 	
ñ „[ð	
ð ð'ð 'ð 'ñ „[ð'ð 'ð 'r‚   r¨  c                  óN   — e Zd Zedd„¦   «         Zeedd„¦   «         ¦   «         ZdS )	ÚInductorCacheArtifactrº   r  c                óŽ   — t                                | j        | j        ¦  «         t                                | j        ¦  «         d S r¾   )rw  Ú_write_to_local_cacherœ   rj  Ú_emit_triton_bundler  s    rƒ   Úpopulate_cachez$InductorCacheArtifact.populate_cache.  s8   € å×*Ò*¨4¬8°T´\ÑBÔBÐBÝ×(Ò(¨¬Ñ6Ô6Ð6Ð6Ð6r‚   r‡   c                 ó   — dS )NÚinductorr�   r�   r‚   rƒ   rÅ  zInductorCacheArtifact.type3  s	   € ð ˆzr‚   Nr$  ©rº   r‡   )r}   r~   r   r   rá  r%  rÅ  r�   r‚   rƒ   rÝ  rÝ  ,  s\   € € € € € àð7ð 7ð 7ñ „Xð7ð Øðð ð ñ „\ñ „Xðð ð r‚   rÝ  c                  ór  — e Zd ZdZed=d„¦   «         Zed>d„¦   «         Zed?d„¦   «         Zed@d„¦   «         Z	e	 dAdBd „¦   «         Z
edCd#„¦   «         ZedDd$„¦   «         ZedEd'„¦   «         ZedFd*„¦   «         Ze	 	 	 dGdHd0„¦   «         ZedId6„¦   «         ZedJd7„¦   «         Ze	 dAdKd;„¦   «         ZedLd<„¦   «         ZdS )Mrw  a6  
    Supports caching and reusing compiled Fx graphs.

    The overall strategy is as follows:
    - This cache stores entries on disk. When saving an entry, we can't
      serialize callables (that could be C++, Triton, etc.), so we serialize
      their own disk cache location. We then recreate the compiled artifact
      after fetching from disk.
    - For indexing the cache, we gather the fields relevant to identifying an
      FxGraph (the graph module, graph inputs, system settings etc.) into an
      FxGraphCacheDetails object, pickle it, and compute a hash for the key.
      See FxGraphCachePickler.
    - Among the metadata we store, we also include a guards expression that's
      appropriate for validating any symbols for Tensor arguments that have
      symbolic bounds. On cache lookup then, we evaluate those guards in the
      current context to validate that a cached entry can be served.
    - A given graph could have multiple compiled versions, corresponding to
      different sets of guards. Therefore, we store cache entries in the form:
          <temp dir>/<fx graph hash>/<serialized metadata>
    - On lookup, we compute the key from the graph details, iterate over all
      leaf files in the corresponding subdirectory, deserialize the entry, and
      evaluate its guards expression. If the evaluation succeeds, we have a
      cache hit. If it fails, we compile the graph and store a new entry.
    - Finally, on a cache hit, we need to make sure any guards that would
      have been created during compilation are added to the current context.
    rº   r‡   c                 óZ   — t           j                             t          ¦   «         d¦  «        S )zS
        Get the toplevel temporary directory for storing compiled graphs.
        Úfxgraph)r  r	  rÃ   rO   r�   r‚   rƒ   Ú_get_tmp_dirzFxGraphCache._get_tmp_dirW  s   € õ
 Œw�|Š|�I™KœK¨Ñ3Ô3Ð3r‚   r.  útype[FxGraphCache]rœ   c                ó‚   — t           j                             t                               ¦   «         |dd…         |¦  «        S )zA
        Return the disk location for a given cache key.
        rj   rf  )r  r	  rÃ   rw  rè  ©r.  rœ   s     rƒ   r®  z!FxGraphCache._get_tmp_dir_for_key^  s0   € õ
 Œw�|Š|�L×5Ò5Ñ7Ô7¸¸Q¸q¸S¼À3ÑGÔGÐGr‚   r¯  r¡   r°  r±  r²  r  c                óâ  — |r3t          j        d¦  «         t          j        t          j        d¦  «         |r?t          j        t          j        d¦  «         t          j        t          j        d|¦  «         |r3t          j        d¦  «         t          j        t          j        d¦  «         |rAt          j        t          j        d¦  «         t          j        t          j        d|¦  «         dS dS )	zG
        Called by GuardedCache to record hit/miss statistics.
        ÚLocalFxGraphCacheÚ!inductor_fx_local_cache_hit_countÚ"inductor_fx_remote_cache_hit_countÚ!inductor_fx_remote_cache_hit_keysÚ"inductor_fx_local_cache_miss_countÚ#inductor_fx_remote_cache_miss_countÚ"inductor_fx_remote_cache_miss_keysN)rq   rC  r%   Útry_Úincrement_toplevelÚadd_to_set_toplevelÚmissr´  s         rƒ   rµ  zFxGraphCache._record_resulte  s  € ð ð 	ÝŒOÐ/Ñ0Ô0Ð0ÝÔ#Ý"Ô5Ø3ñô ð ð ð 		ÝÔ#Ý"Ô5Ø4ñô ð õ Ô#Ý"Ô6Ø3Øñô ð ð
 ð 	ÝÔÐ0Ñ1Ô1Ð1ÝÔ#Ý"Ô5Ø4ñô ð ð ð 		ÝÔ#Ý"Ô5Ø5ñô ð õ Ô#Ý"Ô6Ø4Øñô ð ð ð ð		ð 		r‚   r  rp   Ú
cache_infor‘   Ú	constantsr­   ú(tuple[CompiledFxGraph | None, CacheInfo]c                óÒ  ‡ ‡‡	— ‰ j         x}r—t          j        |¦  «        }|x}�t          |¦  «        |d<   t	          j        d|j        ¬¦  «         t	          j        d|j        ¬¦  «         t          |j        ¦  «        dk    rt	          j        t          j	        d¦  «         	 ‰  
                    |¦  «        Šdd	lm} |j        � |j        ‰ j        ¦  «         n# t          $ r d|fcY S w xY wt!          j        ¦   «         }‰ j        Š	t%          j        |‰	¬
¦  «         ‰                      ¦   «          t*          j                             ‰ j        ¦  «         t2          dxx         ‰ j        z  cc<   t6                               d‰	¦  «         t6                               d‰¦  «         t;          dd„ ˆ fd„¬¦  «         t;          dˆ fd„¬¦  «         t;          dˆfd„ˆ	fd„¬¦  «         t;          dd„ ˆ fd„¬¦  «         t;          dd„ ˆ fd„¬¦  «         t=          ¦   «                              ¦   «         r.‰ j         r't=          ¦   «          !                    d‰ j         ¦  «         ‰ |fS )ah  
        Cache specific post compile steps that need to run if we find a graph in the cache
        This includes putting bundled triton artifacts in the right place,
        reloading the PyCodeCache artifact, etc.

        These don't always happen (i.e. on a cache miss, so they are in a separate function from
        CompiledFxGraph.post_compile)
        Nr•   Úinductor_compile)Úcached_kernel_nameszAOTAutogradCache.inductor_loadr   Únum_triton_bundlesrj   rª   ©r\  rã  zOutput code: 
%szOutput code written to: %sÚartifactc                 ó   — dddœS )NÚfx_graph_runnableÚstring©r{   rt  r�   r�   r‚   rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>Î  s   € Ø+Ø$ð!ð !€ r‚   c                 ó   •— ‰ j         S r¾   )Úrunnable_graph_str©r  s   €rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>Ò  s
   ø€ ˜uÔ7€ r‚   )Úmetadata_fnÚ
payload_fnÚinductor_post_grad_graphc                 ó   •— ‰ j         S r¾   )Úinductor_post_grad_graph_strr  s   €rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>Ö  s
   ø€ ˜uÔA€ r‚   ©r	  Úinductor_output_codec                 óH   •— ‰ t           j                             ‰ ¦  «        dœS )N)ÚfilenameÚ	file_path)r  r	  Úabspath)Úartifact_paths   €rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>Ú  s#   ø€ Ø)ÝœWŸ_š_¨]Ñ;Ô;ðð € r‚   c                 ó   •— ‰ S r¾   r�   rÿ  s   €rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>Þ  s   ø€ ˜t€ r‚   c                 ó   — dddœS )NÚ*inductor_provenance_tracking_node_mappingsr  r  r�   r�   r‚   rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>â  s   € ØDØ"ð!ð !€ r‚   c                 ó   •— ‰ j         S r¾   )Úinductor_provenance_mapping_strr  s   €rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>æ  s
   ø€ ˜uÔD€ r‚   c                 ó   — dddœS )NÚ0inductor_provenance_tracking_kernel_stack_tracesr  r  r�   r�   r‚   rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>ê  s   € ØJØ"ð!ð !€ r‚   c                 ó   •— ‰ j         S r¾   )Ú$inductor_provenance_stack_traces_strr  s   €rƒ   rÈ  z5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>î  s
   ø€ ˜uÔI€ r‚   Úinductor_provenance)"Ú_triton_bundleru   Úread_and_emitr‡   r%   rì  rý  rC  rô  rõ  Úafter_deserializationr  r«   Úsave_output_codeÚsource_coder…  rs   Úinductor_meta_from_configrt   Úbegin_compileÚ'_set_compile_context_for_autotune_cacher,   ÚCachedMetricsHelperÚapply_deltasÚmetrics_deltasr&   Úcounter_deltasÚoutput_code_logrÍ  rZ   r(   Úin_progressr  Ú
add_to_set)
r  rø  rù  Úbundler•   r¿  r«   Úinductor_metar  r\  s
   `       @@rƒ   Úcache_hit_post_compilez#FxGraphCache.cache_hit_post_compile’  s?  øøø€ ð Ô)Ð)ˆ6ð 	Ý"/Ô"=¸fÑ"EÔ"EÐØ+Ð+�Ð8Ý47¸±I´I�
Ð0Ñ1Ý"Ô6Ø&¸DÔ<Tðñ ô ð õ #Ô6Ø4Ø(,Ô(@ðñ ô ð õ �tÔ/Ñ0Ô0°1Ò4Ð4Ý&Ô+Ý*Ô=Ð?Sñô ð ð	$Ø!×7Ò7¸	ÑBÔBˆMà,Ð,Ð,Ð,Ð,Ð,ð Ô-Ð9Ø.�Ô.¨uÔ/@ÑAÔAÐAøøåð 	$ð 	$ð 	$ð ˜Ð#Ð#Ð#Ð#ð	$øøøõ
 'Ô@ÑBÔBˆØÔ ˆÝÔ*¨=¸tÐDÑDÔDÐDØ×5Ò5Ñ7Ô7Ð7õ
 	Ô#×0Ò0°Ô1EÑFÔFÐFÝ�ÐÐÔ Ô 4Ñ4ÐÐÑå×ÒÐ1°4Ñ8Ô8Ð8Ý×ÒÐ:¸MÑJÔJÐJåØðð ð 8Ð7Ð7Ð7ð	
ñ 	
ô 	
ð 	
õ 	Ø&ØAÐAÐAÐAð	
ñ 	
ô 	
ð 	
õ 	Ø"ðð ð ð ð $�|�|�|ð	
ñ 	
ô 	
ð 	
õ 	Øðð ð EÐDÐDÐDð	
ñ 	
ô 	
ð 	
õ 	Øðð ð JÐIÐIÐIð	
ñ 	
ô 	
ð 	
õ  Ñ!Ô!×-Ò-Ñ/Ô/ð	àÔ:ð	õ  Ñ!Ô!×,Ò,Ø% uÔ'Qñô ð ð �jÐ Ð s   Â%7C ÃC.Ã-C.NrŠ  r‰  r¶  r·  r¸  rÂ  ú<Callable[[str, list[int] | list[torch.SymInt]], bool] | Nonec                óf  — t                                ¦   «         }|€J ‚t                                |¦  «        }d„ |D ¦   «         }t          j        rd„ }|€|j        }i }	t                                | ||||¦  «        \  }
}}|	                     |¦  «         |
€d|	fS |
j        �o	 t          j
        j                             ¦   «         }t          j
        j                             |¦  «        }n# t          $ r d}Y nw xY w||
j        k    r	d|	d<   d|	fS t          t                                ¦   «         | ¦  «                             |¦  «         |
j        rEt)           ||
j        |¦  «        ¦  «        }|du sJ ‚t*                               d| |j        ¦  «         t                                |
|	|¦  «        S )aö  
        Lookup a compiled graph in the cache by key. On a hit, return the
        deserialized CompiledFxGraph object. On a miss, return None.
        `constants` tracks a list of constants, or a way to obtain the list of constants
        associated with a given cache entry
        `evaluate_guards` allows AOTAutogradCache and other callers to customize
        what constitutes a guard success. Normally, a guard hit happens if
        `shape_env.evaluate_guards_expression` returns True.
        Nc                ó,   — g | ]}t          |¦  «        ‘ŒS r�   )re   rÔ  s     rƒ   rr  z.FxGraphCache._lookup_graph.<locals>.<listcomp>  s!   € Ð<Ð<Ð<¨qÕ'¨Ñ*Ô*Ð<Ð<Ð<r‚   c                ó   — dS ©NTr�   )rÁ   Úys     rƒ   rÈ  z,FxGraphCache._lookup_graph.<locals>.<lambda>  s   € ¨4€ r‚   rÊ  r“   Tz*fx graph cache key %s post-load guards: %s)rw  rx  rÕ  r)   Ú&unsafe_skip_cache_dynamic_shape_guardsÚevaluate_guards_expressionrÐ  râ  Úextern_libs_keyrÏ   rS  Ú_tritonÚtriton_backendÚ_extern_libs_keyrÎ  ra   rÝ  rÅ  Úrecord_if_presentrÉ  r¡   r®  rÍ  Úguardsr/  )rœ   rŠ  r¶  r·  rù  rÂ  r�  ÚsymintsrÄ  rø  r  rË  Ú
guard_infoÚbackendÚcurrentÚchecks                   rƒ   Ú_lookup_graphzFxGraphCache._lookup_graphù  sê  € õ& !×/Ò/Ñ1Ô1ˆ	ØÐ$Ð$Ð$å×5Ò5°nÑEÔEˆØ<Ð<°GÐ<Ñ<Ô<ˆõ Ô8ð 	0ð 0Ð/ˆOàÐ"Ø'ÔBˆOà "ˆ
õ .:×-LÒ-LØ�˜ o°uñ.
ô .
Ñ*ˆˆ 
ð 	×Ò˜*Ñ%Ô%Ð%Øˆ=Ø˜Ð#Ð#ð Ô Ð,ðÝœ+Ô-×<Ò<Ñ>Ô>�Ýœ+Ô-×>Ò>¸wÑGÔG��øÝð ð ð Ø���ðøøøà˜%Ô/Ò/Ð/Ø6B�
Ð2Ñ3Ø˜ZÐ'Ð'åÕ3×8Ò8Ñ:Ô:¸CÑ@Ô@×RÒRØñ	
ô 	
ð 	
ð
 Ôð 	Ý˜˜¨Ô):¸GÑDÔDÑEÔEˆEØ˜D�=�=�=�=Ý�IŠIØ<¸cÀ9ÔCSñô ð õ ×2Ò2°5¸*ÀiÑPÔPÐPs   Â#AC+ Ã+C:Ã9C:rj  rY  c                ó"  — t                                | ¦  «        }t          j                             |¦  «        st          j        |d¬¦  «         t          j                             |t          |¦  «        ¦  «        }t          ||d¬¦  «         d S )NTrR  r  )	rw  r®  r  r	  rT  rU  rÃ   r[  r!  )rœ   rj  rh  r	  s       rƒ   rß  z"FxGraphCache._write_to_local_cache>  sz   € å×2Ò2°3Ñ7Ô7ˆÝŒw�~Š~˜fÑ%Ô%ð 	/ÝŒK˜¨Ð.Ñ.Ô.Ð.õ
 Œw�|Š|˜F¥K°Ñ$8Ô$8Ñ9Ô9ˆÝ�T˜7¨dÐ3Ñ3Ô3Ð3Ð3Ð3r‚   c                ó–   — t          j        ¦   «         sd S t          j        | ¦  «        }|j        x}rt          j        |¦  «         d S d S r¾   )ru   Ú
is_enabledrú  r½  r  r  )rj  r  r-  s      rƒ   rà  z FxGraphCache._emit_triton_bundleJ  sX   € åÔ'Ñ)Ô)ð 	ØˆFå”˜WÑ%Ô%ˆØÔ)Ð)ˆ6ð 	0ÝÔ'¨Ñ/Ô/Ð/Ð/Ð/ð	0ð 	0r‚   Úcompiled_graphr®   c                ó  — ddl m} t          ||¦  «        sJ dt          |¦  «        › d�¦   «         ‚t                               ¦   «         }|€J ‚t                               |¦  «        }|                     |¦  «        }|                     ||¬¦  «        |_	        	 t          j        j                             ¦   «         }	t          j        j                             |	¦  «        |_        n# t           $ r Y nw xY w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	 t1          t2                               ¦   «         | ¦  «                             |¦  «         |r/t                               | |¦  «         t9          j        d¦  «         |r[t=          |
j        pddz  ¦  «        }tA          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.
        rj   ro   zserialization for z NYIN)Úplaceholdersr=  z1fx graph cache unable to serialize compiled graphTr¬  rã  Úfxgraph_cache_pickle_errorrí  r   g    €„.Ar|  )rX  Útime_taken_msz!fx graph unable to write to cacheÚfxgraph_cache_write_error)#Ú
compile_fxrp   r�  rÅ  rw  rx  rÕ  Úget_pruned_guardsÚproduce_guards_expressionrÉ  rÏ   rS  r9  r:  r;  r8  rÎ  r   Úprepare_for_serializationrú  r"  r®  r¯  r&   ra   rÝ  Úrecordrß  rq   Úputr–   Ú_time_taken_nsr¾  Ú	b64encoderB  )rœ   rG  rŠ  r¶  r·  rp   r�  r>  r=  r@  Údisk_compiled_graphrj  rK  rÀ  s                 rƒ   Ú_save_graphzFxGraphCache._save_graphS  sï  € ð 	0Ð/Ð/Ð/Ð/Ð/å˜.¨/Ñ:Ô:ð 	
ð 	
Ø;¥ nÑ!5Ô!5Ð;Ð;Ð;ñ	
ô 	
Ð:õ !×/Ò/Ñ1Ô1ˆ	ØÐ$Ð$Ð$Ý×5Ò5°nÑEÔEˆØ×,Ò,¨WÑ5Ô5ˆØ%.×%HÒ%HØ ¨ð &Iñ &
ô &
ˆÔ"ð	Ý”kÔ)×8Ò8Ñ:Ô:ˆGÝ-2¬[Ô-@×-QÒ-QØñ.ô .ˆNÔ*Ð*øõ ð 	ð 	ð 	ØˆDð	øøøå" >Ñ2Ô2ÐØ×5Ò5Ñ7Ô7Ð7ð	Ý”lÐ#6Ñ7Ô7ˆGˆGøÝð 	ð 	ð 	Ý�KŠKØCÈdð ñ ô ð õ �ZÔ Ð!=Ð>Ð>Ô>À!ÑCÐ>Ð>Ñ>ØˆFˆFð	øøøð	CÝ!Õ"7×"<Ò"<Ñ">Ô">ÀÑDÔD×KÒKÈGÑTÔTÐTØð 5Ý×2Ò2°3¸Ñ@Ô@Ð@Ý”Ð 3Ñ4Ô4Ð4àð 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:   ÂAC( Ã(
C5Ã4C5ÄD1 Ä1AE6Å5E6Å:CI ÉAJ	ÊJ	rÖ  r×  c                óP   — t          | d¬¦  «                             d¬¦  «         d S )NF)r�  r‘  )r
  r˜  )rÖ  s    rƒ   Ú_check_for_hopzFxGraphCache._check_for_hop”  s:   € å˜b°EÐ:Ñ:Ô:×IÒIØ#ð 	Jñ 	
ô 	
ð 	
ð 	
ð 	
r‚   r�   TrŒ  r‹  r�  c                óŒ   — |rt                                ¦   «         nd}t          | ||||¬¦  «                             ¦   «          dS )z“
        Check some conditions that would preclude caching and raise BypassFxGraphCache
        to bypass in case caching is not possible.
        N)rŠ  rŒ  r�  r�  )rw  rx  r
  rš  )rÖ  rŠ  rŒ  r�  r�  s        rƒ   Ú_check_can_cachezFxGraphCache._check_can_cacheš  sR   € ð 6GÐP•L×/Ò/Ñ1Ô1Ð1ÈDˆ	ÝØØ)ØØ/Øð	
ñ 	
ô 	
÷ Š(‰*Œ*ˆ*ˆ*ˆ*r‚   r¨   r%  r&  Úremoteú.tuple[tuple[str, list[str]] | None, CacheInfo]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.
        rã  Úfxgraph_cache_bypassrj   z%Bypassing FX Graph Cache because '%s'Úbypass_fx_graphr  )r’   rš   r›   N)
rw  rZ  r™  r  r&   r®  r   r^   r‡   r   )	rÖ  rŠ  rŒ  r%  r[  rœ   rR  r‡  rø  s	            rƒ   Úprepare_keyzFxGraphCache.prepare_key®  s  € ð$	$Ý×)Ò)¨"¨n¸iÑHÔHÐHÝ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   ‚14 ´
C ¾A7B;Â5C Â;C 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)rr   r)   r}  )Úcache_ids    rƒ   Úget_remote_cachezFxGraphCache.get_remote_cacheÓ  s0   € ð
 !ˆÝØÝÔÑÔØ"Ø ñ	
ô 
ð 	
r‚   rR  r�   Úis_backwardc                ó  — t                                | |||||¦  «        \  }}	i |	¥| |t          ¦   «         dœ¥}	|�‡t                               d| ¦  «         t
          d         dxx         dz  cc<   d|	d<   |j        x}
�B|
|	d	<   t          j        t          j	        d
|
dz  ¦  «         t          |
¦  «        x}dk    r||	d<   n;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œ   rž   r›   Nzfx graph cache hit for key %srã  Úfxgraph_cache_hitrj   rC  r’   r—   Ú distributed_ephemeral_timeout_usiè  r   r™   zfx graph cache miss for key %sÚfxgraph_cache_missr÷  )rw  rC  r   r®  r   r&   rS  r%   rô  rõ  r¦  )rœ   rR  rŠ  r¶  r·  rf  rù  rÂ  rG  rø  r—   Úephemeral_increases               rƒ   Úload_with_keyzFxGraphCache.load_with_keyà  s]  € õ" &2×%?Ò%?Ø� ¨°iÀñ&
ô &
Ñ"ˆ˜
ð!
Øð!
àØ%Ý '¡	¤	ð	!
ð !
ð !
ˆ
ð Ð%Ý�HŠHÐ4°cÑ:Ô:Ð:Ý�ZÔ Ð!4Ð5Ð5Ô5¸Ñ:Ð5Ð5Ñ5Ø(-ˆJ�}Ñ%à!/Ô!>Ð>�ÐKØ.;�
˜?Ñ+Ý"Ô'Ý&Ô9Ø6Ø! TÑ)ñô ð õ FÀmÑTÔTðUÐ&àòð ð @R�JÐ;Ñ<øå�HŠHÐ5°sÑ;Ô;Ð;Ý�ZÔ Ð!5Ð6Ð6Ô6¸!Ñ;Ð6Ð6Ñ6Ø(.ˆJ�}Ñ%à˜zÐ)Ð)r‚   c                 ó€   — 	 t          j        t                               ¦   «         ¦  «         dS # t          $ r Y dS w xY w)z.
        Clear out the on-disk cache.
        N)r¥  Úrmtreerw  rè  ÚFileNotFoundErrorr�   r‚   rƒ   ÚclearzFxGraphCache.clear	  sK   € ð
	ÝŒM�,×3Ò3Ñ5Ô5Ñ6Ô6Ð6Ð6Ð6øÝ ð 	ð 	ð 	ØˆDˆDð	øøøs   ‚+/ ¯
=¼=rä  )r.  ré  rœ   r‡   rº   r‡   )r.  ré  rœ   r‡   r¯  r¡   r°  r¡   r±  r¡   r²  r¡   rº   r  )r  rp   rø  r‘   rù  r­   rº   rú  r¾   )rœ   r‡   rŠ  r‰  r¶  r¡   r·  r¸  rù  r­   rÂ  r0  rº   rú  )rœ   r‡   rj  rY  rº   r  )rj  rY  rº   r  )rœ   r‡   rG  r®   rŠ  r‰  r¶  r¡   r·  r¸  rº   r  )rÖ  r×  rº   r  )r�   NT)
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‡   rR  r�   rŠ  r‰  r¶  r¡   r·  r¸  rf  r¡   rù  r­   rÂ  r0  rº   rú  r$  )r}   r~   r   r‰  r%  rè  r’  r®  rµ  r/  rC  rß  rà  rV  rX  rZ  r`  re  rl  rp  r�   r‚   rƒ   rw  rw  9  s  € € € € € ðð ð: ð4ð 4ð 4ñ „\ð4ð ðHð Hð Hñ „[ðHð ð*ð *ð *ñ „[ð*ðX ðd!ð d!ð d!ñ „\ðd!ðL ð ðBQð BQð BQð BQñ „\ðBQðH ð	4ð 	4ð 	4ñ „\ð	4ð ð0ð 0ð 0ñ „\ð0ð ð>Cð >Cð >Cñ „\ð>Cð@ ð
ð 
ð 
ñ „\ð
ð
 ð /1Ø-1Ø"&ð	ð ð ð ñ „\ðð& ð"&ð "&ð "&ñ „\ð"&ðH ð

ð 

ð 

ñ „\ð

ð ð ð/*ð /*ð /*ð /*ñ „\ð/*ðb ðð ð ñ „\ðð ð r‚   rw  r	  c                óô   — dd„}	 |                        |¦   «         ¦  «        rt          j                             | ¦  «        S |                       d¦  «        rt          j                             | ¦  «        S | dfS )Nrº   r‡   c                 ó   — t           rdS dS )Nz.pydú.so©r†  r�   r‚   rƒ   Úget_module_ext_typez;split_aot_inductor_output_path.<locals>.get_module_ext_type	  s   € Ýð 	Ø�6à�5r‚   z.pt2rÞ   rä  )Úendswithr  r	  Úsplit)r	  ru  s     rƒ   Úsplit_aot_inductor_output_pathrx  	  s   € ðð ð ð ð OØ‡}‚}Ð(Ð(Ñ*Ô*Ñ+Ô+ð ÝŒw�}Š}˜TÑ"Ô"Ð"Ø	�Š�vÑ	Ô	ð ÝŒw�}Š}˜TÑ"Ô"Ð"à�Rˆxˆr‚   c                  óŒ   — e Zd ZU i Zded<    eej        ¦  «        Ze	 	 ddd„¦   «         Z	edd„¦   «         Z
edd„¦   «         ZdS )ÚCudaKernelParamCacheúdict[str, dict[str, Any]]r  Nrœ   r‡   Úparamsúdict[str, str | None]rÛ   Úbin_typeÚasmrz   Úasm_typerº   r  c                óP  — d }t           j        j        r5t           j        j        s
J d¦   «         ‚|d         s
J d¦   «         ‚|d         }t          |||t          t           j        j        ¦  «        d         |¬¦  «        \  }}	|	}
t          |	¦  «        \  }}t           j        j	        rHddt          dd	d
i}||v s
J d¦   «         ‚t          j                             |	¦  «        \  }}|||         z   }	d}t           j        j	        st           j        j        rnt          j        j        �|r[|rY|s
J d¦   «         ‚|s
J d¦   «         ‚|dv r|nd}t          |||t          t           j        j        ¦  «        d         |¬¦  «        \  }}|	|t#          ¦   «         <   |
|d<   ||d<   || j        |<   d S )Nz:package_cpp_only requires triton kernel names to be uniqueÚmangled_namezMissing kernel namer   )rk  rc  rœ   rÛ   z.fatbinz.spvrÜ   z.hsacoz8multi_arch_kernel_binary only supported in CUDA/XPU/ROCmrÞ   zMissing kernel assembly codezMissing kernel assembly type>   rm  rn  ro  r\  Úruntime_bin_pathr  )r)   rÇ  Úpackage_cpp_onlyr†   Úunique_kernel_namesrŽ  rx  Úoutput_pathr?   Úemit_multi_arch_kernelrW   r  r	  ÚsplitextrÏ   r�   r‰   rÙ   r  )r.  rœ   r|  rÛ   r~  r  r€  ra  r?  Úbin_pathrƒ  Úbin_type_to_extÚ	base_pathÚasm_pathÚ	hash_kinds                  rƒ   rÒ  zCudaKernelParamCache.set3	  s  € ð ˆÝÔÔ/ð 	.Ý”=Ô4ð ð ØLñô Ð4ð ˜.Ô)Ð@Ð@Ð+@Ñ@Ô@Ð)Ø˜nÔ-ˆHåØØØÝ8ÝÔ#Ô/ñô àôð ð
ñ 
ô 
‰ˆˆ8ð $Ðå<¸XÑFÔF‰ˆ�!åÔÔ5ð 
	=à˜Ý! 6Ø˜ðˆOð
 ˜Ð.Ð.Ð.ØJñ /Ô.Ð.õ œ7×+Ò+¨HÑ5Ô5‰LˆI�qØ  ?°8Ô#<Ñ<ˆHàˆõ ÔÔ6ð	åÔ"Ô3ð	õ
 Œ}Ô Ð(¨SÐ(°XÐ(ØÐ:Ð:Ð:Ñ:Ô:�sØÐ?Ð?Ð!?Ñ?Ô?�xð )1Ð4LÐ(LÐ(L˜H˜HÐRX�	å#ØØØ'Ý"@ÝÔ+Ô7ñ#ô #àô#ð !ðñ ô ‘��8ð 5=ˆÕ.Ñ0Ô0Ñ1Ø%5ˆÐ!Ñ"Ø ˆˆu‰ØˆŒ	�#‰ˆˆr‚   r*  c                ó8   — | j                              |d ¦  «        S r¾   ©r  rB  rë  s     rƒ   rB  zCudaKernelParamCache.get‚	  ó   € àŒy�}Š}˜S $Ñ'Ô'Ð'r‚   úKeysView[str]c                ó4   — | j                              ¦   «         S r¾   ©r  r)  ©r.  s    rƒ   Úget_keyszCudaKernelParamCache.get_keys†	  ó   € àŒy�~Š~ÑÔÐr‚   ©NN)rœ   r‡   r|  r}  rÛ   r‡   r~  r‡   r  rz   r€  rz   rº   r  ©rœ   r‡   rº   r*  ©rº   r‘  )r}   r~   r   r  r€   r%  rp  Úcache_clearr’  rÒ  rB  r•  r�   r‚   rƒ   rz  rz  .	  s©   € € € € € € à')€EÐ)Ð)Ð)Ñ)Ø�,˜uœ{Ñ+Ô+€Kàð Ø#ðL ð L ð L ð L ñ „[ðL ð\ ð(ð (ð (ñ „[ð(ð ð ð  ð  ñ „[ð ð  ð  r‚   rz  c                  óŠ   — e Zd ZU dZi Zded<    eej        ¦  «        Ze	dd„¦   «         Z
e	dd„¦   «         Ze	dd„¦   «         ZdS )ÚCpuTritonKernelCachez@AOTI counterpart of CudaKernelParamCache for CPU Triton kernels.r{  r  rœ   r‡   Úkernel_bytesrY  Úlauncher_bytesÚkernel_symbolÚ	signaturer  rº   r  c                óÄ   — t          t          j        j        ¦  «        d         }t	          |dd|¬¦  «        \  }}t	          |dd|¬¦  «        \  }}	||	||dœ| j        |<   d S )Nr   Úsor\  )rk  rc  )Úkernel_so_pathÚlauncher_so_pathrŸ  r   )rx  r)   rÇ  r†  rŽ  r  )
r.  rœ   r�  rž  rŸ  r   Úout_dirr?  r£  r¤  s
             rƒ   rÒ  zCpuTritonKernelCache.set’	  sˆ   € õ 1µÔ1DÔ1PÑQÔQÐRSÔTˆÝ!Ø˜$¨&Àð
ñ 
ô 
Ñˆˆ>õ $Ø˜D¨FÀ'ð
ñ 
ô 
ÑˆÐð -Ø 0Ø*Ø"ð	
ð 
ˆŒ	�#‰ˆˆr‚   r*  c                ó8   — | j                              |d ¦  «        S r¾   r�  rë  s     rƒ   rB  zCpuTritonKernelCache.get©	  r�  r‚   r‘  c                ó4   — | j                              ¦   «         S r¾   r“  r”  s    rƒ   r•  zCpuTritonKernelCache.get_keys­	  r–  r‚   N)rœ   r‡   r�  rY  rž  rY  rŸ  r‡   r   r  rº   r  r˜  r™  )r}   r~   r   r‰  r  r€   r%  rp  rš  r’  rÒ  rB  r•  r�   r‚   rƒ   rœ  rœ  ‹	  sœ   € € € € € € àJÐJà')€EÐ)Ð)Ð)Ñ)Ø�,˜uœ{Ñ+Ô+€Kàð
ð 
ð 
ñ „[ð
ð, ð(ð (ð (ñ „[ð(ð ð ð  ð  ñ „[ð ð  ð  r‚   rœ  c                  ó*   — e Zd ZdZedd„¦   «         ZdS )ÚAotCodeCompilerz.
    Compile AOT Inductor generated code.
    r  r«   Úwrapper_coder‡   Úkernel_codeÚserialized_extern_kernel_nodesrz   rá   Úadditional_filesr�   rº   úlist[str | Weights] | strc               ó>1  ‡‡‡‡‡n‡o‡p‡q‡r‡s‡t‡u‡v‡w‡x‡y‡z‡{— |}t          ¦   «          t          ¦   «         }t          ddt          |‰‰j        ¬¦  «        ¬¦  «        }	t          |	                     ¦   «         ¦  «        }
t          j        ¦   «         o‰dk    o‰j        Šzt          t          j
        j        ¦  «        \  }}t          j
        j        rd                     ‰‰f¦  «        ŠdŠt          ‰d|
|t          j
        j        ¬	¦  «        \  }Š{d
‰{› d�‰z   Št          ‰d|
|t          j
        j        ¬	¦  «        \  }ŠudŠsdŠtt          j
        j        �st#          t$          j                             t$          j                             t$          j                             t*          ¦  «        ¦  «        dddd¦  «        ¦  «        5 }t          j
        j        }d|› �}|                     ¦   «         Šs‰s                     dd|› d�¦  «                             d|› d�¦  «                             d|› d�¦  «        Šst          ‰sd||¬¦  «        \  }Štddd¦  «         n# 1 swxY w Y   t1          d¦  «        5 }	 |                     ‰d‰df¦  «         |                     ¦   «          t6          j                             |j        d¬¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        j        ra|                      ‰{¦  «         t          j
        j        s|                      ‰u¦  «         t          j
        j        s|                      ‰t¦  «         tB           "                    d‰{¦  «         tB           "                    d‰u¦  «         tG          d ˆ{fd!„ˆfd"„¬#¦  «         tG          d ˆufd$„ˆfd%„¬#¦  «         t          j
        j        s3tB           "                    d&‰t¦  «         tG          d ˆtfd'„ˆsfd(„¬#¦  «         tI          ‰{¦  «        }tI          ‰u¦  «        }|j%        |z  Šy‰y &                    ¦   «         s‰y '                    d)¬*¦  «         tQ          tI          ‰y¦  «        d+z  ¦  «        }dŠˆˆˆyˆzfd1„}d2d3l)m*} tW          ¦   «         } |t$          j                             ||d4z   ¦  «        tX          ¬5¦  «        }|5  |r…tQ          | -                    d6¦  «        ¦  «        }t#          |d7¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        j        r|                      |¦  «         t          j
        j.        }‰|d8<   | /                    ta          ‰¦  «        ¦  «         tQ          | 1                    |j2        › d9�¦  «        ¦  «        }t          j
        j.         3                    ¦   «         D ]9\  }}ti          |tP          ¦  «        rti          |tP          ¦  «        s
J d:¦   «         ‚Œ:t#          |d7¦  «        5 }|                     tk          j6        t          j
        j.        ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   tQ          | 1                    |j2        › d9�¦  «        ¦  «        }to          j8        ||¦  «         t          j
        j        r;|                      |¦  «         t          j
        j        s|                      |¦  «         |rt          j
        j        n!tQ          | -                    d;¦  «        ¦  «        } ts          ˆfd<„‰j:        D ¦   «         ¦  «        }!d2dl;Špd‹d@„}"t          j
        j<        st          j
        j=        dAk    �ret}          dBd)¬C¦  «        5  ˆfdD„‰j:        D ¦   «         Šo‰o�r#d2dEl?m@}# g Šwg Šxd2}$‰oD ]p}%‰ A                    |%¦  «        } |"|¦  «        }&‰w                      |$¦  «         ‰x                      |&¦  «         |$|!r|&n|&t„          z   dFz
  t„          z  t„          z  z  }$Œqt‡          |$¦  «        }'‰pjD        |$z   E                    |'¦  «        }(‰p F                    |(¦  «        ŠndŒˆnˆoˆpˆˆwˆxfdH„}) |#¦   «         5 }*|* G                    |)t‘          t“          ‰o¦  «        ¦  «        ¦  «        D ]}Œ	 ddd¦  «         n# 1 swxY w Y   ~(ndI}'ddd¦  «         n# 1 swxY w Y   ndI}'t          j
        j=        dJk    r5t•          ˆfdK„‰j:        D ¦   «         ¦  «        }+|                      |+¦  «         t“          |'¦  «        },t—          |,¦  «        \  }-}.|-r|.rt™          dL¦  «        ‚d}/|-r,|j2        › dM�}0tQ          | 1                    |0¦  «        ¦  «        }/‰j        ‰|.|-‰z|dNœ}1t          d�d)t          j
        j         dOœ|1¤Ž}2t          d�dPd)i|1¤Ž}3t          j
        jM        r�tœ          sˆt}          dQd)¬C¦  «        5  tŸ          ‰‰j        ¬R¦  «        }4t¡          |4|
fdSt          j
        j         i|1¤Ž|2_Q        t¥          ‰¦  «        x}5rt¡          |5|
fi |1¤Ž|3_Q        ddd¦  «         n# 1 swxY w Y   t          tQ          |j2        ¦  «        ‰{tQ          |j%        ¦  «        |2¬T¦  «        }6|6                     ¦   «         }7|6 S                    ¦   «         }8t          tQ          |j2        ¦  «        ‰utQ          |j%        ¦  «        |3¬T¦  «        }9|9                     ¦   «         }:|9 S                    ¦   «         };t¨                               dU|7¦  «         t¨                               dV|:¦  «         t          j
        j        r–tQ          | 1                    |j2        › dW�¦  «        ¦  «        }<|2 U                    |<¦  «         |                      |<¦  «         |6 V                    |‰¦  «         |6 W                    |‰{¦  «         |                      |¦  «         nk	 |6 X                    ¦   «          nA# t²          jZ        t¶          f$ r(}=dXtQ          |=¦  «        v rt™          dY¦  «        |=‚|=‚d}=~=ww xY w|9 X                    ¦   «          |.sr|'}>d2}?|-rkt¹          j]        dZ|,¦  «        }>|/€J ‚t#          |/d[¦  «        5 }@|@                     |'¦  «         ddd¦  «         n# 1 swxY w Y   |                      |/¦  «         nut½          t¾          tÁ          ja        d2tÁ          jb        tÀ          jc        ¦  «        jd        d\¦  «         e                    ¦   «         ¦  «        }?t¹          j]        d]|,d^z   |?¦  «        }> ||>tÌ          jg        ¦  «        }Ad2}Bi }CtÑ          ‰ji         3                    ¦   «         ¦  «        D ]ê\  }B\  }%}Dti          |DtÀ          jj        jk        jl        ¦  «        r|Djm        }Dti          |DtÀ          jn        jo        ¦  «        sJ ‚tà          › |B› �}Et¨                               d_|%|E¦  «         |E|C|%<   tÀ          jn         q                    |D¦  «        }Ft$          j                             |j%        |E¦  «        }Gtå          |G|Fd)¦  «         |                      |G¦  «         Œë|Cr‰t$          j                             |j%        d`¦  «        }Ht#          |Hd7¦  «        5 }|                     tk          j6        |C¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |                      |H¦  «         tæ          tè          tê          daœ v                    tÀ          jw        jx        rdbn‰tè          ¦  «        }I |I¦   «         }J|Jjy         8                    ¦   «         }K|Jjy         z                    ¦   «          |Krt          j
        j{        r
J dc¦   «         ‚g }Lg }Mg }Ntœ          �sZg }Otù          ‰z¦  «        \  }P}Qtû          t6          j~        j        ddi ¦  «        }R�t           j�         3                    ¦   «         D �]1\  }S}T|S|RvrŒ|Tde         x}Ur|M                      |U¦  «         |T�t          ¦   «                  }Vt          j
        j{        r¹‰dfk    r³tÀ          jw        jx        €,|N                      |U|V|T v                    dg¦  «        f¦  «         nvd2dhlƒm„}W t$          j         &                    |U¦  «        st™          di|U› dj�¦  «        ‚ |W|U|Vd¬k¦  «        }X|Xst™          dl|S› dm�¦  «        ‚t¨           "                    dn|V¦  «         t          j
        j…        r|O                      |V|Sf¦  «         �Œ3|N�rd2dEl?m@}# �t          j‡        ¦   «         Šq�t          jˆ        ¦   «         Švto          j‰        do¦  «        Šr‰v�bt$          j                             ‰v¦  «        x}YrAt$          j                             |Ydo¦  «        }Zt$          j         &                    |Z¦  «        r|ZŠrdŽˆqˆrˆvfdr„}[t}          dsd)¬C¦  «        5   |#¦   «         5 }*�t          |* G                    |[|N¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |Or²	 �t          |Ot$          j                             | ¦  «        �t          ¦   «         ¬t¦  «        }\|L                      |\¦  «         n^# �t          jŽ        $ rK t¨           �                    du¦  «         |OD ]+\  }V}S|L                      �t!          |V|S|P|Q¦  «        ¦  «         Œ,Y nw xY w�t#          | ¦  «        \  }]}^t          |‰‰j        ‰z¬v¦  «        }_|Kr"‰dwk    rt          dx|‰‰j        ‰zg dy¢¬z¦  «        }_|8|;|Ag|K¢|L¢}`t          |]|`|^|_¬T¦  «        }a|a                     ¦   «         }b|a S                    ¦   «         } t¨                               d{|b¦  «         t#          ‰{d|¦  «        5 }|                     d¦  «         |                     d}|7› d�¦  «         |                     d~|b› d�¦  «         ddd¦  «         n# 1 swxY w Y   t#          ‰ud|¦  «        5 }|                     d¦  «         |                     d}|:› d�¦  «         |                     d~|b› d�¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        j        �rÜtQ          | 1                    |j2        › d�¦  «        ¦  «        }c|_ U                    |c¦  «         |                      |c¦  «         |                      �t$          ¦  «         |.r¥tQ          | 1                    |j2        › d€�¦  «        ¦  «        }dt#          |dd[¦  «        5 }@|@                     |'¦  «         |@                     t¹          j]        dZ|?¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |                      |d¦  «         n+|                      |A¦  «         |a W                    ||A¦  «         t          j
        j{        r=tÀ          jw        jx        €,|a “                    ||M¦  «         | ”                    |M¦  «         n6g |K¢|L¢}`| ”                    |`¦  «         |`D ]}e|a W                    ||e¦  «         Œ|a •                    |¦  «         �n3|a X                    ¦   «          |`D ]}f|f|Kv rŒt%          j–        |f¦  «         Œ|.rÙt          j
        j—        d�k    rt™          d‚¦  «        ‚d�dƒ„}g |g¦   «         }htÉ          d„|h¦  «        }it#          | d…¦  «        5 }j|j ˜                    ¦   «         }k|j                     d†|i|k|iz  z
  z  ¦  «         |j                     |'¦  «         |j                     t¹          j]        dZ|?¦  «        ¦  «         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š        d2k    r®tÀ          j›        j         œ                    ¦   «         }lt$          j                             |j%        d‡¦  «        }mt#          |md7¦  «        5 }|                     tk          j6        |ldˆ¬‰¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |                      |m¦  «         t          j
        j        r|S | S )�zƒ
        Returns the .so path, or returns a list of files that were generated if
        config.aot_inductor.package=True.
        rÇ  Úi)Úvec_isará   Úaot_mode©r{   ÚsourcesÚBuildOptionr  r•  rÞ   zwrapper.cpp)r^  rc  rœ   z.// Triton kernels are embedded as comments in z
kernel.cppÚcsrcrã  Úaoti_runtimezmodel.hÚAOTInductorModelz<AOTInductorModel>ú<ú>zAOTInductorModel(ú(zAOTInductorModel :z :rO  ©rc  rœ   Nzw+rW  )rb  zWrapper code written to: %szKernel code written to: %sÚ
graph_dumpc                 ó   •— dd‰ dœS )NÚinductor_aot_wrapper_coderW  ©r{   rÅ  r  r�   )Úwrapper_paths   €rƒ   rÈ  z)AotCodeCompiler.compile.<locals>.<lambda>:
  s   ø€ Ø3ØØ(ðð € r‚   c                 ó   •— ‰ S r¾   r�   )rª  s   €rƒ   rÈ  z)AotCodeCompiler.compile.<locals>.<lambda>?
  s   ø€ ˜|€ r‚   r  c                 ó   •— dd‰ dœS )NÚinductor_aot_kernel_coderW  rÀ  r�   )Úkernel_paths   €rƒ   rÈ  z)AotCodeCompiler.compile.<locals>.<lambda>C
  s   ø€ Ø2ØØ'ðð € r‚   c                 ó   •— ‰ S r¾   r�   )r«  s   €rƒ   rÈ  z)AotCodeCompiler.compile.<locals>.<lambda>H
  s   ø€ ˜{€ r‚   zHeader code written to: %sc                 ó   •— dd‰ dœS )NÚinductor_aot_header_coderW  rÀ  r�   )Úheader_paths   €rƒ   rÈ  z)AotCodeCompiler.compile.<locals>.<lambda>N
  s   ø€ Ø6Ø!Ø +ðð € r‚   c                 ó   •— ‰ S r¾   r�   )Úheader_codes   €rƒ   rÈ  z)AotCodeCompiler.compile.<locals>.<lambda>S
  s   ø€  ;€ r‚   TrR  zCMakeLists.txtÚconstsúbytes | bytearrayré   r‡   rº   c                óL  •‡— t           j        j        }|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|d
k    rd}d}nt          d|› �¦  «        ‚‰dk    rd}t          | ¦  «        dk    }t          | ¦  «        dk    }d&ˆfd„}d'd„}d(ˆfd„}|r || t          ||¦  «        \  }	}
n,|r |t          |¦  «        \  }	}
n || t          |¦  «        \  }	}
t          |	|
t          ‰¦  «        t           j        j        ¬¦  «        \  }}t          |¦  «        }t          ‰‰j        d‰¬¦  «        }t#          t          |j        ¦  «        t          |¦  «        t          |j        ¦  «        |¬ ¦  «        }|                     ¦   «         }|du r3|r1t+          t          |¦  «        |t          |j        ¦  «        ¦  «         n|                     ¦   «          |rõ|rót/          |d!¦  «        5 }|                     d¦  «         |                     d¦  «        }t4          j        d"k    r|                     d#¦  «        n|                     d$¦  «        }|d%k    sJ ‚|                     |¦  «         d}|t          | ¦  «        k     r5|                     | |d …         ¦  «        }||z  }|t          | ¦  «        k     °5d d d ¦  «         n# 1 swxY w Y   t;          j        |¦  «         |S ))NÚlinuxi ”5wzPModels with buffer mutation included doesn't support constants greater than 2GB!z.ldata, "aw"z.lrodata, "a"rÞ   Údarwinz__DATA,__datar?  rµ   FzUnsupported platform: rÝ   rA  r   rÌ  rÍ  Úalign_bytesr–   Úsymbol_prefixr‡   Úis_large_constsr¡   rº   rŠ  c                óÚ   •— d‰› d�}|d|› 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  }|dfS )Nú
	.section	r•  ú		.balign ú	.globl	ú_binary_constants_bin_start
ú_binary_constants_bin_start:
z	.byte z
	.space 1
z	.quad 0x1234567899abcdef
z	.space é   ú.globl	ú_binary_constants_bin_end
ú_binary_constants_bin_end:
z	weights.S©rC  )rÌ  rÑ  rÒ  rÓ  Ú
consts_asmr3  Úsection_attrs         €rƒ   Úformat_consts_to_gnu_asmzRAotCodeCompiler.compile.<locals>._compile_consts.<locals>.format_consts_to_gnu_asmƒ
  sø   ø€ ð =¨LÐ<Ð<Ð<�
ØÐ:¨;Ð:Ð:Ð:Ñ:�
ØÐW¨=ÐWÐWÐWÑW�
Ø ÐNÐNÐNÑN�
Ø&ð 	BØ#ð 7ð 7˜Ø"Ð&6°Ð&6Ð&6Ð&6Ñ6˜
˜
ð "ð 5Ø" nÑ4˜
øàÐ"@Ñ@�JØÐ"A­c°&©k¬k¸A©oÐ"AÐ"AÐ"AÑA�JØÐS¨ÐSÐSÐSÑS�
Ø ÐLÐLÐLÑL�
Ø! ;Ð.Ð.r‚   c                óÀ   — t          | ¦  «        }d}|}|d|› d�z  }|d|› d|› d�z  }d}| D ]}||› d�z  }|d	z   }|d
z  dk    r|dz  }Œ|dz  }|d|› d|› d�z  }|dfS )NzÔ#if defined(__clang__) || defined (__GNUC__)	
#define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize("address")))	
#else	
#define ATTRIBUTE_NO_SANITIZE_ADDRESS	
#endif	
	
ATTRIBUTE_NO_SANITIZE_ADDRESS	
zalignas(z	) extern zunsigned char z_binary_constants_bin_start[z] = {	
r   rä  rj   é   z	
z};	
z) extern unsigned char * z_binary_constants_bin_end;	
zweights.cpprÞ  )rÌ  rÑ  rÒ  Úconsts_sizeÚ	asan_attrÚ	const_cppÚcount_bytesr3  s           rƒ   Úformat_consts_to_cppzNAotCodeCompiler.compile.<locals>._compile_consts.<locals>.format_consts_to_cppœ
  sÍ   € õ " &™kœk�ð%�	ð &�	ØÐ>¨Ð>Ð>Ð>Ñ>�	ØÐp¨mÐpÐpÐYdÐpÐpÐpÑp�	Ø�Øð ,ð ,�AØ A   Ñ)�IØ"-°¡/�KØ" RÑ'¨1Ò,Ð,Ø! VÑ+˜	øØ˜XÑ%�	ØÐ{¨Ð{Ð{ÈmÐ{Ð{Ð{Ñ{�	Ø  -Ð/Ð/r‚   c                óŠ   •— t           rd}d}n3d‰› d�}|d| › d�z  }|d|› d�z  }||› d�z  }|d	|› d
�z  }||› d�z  }d}||fS )a–  
                This function handles zero-sized constants because the C++ standard prohibits zero-length arrays:
                https://stackoverflow.com/questions/9722632/what-happens-if-i-define-a-0-size-array-in-c-c

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

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

                Cross-platform implementation:
                    Linux: Added '-pedantic' to disable zero-sized arrays in C++ compiler
                    Windows: MSVC naturally rejects zero-sized arrays by default
                zÍ
option casemap:none
.data
?_binary_constants_bin_start@@3PAEA:
align 16
?_binary_constants_bin_end@@3PAEA:
align 16
public ?_binary_constants_bin_start@@3PAEA
public ?_binary_constants_bin_end@@3PAEA
end
r  rÕ  r•  rÖ  r×  rØ  rÙ  rÛ  rÜ  rÝ  ÚSrt  )rÑ  rÒ  Úasm_codeÚasm_extrà  s       €rƒ   Úget_zero_consts_asm_codezRAotCodeCompiler.compile.<locals>._compile_consts.<locals>.get_zero_consts_asm_code´
  s©   ø€ õ( ð "ð
 �Hð $�G�Gà>¨lÐ>Ð>Ð>�HØÐ <¨[Ð <Ð <Ð <Ñ<�HØØQ ]ÐQÐQÐQñ�Hð  =Ð PÐ PÐ PÑP�HØÐ U¨=Ð UÐ UÐ UÑU�HØ =Ð NÐ NÐ NÑN�HØ!�GØ Ð(Ð(r‚   r¼  T)rá   r²  Úcompile_onlyÚuse_relative_path©r{   r´  Ú
output_dirrµ  zr+bÚlittles   ïÍ«™xV4s   4Vx™«Íïr0  )
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Ç  Úuse_consts_asm_buildÚmutated_buffersri   rù  r)  rC  r5  rÿ   rQ   rŽ  r‡   Úmodel_name_for_generated_filesr   r;   r²  r9   Ústemrž  Úget_target_file_pathrA   Úbuildr  r3  rc  rè   Ú	byteorderÚfindr  r§  )rÌ  ré   Úuse_asm_buildrÒ  rÓ  Úis_zero_size_constsrá  rè  rí  Úconsts_codeÚcode_extr?  Úconsts_sÚobject_build_optionsÚobject_builderÚconsts_orª  ÚhdrÚ	start_idxÚposÚrcrà  rá   r  Úspecified_sub_dirrï  s                        @€€€€rƒ   Ú_compile_constsz0AotCodeCompiler.compile.<locals>._compile_consts`
  s  øø€ å"(Ô"5Ô"JˆMà˜7Ò"Ð"ØÔ(­:°e´o×6JÒ6JÑ6LÔ6LÑ+MÔ+MÑMð 
3õ ˜6‘{”{ ]Ò2Ð2Ý(Ønñô ð ð $2�L�Là#2�LØ "��Ø˜XÒ%Ð%Ø.�Ø #��Ø˜WÒ$Ð$Ø "�à %��å"Ð#F¸HÐ#FÐ#FÑGÔGÐGð ˜eÒ#Ð#Ø %�å! &™kœk¨DÒ0ˆOÝ"% f¡+¤+°Ò"2Ðð/ð /ð /ð /ð /ð /ð20ð 0ð 0ð 0ð0,)ð ,)ð ,)ð ,)ð ,)ð ,)ð\ ð Ø(@Ð(@Ø�K¨¸ñ)ô )Ñ%�˜X˜Xð 'ð Ø,DÐ,DÝ# ]ñ-ô -Ñ)�K  ð -AÐ,@Ø¥¨]ñ-ô -Ñ)�K õ  ØØÝ!Ð"3Ñ4Ô4ÝÔ'ÔFð	ñ ô ‰KˆAˆxõ ˜H‘~”~ˆHÝ#8Ø'ØœØ!Ø"3ð	$ñ $ô $Ð õ (Ý˜œÑ'Ô'Ý˜H™œÝ˜xœÑ/Ô/Ø0ð	ñ ô ˆNð &×:Ò:Ñ<Ô<ˆHØ Ð%Ð%Ð*=Ð%Ý$¥S¨¡]¤]°H½cÀ(Ä/Ñ>RÔ>RÑSÔSÐSÐSà×$Ò$Ñ&Ô&Ð&àð " =ð "Ý˜( EÑ*Ô*ð "¨aØ—F’F˜1‘I”I�IØŸ&š& ™,œ,�Cõ œ=¨HÒ4Ð4ð ŸšÐ!DÑEÔEÐEà ŸXšXÐ&IÑJÔJð ð
 %¨š?˜?˜?˜?Ø—F’F˜9Ñ%Ô%Ð%Ø�CØ¥ F¡¤Ò+Ð+ØŸWšW V¨C¨D¨D¤\Ñ2Ô2˜Ø˜r™	˜ð ¥ F¡¤Ò+Ð+ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "õ" ŒI�hÑÔÐàˆOs   È-CLÌL	ÌL	r   ©ÚFileLockú.lock©Útimeoutz.jsonrs  ÚAOTI_DEVICE_KEYz_metadata.jsonz"Metadata must only contain stringsrs  c              3  ó^   •K  — | ]'}|‰j         v¯‰                     |¦  «        j        V — Œ(d S r¾   )Úfolded_constantsÚget_original_value_of_constantÚis_cuda©rÀ   r{   r  s     €rƒ   rÂ   z*AotCodeCompiler.compile.<locals>.<genexpr>U  sN   øè è € ð ð àØ˜uÔ5Ð5Ð5ð ×4Ò4°TÑ:Ô:ÔBà5Ð5Ð5Ð5ðð r‚   r·  útorch.Tensorr–   c                óØ   — |                       ¦   «         dk    rdS | j        r$t          j        j                             | ¦  «        S |                      ¦   «                              ¦   «         S rA  )Únumelr	  rÏ   rÐ   ÚmkldnnÚ_nbytesÚuntyped_storageÚnbytesr¨  s    rƒ   Ú_constant_nbytesz1AotCodeCompiler.compile.<locals>._constant_nbytes]  sY   € Ø—7’7‘9”9 ’>�>Ø˜1Ø”;ð 7Ý œ9Ô+×3Ò3°AÑ6Ô6Ð6Ø×(Ò(Ñ*Ô*×1Ò1Ñ3Ô3Ð3r‚   Úbinary_blobÚaoti_serialize_constantsrl  c                ó&   •— g | ]}|‰j         v¯|‘ŒS r�   )r  r  s     €rƒ   rr  z+AotCodeCompiler.compile.<locals>.<listcomp>k  s1   ø€ ð &ð &ð &à Ø uÔ'=Ð=Ð=ð à=Ð=Ð=r‚   )ÚThreadPoolExecutorrj   r  c                ó¨  •— ‰
|          }|dk    rd S ‰                      ‰|          ¦  «        }|j        rFt          j        j                             |¦  «        }‰                     ‰‰	|          z   ||¦  «         d S |                     ¦   «                              ¦   «         }‰                     ‰‰	|          z   |                     ¦   «         |¦  «         d S rA  )	r  r	  rÏ   rÐ   r  Údata_ptrÚmemmover  r  )r°  Únr·  r!  Út_cpuÚ	base_addrÚconstant_namesÚctypesr  ÚoffsetsÚsizess        €€€€€€rƒ   Ú_workerz(AotCodeCompiler.compile.<locals>._worker‹  sÔ   ø€ Ø % a¤˜AØ  Ašv˜vØ & Ø %× DÒ DÀ^ÐTUÔEVÑ WÔ W˜AØ œ{ð 	"Ý+0¬9Ô+;×+DÒ+DÀQÑ+GÔ+G Ø &§¢¨y¸7À1¼:Ñ/EÀxÐQRÑ SÔ SÐ SÐ SÐ Sð )*×(9Ò(9Ñ(;Ô(;×(?Ò(?Ñ(AÔ(A Ø &§¢Ø$-°¸´
Ñ$:¸E¿NºNÑ<LÔ<LÈañ!"ô !"ð !"ð !"ð !"r‚   r‚   Úpickle_weightsc                ó˜   •— i | ]F}|‰j         v¯‰j        |         ‰                     |¦  «        t          ‰j        |         ¦  «        f“ŒGS r�   )r  Úallocated_constant_namer  rb   rù  r  s     €rƒ   r=  z+AotCodeCompiler.compile.<locals>.<dictcomp>©  se   ø€ ð ð ð ð
 !Ø uÔ'=Ð=Ð=ð Ô5°dÔ;Ø!×@Ò@ÀÑFÔFÝ,¨U¬_¸TÔ-BÑCÔCð>ð
 >Ð=Ð=r‚   z?use_external_weights and  use_mmap_weights cannot both be True.z_weights.blob)r²  rá   Úuse_mmap_weightsÚuse_mmap_weights_externalrï  r±  ©rî  Úmin_optimizerî  Úaoti_precompile_header)r²  r1  rð  z#aot wrapper compilation command: %sz"aot kernel compilation command: %sz_compile_flags.jsonz is too big to optimizezUPlease use torch._inductor.config.aot_inductor.compile_wrapper_opt_level = 'O0' flag.Úqr˜  )rj   ÚqqrÚ  zsaving script object %s as %szcustom_objs_config.json)Úrocmrˆ   rÝ   r5  z<TODO: add emit_multi_arch_kernel support for cutlass kernelsÚ_kernel_name_to_bodyr  rˆ   rƒ  )Ú%compile_multiarch_bundle_from_llvm_irz7Multi-arch ROCm compilation requires LLVM IR file, but zD not found. Ensure asm_type='ll' is captured in triton_heuristics.py)Úllvm_ir_pathÚoutput_bundle_pathÚtarget_archsz/Failed to compile multi-arch bundle for kernel z>. Check that ROCm toolchain is available and LLVM IR is valid.zCreated multi-arch bundle: %sÚ	fatbinaryÚasm_cubin_and_rawútuple[str, str, str | None]c                óî  •— | \  }}}‰�8|�6t           j                             |¦  «        r‰d|› �dd‰› d|› �d‰› d|› �g}nC‰€t          d¦  «        ‚g t	          j        ‰¦  «        ¢d‘|‘d‘|‘d	‘d
‰› d‰› �‘d	‘d
‰› d‰› �‘}	 t          j        |ddd¬¦  «         d S # t          j        $ rE}t          t	          j
        |¦  «        › d|j        › d|j        › �t          j        ¬¦  «         ‚ d }~ww xY w)Nz	--create=z-64z--image3=kind=elf,sm=z,file=z--image3=kind=ptx,sm=z nvcc is required to build fatbinz-fatbinú-oz-gencodezarch=compute_z,code=compute_z	,code=sm_T)Úcapture_outputr�  rB  z failed with:
stdout:
z	
stderr:
)Úfile)r  r	  rT  rÿ   Úshlexrw  Ú
subprocessÚrunÚCalledProcessErrorÚprintrÃ   ÚstdoutÚstderrrè   )	r<  Úasm_fÚcubin_fÚraw_cubin_fÚcmdr‡  Úcurrent_archr;  Únvccs	         €€€rƒ   Ú_compile_fatbinz0AotCodeCompiler.compile.<locals>._compile_fatbin¥  s²  ø€ ð 7HÑ3˜˜w¨à%Ð1Ø +Ð 7Ý "¤§¢¨{Ñ ;Ô ;ð !8ð !*Ø 5¨GÐ 5Ð 5Ø %Ø Y¸Ð YÐ YÈKÐ YÐ YØ S¸Ð SÐ SÈEÐ SÐ Sð#˜C˜Cð  $˜|Ý&2Ð3UÑ&VÔ&VÐ Vð
#Ý!&¤¨TÑ!2Ô!2ð
#à )ð
#ð !&ð
#ð !%ð	
#ð
 !(ð
#ð !+ð
#ð ![°Ð ZÐ ZÈLÐ ZÐ Zð
#ð !+ð
#ð !V°Ð UÐ UÀ|Ð UÐ Uð
#˜Cð	"Ý&œNØ #°D¸tÈ4ðñ ô ð ð ð øõ  *Ô<ð "ð "ð "Ý!Ý#(¤:¨c¡?¤?Ð kÐ kÈAÌHÐ kÐ kÐabÔaiÐ kÐ kÝ%(¤Zðñ ô ð ð "øøøøð"øøøs   ÂB  Â C4Â/A C/Ã/C4Úaoti_compile_fatbin)Úcpp_compilerzABatched cubin embedding failed, falling back to per-cubin objcopy)r±  rá   r²  rï  rÝ   Úicpx)z-fsyclz-fsycl-targets=intel_gpu_pvcz-Xspirv-translatorzi-spirv-ext=+SPV_INTEL_split_barrier,+SPV_INTEL_2d_block_io,+SPV_INTEL_subgroup_matrix_multiply_accumulate)Úcompilerr±  rá   r²  rï  Úextra_flagszaot linkage command: %sr¸   z// Compile cmd
// z// Link cmd
// z_linker_flags.jsonz_serialized_weights.binÚwindowszKwhen cross_target_platform is windows, use_mmap_weights should not be true.c                 ó   ‡‡‡	— t           r[ddlm} m}m} ddlmŠmŠmŠ	  G ˆˆˆ	fd„d|¦  «        } |¦   «         }|j	         
                     | |¦  «        ¦  «         |j        }ndd l}|                     ¦   «         }|S )Nr   )ÚbyrefÚ	StructureÚwindll©ÚDWORDÚLPVOIDÚWORDc                  óV   •— e Zd Zd”fd”fd” fd”fd”fd” fd” fd” fd	” fd
”fd”fgZdS )úCAotCodeCompiler.compile.<locals>.get_page_size.<locals>.SYSTEM_INFOÚwProcessorArchitectureÚ	wReservedÚ
dwPageSizeÚlpMinimumApplicationAddressÚlpMaximumApplicationAddressÚdwActiveProcessorMaskÚdwNumberOfProcessorsÚdwProcessorTypeÚdwAllocationGranularityÚwProcessorLevelÚwProcessorRevisionN)r}   r~   r   Ú_fields_rZ  s   €€€rƒ   ÚSYSTEM_INFOr_  g  sn   ø€ € € € € à%=¸tÐ$DØ%0°$Ð$7Ø%1°5Ð$9Ø%BÀFÐ$KØ%BÀFÐ$KØ%<¸eÐ$DØ%;¸UÐ$CØ%6¸Ð$>Ø%>ÀÐ$FØ%6¸Ð$=Ø%9¸4Ð$@ð,"   r‚   rl  )r†  r'  rW  rX  rY  Úctypes.wintypesr[  r\  r]  Úkernel32ÚGetSystemInforb  ÚresourceÚgetpagesize)
rW  rX  rY  rl  ÚsiÚsys_page_sizerp  r[  r\  r]  s
          @@@rƒ   Úget_page_sizez.AotCodeCompiler.compile.<locals>.get_page_size\  sõ   øøø€ õ 'ð Cðð ð ð ð ð ð ð ð ð ð
 LÐKÐKÐKÐKÐKÐKÐKÐKÐKð"ð "ð "ð "ð "ð "ð "ð "ð "¨iñ "ô "ð "ð "- ¡¤˜BØ"œO×9Ò9¸%¸%À¹)¼)ÑDÔDÐDØ,.¬M˜M˜Mà+˜O˜O˜Oà,4×,@Ò,@Ñ,BÔ,B˜Mà,Ð,r‚   i @  za+bó    zkernel_information.jsonr  r  )rÌ  rÍ  ré   r‡   rº   r‡   )r·  r  rº   r–   )r°  r–   rº   r  r�   )r<  r=  rº   r  )rº   r–   )�r5   rC   r9   r;   r²  rÅ   Úget_command_liner)   r}  rx  rÇ  r†  r„  rÃ   rŽ  rõ  Údynamic_linkager  r  r	  rs  rt  rc  r¾  rr  Ú
writelinesÚflushrv   rÍ  r¶   r{   ÚpackagerÒ   r*  r   rZ   r   rž  rT  rŸ  r‡   Útorch.utils._filelockr
  rW  ÚLOCK_TIMEOUTÚwith_suffixrï   râ  rð   Ú	with_namerö  rN  r�  r  r"  r¥  r   rM  rù  r'  Úpackage_constants_in_soÚ package_constants_on_disk_formatr'   Úconcurrent.futuresr  r  rQ   Ú	bytearrayÚc_ubyteÚfrom_bufferÚ	addressofrr  rJ  rC  rc   rS   rÿ   Úprecompile_headersr†  Ú_get_cpp_wrapper_headerÚ_precompile_headerÚprecompiled_headerÚ_get_cpp_prefix_headerr÷  r®  Úsave_flags_to_jsonÚsave_compile_cmd_to_cmakeÚsave_src_to_cmakerø  r+   ÚCppCompileErrorr$   ÚstructÚpackr   r–   rÏ   ÚrandintÚiinfoÚint64Úmaxr×  rè   ré   Ú	enumerateÚtorchbind_constantsÚ_libraryÚfake_class_registryrX   r'  r£  r¤  rd   Ú_pickle_saver!  ÚROCmCodeCacheÚCUDACodeCacheÚXPUCodeCacherB  r�   r‰   Úaot_kernels_orp  r‡  r>   rÄ   r  rª  rz  r  rÙ   Ú$torch._inductor.rocm_multiarch_utilsr7  Úembed_kernel_binaryÚcuda_compile_utilsÚ_nvcc_arch_as_compile_optionÚ_cuda_compilerÚwhichrI  r7   r=   rC  rE  r¯  r8   r?   r4   Úsave_kernel_asm_to_cmakeÚextendÚsave_link_cmd_to_cmaker§  Úcross_target_platformÚtellr[  r\  rë   Úcreate_kernel_information_json)|r.  r  rª  r«  r¬  rá   r­  Úgenerated_filesÚpicked_vec_isaÚvec_isa_cmd_genÚcpp_commandÚspecified_output_pathÚspecified_artifact_nameÚwrapper_keyr?  rª  Úmodel_class_nameÚ
class_namer·  Úwrapper_path_operatorÚkernel_path_operatorÚ
cmake_pathr  r
  rV  ÚlockÚextern_kernel_nodes_jsonrï   Ú	meta_jsonrP  rQ  Úkernel_meta_jsonÚ	output_soÚall_cudar  r  Ú
total_sizer{   r#  Úserialized_weightsÚbuf_viewr*  ÚpoolÚweights_dicträ  Úuse_external_weightsr.  Úexternal_weights_pathÚexternal_weights_filenameÚcompile_commandÚwrapper_build_optionsÚkernel_build_optionsÚheader_fileÚ
cpp_prefixÚwrapper_builderÚwrapper_compile_cmdÚ	wrapper_oÚkernel_builderÚkernel_compile_cmdÚkernel_oÚcompile_flagsr‡  Úaot_constantsÚmagic_numberÚ	f_weightsr  Úcustom_obj_idxÚqual_name_to_idÚconstantÚcustom_obj_nameÚcustom_obj_bytesÚcustom_obj_pathÚconstants_config_jsonÚ	cache_clsÚgpu_codecacheÚgpu_kernels_oÚcubins_oÚ	asm_filesÚfatbin_cmdsÚcubins_to_embedÚldÚobjcopyÚkernelsÚkernel_namer.  Úasm_fileÚ
cubin_filer7  ÚsuccessÚnvcc_dirrÏ  rO  Úcombined_objÚoutput_namerñ  Úso_build_optionsÚobj_srcsÚ
so_builderÚlink_cmdÚlinker_flagsÚweight_filerÁ  Úo_filert  Ú
page_size_Ú	page_sizeÚf_soÚso_sizeÚkernel_infoÚkernel_info_jsonr%  r&  r'  rM  r;  rË  rÉ  rÅ  rN  r(  r)  r  rï  rÁ  s|    ``` `                                                                                                        @@@@@@@@@@@@@@rƒ   ÚcompilezAotCodeCompiler.compile·	  sn   øøøøøøøøøøøøøøøøøø€ ð 0@ˆåÑÔÐå%™œˆÝ$ØØÝ-Ø&Ø'Øœðñ ô ð
ñ 
ô 
ˆõ ˜?×;Ò;Ñ=Ô=Ñ>Ô>ˆõ ÔÑÔÐJ ;°%Ò#7ÐJ¸E¼Nð 	õ +­6Ô+>Ô+JÑKÔKñ	
Ø!Ø#õ ÔÔ/ð 	ØŸ9š9 l°KÐ%@ÑAÔAˆLØˆKå$)ØØØØ/ÝÔ#ÔBð%
ñ %
ô %
Ñ!ˆ�\ð N¸\ÐMÐMÐMØñð 	õ ØØØØ/ÝÔ#ÔBð
ñ 
ô 
‰ˆˆ;ð ˆØˆÝÔ"Ô2ñ 	åÝ”—’Ý”G—O’O¥B¤G§O¢OµHÑ$=Ô$=Ñ>Ô>ØØØ"Øñô ñô ð ð å#)Ô#6Ô#UÐ ØBÐ0@ÐBÐB�
ØŸfšf™hœh�ð
  ×'Ò'Ð(<Ð>OÀ*Ð>OÐ>OÐ>OÑPÔPß’WÐ0°ZÐ2BÐ2BÐ2BÑCÔCß’WÐ1°jÐ3DÐ3DÐ3DÑEÔEð õ
 "'ØØØ"7Ø(ð	"ñ "ô "‘��;ð+ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ: ˜dÑ#Ô#ð 	9 qð	ð �LŠL˜,¨¨k¸4Ð@ÑAÔAÐAØ�GŠG‰IŒIˆIÝŒG×Ò ¤°%ÐÑ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9õ ÔÔ&ð 	4Ø×"Ò" <Ñ0Ô0Ð0ÝÔ&Ô7ð 4Ø×&Ò& {Ñ3Ô3Ð3ÝÔ&Ô6ð 4Ø×&Ò& {Ñ3Ô3Ð3å×ÒÐ:¸LÑIÔIÐIÝ×ÒÐ9¸;ÑGÔGÐGÝØðð ð ð ð
 ,Ð+Ð+Ð+ð	
ñ 	
ô 	
ð 	
õ 	Øðð ð ð ð
 +Ð*Ð*Ð*ð	
ñ 	
ô 	
ð 	
õ Ô"Ô2ð 
	Ý× Ò Ð!=¸{ÑKÔKÐKÝØðð ð ð ð
 /Ð.Ð.Ð.ðñ ô ð õ !% \Ñ 2Ô 2ÐÝ# KÑ0Ô0ÐØ1Ô8¸;ÑFÐØ ×'Ò'Ñ)Ô)ð 	3Ø×#Ò#¨TÐ#Ñ2Ô2Ð2Ý�Ð/Ñ0Ô0Ð3CÑCÑDÔDˆ
ð}	ð }	ð }	ð }	ð }	ð }	ð }	ð }	ð }	ð~ 	3Ð2Ð2Ð2Ð2Ð2å‘>”>ˆØˆxÝŒG�LŠL˜ ;°Ñ#8Ñ9Ô9Å<ð
ñ 
ô 
ˆð ð f		6ð f		6Ø-ð EÝ+.Ø)×5Ò5°gÑ>Ô>ñ,ô ,Ð(õ Ð2°CÑ8Ô8ð <¸AØ—G’GÐ:Ñ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <õ Ô&Ô.ð EØ#×*Ò*Ð+CÑDÔDÐDåÔ*Ô3ˆHØ*5ˆHÐ&Ñ'ð �OŠOÕ2°;Ñ?Ô?Ñ@Ô@Ð@õ Ø%×/Ò/Ø,Ô1ÐAÐAÐAñô ñô ˆIõ
 Ô+Ô4×:Ò:Ñ<Ô<ð ð ‘��1Ý! !¥SÑ)Ô)ð ­j¸½SÑ.BÔ.Bð ð Ø8ñô ÐBð õ �i Ñ%Ô%ð B¨Ø—’�œ
¥6Ô#6Ô#?Ñ@Ô@ÑAÔAÐAðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bõ  #Ø$×.Ò.Ø+Ô0Ð@Ð@Ð@ñô ñ ô  Ðõ
 ŒK˜	Ð#3Ñ4Ô4Ð4åÔ"Ô*ð =Ø×&Ò& yÑ1Ô1Ð1ÝÔ*Ô;ð =Ø#×*Ò*Ð+;Ñ<Ô<Ð<ð +ðC•Ô#Ô/Ð/åÐ.×:Ò:¸5ÑAÔAÑBÔBð õ
 ð ð ð ð à!œOðñ ô ñ ô ˆHð ˆMˆMˆMð4ð 4ð 4ð 4õ Ô#Ô;ð@)åÔ&ÔGÈ=ÒXÑXå!Ø.Àdðñ ô ð :1ð :1ð&ð &ð &ð &à$)¤Oð&ñ &ô &�Nð
 &ñ 21ØIÐIÐIÐIÐIÐIð .0˜Ø+-˜Ø%&˜
Ø$2ð 	ð 	˜DØ %× DÒ DÀTÑ JÔ J˜AØ 0Ð 0°Ñ 3Ô 3˜AØ#ŸNšN¨:Ñ6Ô6Ð6Ø!ŸLšL¨™OœO˜OØ&à#+ð!X  à&'­+¡o¸Ñ&9½kÑ%IÍKÑ%Wñ˜J˜Jõ .7°zÑ-BÔ-BÐ*ð %+¤N°ZÑ$?×#LÒ#LØ.ñ$ô $˜ð %+×$4Ò$4°XÑ$>Ô$>˜	ð"ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð  0Ð/Ñ1Ô1ð %°Tà%)§X¢X¨gµu½SÀÑ=PÔ=PÑ7QÔ7QÑ%RÔ%Rð %ð % Ø $ð%ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð
 %˜Hà-0Ð*ðu:1ð :1ð :1ñ :1ô :1ð :1ð :1ð :1ð :1ð :1ð :1øøøð :1ð :1ð :1ð :1øðx &)Ð"åÔ"ÔCÐGWÒWÐWå&ðð ð ð ð
 %*¤Oðñ ô ñ	 ô 	 �ð  ×&Ò& |Ñ4Ô4Ð4åÐ0Ñ1Ô1ˆKå5NØñ6ô 6Ñ2Ð Ð"2ð $ð Ð(8ð å"ØUñô ð ð %)Ð!Ø#ð Ø/DÔ/IÐ,XÐ,XÐ,XÐ)Ý(+Ø)×3Ò3Ð4MÑNÔNñ)ô )Ð%ð
 "œNØ*Ø$4Ø-AØ%6Ø)ð/ð /ˆOõ %:ð %Ø!Ý!'Ô!4Ô!EÐEð%ð %ð "ð%ð %Ð!õ
 $9ð $ð $Ø!ð$à!ð$ð $Ð õ Ô"Ô5ð ½kð Ý!Ð":ÐRVÐWÑWÔWð ð Ý"9Ø#¨e¬nð#ñ #ô #�Kõ @RØ#Ø#ð@ð @õ *0Ô)<Ô)MÐ%Mð@ð *ð	@ð @Ð)Ô<õ &<¸KÑ%HÔ%HÐH�zð ÝBTØ&Ø'ðCð Cð .ðCð CÐ,Ô?ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ" )ÝÐ.Ô3Ñ4Ô4Ø$ÝÐ4Ô;Ñ<Ô<Ø1ð	ñ ô ˆOð #2×"BÒ"BÑ"DÔ"DÐØ'×<Ò<Ñ>Ô>ˆIå'ÝÐ-Ô2Ñ3Ô3Ø#ÝÐ4Ô;Ñ<Ô<Ø0ð	ñ ô ˆNð "0×!@Ò!@Ñ!BÔ!BÐØ%×:Ò:Ñ<Ô<ˆHå�IŠIÐ;Ð=PÑQÔQÐQÝ�IŠIÐ:Ð<NÑOÔOÐOÝÔ"Ô3ð 'å #Ø)×3Ò3Ø0Ô5ÐJÐJÐJñô ñ!ô !�ð
 &×8Ò8¸ÑGÔGÐGØ×&Ò& }Ñ5Ô5Ð5Ø×9Ò9¸*ÀkÑRÔRÐRØ×1Ò1°*¸lÑKÔKÐKØ×&Ò& zÑ2Ô2Ð2Ð2ðØ#×)Ò)Ñ+Ô+Ð+Ð+øÝÔ+­YÐ7ð ð ð Ø0µC¸±F´FÐ:Ð:Ý*Øsñô à ð!ð �Gøøøøðøøøð ×$Ò$Ñ&Ô&Ð&à#ð QØ 2�Ø �Ø'ð BÝ$*¤K°°[Ñ$AÔ$A�MØ0Ð<Ð<Ð<åÐ3°TÑ:Ô:ð <¸iØ!ŸšÐ(:Ñ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <à#×*Ò*Ð+@ÑAÔAÐAøõ  $Ý�œ q­%¬+µe´kÑ*BÔ*BÔ*FÈÑMÔM×RÒRÑTÔTñ ô  �õ !'¤¨D°+À±/À<Ñ PÔ P�à&� }µc´lÑCÔCˆHØˆNð !ˆOÝ4=ØÔ)×/Ò/Ñ1Ô1ñ5ô 5ð 8ð 8Ñ0�Ñ 0  xõ Ø�eœnÔ@ÔQñô ð 1ð  (Ô0�HÝ! (­E¬HÔ,AÑBÔBÐBÐBÐBÝ%?Ð"QÀÐ"QÐ"Q�å—	’	Ð9¸4ÀÑQÔQÐQà(7� Ñ%Ý#(¤8×#8Ò#8¸Ñ#BÔ#BÐ Ý"$¤'§,¢,Ø)Ô0°/ñ#ô #�õ ˜_Ð.>ÀÑEÔEÐEØ×&Ò& Ñ7Ô7Ð7Ð7àð >Ý(*¬¯ªØ)Ô0Ð2Kñ)ô )Ð%õ Ð/°Ñ5Ô5ð 9¸Ø—G’G�DœJ Ñ7Ô7Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9à×&Ò&Ð'<Ñ=Ô=Ð=õ &Ý%Ý#ðð ÷ Šc�EœMÔ-Ð>�&�&°;ÅÑNÔNð	 ð &˜I™KœKˆMØ)Ô7×<Ò<Ñ>Ô>ˆMàÔ'×-Ò-Ñ/Ô/Ð/àð Ý!Ô.ÔEð ð ØRñô ÐEð ˆHØˆIØ=?ˆKÝñ KØ9;�Ý0Ð1BÑCÔC‘��GÝ!¥!¤'Ô"6Ð8NÐPRÑSÔS�Þ*>Ô*D×*JÒ*JÑ*LÔ*Lð 3Jñ 3JÑ&�K Ø"¨'Ð1Ð1ð !à#(¨¤<Ð/�xð 3Ø!×(Ò(¨Ñ2Ô2Ð2à!&Ö'FÑ'HÔ'HÔ!I�JåÔ+ÔBð&Rà'¨6Ò1Ð1å œ=Ô,Ð4Ø'×.Ò.Ø!)¨:°u·y²yÐASÑ7TÔ7TÐ Uñô ð ð ðð ð ð ð ð õ
 $&¤7§>¢>°(Ñ#;Ô#;ð "Ý&2ð%`à+3ð%`ð %`ð %`ñ'"ô '"ð !"ð 'LÐ&Kà-5Ø3=Ø-1ð	'ñ 'ô '˜Gð $+ð "Ý&2ð%dÐVað %dð %dð %dñ'"ô '"ð !"õ
  ŸHšHÐ%DÀjÑQÔQÐQåÔ*Ô>ð JØ'×.Ò.°
¸KÐ/HÑIÔIÐIùð ñ :EØEÐEÐEÐEÐEÐEæ#5Ô#RÑ#TÔ#T�LÞ-Ô<Ñ>Ô>�DÝ &¤¨[Ñ 9Ô 9�IØÐ'½¼¿ºÈÑ9NÔ9NÐ-N¨XÐ'Ý$&¤G§L¢L°¸;Ñ$GÔ$G˜	Ýœ7Ÿ>š>¨)Ñ4Ô4ð 2Ø(1˜Ið)"ð )"ð )"ð )"ð )"ð )"ð )"ð )"õX %Ð%:ÐRVÐWÑWÔWðEð Eà*Ð*Ñ,Ô,ðEà04æ˜TŸXšX o°{ÑCÔCÑDÔDÐDð	Eð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð Eð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð #ð ðÞ'BØ+ÝœGŸOšO¨IÑ6Ô6Þ)9Ñ);Ô);ð(ñ (ô (˜ð
 !Ÿš¨Ñ5Ô5Ð5Ð5øÞ%Ô8ð 
ð 
ð 
ÝŸšð@ñô ð ð 8Gð ð Ñ3˜J¨Ø$ŸOšOÞ 4Ø$.°¸RÀñ!"ô !"ñô ð ð ðð ð
øøøö 'MÈYÑ&WÔ&WÑ#ˆK˜Ý4Ø&Ø'ØœØ"3ð	 ñ  ô  Ðð ð  °Ò!5Ð!5Ý#8Ø#Ø*Ø +Ø"œ^Ø&7ð
!ð 
!ð 
!ð$ñ $ô $Ð ð& " 8¨XÐQ¸ÐQÈÐQˆHÝ#Ø Ø Ø%Ø,ð	ñ ô ˆJð "×2Ò2Ñ4Ô4ˆHØ"×7Ò7Ñ9Ô9ˆIå�IŠIÐ/°Ñ:Ô:Ð:õ �l CÑ(Ô(ð 9¨AØ—’˜‘”�Ø—’ÐEÐ.AÐEÐEÐEÑFÔFÐFØ—’Ð7¨8Ð7Ð7Ð7Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9õ
 �k 3Ñ'Ô'ð 9¨1Ø—’˜‘”�Ø—’ÐDÐ.@ÐDÐDÐDÑEÔEÐEØ—’Ð7¨8Ð7Ð7Ð7Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9õ
 Ô"Ô3ñ k6Ý"Ø)×3Ò3Ø0Ô5ÐIÐIÐIñô ñ ô  �ð
 !×3Ò3°LÑAÔAÐAØ×&Ò& |Ñ4Ô4Ð4Ø×&Ò&¦~Ñ6Ô6Ð6ð $ð GÝ"%Ø-×7Ò7Ø4Ô9ÐRÐRÐRñô ñ#ô #�Kõ
 ˜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Ð7ð $×*Ò*¨8Ñ4Ô4Ð4Ø×0Ò0°¸XÑFÔFÐFõ Ô'Ô>ðFåœÔ)Ð1à×7Ò7¸
ÀIÑNÔNÐNØ#×*Ò*¨9Ñ5Ô5Ð5Ð5ð  ; Ð:°Ð:�HØ#×*Ò*¨8Ñ4Ô4Ð4Ø'ð Fð F˜Ø"×4Ò4°ZÀÑEÔEÐEÐEà×1Ò1°*Ñ=Ô=Ð=Ñ=à× Ò Ñ"Ô"Ð"Ø&ð &ð &�FØ Ð.Ð.Ø å”I˜fÑ%Ô%Ð%Ð%à#ð 2CÝÔ*Ô@ÀIÒMÐMÝ*Øiñô ð ð"-ð "-ð "-ð "-ðH "/ ¡¤�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ðMf		6ð f		6ð f		6ñ f		6ô f		6ð f		6ð f		6ð f		6ð f		6ð f		6ð f		6øøøð f		6ð f		6ð f		6ð f		6õP Œ<Ô1°QÒ6Ð6Ýœ/Ô/×NÒNÑPÔPˆKÝ!œwŸ|š|Ø%Ô,Ð.Gñ ô  Ðõ Ð&¨Ñ,Ô,ð ;°Ø—’�œ
 ;°qÐ9Ñ9Ô9Ñ:Ô:Ð:ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;à×"Ò"Ð#3Ñ4Ô4Ð4åÔÔ&ð 	#ð #Ð"àÐsê  Æ>B	IÉIÉIÉ-AKËKËKÒ85A^<Ó-TÔA^<ÔT	ÔA^<ÔT	ÔC8A^<Ø7YÙA^<ÙY	ÙA^<ÙY	ÙD#A^<Ý=C,cá)4b*âcâ*b.â.câ1b.â2câ9A^<ãc		ã	A^<ãc		ãDA^<ç%A iéA^<éi	éA^<éi	éFA^<ï8pðA^<ðqð##qñqñAA^<òr5ò)A^<ò5r9	ò9A^<ò<r9	ò=G0A^<ú-({!ûA^<û!{%	û%A^<û({%	û)LA^<ÁG1AIÁG<%AH-ÁH!AIÁH-AH1ÁH1AIÁH4AH1ÁH5AIÁH8A^<ÁIAI	ÁIA^<ÁIAI	ÁIA^<ÁIAAJ%ÁJ$A^<ÁJ%AAL ÁK=A^<ÁK?AL ÁL CA^<ÁOAAPÁP	A^<ÁPAP	ÁPA^<ÁPAP	ÁPA^<ÁP0AARÁQ8A^<ÁRAR	ÁRA^<ÁRAR	ÁRC A^<ÁU>AVÁV
A^<ÁVAV	ÁVA^<ÁVAV	ÁVE%A^<Á\A0A]?Á]3A^<Á]?A^	Á^A^<Á^A^	Á^)A^<Á^<A_ Á_A_ Á`4*Aa*Áa*Aa.Áa1Aa.N)r  r«   rª  r‡   r«  r‡   r¬  rz   rá   r‡   r­  r�   rº   r®  )r}   r~   r   r‰  r’  rø  r�   r‚   rƒ   r©  r©  ²	  sD   € € € € € ðð ð ðdð dð dñ „[ðdð dð dr‚   r©  zCDLL | NoneÚ_libgompr7  r  ú list[c_void_p] | c_void_p | Nonec                ó–  ‡— 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 |¤Ž}	|	€d S t          |	t          t           f¦  «        r\d„ |	D ¦   «         }	|	D ])}
t          |
t"          j        ¦  «        sJ | dz   ¦   «         ‚Œ*t"          j        j                             |	¦  «        S t          |	t"          j        ¦  «        sJ | dz   ¦   «         ‚t"          j        j                             |	¦  «        S )Nr   r   rº   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 r¾   r�   )rÀ   r¸   Úconvert_args     €rƒ   rÂ   z9custom_op_wrapper.<locals>.convert_arg.<locals>.<genexpr>ª  s+   øè è € Ð9Ð9°˜[˜[¨™^œ^Ð9Ð9Ð9Ð9Ð9Ð9r‚   )	r‡   rÅ  rÏ   r£  Ú_aotiÚ&alloc_tensor_by_stealing_from_void_ptrr�  rI  rË   )r   rþ  s    €rƒ   rþ  z&custom_op_wrapper.<locals>.convert_arg¥  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àˆJr‚   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r�   r�   )rÀ   r   rþ  s     €rƒ   rr  z%custom_op_wrapper.<locals>.<listcomp>®  s#   ø€ Ð7Ð7Ð7¨3�k�k #Ñ&Ô&Ð7Ð7Ð7r‚   z
torch.ops.z, can not be called through custom_op_wrapperr¼   r   z, can not be loaded through custom_op_wrapperc                ó>   — g | ]}|€t          j        g ¦  «        n|‘ŒS r¾   )rÏ   Útensor)rÀ   Úrs     rƒ   rr  z%custom_op_wrapper.<locals>.<listcomp>Ê  s+   € ÐGÐGÐG¸1 a i•%”,˜rÑ"Ô"Ð"°QÐGÐGÐGr‚   z returns a list of non-tensorsz returns a non-tensor)r   r   rº   r   )r¼  r•  rw  Ú	importlibÚimport_modulerÄ   rÁ  rK  r  r  r  Ú
kwarg_onlyr{   rC  r�  rI  rË   rÏ   r"   r£  rÿ  Ú#unsafe_alloc_void_ptrs_from_tensorsÚ!unsafe_alloc_void_ptr_from_tensor)r7  r  Úconverted_argsÚfuncr°  r  r  Úfunc_argÚconv_argr   r  rþ  s              @rƒ   Úcustom_op_wrapperr  ¢  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Ø€~Øˆtå�&�4¥˜-Ñ(Ô(ð JàGÐGÀÐGÑGÔGˆØð 	Vð 	VˆAÝ˜a¥¤Ñ.Ô.ÐUÐU°Ð5UÑ0UÑUÔUÐ.ÐUÝŒxŒ~×AÒAÀ&ÑIÔIÐIå�f�eœlÑ+Ô+ÐIÐI¨RÐ2IÑ-IÑIÔIÐ+ÝŒ8Œ>×;Ò;¸FÑCÔCÐCr‚   Úprecompiled_headersrQ  )z	at::vec::zprod_masked_reduce(ÚheaderÚhashable_cmd_linerÄ  c                ó^  — t           r
J d¦   «         ‚|                     dd ¦  «         t          j        ¦   «         5 }t	          |¦  «        dz  }|                     d| › d�¦  «         t          t          |¦  «        d d…         t          |¦  «        t          di |¤ddi¤Ž¬	¦  «        }| 	                    ¦   «          dd„} || 
                    ¦   «         ¦  «        }d d d ¦  «         n# 1 swxY w Y   t          di |¤ddi¤Ž}t          d| › d�d||z   t          |                     ¦   «         ¦  «        z   t          ¬¦  «        \  }	}
t          |
|
|¬	¦  «        }t          j        t"          d¬¦  «         t%          t          j                             t"          |	› d�¦  «        |f¦  «         |
S )Nz>CppBuilder does not currently support precompiling on Windows!rT  z
header.hppz
#include <z>
éüÿÿÿÚpreprocessingTr³  r  r‡   rº   c                ót   — t          j        dd| fdd¬¦  «        }|j                             ¦   «         d         S )z�Reading the whole preprocessed header in for hashing is very expensive,
            but calling a fast hashing utility in a subprocess is cheap.ÚopensslÚsha512T)r@  r�  r0  )rC  rD  rG  rw  )r  Ú
cmd_outputs     rƒ   Ú_get_file_checksumz._precompile_header.<locals>._get_file_checksumû  sD   € õ $œØ˜H hÐ/ÀÈ4ðñ ô ˆJð Ô$×*Ò*Ñ,Ô,¨RÔ0Ð0r‚   ÚprecompilingrO  )rj  rb  r^  rc  rR  r  r�   )r  r‡   rº   r‡   )r†  Úpopr{  ÚTemporaryDirectoryr   r“  r9   r‡   r;   rø  r÷  rŽ  r<   Úget_compilerÚ_HEADER_DIRr  rU  Ú_HEADER_LOCK_DIRÚ_worker_compile_cppr	  rÃ   )r  r  rÄ  Úpreprocessing_dirÚpreprocessing_headerÚpreprocessorr  Úpreprocessor_hashÚheader_build_optionÚheader_hashÚheader_full_pathÚcpp_builders               rƒ   rˆ  rˆ  Û  sf  € õ ð ð ØHñô ˆ?ð ×Ò˜ tÑ,Ô,Ð,õ 
Ô	$Ñ	&Ô	&ð TÐ*;Ý#Ð$5Ñ6Ô6¸ÑEÐØ×'Ò'Ð(@°VÐ(@Ð(@Ð(@ÑAÔAÐAÝ!ÝÐ)Ñ*Ô*¨3¨B¨3Ô/ÝÐ,Ñ-Ô-Ý-ÐTÐT°ÐTÐTÈtÐTÐTÐTð
ñ 
ô 
ˆð
 	×ÒÑÔÐð	1ð 	1ð 	1ð 	1ð /Ð.¨|×/PÒ/PÑ/RÔ/RÑSÔSÐð'Tð Tð Tñ Tô Tð Tð Tð Tð Tð Tð Tøøøð Tð Tð Tð Tõ* 0ÐUÐU°/ÐUÐUÐPTÐUÐUÐUÐÝ$)Ø(˜VÐ(Ð(Ð(ØàØñ å'Ð(;×(HÒ(HÑ(JÔ(JÑKÔKñLõ "ð	%ñ 	%ô 	%Ñ!€KÐ!õ ØØ Ø'ðñ ô €Kõ „KÕ ¨4Ð0Ñ0Ô0Ð0ÝÝ
Œ�ŠÕ%¨+Ð'<Ð'<Ð'<Ñ=Ô=Ø	ˆñô ð ð
 Ðs   »B#C*Ã*C.Ã1C.c                ó4   — |                       d¦  «        rdS d S )Nr  z torch/csrc/inductor/cpp_prefix.h)r¼  rß   s    rƒ   rŠ  rŠ  !  s#   € Ø×Ò˜ÑÔð 2Ø1Ð1Øˆ4r‚   r²  c                óŒ   — |                       dd¬¦  «        d         }t          j        j        o|dk    }d|rdnd› d	|rd
n|› d�S )z�Given a device type (and optionally whether we're in AOT Inductor mode), returns
    the path to the cpp_wrapper header file to be precompiled.rÍ  rj   ©Úmaxsplitr   r  ztorch/csrc/inductor/Úaoti_includeÚcpp_wrapperú/Ú	array_refz.h)rw  r)   rÇ  Úallow_stack_allocation)rŽ   r²  Úbase_deviceÚis_array_refs       rƒ   r‡  r‡  '  so   € ð —,’,˜s¨Q�,Ñ/Ô/°Ô2€KÝÔ&Ô=ÐVÀ+ÐQVÒBV€Lð	<Ø%Ð8ˆ>ˆ>¨=ð	<ð 	<à&Ð7ˆ;ˆ;¨Kð	<ð 	<ð 	<ðr‚   Úbase_device_typeÚsourceÚexplicitúbool | Nonec                ód   ‡— |�|S ‰€dS | dk    rdS t          ˆfd„t          D ¦   «         ¦  «        S )NFr  Tc              3  ó    •K  — | ]}|‰v V — Œ	d S r¾   r�   )rÀ   Úmarkerr5  s     €rƒ   rÂ   z)_resolve_needs_vec_isa.<locals>.<genexpr><  s(   øè è € ÐJÐJ Fˆv˜ÐÐJÐJÐJÐJÐJÐJr‚   )rÿ  Ú_VEC_ISA_CPP_SOURCE_MARKERS)r4  r5  r6  s    ` rƒ   Ú_resolve_needs_vec_isar<  3  sN   ø€ ð ÐØˆØ€~ØˆuØ˜5Ò Ð ØˆtÝÐJÐJÐJÐJÕ.IÐJÑJÔJÑJÔJÐJr‚   c                  óÖ   — e Zd ZU dZ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„¦   «         Ze	 	 	 	 	 	 d#d$d„¦   «         Zed%d „¦   «         ZdS )&ÚCppCodeCachez‘Compiles and caches C++ libraries.  Users of this class supply the source code to
    be compiled, while compilation flags are set by CppBuilder.ú*dict[str, Callable[[], CDLL | ModuleType]]r  r  Úcpp_compile_command_flagsr	  r‡   rœ   rº   úCDLL | ModuleTypec                ó*   — t          j        | ¦  «        S r¾   )r	   ÚLoadLibrary)r	  rœ   s     rƒ   Ú_load_library_innerz CppCodeCache._load_library_innerH  s   € åÔ Ñ%Ô%Ð%r‚   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.)rD  rœ   ÚImportErrorr…  r‡   r  r	  rT  r	   rC  rù  r{  Ú
gettempdir)r.  r	  rœ   r   r‡  s        rƒ   Ú_load_libraryzCppCodeCache._load_libraryL  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,rŽ   rz   c                ó   — dS )z_
        Given a device type, returns the path to a CPP header file to be precompiled.
        Nr�   ©r.  rŽ   s     rƒ   Ú_get_uncompiled_headerz#CppCodeCache._get_uncompiled_headerc  s	   € ð
 ˆtr‚   r  Nr�   Ú	main_coderá   Ú	submit_fnr   rT  úSequence[str]Úoptimized_codeÚneeds_vec_isar7  Úkernel_needs_vec_isac           	     óÎ  ‡ ‡!‡"‡#‡$‡%— |                      dd¬¦  «        d         }t          |||¦  «        }	t          |||¦  «        }|	s|rt          ¦   «         nt          }
i ‰ j        ¥||t          j        ¦   «         dœ¥}i |¥d|	r|
nt          i¥}i |¥d|r|
nt          i¥}t          ¦   «          |dup|dk    }t          dt          |¦  «        |d	œ|¤Ž}t          dd
di|¤Ž}dd„} ||¦  «        } ||¦  «        }t          |d|› d|› �¬¦  «        \  Š#}|rt          |d|¬¦  «        \  }}nt          j        }‰#‰ j        v�rddlm} t          j                             t%          ¦   «         ‰#dz   ¦  «        }dŠ"dŠ$t
          j        rYt(          sR‰                      |¦  «        x}rt-          ||fd|i|¤Ž|_        |r$t1          |¦  «        x}rt-          ||fi |¤Ž|_        t3          |¦  «        \  }}t5          ||||¬¦  «        }|r¨t3          |¦  «        \  }}t5          ||||¬¦  «        }t5          ||                     ¦   «         |                     ¦   «         gt          di |¤Ž|¬¦  «        }t9          j        t<          ||||f¦  «        Š%t?          |                     ¦   «         ¦  «        Š!n=t9          j        t<          ||f¦  «        Š%t?          |                     ¦   «         ¦  «        Š!dˆ!ˆ ˆ"ˆ#ˆ$ˆ%fd„} |�T ||t@          ¬¦  «        5  t          j         !                    ‰!¦  «        s |‰%¦  «        Š"ddd¦  «         n# 1 swxY w Y   | ‰ j        ‰#<   ‰ j        ‰#         S )z\Compile and load a C++ library.  Returns a callable that returns the loaded
        library.rÍ  rj   r+  r   )rá   rT  rï  r±  Nr  r0  rî  TÚbuild_optionr©   rº   r‡   c                óJ   — t          dd| ¬¦  «                             ¦   «         S )z¹Writing the code to file will calculate a hash, which we need to vary if
            the command line flags change.  This implements a mostly-generic way of
            validating that.rÇ  r°  r³  )r9   rv  )rT  s    rƒ   Úget_hashable_command_linez:CppCodeCache.load_async.<locals>.get_hashable_command_line¨  s.   € õ Ø #°<ðñ ô çÒÑ Ô ð!r‚   zmain.cppú ©r^  zoptimized.cppr	  r  r1  )r{   r´  rµ  rñ  r   c                 óˆ   •— ‰€>‰�‰                      ¦   «           ‰¦   «         } | �J ‚‰                     ‰‰¦  «        Š‰€J ‚‰S r¾   )r   rI  )r   Úbinary_pathr.  Úfuturerœ   rg  Ú	worker_fns    €€€€€€rƒ   Úload_fnz(CppCodeCache.load_async.<locals>.load_fn  sR   ø€ à�;ØÐ)ØŸš™œ˜Ø&˜Y™[œ[�FØ!˜>˜>˜>Ø×+Ò+¨K¸Ñ=Ô=�CØ˜?˜?˜?Ø�
r‚   r  r�   )rT  r©   rº   r‡   ©rº   r   )"rw  r<  rC   rB   r@  r)   r}  r5   r;   r¡   rŽ  r  Údevnullr  r{  r
  r	  rÃ   rW  Úcpp_cache_precompile_headersr†  rL  rˆ  r‰  rŠ  r?   r9   r÷  r&  r   r   r@   r|  rT  )&r.  rM  rá   rN  rT  rP  rQ  rR  r4  Úmain_needs_vec_isar«  Úshared_compile_commandÚmain_compile_commandÚoptimized_compile_commandr1  Úmain_build_optionÚoptimized_build_optionrV  Úmain_cmd_lineÚoptimized_cmd_lineÚ	main_pathr?  Úoptimized_pathr
  Ú	lock_pathr  Ú	main_namerñ  Úmain_builderÚoptimized_nameÚoptimized_builderÚlinkerr]  rZ  r[  rœ   rg  r\  s&   `                                @@@@@rƒ   Ú
load_asynczCppCodeCache.load_asyncj  s>  øøøøøø€ ð '×,Ò,¨S¸1Ð,Ñ=Ô=¸aÔ@ÐÝ3Ø˜i¨ñ
ô 
Ðõ  6Ø˜nÐ.Bñ 
ô  
Ðð
 "ð!Ø%9ð!�L‰NŒNˆNå ð 	ð
"
ØÔ+ð"
à&Ø&Ý!'Ô!1Ñ!3Ô!3ð	"
ð "
ð "
Ðð 
Ø$ð 
àÐ);ÐP�~�~Åð 
ð  
Ðð%
Ø$ð%
àÐ)=ÐR�~�~Å?ð%
ð %
Ð!õ
 	ÑÔÐð &¨TÐ1ÐI°[ÀEÒ5IˆÝ1ð 
Ý˜nÑ-Ô-Ø%ð
ð 
ð #ð	
ð 
Ðõ "7ð "
ð "
àð"
ð (ð	"
ð "
Ðð	!ð 	!ð 	!ð 	!ð 2Ð1Ð2CÑDÔDˆØ6Ð6Ð7MÑNÔNÐåØ�z¨NÐ)LÐ)L¸]Ð)LÐ)Lð
ñ 
ô 
‰ˆˆYð
 ð 	(Ý %Ø Ð7Ið!ñ !ô !ÑˆAˆ~ˆ~õ
  œZˆNà�c”iÐÑØ6Ð6Ð6Ð6Ð6Ð6åœŸš¥\¡^¤^°S¸7±]ÑCÔCˆIØ)-ˆFØˆCõ Ô2ð ½;ð Ø ×7Ò7¸ÑDÔDÐD�6ð Ý;MØØ%ð<ð <ð &2ð<ð /ð	<ð <Ð%Ô8ð "ð Õ1GÈÑ1TÔ1TÐ'T vð Ý@RàØ*ðAð Að 4ð	Að AÐ*Ô=õ %KÈ9Ñ$UÔ$UÑ!ˆI�zÝ%ØØ!Ø-Ø%ð	ñ ô ˆLð ð "Ý$JØ"ñ%ô %Ñ!� õ %/Ø'Ø*Ø 6Ø)ð	%ñ %ô %Ð!õ $Ø"à$×9Ò9Ñ;Ô;Ø)×>Ò>Ñ@Ô@ðõ
 !6Ð OÐ OÐ8NÐ OÐ OØ)ð	ñ 	ô 	�õ &Ô-Ý'ØØ!Ð#4°fÐ=ñô �	õ
 7°v×7RÒ7RÑ7TÔ7TÑUÔU��å%Ô-Ý'¨°\°Oñô �	õ 7Ø ×5Ò5Ñ7Ô7ñô �ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð Ð$Ø�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   Ì+MÍM	ÍM	r  r  c                ó,   —   | j         |i |¤Ž¦   «         S r¾   )rq  ©r.  r  r  s      rƒ   r  zCppCodeCache.load  s!   € à.ˆ~ˆsŒ~˜tÐ. vÐ.Ð.Ñ0Ô0Ð0r‚   )r	  r‡   rœ   r‡   rº   rA  ©rŽ   r‡   rº   rz   )r  Nr�   NNN)rM  r‡   rá   r‡   rN  r   rT  rO  rP  rz   rQ  r7  rR  r7  rº   r   ©r  r   r  r   rº   r   )r}   r~   r   r‰  r  r€   r%  rp  rš  r@  rD  r’  rI  rL  rq  r  r�   r‚   rƒ   r>  r>  ?  s  € € € € € € ðCð Cð 9;€EÐ:Ð:Ð:Ñ:Ø�,˜uœ{Ñ+Ô+€KØ02ÐÐ2Ð2Ð2Ñ2àð&ð &ð &ñ „\ð&ð ðð ð ñ „[ðð, ðð ð ñ „[ðð ð !ØØ%'Ø%)Ø%)Ø,0ðoð oð oð oñ „[ðoðb ð1ð 1ð 1ñ „[ð1ð 1ð 1r‚   r>  rk  Úcpp_buildersúSequence[CppBuilder]c                óþ   — ddl m}  || t          ¬¦  «        5  |D ]G}t          j                             |                     ¦   «         ¦  «        s|                     ¦   «          ŒH	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r	  r  )r{  r
  r|  r  r	  rT  r÷  rø  )rk  rv  r
  Úbuilders       rƒ   r   r   !  sÓ   € ð /Ð.Ð.Ð.Ð.Ð.à	ˆ�)¥\Ð	2Ñ	2Ô	2ð  ð  Ø#ð 	 ð 	 ˆGÝ”7—>’> '×">Ò">Ñ"@Ô"@ÑAÔAð  Ø—’‘”�øð	 ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  s   ™AA2Á2A6Á9A6c                  óú   — e Zd ZU i Zded<    e¦   «         Zded<   ed,d„¦   «         Zdd	d
œZ	dZ
dZdZ ej        d¦  «        Zed-d„¦   «         Zed.d„¦   «         Ze	 	 	 	 	 	 	 d/d0d(„¦   «         Zed1d+„¦   «         ZdS )2ÚCppPythonBindingsCodeCacher?  r  rØ  Ú_loaded_module_namesrº   r  c                 óÜ   — t           j                             ¦   «          t           j        D ]"} t          j                             | d ¦  «         Œ#t           j                             ¦   «          d S r¾   )r{  r  rp  r|  rè   r�  r  rÊ  s    rƒ   rš  z&CppPythonBindingsCodeCache.cache_clear3  s]   € å"Ô(×.Ò.Ñ0Ô0Ð0Ý.ÔCð 	(ð 	(ˆDÝŒK�OŠO˜D $Ñ'Ô'Ð'Ð'Ý"Ô7×=Ò=Ñ?Ô?Ð?Ð?Ð?r‚   FT©Úinclude_pytorchÚsharedr{  zkernel({}); Py_RETURN_NONE;rÞ   a?  
        // Python bindings to call {entry_func}():
        #define PY_SSIZE_T_CLEAN
        #include <Python.h>
        #include <sstream>
        #include <cstdlib>
        #include <cerrno>

        // 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(result == -1 && PyErr_Occurred()) [[unlikely]]
                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(result == reinterpret_cast<void*>(-1) && PyErr_Occurred()) [[unlikely]]
                throw std::runtime_error("expected int arg");
            return reinterpret_cast<uintptr_t>(result);
        }}
        template <> inline float parse_arg<float>(PyObject* args, size_t n) {{
            auto result = PyFloat_AsDouble(PyTuple_GET_ITEM(args, n));
            if(result == -1.0 && PyErr_Occurred()) [[unlikely]]
                throw std::runtime_error("expected float arg");
            return static_cast<float>(result);
        }}

        {extra_parse_arg}

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

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

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

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

            char* endptr = nullptr;
            errno = 0;
            uintptr_t addr = std::strtoull(str_addr, &endptr, 10);
            if(errno != 0 || endptr == str_addr || addr == 0) {{
                PyErr_SetString(PyExc_RuntimeError, "Failed to parse _TORCHINDUCTOR_PYOBJECT_TENSOR_DATA_PTR");
                return nullptr;
            }}
            _torchinductor_pyobject_tensor_data_ptr =
                reinterpret_cast<decltype(_torchinductor_pyobject_tensor_data_ptr)>(addr);
            PyObject* module = PyModule_Create(&py_module);
            if (module == NULL) {{
                return NULL;
            }}
            #ifdef Py_GIL_DISABLED
                PyUnstable_Module_SetGIL(module, Py_MOD_GIL_NOT_USED);
            #endif
            return module;
        }}
        r	  r‡   rœ   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
        |<   t           j                             |¦  «         |j        €J ‚|j                             |¦  «         |S )NÚ'_TORCHINDUCTOR_PYOBJECT_TENSOR_DATA_PTRr¼   )r‡   rÏ   r£  Ú_dynamor=  Ú'_torchinductor_pyobject_tensor_data_ptrr  ÚenvironÚentry_functionrè   r�  ÚKeyErrorr  ÚutilÚspec_from_file_locationÚmodule_from_specr{  r|  rÔ  ÚloaderÚexec_module)r.  r	  rœ   Úmodule_namerh  ri  s         rƒ   rD  z.CppPythonBindingsCodeCache._load_library_inner›  sû   € õ ADÝŒHÔÔ#ÔKñA
ô A
�Œ
Ð<Ñ=ð Ð3Ð3˜sÔ1Ð3Ð3ˆð	Ý”;˜{Ô+Ð+øÝð 	ð 	ð 	ØˆDð	øøøåŒ~×5Ò5°kÀ4ÑHÔHˆØÐÐÐÝ”×0Ò0°Ñ6Ô6ˆØ#)�Œ�KÑ Ý"Ô7×;Ò;¸KÑHÔHÐHØŒ{Ð&Ð&Ð&ØŒ×Ò Ñ'Ô'Ð'Øˆs   ÁA Á
A"Á!A"rŽ   rz   c                ó    — t          |¦  «        S r¾   )rŠ  rK  s     rƒ   rL  z1CppPythonBindingsCodeCache._get_uncompiled_header¯  s   € å% fÑ-Ô-Ð-r‚   r  Nr0  r�   ÚargtypesrO  rM  rá   rQ  r7  rR  Únum_outputsr–   rN  r   rT  r«  c
           	     óx  ‡ ‡‡— d                      d„ t          |¦  «        D ¦   «         ¦  «        }
‰ j                             t	          |¦  «        ‰ j                             |
¦  «        ‰ j        ‰ j                             |¬¦  «        ¬¦  «        }‰                      ||z   ||||	||¬¦  «        ŠdŠd
ˆ ˆˆfd	„}|S )aê  
        Wrap a C++ function in fast Python bindings.

        Args:
            argtypes: The types of args to ENTRY_FUNCTION(), e.g. ["float*", "long"]
            main_code: C++ source code containing ENTRY_FUNCTION().  Will be built at
                -O3 if kernel_code is None (to maximize performance in any kernels that
                are present), or -O1 otherwise (to minimize compile time).
            needs_vec_isa: Whether the generated wrapper requires CPU vectorized
                host helpers. If omitted, this is inferred from the generated
                source as a conservative fallback.
            kernel_needs_vec_isa: Whether the separately compiled kernel source
                requires CPU vectorized host helpers. Only relevant when
                kernel_code is provided.
            kernel_code: If present, C++ source code that will be built at -O3 and
                linked to main_code.

        Returns:
            A python version of ENTRY_FUNCTION()
        rä  c              3  óV   K  — | ]$\  }}d |                      dd¦  «        › d|› d�V — Œ%dS )z
parse_arg<zconst rÞ   z>(args, rµ  N)r¾  )rÀ   r#  Úargtypes      rƒ   rÂ   zBCppPythonBindingsCodeCache.load_pybinding_async.<locals>.<genexpr>Ô  s\   è è € ð 
ð 
á��7ð E˜Ÿš¨°2Ñ6Ô6ÐDÐDÀÐDÐDÐDð
ð 
ð 
ð 
ð 
ð 
r‚   )Ú	array_len)Úarg_lenÚcall_entry_funcÚ
entry_funcÚextra_parse_arg)rN  rT  rP  rQ  rR  Nrº   r   c                 ót   •— ‰€! ‰¦   «         Št          ‰t          ¦  «        sJ ‚t          ‰‰ j        ¦  «        S r¾   )r�  r   rÄ   r†  )r.  Ú
get_resultr   s   €€€rƒ   r[  z?CppPythonBindingsCodeCache.load_pybinding_async.<locals>.futureé  s<   ø€ àˆ~Ø#˜™œ�Ý! &­*Ñ5Ô5Ð5Ð5Ð5Ý˜6 3Ô#5Ñ6Ô6Ð6r‚   r^  )	rÃ   r•  Úsuffix_templateÚformatrC  Úcall_entry_functionr†  r˜  rq  )r.  r�  rM  rá   rQ  rR  r�  rN  rT  r«  Ú	parseargsru  r[  rš  r   s   `            @@rƒ   Úload_pybinding_asyncz/CppPythonBindingsCodeCache.load_pybinding_async³  s  øøø€ ðB —I’Ið 
ð 
å'¨Ñ1Ô1ð
ñ 
ô 
ñ 
ô 
ˆ	ð Ô$×+Ò+Ý˜‘M”MØÔ3×:Ò:¸9ÑEÔEØÔ)ØÔ/×6Ò6ÀÐ6ÑMÔMð	 ,ñ 
ô 
ˆð —^’^Ø˜ÑØØØ#Ø&Ø'Ø!5ð $ñ 
ô 
ˆ
ð ˆð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð ˆr‚   r  r  c                ó,   —   | j         |i |¤Ž¦   «         S r¾   )rŸ  rs  s      rƒ   Úload_pybindingz)CppPythonBindingsCodeCache.load_pybindingò  s#   € à8Ð'ˆsÔ'¨Ð8°Ð8Ð8Ñ:Ô:Ð:r‚   r$  )r	  r‡   rœ   r‡   rº   r   rt  )r  NNr0  Nr�   N)r�  rO  rM  r‡   rá   r‡   rQ  r7  rR  r7  r�  r–   rN  r   rT  rO  r«  rz   rº   r   ru  )r}   r~   r   r  r€   ri   r|  r%  rš  r@  r†  r�  r˜  ÚtextwrapÚdedentr›  r’  rD  rL  rŸ  r¡  r�   r‚   rƒ   r{  r{  .  sA  € € € € € € à8:€EÐ:Ð:Ð:Ñ:Ø,6¨J©L¬LÐÐ8Ð8Ð8Ñ8àð@ð @ð @ñ „\ð@ð !Øð!ð !Ðð
 €NØ7ÐØ€OØ%�h”oðU	ñWô W€Oðr ðð ð ñ „[ðð$ ð.ð .ð .ñ „[ð.ð ð
 !Ø%)Ø,0ØØØ%'Ø"&ð<ð <ð <ð <ñ „[ð<ð| ð;ð ;ð ;ñ „[ð;ð ;ð ;r‚   r{  c                  ó€   — e Zd ZU i Zded<   edd„¦   «         ZdddœZdZd	Z	 e
j        d
¦  «        Zedd„¦   «         ZdS )ÚCppWrapperCodeCacher?  r  rº   r  c                 óB   — t           j                             ¦   «          d S r¾   )r¥  r  rp  r�   r‚   rƒ   rš  zCppWrapperCodeCache.cache_clearû  s   € åÔ!×'Ò'Ñ)Ô)Ð)Ð)Ð)r‚   Tr~  Úinductor_entry_cppzreturn inductor_entry_cpp({});a	  
        #include <torch/csrc/inductor/aoti_torch/c/shim.h>

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

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

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

        PyObject* inductor_entry_cpp(std::vector<AtenTensorHandle>&& input_handles) {{
            // For outputs, we only allocate an array to hold returned tensor handles,
            // not the actual output tensor storage.
            std::array<AtenTensorHandle, {array_len}> output_handles{{}};
            try {{
                inductor_entry_impl(input_handles.data(), output_handles.data());
                if (PyErr_Occurred()) {{
                    return nullptr;
                }}
                return pack_tensor_handle_list(output_handles);
            }} catch(std::exception const& e) {{
                PyErr_SetString(PyExc_RuntimeError, e.what());
                return nullptr;
            }} catch(...) {{
                PyErr_SetString(PyExc_RuntimeError, "unhandled error");
                return nullptr;
            }}
        }}
        rŽ   r‡   rz   c                ó    — t          |¦  «        S r¾   )r‡  rK  s     rƒ   rL  z*CppWrapperCodeCache._get_uncompiled_header;  s   € å& vÑ.Ô.Ð.r‚   Nr$  rt  )r}   r~   r   r  r€   r%  rš  r@  r†  r�  r¢  r£  r˜  r’  rL  r�   r‚   rƒ   r¥  r¥  ÷  s    € € € € € € à8:€EÐ:Ð:Ð:Ñ:àð*ð *ð *ñ „\ð*ð  Øð!ð !Ðð *€NØ:ÐØ%�h”oð2	ñ4ô 4€Oðl ð/ð /ð /ñ „[ð/ð /ð /r‚   r¥  c                  ó  — 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„¦   «         ¦   «         Zed,d„¦   «         Zeej        d-d„¦   «         ¦   «         Zeej        d-d„¦   «         ¦   «         Ze	 d.d/d"„¦   «         Zed0d%„¦   «         Zed+d&„¦   «         Zed1d(„¦   «         ZdS )2ÚHalideCodeCachez*dict[str, Callable[[], ModuleType | CDLL]]r  Nrz   Ú_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();
        r{   r‡   r   r±   rˆ   r¡   rº   r�   c                óŒ  — |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�t          |	¦  «        dk    rd|› dd                     |	¦  «        › d�n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 ú;r   zhalide_dimension_t z_dims[] = {z};zhalide_dimension_t * z_dims = nullptr;z
.device = z.device_interface = z.host = z	.flags = z.type = z.dimensions = z.dim = z_dims;z.padding = nullptr;)
ÚshapeÚstriderC  ÚoffsetÚalias_ofr{   r  rÒ   rÃ   Úhalide_type)r.  r{   r   rˆ   r!  rŽ   Údevice_interfaceÚhostÚflagsÚdimsÚsizer´  s               rƒ   Ú_codegen_bufferzHalideCodeCache._codegen_bufferŽ  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Ð&Ð&Ð&å�4‰yŒy˜1Š}ˆ}ð I $ÐHÐH°D·I²I¸d±O´OÐHÐHÐHÐHà?¨Ð?Ð?Ð?ØÐ(Ð(˜vÐ(Ð(Ð(ØÐ<Ð<Ð)9Ð<Ð<Ð<ØÐ$Ð$˜TÐ$Ð$Ð$ØÐ&Ð&˜eÐ&Ð&Ð&ØÐ1Ð1˜SŸ_š_Ñ.Ô.Ð1Ð1Ð1ØÐ/Ð/¥3 t¡9¤9Ð/Ð/Ð/ØÐ(Ð(˜DÐ(Ð(Ð(ØÐ(Ð(Ð(ð
ð 	
r‚   r¿  r²   Ú
headerfilerÂ  c           	     óæ  — |                      ¦   «         }|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_Ú*r•  c                ó   — g | ]}d |› �‘ŒS )ú    r�   )rÀ   Úlines     rƒ   rr  z1HalideCodeCache._codegen_glue.<locals>.<listcomp>Â  s   € Ð?Ð?Ð?¨t˜] D˜]˜]Ð?Ð?Ð?r‚   úHalideRuntimeCuda.hzHalideRuntime.hrä  c              3  ó`   K  — | ])}|j         ­	|                     ¦   «         › d|j        › �V — Œ*d S )NrW  )r¶  Úbindings_typer{   )rÀ   r¸   s     rƒ   rÂ   z0HalideCodeCache._codegen_glue.<locals>.<genexpr>Ê  sP   è è € ð ð àØ”:Ð%ð —?’?Ñ$Ô$Ð/Ð/ q¤vÐ/Ð/à%Ð%Ð%Ð%ðð r‚   )Úhalideruntime_hr¾  ÚargdefsÚbuffersÚbuffer_names)r  r¹   r•  r�  Ú	is_bufferrÒ   r¥  r½  Úctyper{   rÃ   ÚlstripÚglue_template_cudaÚglue_template_cpprœ  Úfind_header)
r.  r¿  r¾  r  rÌ  rÍ  r°  r   Úglue_templateÚ	glue_codes
             rƒ   Ú_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ð )ñ 
ô 
ˆ	ð Ðr‚   c                óö   — t          ddt          ¦   «         ¬¦  «        }|                     ¦   «         }t          d                     | j        | j        | j        |g¦  «                             d¦  «        ¦  «        S )NÚOÚIr³  r•  r™  )	r9   r:   rv  r[  rÃ   rÒ  rÑ  Ústandalone_runtime_cuda_initrb  )r.  Úcommand_genÚcommand_lines      rƒ   Úconfig_hashzHalideCodeCache.config_hashÔ  s‚   € õ !ØØÝ"™œð
ñ 
ô 
ˆð
 #×3Ò3Ñ5Ô5ˆÝØ�IŠIàÔ)ØÔ*ØÔ4Ø ð	ñô ÷ Šf�W‰oŒoñ	
ô 	
ð 		
r‚   ru  Ú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   rs  Úlddz(/.*)/libHalide.sor™  rj   )r  Ú	machineryÚ
PathFinderr`  rf  rÿ   r  r»  rv  rC  Úcheck_outputr	  rÃ   ÚSubprocessErrorr   ÚsearchrB  r  ÚgrouprT  rÎ  )	ru  rÞ  rh  ræ  rA  ÚoutÚmr	  r‡  s	            rƒ   Ú_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_rs  Ú
HALIDE_LIBúCan't find z3, set env HALIDE_LIB to the directory containing it)Úlowerr  r…  r	  rÃ   rT  rª  rê  )r{   Úsofiler	  rÞ  s       rƒ   Ú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ð 	õ ×/Ò/°¸Ñ?Ô?Ð?r‚   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_INCLUDErí  z../include/rî  z7, set env HALIDE_INCLUDE to the directory containing it)r  r…  r	  rÃ   rT  r  rª  rê  )r{   r	  rÞ  s      rƒ   rÓ  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ÐMr‚   r"  rN  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 )NrX  rà  é   TrR  zgenerate_kernel.pyzhalide_kernel.azhalide_kernel.hÚdoner¶  z-gr{  r?  z-fÚhalide_kernelz-ezstatic_library,h,schedulez-pc                óD   — g | ]}|j         ­	|                     ¦   «         ‘ŒS r¾   )r¶  rÉ  )rÀ   r   s     rƒ   rr  z9HalideCodeCache.generate_halide_async.<locals>.<listcomp>H  s2   € ð 
ð 
ð 
Ø$'¸C¼LÐ<PˆC×ÒÑÔÐ<PÐ<PÐ<Pr‚   Ú	uintptr_trˆ   r  )rT  rN  rá   rº   rô  c                 ó0   •— ‰r
 ‰¦   «           ‰ ¦   «         S r¾   r�   )Úbindings_futureÚwait_for_compiles   €€rƒ   r  z3HalideCodeCache.generate_halide_async.<locals>.load]  s(   ø€ Øð #Ø Ð Ñ"Ô"Ð"Ø"�?Ñ$Ô$Ð$r‚   )rº   rô  )r   ri  r`  rÅ   rÝ  r  rU  r‡   r	  rT  r!  rè   Ú
executableÚ	schedulerr¥  rñ  r  rÒ   r&  r   rC  Ú
check_callr�  r  rŸ  rÖ  Úbuild_standalone_runtimeÚtouchÚ_worker_task_halider   )r.  r¿  r"  rN  ÚdirpathÚgenfileÚlibfiler¾  ÚdonefileÚlockfileÚneed_compileÚjobsrL  Úbinding_typesÚtaskr  rü  rý  s                   @@rƒ   Ú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Ð Ð à�‘”�ð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð
 ˆr‚   r  r  c                ó,   —   | j         |i |¤Ž¦   «         S r¾   )r  rs  s      rƒ   Úgenerate_halidezHalideCodeCache.generate_halided  s#   € à9Ð(ˆsÔ(¨$Ð9°&Ð9Ð9Ñ;Ô;Ð;r‚   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                             |¦  «        �sfdd l}ddlm}  ||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ˆ   r  zlibStandaloneHalideRuntime.soz	host-cudar¹  zhalide-runtime-ú-TrR  r÷  r¶  z	hooks.cppzstandalone_halide_runtime.ar   r	  rs  rÇ  )rá   rð  )!r«  r  r	  rT  rÏ   rˆ   rN  rP   rO   r   rÝ  rU  r‡   rà  r{  r
  r|  r  rŽ  rÚ  rœ  rÓ  Úcompile_standalone_runtimeÚTargetr?   r9   r;   rC  r   rB  rw  rv  r  )r.  rá   Úlibnamer¹   Úbaser  Ú	done_fileÚ	lock_fileÚ	hook_fileÚa_fileÚso_fileÚhlr
  rª  r{   rñ  Úhalide_cmd_gens                    rƒ   r  z(HalideCodeCache.build_standalone_runtimeh  st  € àÔ'ð 	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Ð<Ñ<Ñ=Ô=ˆÝ�g Ñ'Ñ(Ô(ˆÝŒw�~Š~˜iÑ(Ô(ñ 	%ØÐÐÐà6Ð6Ð6Ð6Ð6Ð6à�˜)¥\Ñ2Ô2ð %ð %Ý”w—~’~ iÑ0Ô0ñ %Ý˜i¨Ñ-Ô-ð °Ø&¨&Ò0Ð0ØŸGšGØ #Ô @× GÒ GØ$'§O¢OÐ4IÑ$JÔ$Jñ!"ô !"ñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ×1Ò1°&¸"¿)º)ÀFÑ:KÔ:KÑLÔLÐLå'MÈgÑ'VÔ'VÑ$�D˜*Ý%/Ø!Ø!*¨FÐ 3Ø#-Ý$9Ø(3ð%ñ %ô %ð	&ñ &ô &�Nõ Ô)Ýœ N×$CÒ$CÑ$EÔ$EÑFÔFñô ð õ ˜)Ñ$Ô$Ð$ð1%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %õ2 Œw�~Š~˜gÑ&Ô&Ð&Ð&Ð&Ø'.ˆÔ$Øˆs8   Æ 1K Æ1AHÇ8K ÈH	ÈK ÈH	ÈB(K Ë KËKrŽ   c                ó   — dS )z5Header precompiling is currently disabled for halide.Nr�   rK  s     rƒ   rL  z&HalideCodeCache._get_uncompiled_header£  s	   € ð ˆtr‚   )r{   r‡   r   r±   rˆ   r¡   rº   r�   )r¿  r²   r¾  rÂ  rº   r‡   rä  )ru  r‡   rÞ  r‡   rº   r‡   )r{   r‡   rº   r‡   r¾   )r¿  r²   r"  r‡   rN  r   rº   rô  )r  r   r  r   rº   rô  rt  )r}   r~   r   r  r€   r%  rp  rš  r«  r¢  r£  rW  rÒ  rÑ  rÚ  r’  r½  rÖ  r&  rÝ  rê  rñ  rÓ  r  r  r  rL  r�   r‚   rƒ   rª  rª  @  s?  € € € € € € à8:€EÐ:Ð:Ð:Ñ:Ø�,˜uœ{Ñ+Ô+€KØ+/ÐÐ/Ð/Ð/Ñ/ØˆXŒ_ð	ñô €Fð&   ¤ð	ñ"ô "ñ Ðð   / (¤/ð		ñ#ô #ñ Ðð $3 8¤?ð	ñ$ô $Ð ðB ð!
ð !
ð !
ñ „[ð!
ðF ðð ð ñ „[ððB Ø„_ð
ð 
ð 
ñ „_ñ „[ð
ð$ ð#ð #ð #ñ „\ð#ð. Ø„_ð	@ð 	@ð 	@ñ „_ñ „\ð	@ð Ø„_ðNð Nð Nñ „_ñ „\ðNð  àBFðBð Bð Bð Bñ „[ðBðH ð<ð <ð <ñ „[ð<ð ð8ð 8ð 8ñ „[ð8ðt ðð ð ñ „[ðð ð r‚   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    �rtt          |dd¦  «        ^}}}t
          j	         
                    |¦  «                             d¦  «        �r-t          |¦  «                             ¦   «         }d}	|                     |	¦  «        d	k    sJ ‚ G d
„ d¦  «        }
|                     d¦  «        }t!          |t"          ¦  «        sJ ‚ |
¦   «         ||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   t3          d|› �¦  «        |‚‚ d }~ww xY w)Nr   r	  ÚHALIDE_REPROÚ1rL  )rÞ   rÞ   rÞ   Úpythonz    hl.main()rj   c                  ó   — e Zd Zdd„ZdS )ú _worker_task_halide.<locals>.Outrº   r‡   c                ó   — dS )Nrè  r�   r  s    rƒ   Ú__repr__z)_worker_task_halide.<locals>.Out.__repr__º  s   € Ø$˜ur‚   Nrä  )r}   r~   r   r&  r�   r‚   rƒ   ÚOutr$  ¹  s(   € € € € € ð%ð %ð %ð %ð %ð %r‚   r'  r?  z—                        import sys, tempfile
                        with tempfile.TemporaryDirectory() as out:
                            sys.argv = zrepro.pyz?
                            hl.main()
                        rÅ  rs  zwrote repro.py: )r{  r
  r|  rC  rå  r  r…  rB  rÄ   r	  ra  r¼  r   Ú	read_textÚcountÚindexr�  r–   r¢  r  r£  r¾  r  rŽ  rÐ  rÿ   )r  r
  r
  Újobr‡  r"  ÚscriptrL  r\  Úmainr'  ÚciÚreplÚfds                 rƒ   r  r  ©  s»  € Ø.Ð.Ð.Ð.Ð.Ð.ð$ØˆX�h¥Ñ-Ô-ð 	ð 	Øð ð �Ø�‘”��ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	øõ Ô%ð  ñ  ð  ÝŒ:�>Š>˜.Ñ)Ô)¨SÒ0Ñ0å#*¨1¨e°\Ñ#BÔ#BÐ ˆF�F˜SÝŒw×Ò Ñ'Ô'×2Ò2°8Ñ<Ô<ñ BÝ˜F‘|”|×-Ò-Ñ/Ô/�Ø&�Ø—z’z $Ñ'Ô'¨1Ò,Ð,Ð,Ð,ð%ð %ð %ð %ð %ñ %ô %ð %ð —Y’Y˜t‘_”_�Ý! "¥cÑ*Ô*Ð*Ð*Ð*à!˜c™eœe��B˜‘F‘Ý”Ý”Oðð *4Ð(:°cÐ(:ðð ð ñô ð ñ
ô 
�ð —|’| D¨$Ñ/Ô/�Ý˜* cÑ*Ô*ð ,¨bØ—H’H˜TŸ[š[™]œ]Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,å"Ð#9°aÐ#9Ð#9Ñ:Ô:ÀÐAØøøøøðA øøøsW   ˆA ™7ªA ·;»A ¾;¿A ÁG2ÁEG-Æ(GÇG-ÇG	ÇG-ÇG	ÇG-Ç-G2r  c                óZ   — t          | d¦  «        5  	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr¸   )r  )r  s    rƒ   r  r  Ó  sy   € Ý	ˆh˜Ñ	Ô	ð ð Øðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ‘  $§$c                  óê   — e Zd ZU dZg Zded<   i Zded<   i Zded<   ed%d&d„¦   «         Z	e	 d%ddœd'd„¦   «         Z
e	 	 d(ddœd)d„¦   «         Zed*d+d „¦   «         Zeej        d,d$„¦   «         ¦   «         ZdS )-ÚPyCodeCachez:Caches generated Python modules and their source mappings.zlist[ModuleType]r�  zdict[str, ModuleType]Úmodules_no_attrz dict[str, list[tuple[Any, ...]]]ÚlinemapsrÞ   r"  r‡   r^  rº   rŠ  c                ó&   — t          |d|¬¦  «        S )NÚpyrX  r’  )r.  r"  r^  s      rƒ   rŽ  zPyCodeCache.writeè  s   € å�[ $¨eÐ4Ñ4Ô4Ð4r‚   N©Úset_sys_modulesr9  r7  r   c               ó\   — t          |d|¬¦  «        \  }}|                      |||¬¦  «        S )Nr7  rX  r8  )rŽ  Úload_by_key_path)r.  r"  r^  r9  rœ   r	  s         rƒ   r  zPyCodeCache.loadì  s7   € õ ˜+ t°5Ð9Ñ9Ô9‰	ˆˆTØ×#Ò# C¨¸Ð#ÑOÔOÐOr‚   rœ   r	  Úlinemapúlist[tuple[int, str]] | NoneÚattrsr*  c               óÆ  — |€g }t          ¦   «         }|€|n|}|€?|| j        v r6| j        |         }|r%t          j                             |j        |¦  «         |S t          |||¬¦  «        }|rt          t          |Ž ¦  «        | j	        |<   |�+| 
                    ¦   «         D ]\  }}	t          |||	¦  «         Œ|r&|€
|| j        |<   | j                             |¦  «         |S )Nr8  )r3   r4  rè   r�  r1  r}   rN   rI  r  r5  rN  ÚsetattrrÒ   )
r.  rœ   r	  r<  r>  r9  Úin_toplevelÚmodrP  rQ  s
             rƒ   r;  zPyCodeCache.load_by_key_path÷  s  € ð ˆ?ØˆGå)Ñ+Ô+ˆØ)8Ð)@˜+˜+Àoˆð ˆ=˜T SÔ%8Ð8Ð8ØÔ% dÔ+ˆCØð :Ý”×&Ò& s¤|°SÑ9Ô9Ð9ØˆJå# C¨¸ÐOÑOÔOˆð ð 	5Ý!%¥c¨7 mÑ!4Ô!4ˆCŒL˜ÑàÐØŸš™œð #ð #‘��1Ý˜˜Q Ñ"Ô"Ð"Ð"àð 	$àˆ}Ø,/�Ô# DÑ)àŒK×Ò˜sÑ#Ô#Ð#Øˆ
r‚   FÚpurger¡   r  c                óè   — |r=| j         D ]5}	 |j        sJ ‚t          j        |j        ¦  «         Œ&# t          $ r Y Œ2w xY w| j                              ¦   «          | j                             ¦   «          dS )z‚
        Clear the in-memory module cache. If purge=True, also delete all the
        corresponding on-disk source files.
        N)r�  rt  r  r§  ro  rp  r4  )r.  rC  rB  s      rƒ   rš  zPyCodeCache.cache_clear   s“   € ð ð 	Ø”{ð ð �ðØœ<Ð'Ð'˜<Ý”I˜cœlÑ+Ô+Ð+Ð+øÝ(ð ð ð Ø�DðøøøàŒ×ÒÑÔÐØÔ×!Ò!Ñ#Ô#Ð#Ð#Ð#s   �"0°
=¼=Úlinenor–   úlist[dict[str, Any]] | Nonec                óä   — || j         vrd S t          | j         |         ¦  «        dk    rd S | j         |         \  }}t          ||¦  «        }|dk    rd S ||dz
           }|sd S dd„} ||¦  «        S )	Nr   rj   Ústack_tracer‡   rº   úlist[dict[str, Any]]c                ób   — d}t          j        || ¦  «        }d„ t          |¦  «        D ¦   «         S )Nz"File "(.+)", line (\d+), in (.+)\nc                ó<   — g | ]\  }}}|t          |¦  «        |d œ‘ŒS ))r  rÆ  r{   )r–   )rÀ   rª  Úlr#  s       rƒ   rr  zPPyCodeCache.stack_frames_for_code.<locals>.parse_stack_trace.<locals>.<listcomp>G  s>   € ð ð ð á�A�q˜!ð ­¨A©¬¸Ð:Ð:ðð ð r‚   )r   ÚfindallÚreversed)rH  ÚregexÚmatchess      rƒ   Úparse_stack_tracez<PyCodeCache.stack_frames_for_code.<locals>.parse_stack_traceB  sC   € ð :ˆEÝ”j ¨Ñ4Ô4ˆGðð å'¨Ñ0Ô0ðñ ô ð r‚   )rH  r‡   rº   rI  )r5  rC  r   )r.  r	  rE  rL  rŸ  rÂ  ÚentryrQ  s           rƒ   Ústack_frames_for_codez!PyCodeCache.stack_frames_for_code0  s£   € ð
 �s”|Ð#Ð#Ø�4ÝˆsŒ|˜DÔ!Ñ"Ô" aÒ'Ð'Ø�4à”| DÔ)‰ˆˆuÝ˜ Ñ'Ô'ˆØ�Š6ˆ6Ø�4Ø�a˜!‘e”ˆØð 	Ø�4ð	ð 	ð 	ð 	ð !Ð  Ñ'Ô'Ð'r‚   ©rÞ   )r"  r‡   r^  r‡   rº   rŠ  )r"  r‡   r^  r‡   r9  r7  rº   r   r—  )rœ   r‡   r	  r‡   r<  r=  r>  r*  r9  r7  rº   r   ©F)rC  r¡   rº   r  )r	  r‡   rE  r–   rº   rF  )r}   r~   r   r‰  r�  r€   r4  r5  r’  rŽ  r  r;  rš  r&  r  rS  r�   r‚   rƒ   r3  r3  Ø  sD  € € € € € € àDÐDð !#€GÐ"Ð"Ð"Ñ"ð .0€OÐ/Ð/Ð/Ñ/à13€HÐ3Ð3Ð3Ñ3àð5ð 5ð 5ð 5ñ „[ð5ð ð ðPð
 (,ðPð Pð Pð Pð Pñ „[ðPð ð
 15Ø'+ð&ð (,ð&ð &ð &ð &ð &ñ „[ð&ðP ð$ð $ð $ð $ñ „[ð$ð Ø„_ð(ð (ð (ñ „_ñ „[ð(ð (ð (r‚   r3  rä  r"  r³   c                óR   — t          t                               |¦  «        | ¦  «        S r¾   )rÄ   r3  r  )rä  r"  s     rƒ   Ú_load_triton_kernel_from_sourcerW  O  s"   € õ •;×#Ò# KÑ0Ô0°+Ñ>Ô>Ð>r‚   c                 óÚ  — t          j        ¦   «         r‘t          j                             dd¦  «        5 } t          | ¦  «        5 }|                     ¦   «                              ¦   «         cddd¦  «         cddd¦  «         S # 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t          j	        ¦   «         }t          t           j        j        gd|¦  «         |                     ¦   «         S )zz
    Compute a key representing the state of the CUTLASS library.

    Note: OSS and fbcode will have different keys.
    Úcutlass_libraryzsrc_hash.txtNrÞ   )r)   r}  r  Ú	resourcesr	  r  rc  rb  ru  rv  re  ÚcutlassÚcutlass_dirrx  )Úresource_pathÚresource_fileÚcombined_hashs      rƒ   Úcutlass_keyr`  U  si  € õ ÔÑÔð 1åÔ×$Ò$Ø! >ñô ð	1ð Ý�ÑÔð		1ð $1à ×%Ò%Ñ'Ô'×.Ò.Ñ0Ô0ð	1ð 	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1õ ”NÑ$Ô$€MÝ•V”^Ô/Ð0°"°mÑDÔDÐDØ×ÒÑ!Ô!Ð!s5   ´BÁ&BÁ*BÂB	ÂBÂ
B	ÂBÂBÂ!Bc                  óR   — 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d„ZdS )Ú
DLLWrapperz A wrapper for a dynamic library.Úlib_pathr‡   rº   r  c                óJ   — || _         d| _        |                      ¦   «          d S r&  )rc  Úis_openr  )r  rc  s     rƒ   r  zDLLWrapper.__init__m  s#   € ð !ˆŒØˆŒØ�	Š	‰Œˆˆˆr‚   c                ób   — | j         s't          j        | j        ¦  «        | _        d| _         d S d S r4  )re  r	   rC  rc  ÚDLLr  s    rƒ   r  zDLLWrapper.openu  s5   € ØŒ|ð 	 ÝÔ'¨¬Ñ6Ô6ˆDŒHØˆDŒLˆLˆLð	 ð 	 r‚   c                óN   — | j         r|                      ¦   «          d| _         d S d S r&  )re  Ú_dlcloser  s    rƒ   rƒ  zDLLWrapper.closez  s.   € ØŒ<ð 	!Ø�MŠM‰OŒOˆOØ ˆDŒLˆLˆLð	!ð 	!r‚   c                óš  — d }	 dd l } |j        ¦   «         rd S n# t          $ r Y d S w xY w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 )
Nr   Údlclosezlibc.sorn  T)Úuse_last_errorz&Unsupported env, failed to do dlclose!)ÚwintypeszKdll unloading function was not found, library may not be unloaded properly!)rè   Úis_finalizingrÎ  rT   r   r¼  rk  rU   r'  ÚFreeLibraryr­  r   r�  rg  Ú_handlerm  ÚHMODULEr®  r¯  )r  Ú	f_dlcloserè   Úsymsr'  rn  rm  s          rƒ   ri  zDLLWrapper._dlclose  sŸ  € Øˆ	ð	ØˆJˆJˆJà ˆsÔ Ñ"Ô"ð Ø�ðøåð 	ð 	ð 	àˆFˆFð	øøøõ ‰:Œ:ð 	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Ø]ñô ð ð ð s   „ š
(§(r{   úCallable[..., None]c                óz   ‡— | j         st          d| j        › �¦  «        ‚t          | j        |¦  «        Šdˆfd„}|S )NzCannot use closed DLL library: r  r   rº   r  c                 óD   •—  ‰| Ž }|rt          d‰j        › �¦  «        ‚d S )NzError in function: )rÿ   r}   )r  ÚerrÚmethods     €rƒ   Ú_wrapped_funcz-DLLWrapper.__getattr__.<locals>._wrapped_func±  s<   ø€ Ø�&˜$�-ˆCØð LÝ"Ð#J¸¼Ð#JÐ#JÑKÔKÐKðLð Lr‚   ©r  r   rº   r  )re  rÿ   rc  rÄ   rg  )r  r{   ry  rx  s      @rƒ   Ú__getattr__zDLLWrapper.__getattr__«  sd   ø€ ØŒ|ð 	RÝÐPÀÄÐPÐPÑQÔQÐQå˜œ 4Ñ(Ô(ˆð	Lð 	Lð 	Lð 	Lð 	Lð 	Lð
 Ðr‚   r   c                ó   — | S r¾   r�   r  s    rƒ   r~  zDLLWrapper.__enter__¸  s   € Øˆr‚   r  r   c                ó.   — |                       ¦   «          d S r¾   ©rƒ  )r  r  s     rƒ   rˆ  zDLLWrapper.__exit__»  ó   € Ø�
Š
‰Œˆˆˆr‚   c                ó.   — |                       ¦   «          d S r¾   r~  r  s    rƒ   Ú__del__zDLLWrapper.__del__¾  r  r‚   N)rc  r‡   rº   r  r$  )r{   r‡   rº   rt  )rº   r   rz  )r}   r~   r   r‰  r  r  rƒ  ri  r{  r~  rˆ  r�  r�   r‚   rƒ   rb  rb  j  s»   € € € € € Ø*Ð*ðð ð ð ð ð  ð  ð  ð
!ð !ð !ð !ð
*ð *ð *ð *ðXð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð r‚   rb  r†  c                ó   — | dz   S )z,
    standard format for the error path
    z.errorr�   )r†  s    rƒ   Úbinary_error_pathrƒ  Â  s   € ð
 ˜Ñ!Ð!r‚   c                  óÂ  — e Zd ZU dZej         G d„ d¦  «        ¦   «         Zi Zded<   g Z	ded<   dZ
d	ed
<   dZd	ed<   ed/d„¦   «         Ze ed¬¦  «        d0d„¦   «         ¦   «         Zed1d„¦   «         Ze	 d2d3d„¦   «         Zed4d„¦   «         Ze ed¦  «        d5d!„¦   «         ¦   «         Zed6d"„¦   «         Ze	 d2d7d$„¦   «         Zed8d&„¦   «         Ze	 d2d9d.„¦   «         ZdS ):ÚCUTLASSCodeCacheaB  
    A cache for managing the compilation and loading source code specifically for CUTLASS.
    This class handles writing source code to files, compiling them into shared objects, and caching
    the results to avoid redundant compilations. It also manages error handling and logging for the
    compilation process.
    c                  ó2   — e Zd ZU ded<   ded<   dZded<   dS )úCUTLASSCodeCache.CacheEntryr‡   Ú
input_pathr†  Nrz   Ú
error_json)r}   r~   r   r€   r‰  r�   r‚   rƒ   Ú
CacheEntryr‡  Ò  s8   € € € € € € àˆˆ‰ØÐÐÑØ!%ˆ
Ð%Ð%Ð%Ñ%Ð%Ð%r‚   rŠ  údict[str, CacheEntry]r  r�   r�  rÞ   r‡   Ú_SOURCE_CODE_SUFFIXÚ_BACKENDrº   r  c                óœ   — | j                              ¦   «          | j                             ¦   «          | j                             ¦   «          d S r¾   )r  rp  r�  rŽ  rš  r”  s    rƒ   rš  zCUTLASSCodeCache.cache_clearÞ  sC   € àŒ	�ŠÑÔÐØÔ×ÒÑ!Ô!Ð!ØŒ	×ÒÑÔÐÐÐr‚   r  )ÚmaxsizeÚcaching_enabledr¡   Úcaching_availabler€  c                ó¾   — | st                                d¦  «         dS |sdS 	 ddlm}  |¦   «         S # t          $ r t                                d¦  «         Y dS w xY w)ad  
        Get or create the class instance of the CUTLASSKernelBinaryRemoteCache.

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

        Returns:
            CUTLASSKernelBinaryRemoteCache: The class instance of the kernel binary remote cache
        z6CUTLASSKernelBinaryRemoteCache not requested, skippingNr   )ÚCUTLASSKernelBinaryRemoteCachezECUTLASSKernelBinaryRemoteCache not available, remote caching disabled)r®  rÍ  Ú-torch._inductor.fb.kernel_binary_remote_cacher“  rG  )r�  r‘  r“  s      rƒ   Úget_kernel_binary_remote_cachez/CUTLASSCodeCache.get_kernel_binary_remote_cacheä  s¢   € ð ð 	Ý�IŠIÐNÑOÔOÐOØ�4Ø ð 	Ø�4ð
	ðð ð ð ð ð ð 2Ð1Ñ3Ô3Ð3øÝð 	ð 	ð 	Ý�IŠIØWñô ð ð �4�4ð		øøøs   ¤4 ´$AÁAc                ó   — t           ‚r¾   r¬  r”  s    rƒ   Ú_use_re_buildzCUTLASSCodeCache._use_re_build  ó   € å!Ð!r‚   NÚ	src_filesÚdst_fileÚdst_file_extÚ
extra_argsrV  c                ó   — t           ‚r¾   r¬  ©r.  r™  rš  r›  rœ  s        rƒ   Ú_compile_commandz!CUTLASSCodeCache._compile_command	  s
   € õ "Ð!r‚   c                ó   — t           ‚r¾   r¬  r”  s    rƒ   Ú_source_code_extraz#CUTLASSCodeCache._source_code_extra  r˜  r‚   r"  rŠ  c                óØ   — t           j        j        r(t          |                      dgd|¦  «        ¦  «        }|}n|                      ¦   «         }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_outputrX  )r)   r[  Úcutlass_hash_with_compile_cmdrÅ   rŸ  r¡  rŽ  rŒ  )r.  r"  r›  rÄ  r^  rœ   rˆ  s          rƒ   rŽ  zCUTLASSCodeCache.write  sv   € õ Œ>Ô7ð 	-Ý"Ø×$Ò$ m _°nÀlÑSÔSñô ˆOð $ˆEˆEà×*Ò*Ñ,Ô,ˆEå ¨SÔ-DÈEÐRÑRÔR‰ˆˆZØ�JˆÐr‚   c                ót   — |                       ||¦  «        \  }}|dt          | j        ¦  «         …         |z   S )zù
        Returns the deterministic output path for `compile(source_code, dst_file_ext)`
        without performing the compile. Useful when a caller needs to reference the
        compiled artifact path before an async compile has finished.
        N)rŽ  rC  rŒ  )r.  r"  r›  r?  rˆ  s        rƒ   Úget_output_pathz CUTLASSCodeCache.get_output_path*  s?   € ð Ÿ	š	 +¨|Ñ<Ô<‰ˆˆ:ØÐ9�S Ô!8Ñ9Ô9Ð9Ð9Ô:¸\ÑIÐIr‚   rd  c                ó.  — |dk    r:|                       |d|¦  «        \  }}}|                      ||¦  «        \  }}|gd}	}n|                      ||¦  «        \  }}|gd}	}||z   }
|
| j        v�r¼ddlm} t          ¦   «         } |t          j                             ||dz   ¦  «        t          ¬¦  «        }|5  |d	t          | j        ¦  «         …         |z   }t          |¦  «        }|                      t          j        j        ot          j         t          j        ¦   «         ¬
¦  «        }|�|                     ||¦  «         t          j                             |¦  «        rÀt+          |d¬¦  «        5 }|                     ¦   «         }d	d	d	¦  «         n# 1 swxY w Y   t/          j        |¦  «        \  }}|�6t          j        j        r%|                     |t          j        j        ¦  «         |                      |||¦  «        | j        |
<   t;          j        ||¦  «        ‚t          j                             |¦  «        �sX|                      ||||¦  «        }t+          |d¦  «        5 }|                     d¦  «         |                     d| j         › d|	› d|› d�¦  «         d	d	d	¦  «         n# 1 swxY w Y   tC          ¦   «         }tD           #                    d| j         |	|¦  «         tI          j%        |¦  «        }	 |  &                    ¦   «         rNddl'm(}  ||t          j         )                    |¦  «        t          j         *                    |¦  «        ¦  «         n+tW          j,        |tV          j-        t          j.        ¬¦  «         nÎ# tV          j/        $ rR}|  0                    |j1         2                    d¦  «        |
||||¦  «         t;          j        ||j1        ¦  «        |‚d	}~wtf          $ rb}dti          |¦  «        v rJ|  0                    ti          |¦  «        |
||||¦  «         t;          j        |ti          |¦  «        ¦  «        |‚|‚d	}~ww xY wtC          ¦   «         }| j         › d|	› d||z
  › d|› �}tD           5                    |¦  «         n"tD           #                    d| j         |	|¦  «         |�6t          j        j        r%|                     |t          j        j        ¦  «         |                      ||d	¦  «        | j        |
<   d	d	d	¦  «         n# 1 swxY w Y   | j        |
         }|j6        �Dt/          j        |j6        ¦  «        \  }}t;          j        || 7                    d¦  «        ¦  «        ‚| j        |
         j8        ||fS )zê
        Compiles CUDA source_code into a file with dst_file_ext extension.
        If dst_file_ext is "so", first compiles to ".o" and then links to ".so".
        Returns a tuple of dst_file_path, hash_key, source_code_path
        r¢  rÇ  ÚLinkingÚCompilationr   r	  r  r  N)r�  r‘  r™  rš  r¸   r•  z// rW  z cmd
// z	%s %s: %s)Úrun_build_command)rH  ÚenvzCOMPILE FAILED WITHz took z seconds. Command: z-%s %s skipped: %s since output already exists)9rø  rŽ  r  r{  r
  rW  r  r	  rÃ   r|  rC  rŒ  rƒ  r•  r)   r[  Úuse_binary_remote_cacheÚforce_disable_cachesr}  rB  rT  r  rc  r  r½  Úupload_to_binary_remote_cacherR  Úbinary_remote_cache_force_writerŠ  r+   ÚCUDACompileErrorrŸ  r�  r   r®  rÍ  rB  rw  r—  Útriton.fb.re_build_helperr¬  rs  ra  rC  rä  ÚSTDOUTr…  rE  Ú_record_compile_errorÚoutputrB  rÎ  r‡   r   r‰  rb  r†  )r.  r"  r›  rœ  Úobj_pathr?  rœ   rˆ  r™  Úoperation_nameÚkey_with_extr
  rV  r¶  r†  Ú
error_pathÚbinary_remote_cacheÚfhr‰  Ú	cmd_partsÚerror_outputrL  rª  Ú
start_timer¬  ÚerrorÚend_timeÚlog_duration_msgÚcache_entrys                                rƒ   rø  zCUTLASSCodeCache.compile4  s¼  € ð ˜4ÒÐà Ÿ[š[¨°c¸:ÑFÔF‰NˆH�a˜Ø!Ÿiši¨°\ÑBÔB‰OˆC�Ø)1¨
°I�~ˆIˆIð "Ÿiši¨°\ÑBÔB‰OˆC�Ø)3¨°m�~ˆIà˜\Ñ)ˆØ˜sœyÐ(Ñ(Ø6Ð6Ð6Ð6Ð6Ð6å#‘~”~ˆHØ�8�BœGŸLšL¨°3¸±=ÑAÔAÍ<ÐXÑXÔXˆDØð `Xð `XØ(Ð)H­C°Ô0GÑ,HÔ,HÐ+HÐ)HÔIÈLÑX�Ý.¨{Ñ;Ô;�
Ø&)×&HÒ&HÝ$*¤NÔ$Jð %8Ý"Ô7Ð7Ý&,Ô&6Ñ&8Ô&8ð 'Iñ 'ô 'Ð#ð
 'Ð2ð (×+Ò+¨K¸ÑDÔDÐDå”7—>’> *Ñ-Ô-ð HÝ˜j°7Ð;Ñ;Ô;ð /¸rØ%'§W¢W¡Y¤Y˜
ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /å.2¬j¸Ñ.DÔ.DÑ+�I˜|à+Ð7Ý"œNÔHð 8ð ,×/Ò/Ø&­¬Ô(Vñô ð ð /2¯nªnØ" K°ñ/ô /�C”I˜lÑ+õ Ô.¨y¸,ÑGÔGÐGÝ”w—~’~ kÑ2Ô2ñ 7Ø×.Ò.Ø! ;°¸jñô �Cõ ˜j¨#Ñ.Ô.ð W°!ØŸš ™œ˜ØŸšÐ U c¤lÐ UÐ U°^Ð UÐ UÈcÐ UÐ UÐ UÑVÔVÐVðWð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wõ "&¡¤�JÝ—I’I˜k¨3¬<¸ÈÑMÔMÐMÝ %¤¨CÑ 0Ô 0�Ið"$Ø×,Ò,Ñ.Ô.ð ØSÐSÐSÐSÐSÐSà-Ð-Ø )Ý "¤§¢°
Ñ ;Ô ;Ý "¤× 0Ò 0°Ñ =Ô =ñô ð ð õ 'Ô3Ø )µ*Ô2CÍÌðñ ô ð øøõ &Ô8ð 	Wð 	Wð 	WØ×1Ò1Ø!œL×/Ò/°Ñ8Ô8Ø(Ø%Ø&Ø'Ø/ñô ð õ "Ô2°9¸e¼lÑKÔKÐQVÐVøøøøÝ$ð $ð $ð $Ø0µC¸±J´JÐ>Ð>Ø×5Ò5Ý # E¡
¤
Ø ,Ø )Ø *Ø +Ø 3ñô ð õ #&Ô"6°yÅ#ÀeÁ*Ä*Ñ"MÔ"MÐSXÐXØ#˜øøøøð$øøøõ  $™vœv�HØ*-¬,Ð'~Ð'~¸Ð'~Ð'~ÈxÐZdÑOdÐ'~Ð'~Ðy|Ð'~Ð'~Ð$Ý—H’HÐ-Ñ.Ô.Ð.Ð.õ —I’IØGØœØ&Ø#ñ	ô ð ð (Ð3ÝœÔDð 4ð (×+Ò+Ø#¥V¤^Ô%Sñô ð ð +.¯.ª.¸À[ÐRVÑ*WÔ*W�”	˜,Ñ'ðA`Xð `Xð `Xñ `Xô `Xð `Xð `Xð `Xð `Xð `Xð `Xøøøð `Xð `Xð `Xð `XðD 47´9¸\Ô3JˆØÔ!Ð-å&*¤j°Ô1GÑ&HÔ&HÑ#ˆI�|ÝÔ& y°,×2EÒ2EÀgÑ2NÔ2NÑOÔOÐOØ”	˜,Ô'Ô3°S¸*ÐEÐEs‘   Â7B<TÅ3FÆTÆF	ÆTÆF	ÆCTÉ*:J0Ê$TÊ0J4	Ê4TÊ7J4	Ê8ATÌ BNÎTÎQÎAO*Ï*QÏ7AQÑQÑB:TÔT#Ô&T#ú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ø  rb  ©r.  r"  r›  Údst_file_pathrA  Úsource_code_paths         rƒ   r  zCUTLASSCodeCache.load¶  ó   € ð ˜4ÒÐÝðXØ-9ðXð XØJUðXð Xñô ð ð 58·K²KØ˜ñ5
ô 5
Ñ1ˆ�xÐ!1õ ˜=Ñ)Ô)¨8Ð5EÐFÐFr‚   Ú	error_strr¹  r½  rˆ  r†  r»  r   c                ó„  — t          j        ||g¦  «        }|                      |||¦  «        | j        |<   t	          |¦  «        }t          |dd¬¦  «        5 }	|	                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |�8t          j        j	        r)| 
                    |t          j        j        ¦  «         d S d S d S )Nrs  r™  rš  )r  r"  rŠ  r  rƒ  r  rŽ  r)   r[  r°  rR  r±  )
r.  rÌ  r¹  r½  rˆ  r†  r»  r‰  rº  r¼  s
             rƒ   rµ  z&CUTLASSCodeCache._record_compile_errorÇ  s  € õ ”Z ¨IÐ 6Ñ7Ô7ˆ
Ø"%§.¢.°¸[È*Ñ"UÔ"UˆŒ	�,ÑÝ& {Ñ3Ô3ˆ
Ý�*˜c¨GÐ4Ñ4Ô4ð 	!¸Ø�HŠH�ZÑ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð
  Ð+Ý”Ô<ð ,ð  ×#Ò#Ø�FœNÔJñô ð ð ð ð ,Ð+Ð+Ð+s   ÁA9Á9A=Â A=r$  )r�  r¡   r‘  r¡   rº   r€  ©rº   r¡   r¾   ©
r™  r�   rš  r‡   r›  r‡   rœ  rV  rº   r‡   rä  ©r"  r‡   r›  r‡   rº   rŠ  )r"  r‡   r›  r‡   rº   r‡   ©r"  r‡   r›  r‡   rœ  rV  rº   rd  ©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½  Ú	dataclassrŠ  r  r€   r�  rŒ  r�  r’  rš  r%  r   r•  r—  rŸ  r¡  rŽ  r¨  rø  r  rµ  r�   r‚   rƒ   r…  r…  Ê  s6  € € € € € € ðð ð Ôð&ð &ð &ð &ð &ñ &ô &ñ Ôð&ð
 $&€EÐ%Ð%Ð%Ñ%Ø!€MÐ!Ð!Ð!Ñ!à!ÐÐ!Ð!Ð!Ñ!Ø€HÐÐÐÑàð ð  ð  ñ „[ð ð
 Ø€Y�qÐÑÔðð ð ñ Ôñ „\ðð> ð"ð "ð "ñ „[ð"ð ð (,ð"ð "ð "ð "ñ „[ð"ð ð"ð "ð "ñ „[ð"ð Ø€Yˆt�_„_ðð ð ñ „_ñ „[ðð" ðJð Jð Jñ „[ðJð àQUðFð Fð Fð Fñ „[ðFðB ðGð Gð Gñ „[ðGð  ð $(ðð ð ð ñ „[ðð ð r‚   r…  c                  ób   — e Zd ZdZdZedd„¦   «         Ze	 ddd„¦   «         Zedd„¦   «         ZdS )r›  ÚcuÚCUDArº   r¡   c                ó(   — t          j        ¦   «         S r¾   )r   Úuse_re_buildr”  s    rƒ   r—  zCUDACodeCache._use_re_buildè  s   € å!Ô.Ñ0Ô0Ð0r‚   Nr™  r�   rš  r‡   r›  rœ  rV  c                ó2   — t          j        ||||¬¦  «        S ©N)rœ  )r   Úcuda_compile_commandrž  s        rƒ   rŸ  zCUDACodeCache._compile_commandì  s'   € õ "Ô6Ø�x ¸*ð
ñ 
ô 
ð 	
r‚   c                óª   — t          t          j        ¦   «         t          j        ¦   «         t          j        ¦   «         t          ¦   «         g¦  «        }|S r¾   )rÅ   r   r¢  Ú_nvcc_compiler_optionsÚ_nvcc_host_compiler_optionsr`  ©r.  r^  s     rƒ   r¡  z CUDACodeCache._source_code_extraø  sJ   € åõ #Ô1Ñ3Ô3å"Ô9Ñ;Ô;å"Ô>Ñ@Ô@å‘”ð
ñ
ô 
ˆð ˆr‚   rÎ  r¾   rÏ  rä  )	r}   r~   r   rŒ  r�  r’  r—  rŸ  r¡  r�   r‚   rƒ   r›  r›  ã  s‡   € € € € € àÐØ€Hàð1ð 1ð 1ñ „[ð1ð ð (,ð	
ð 	
ð 	
ð 	
ñ „[ð	
ð ðð ð ñ „[ðð ð r‚   r›  c                  óŠ   — e Zd ZU dZdZi Zded<   edd„¦   «         Ze	 ddd„¦   «         Z	edd„¦   «         Z
edd„¦   «         ZdS )rœ  rW  ÚXPUzdict[str, DLLWrapper]Ú	dll_cacherº   r¡   c                ó   — dS r&  r�   r”  s    rƒ   r—  zXPUCodeCache._use_re_build  s   € àˆur‚   Nr™  r�   rš  r‡   r›  rœ  rV  c                ó2   — t          j        ||||¬¦  «        S rÚ  )Úxpu_compile_utilsÚxpu_compile_commandrž  s        rƒ   rŸ  zXPUCodeCache._compile_command  s'   € õ !Ô4Ø�x ¸*ð
ñ 
ô 
ð 	
r‚   c                ó†   — t          t          j        ¦   «         t          j        ¦   «         t	          ¦   «         g¦  «        }|S r¾   )rÅ   rå  Ú_sycl_compilerÚ_sycl_compiler_optionsr`  rß  s     rƒ   r¡  zXPUCodeCache._source_code_extra#  s<   € åå!Ô0Ñ2Ô2Ý!Ô8Ñ:Ô:Ý‘”ðñ
ô 
ˆð ˆr‚   r"  rÄ  c                óÌ   — |dk    rt          d|› d|› �¦  «        ‚|                      ||¦  «        \  }}}|| j        vrt          |¦  «        | j        |<   | j        |         ||fS rÆ  )rÿ   rø  râ  rb  rÈ  s         rƒ   r  zXPUCodeCache.load.  sŸ   € ð ˜4ÒÐÝðXØ-9ðXð XØJUðXð Xñô ð ð 58·K²KØ˜ñ5
ô 5
Ñ1ˆ�xÐ!1ð  ¤Ð-Ð-Ý+5°mÑ+DÔ+DˆCŒM˜-Ñ(à”˜mÔ,¨hÐ8HÐIÐIr‚   rÎ  r¾   rÏ  rä  rÒ  )r}   r~   r   rŒ  r�  râ  r€   r’  r—  rŸ  r¡  r  r�   r‚   rƒ   rœ  rœ    sÀ   € € € € € € àÐØ€HØ')€IÐ)Ð)Ð)Ñ)àðð ð ñ „[ðð ð (,ð	
ð 	
ð 	
ð 	
ñ „[ð	
ð ðð ð ñ „[ðð ðJð Jð Jñ „[ðJð Jð Jr‚   rœ  c                  óÌ   — e Zd ZU ej         G d„ d¦  «        ¦   «         Zi Zded<   g Zded<   dZ	dZ
edd„¦   «         Zedd„¦   «         Ze	 ddd„¦   «         Zedd„¦   «         ZdS )rš  c                  ó$   — e Zd ZU ded<   ded<   dS )úROCmCodeCache.CacheEntryr‡   rˆ  r†  Nr|   r�   r‚   rƒ   rŠ  rí  E  s'   € € € € € € àˆˆ‰ØÐÐÑÐÐr‚   rŠ  r‹  r  r�   r�  rW  Frº   r  c                 ó~   — t           j                             ¦   «          t           j                             ¦   «          d S r¾   )rš  r  rp  r�  r�   r‚   rƒ   rš  zROCmCodeCache.cache_clearO  s2   € åÔ×!Ò!Ñ#Ô#Ð#ÝÔ#×)Ò)Ñ+Ô+Ð+Ð+Ð+r‚   r"  r‡   r›  rŠ  c                ó|   — t          t          dgd|¦  «        ¦  «        }t          || j        |¬¦  «        \  }}||fS r£  )rÅ   r1   rŽ  rŒ  )r.  r"  r›  Úcuda_commandrœ   rˆ  s         rƒ   rŽ  zROCmCodeCache.writeT  sT   € õ Ý  - °.À,ÑOÔOñ
ô 
ˆõ  Ø˜Ô0¸ð
ñ 
ô 
‰ˆˆZð �JˆÐr‚   Nrœ  rV  rd  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   r	  r  r  NrW  )rH  r�  r­  zCompilation output: %szCompilation took z seconds. Compile command: z+Skip compiling %s: output %s already exists)!Ú_logged_compiler_versionr®  rÍ  r<   r‡   r2   rŽ  r  r{  r
  rW  r  r	  rÃ   r|  rC  rŒ  rT  r1   r   rw  rC  rä  r´  r…  rE  r+   r²  r¶  r   rš  rŠ  r†  )r.  r"  r›  rœ  rœ   rˆ  r
  rV  r¶  r†  rL  r¿  r½  r¶  rÀ  rÁ  rÂ  s                    rƒ   rø  zROCmCodeCache.compilec  s”  € ð Ô+ð 	GØ+/ˆCÔ(Ý�IŠIÕ/µµM±O´OÑ0DÔ0DÑEÔEÑFÔFÐFàŸ)š) K°Ñ>Ô>‰ˆˆZØ�c”iÐÑØ6Ð6Ð6Ð6Ð6Ð6å#‘~”~ˆ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/rÄ  c                ó�   — |dk    rt          d|› d|› �¦  «        ‚|                      ||¦  «        \  }}}t          |¦  «        ||fS rÆ  rÇ  rÈ  s         rƒ   r  zROCmCodeCache.load•  rË  r‚   r$  rÐ  r¾   rÑ  rÒ  )r}   r~   r   r½  rÓ  rŠ  r  r€   r�  rŒ  rò  r%  rš  r’  rŽ  rø  r  r�   r‚   rƒ   rš  rš  C  s	  € € € € € € àÔðð ð ð ð ñ ô ñ Ôðð $&€EÐ%Ð%Ð%Ñ%Ø!€MÐ!Ð!Ð!Ñ!ØÐØ$Ðàð,ð ,ð ,ñ „\ð,ð ðð ð ñ „[ðð àQUð/=ð /=ð /=ð /=ñ „[ð/=ðb ðGð Gð Gñ „[ðGð Gð Gr‚   rš  c                  ó   — e Zd Zddd„ZdS )	ÚCodeCacheFutureNr  úfloat | Nonerº   úCallable[..., Any]c                ó   — t           ‚r¾   r¬  ©r  r  s     rƒ   r   zCodeCacheFuture.result¨  s   € Ý!Ð!r‚   r¾   ©r  rö  rº   r÷  )r}   r~   r   r   r�   r‚   rƒ   rõ  rõ  §  s-   € € € € € ð"ð "ð "ð "ð "ð "ð "r‚   rõ  c                  ó$   — e Zd Z	 ddd„Zddd„ZdS )ÚLambdaFutureNÚ	result_fnr÷  r[  úFuture[Any] | Nonerº   r  c                ó"   — || _         || _        d S r¾   )rý  r[  )r  rý  r[  s      rƒ   r  zLambdaFuture.__init__­  s   € ð #ˆŒØˆŒˆˆr‚   r  rö  c                ór   — |�"| j         �| j                              |¬¦  «         |                      ¦   «         S )Nr  )r[  r   rý  rù  s     rƒ   r   zLambdaFuture.result³  s:   € ØÐ 4¤;Ð#:ð
 ŒK×Ò wÐÑ/Ô/Ð/Ø�~Š~ÑÔÐr‚   r¾   )rý  r÷  r[  rþ  rº   r  rú  )r}   r~   r   r  r   r�   r‚   rƒ   rü  rü  ¬  sI   € € € € € àJNðð ð ð ð ð ð  ð  ð  ð  ð  ð  r‚   rü  c                  ó$   — e Zd ZdZdd„Zddd
„ZdS )ÚStaticAutotunerFuturezM
    A statically launchable CachingAutotuner, loaded from TritonBundler
    Ústatic_autotunerr³   rº   r  c                ó"   — || _         d | _        d S r¾   )r  Úreload_kernel_from_src)r  r  s     rƒ   r  zStaticAutotunerFuture.__init__Â  s   € à 0ˆÔð
 AEˆÔ#Ð#Ð#r‚   Nr  rö  c                óø   — | j         €J ‚t          d¦  «        5  | j                             | j         ¬¦  «         | j                             d| j         d ¬¦  «         | j        cd d d ¦  «         S # 1 swxY w Y   d S )Nz%StaticAutotunerFuture.warm_precompile)r  F)Úwarm_cache_onlyÚreload_kernelÚstatic_triton_bundle_key)r  r'   r  Úrecheck_autotune_cacheÚ
precompilerù  s     rƒ   r   zStaticAutotunerFuture.resultË  sâ   € ð Ô*Ð6Ð6Ð6ÝÐAÑBÔBð 		)ð 		)ØÔ!×8Ò8Ø'+Ô'Bð 9ñ ô ð ð Ô!×,Ò,Ø %Ø"Ô9Ø)-ð -ñ ô ð ð
 Ô(ð		)ð 		)ð 		)ð 		)ñ 		)ô 		)ð 		)ð 		)ð 		)ð 		)ð 		)ð 		)øøøð 		)ð 		)ð 		)ð 		)ð 		)ð 		)s   ™A	A/Á/A3Á6A3)r  r³   rº   r  r¾   )r  rö  rº   r³   )r}   r~   r   r‰  r  r   r�   r‚   rƒ   r  r  ½  sO   € € € € € ðð ðEð Eð Eð Eð)ð )ð )ð )ð )ð )ð )r‚   r  )r¹   r   rº   r‡   )rº   rÈ   rä  )rŽ   r‡   rº   r‡   )rá   r‡   rº   râ   )rº   rz   )rX  rY  rº   r‡   rT  )r\  r]  r^  r]  rº   r‡   )ra  r‡   rb  r‡   rc  r‡   rº   rd  )rÞ   r\  )rj  r]  r^  r‡   rk  r‡   rº   r‡   )rÞ   r\  rÞ   N)rj  r]  rb  r‡   r^  r‡   rk  r‡   rc  r‡   rœ   rz   rº   rŠ  )r�  r‡   rº   r‡   rS  )
r”  r‡   rj  r]  r   r¡   r•  r¡   rº   r  )rÁ   rw   rº   rw   )rœ   r‡   rº   r   )r·  r"   rº   r]   )rÁ  rÂ  rº   rz   )rU  rV  rW  r‡   rX  rY  rº   r  )rº   rY  )rÚ  r   rº   r¡   )rÚ  r   rº   r‡   )rº   rà  )
rÖ  r×  rŠ  r‰  rŒ  r¨   r%  r&  rº   r“  )r—   r–   rº   r–   )r	  r‡   rº   rŠ  )r7  r‡   r  r   rº   rú  )r  r‡   r  r‡   rÄ  r   rº   r‡   rt  rU  )rŽ   r‡   r²  r¡   rº   r‡   )r4  r‡   r5  rz   r6  r7  rº   r¡   )rk  r‡   rv  rw  rº   r  )r  r‡   r
  r  rº   r  )r  r‡   rº   r  )rä  r‡   r"  r‡   rº   r³   )r†  r‡   rº   r‡   (A  Ú
__future__r   r¾  rà  r½  r&  ru  r  Úimportlib.resourcesrÛ  r¸  r  Úloggingr  rú  r]  ré   r   rB  r¥  r�  rC  rè   r{  r¢  r¡  r  Úbisectr   Úcollections.abcr   rÕ  r   r'  r   r   r	   Údatetimer
   r   r   Úpathlibr   r   r   r   Útypesr   r   r   r   r   Útypingr   r   r   r   r   r   r   Útyping_extensionsr   r   r   r    rÏ   Útorch._library.opaque_objectr—  r(  Útorch.distributedr�  r¡  r!   r"   Útorch._dynamo.device_interfacer#   Útorch._dynamo.excr$   Útorch._dynamo.utilsr%   r&   r'   r(   Útorch._inductorr)   r*   r+   r,   Útorch._inductor.codegen.commonr-   r.   r/   Útorch._inductor.codegen.cudar0   r   Ú,torch._inductor.codegen.rocm.compile_commandr1   r2   Ú$torch._inductor.compile_worker.utilsr3   Útorch._inductor.cpp_builderr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Útorch._inductor.cpu_vec_isarB   rC   Ú!torch._inductor.custom_graph_passrD   rE   rF   rG   rH   rI   rJ   rK   Útorch._inductor.freezing_utilsrL   rM   Ú%torch._inductor.runtime.compile_tasksrN   Ú%torch._inductor.runtime.runtime_utilsrO   rP   Útorch._inductor.utilsrQ   rR   rS   rT   rU   rV   rW   Ú"torch._library.fake_class_registryrX   rY   Útorch._loggingrZ   Útorch._subclasses.fake_tensorr[   r\   r]   Útorch._utils_internalr^   Útorch.compilerrB  Útorch.compiler._cacher_   r`   ra   Ú)torch.export.pt2_archive._package_weightsrb   rc   Ú"torch.export.pt2_archive.constantsrd   Ú%torch.fx.experimental.symbolic_shapesre   rf   rg   Útorch.utils._devicerh   Útorch.utils._ordered_setri   rF  rk   rl   rm   rn   r¶   rp   r·  rq   rr   Úruntimers   Úruntime.autotune_cachert   Útriton_bundlerru   Úvirtualizedrv   rw   ry   r…   rŒ   r‘   r£   r¤   r¥   r¦   r�  r§   rM  r¨   r(  r©   r  r«   Úirr¬   r­   r®   r¯   r°   Úruntime.hintsr±   r²   Úruntime.triton_heuristicsr³   rS  r´   r†  Úfile_lock_timeoutr|  Ú_loggingÚgetArtifactLoggerr}   r*  Úautotuning_logÚ	getLoggerr®  ÚAOTAUTOGRAD_CACHE_PREFIXrÇ   rÍ   rÕ   rÙ   rà   rð   Útorch.utils._functoolsrñ   Útorch_key_cacherô   rø   r(  r4  rW  r[  r`  ri  rp  rr  rŽ  r“  r!  rÓ  r¬  r³  r¶  rÀ  rÅ  rö  rÒ  ÚPicklerrÔ  re  r�  rƒ  r…  rÎ  r  r
  rÙ  r€   rÝ  rß  rµ  rò  r=  r™  r¦  r¨  ÚregisterrÝ  rw  r  rx  rz  rœ  r©  rù  r  r	  rÃ   r  r  r;  rˆ  rŠ  r‡  r<  r>  r   r{  r¥  rª  r  r  r3  rW  r`  rb  rƒ  r…  r›  Útorch._inductor.codegen.xpurå  rœ  rš  rõ  rü  r  r�   r‚   rƒ   ú<module>rD     s‚  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð QÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø CÐ CÐ CÐ CÐ CÐ CØ 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð ð ð
 MÐ LÐ LÐ LÐ LÐ Lðð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  FÐ EÐ EÐ EÐ EÐ EÐ EÐ Eð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð NÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ GÐ GÐ GÐ GÐ GÐ GØ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð @Ð ?Ð ?Ð ?Ð ?Ð ?Ø AÐ AÐ AÐ AÐ AÐ AØ +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð
 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð
 PÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ IÐ IÐ IÐ IÐ IÐ Iðð ð ð ð ð ð ð ð ð ð
 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð ð ð ð ð )Ð (Ð (Ð (Ð (Ð (Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø #Ð #Ð #Ð #Ð #Ð #Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð ð €GˆC�L„L€ðð ð ð ð �yñ ô ð ðð ð ð ð ˜	¨ð ñ ô ð ð,ð ,ð ,ð ,ð ,�ñ ,ô ,ð ,ð&ð &ð &ð &ð &�	 ð &ñ &ô &ð &ð" ð !ØGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGØ)Ð)Ð)Ð)Ð)Ð)à,Ð,Ð,Ð,Ð,Ð,Ø-Ð-Ð-Ð-Ð-Ð-Ø$Ð$Ð$Ð$Ð$Ð$Ø Ð Ð Ð Ð Ð ØAÐAÐAÐAÐAÐAÐAÐAØ5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø;Ð;Ð;Ð;Ð;Ð;Ø Ð Ð Ð Ð Ð ð Œl˜gÒ%€ØÔ'€à”.×2Ò2°8¸]ÑKÔK€Ø”×1Ò1°(¸LÑIÔI€Ø€gÔ˜Ñ!Ô!€àÐ ñ
ð 
ð 
ð 
ð €ˆ4�„ñSð Sð Sñ „ðSð €ˆ4�„ñð ð ñ „ðñGð Gð Gð Gñð ð ð ñð ð ð ð IÐ HÐ HÐ HÐ HÐ Hð ñ
ð 
ð 
ñ „ð
ð7
ð 7
ð 7
ð 7
ð 7
ñ 7
ô 7
ð 7
ðt'ð 'ð 'ð 'ð '�ñ 'ô 'ð 'ð24ð 4ð 4ð 4ð 4�iñ 4ô 4ð 4ñnð ð ð ñ0ð 0ð 0ð 0ñ-ñ -ð -ð -ð -ð 9;ñ"ñ "ð "ð "ð "ñ;ñ ;ð ;ð ;ð ;ð"ð "ð "ð "ð "ñ "ô "ð "ðP ØØØññ ð ð ð ñ&!ð !ð !ð !ð Øñ	ñ ð ð ð ð> Ôðð ð ð ð ñ ô ñ Ôðñð ð ñ ñð ð ñ ñ	ð 	ð 	ñ 	ð$ ØØØÙðÑ ñð ð ñ ð8[ð [ð [ð [ð [˜&�.ñ [ô [ñ [ñ|Vð Vð Vñ Vð  ñXð Xð Xñ „ñXñB%ð %ð %ñ %ð Ôðð ð ð ð ñ ô ñ Ôñðð ð ð ð ™ñ ô ñ ð €Ô˜dÐ#Ñ#Ô#ðb9ð b9ð b9ð b9ð b9ñ b9ô b9ñ $Ô#ñb9ðJ 7A°j±l´lÑ "Ð BÑ BÐ BÑ BñWð Wð Wñ WñXð Xð Xñ Xñ0ð 0ð 0ñ 0ðf Ôðð ð ð ð ñ ô ñ ÔñðU,ð U,ð U,ð U,ð U,ñ U,ô U,ñ U,ñpð ð ñ ñ,!ð !ð !ñ !ð8['ð ['ð ['ð ['ð ['�7˜1”:ñ ['ô ['ñ ['ð| Õð	ð 	ð 	ð 	ð 	˜Mñ 	ô 	ñ Ôñ	ðað að að að a‘< Ô0ñ aô añ aðH …ñð ð ñ „ñð  ðY ð Y ð Y ð Y ð Y ñ Y ô Y ñ ÔñY ðx ð# ð # ð # ð # ð # ñ # ô # ñ Ôñ# ðLjð jð jð jð jñ jô jñ jðZ �Ð Ñ Ð Ñ ñ.Dð .Dð .Dñ .Dðh �g�l‹lÐ,Ð,Ñ.Ô.Ð0EÑFÔF�Ø•7—<“<¡¨WÑ5Ô5Ñ ØBÑ ð …ñBð Bð Bñ „ñBñJð ð ñ ñ	ñ 	ð 	ð 	ñ 	ñ	Kð 	Kð 	Kñ 	Kð ð^1ð ^1ð ^1ð ^1ð ^1ñ ^1ô ^1ñ Ôñ^1ñB	 ð 	 ð 	 ñ 	 ð ðE;ð E;ð E;ð E;ð E;¡ñ E;ô E;ñ ÔñE;ðP ðE/ð E/ð E/ð E/ð E/Ñ4ñ E/ô E/ñ ÔñE/ðP ðeð eð eð eð eÑ0ñ eô eñ ÔñeñP'ð 'ð 'ñ 'ñTð ð ñ ð
 ðs(ð s(ð s(ð s(ð s(ñ s(ô s(ñ Ôñs(ñl?ð ?ð ?ñ ?ð ñ"ð "ð "ñ „ñ"ð(Uð Uð Uð Uð Uñ Uô Uñ Uðp ñ"ð "ð "ñ „ñ"ðVð Vð Vð Vð Vñ Vô Vñ Vðr ð#ð #ð #ð #ð #Ñ$ñ #ô #ñ Ôñ#ðL KÐ JÑ JÐ JÑ JÐ Jð ð2Jð 2Jð 2Jð 2Jð 2JÑ#ñ 2Jô 2Jñ Ôñ2Jðj ð`Gð `Gð `Gð `Gñ `Gñ `Gô `Gñ Ôñ`GðF"ð "ñ "ð "ñ "ñ "ô "ñ "ð
 ð  ñ  ð  ñ  ‘?ñ  ô  ñ  ð")ð )ñ )ð )ñ )™Oñ )ô )ñ )ð )ð )r‚   