Ë
    ÃÓ^j
ÿ ã                  ó  — 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mZmZ d dlmZ d dlmZ d dlm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m Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*Z+d dl,Z+d dl-m.c m/Z0 d dl1m2Z2 d dl+m3Z3 d dl4m5Z5 d dl6m7Z7m8Z9m	Z:m.Z; d dl<m=Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d dlOmPZPm8ZQ d dlRmSZS d dlTmUZUmVZVmWZWmXZX d dlYmZZZm[Z[m\Z\ d dl]m^Z^m_Z_m`Z`maZambZb d dlcmdZd d dlemfZfmgZg d dlhmiZimjZjmkZkmlZlmmZmmnZnmoZo d dlpmqZq d dlrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z| d dl}m~Z~ d d lm€Z€ d d!l�m‚Z‚ d d"lƒm„Z„ d d#l,m…Z… d d$l†m‡Z‡mˆZˆ d d%l‰mŠZŠ d d&l‹mŒZŒ 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— d-d.l˜m8Z8m™Z™mšZš d-d/l›mœZœm�Z� d-d0lžmŸZŸ d-d1l m¡Z¡ d-d2l¢m£Z£ d-d3l¤m¥Z¥ d-d4l¦m§Z§m¨Z¨ d-d5l©mªZª d-d6l«m¬Z¬ d-d7l­m®Z®m¯Z¯ d-d8l°m±Z± d-d9l.m²Z²m³Z³m´Z´mµZµm¶Z¶m·Z·m¸Z¸m¹Z¹mºZº d-d:l»m¼Z¼ er"d d;l½m¾Z¾m¿Z¿mÀZÀ d d<lhmÁZÁ d d=lÂmÃZÃ d d>lÄmÅZÅ d-d?l­mÆZÆ  e$d@«      ZÇ e dA«      ZÈes e8�j’                  «       s	dšdB„ZÊd›dC„ZËnd dDlÌmËZËmÊZÊ er/d dElÍmÎZÎmÏZÏmÐZÐ e¾eÑeÒ   geÀe+�j¦                     f   eÔz  eÑeÔ   z  eÅz  ZÕ G dF„ dGe�j¬                  «      Z×e G dH„ dI«      «       ZØdœdJ„ZÙd�dK„ZÚ eÙ«       ZÛeÛ�j¸                  ZÝeÛ�j¼                  ZßeÛ�jÀ                  Zá e	�jÄ                  eã«      Zäe+�jÊ                  �jÍ                  eãdL«      Zçe+�jÊ                  �jÍ                  eãdM«      Zèe+�jÊ                  �jÍ                  eãdN«      Zée+�jÊ                  �jÍ                  eãdO«      Zêe+�jÊ                  �jÍ                  eãdP«      ZëdždQ„ZìdŸdR„ZídŸdS„ZîdŸdT„Zï e�jà                  d«      d dU„«       Zñe�jä                  d¡dV„«       Zód¢dW„Zô	 	 	 	 	 	 	 	 d£dX„Zõ	 d¤	 	 	 	 	 d¥dZ„Zö	 	 	 	 	 	 d¦d[„Z÷	 	 d§	 	 	 	 	 	 	 d¨d\„Zød¤d©d]„Zù	 	 	 dª	 	 	 	 	 	 	 	 	 d«d_„Zúd¬d`„Zû	 	 	 	 d­da„Zü	 	 	 	 	 	 d®db„Zý	 d¤	 	 	 	 	 	 	 d¯dc„Zþ	 d°	 	 	 d±dd„Zÿe�j                   d²de„«       �Z G df„ dge&dY¬h«      �Z G di„ dje%«      �Z	 d°	 	 	 	 	 	 	 	 	 d³dk„�Z eÊdl¬m«      	 d°	 	 	 	 	 	 	 	 	 d´dn„«       �Z G do„ dp«      �Z G dq„ dre«      �Z G ds„ dt�e«      �Z	 d°	 	 	 	 	 	 	 	 	 	 	 dµdu„�Z		 	 	 	 	 	 d¶dv„�Z
	 d·dwdwdwdxœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d¸dy„�Zd¹dz„�Z	 	 	 	 	 	 	 	 dºd{„�Z	 d·	 	 	 	 	 	 	 d»d|„�Z�edf	 	 	 	 	 	 	 	 	 d¼d}„�Z ed «      �Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d½d~„�Zd¾d¿d„�ZdÀd€„�Zdd�œ	 	 	 	 	 	 	 	 	 dÁd‚„�ZdÂdƒ„�Z	 	 	 	 dÃd„„�Z ed^¬…«       G d†„ d‡«      «       �Z	 	 	 	 dÄdˆ„�Z�edYf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dÅd‰„�Z�ef	 	 	 	 	 	 	 	 	 dÆdŠ„�Z	 	 	 	 	 	 dÇd‹„�Z ed^¬…«       G dŒ„ d�eeÇeÈf   «      «       �Z�edddYdf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dÈdŽ„�Z	 	 	 	 	 	 dÉd�„�Ze¡dd�œ	 	 	 	 	 	 	 	 	 	 	 	 	 dÊd‘„�Ze¡dd�œ	 	 	 	 	 	 	 	 	 	 	 	 	 dÊd’„�Z d¬d“„�Z!	 	 	 	 	 	 	 	 dËd”„�Z"	 	 	 	 	 	 	 	 dËd•„�Z#dÌd–„�Z$	 d°dd—œ	 	 	 	 	 	 	 	 	 dÍd˜„�Z%	 d°	 dÎd™„�Z&y)Ïé    )ÚannotationsN)ÚABCÚabstractmethod)Údefaultdict)ÚAbstractContextManager)Ú	dataclass)Úcurrentframe)Úcount)Ú
attrgetter)ÚAnyÚGenericÚTYPE_CHECKINGÚTypeVar)ÚNeverÚoverrideÚ	ParamSpecÚProtocolÚ	TypedDictÚUnpack)Úmock)Ú#min_cut_rematerialization_partition)Úfx)Úenable_python_dispatcher)Úcompiled_autogradÚconfigÚloggingÚutils)Úcommon)Úget_interface_for_device)Úwrap_compiler_debug)Úchromium_event_timedÚCompileEventLoggerÚcountersÚdetect_fake_modeÚdynamo_timedÚflatten_graph_inputsÚget_inputs_devicesÚget_metrics_contextÚ	GmWrapperÚlazy_format_graph_codeÚset_feature_use)Úaot_autogradr   )Ú!unwrap_tensor_subclass_parameters)Úaot_export_moduleÚGraphOutputNameÚmake_boxed_funcÚSerializableAOTDispatchCompiler)Ú	code_hashÚFxGraphCacheÚoutput_code_log)ÚBoxedDeviceIndexÚcudagraphs_logÚformat_default_skip_messageÚ#log_cudagraph_skip_and_bump_counterÚPlaceholderInfo)ÚCustomPartitionerFn)Ú"create_mapping_pre_post_grad_nodesÚsave_args_for_compile_fx_inner)ÚCompiledAOTIÚCompiledFxGraphÚCompiledFxGraphConstantsWithGmÚcopy_strided_storage_Úget_expanded_dimsÚindex_expanded_dimsÚ
OutputCode)Ú	cache_dir)
Ú	BoxedBoolÚcount_tangentsÚfresh_cacheÚget_all_devicesÚget_static_bw_input_idxsÚ	InputTypeÚis_gpuÚshould_assume_input_alignedÚ should_use_remote_fx_graph_cacheÚtensor_is_aligned)ÚFakeScriptObject)Úis_opaque_type)Útrace_structured)Úcompile_time_strobelight_meta)ÚGraphModule)Úfree_unbacked_symbolsÚSymExprPrinter)ÚFakeTensorProp)Ú_WaitCounter)Ú
OrderedSeté   )ÚShortenTracebackÚ	SkipFrame)Ú_use_lazy_graph_module)Ú_PyTreeCodeGen)Ú
has_tritoné   )r   Údistributed_autotuneÚmetrics)Úget_wrapper_codegen_for_deviceÚinit_backend_registration)ÚDebugContext)Úselect_decomp_table)ÚInductorError)Újoint_graph_passes)Úpost_grad_passesÚview_to_reshape)Úpre_grad_passes)ÚGraphLowering)Úget_device_typeÚIRNode)ÚTritonBundler)	Úalign_inputs_from_check_idxsÚclone_preserve_stridesÚcopy_misaligned_inputsÚ get_cloned_parameter_buffer_nameÚ%get_first_incompatible_cudagraph_nodeÚ#maybe_get_suppress_shape_guards_ctxÚoutput_nodeÚremove_unaligned_input_idxsÚshape_env_from_inputs)ÚV)ÚCallableÚ	GeneratorÚSequence)Ú_StrideExprStr)Ú
OpOverload)ÚWeights)ÚExternKernelNodeÚ_PÚ_Tc                ó"   — t         j                  S ©N)Údynamo_utilsÚidentity©Úattrs    úe/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/compile_fx.pyÚtime_and_logr‰   š   s   € Ü×$Ñ$Ð$ó    c                  ó   — y rƒ   © )ÚargsÚkwargss     rˆ   Úlog_optimus_to_scubar�   �   s   € ØrŠ   )r�   r‰   )ÚFQNÚGraphInputNameÚGraphSignaturec                  ó   — e Zd ZdZdZdZy)ÚFxCompileModer   r_   rY   N)Ú__name__Ú
__module__Ú__qualname__ÚNORMALÚ	SERIALIZEÚ
SUBPROCESSrŒ   rŠ   rˆ   r”   r”   ¯   s   „ Ø€Fð €Ià�JrŠ   r”   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)ÚFxCompileConfigr”   ÚmodeÚboolÚ	use_asyncÚuse_progressiveN©r•   r–   r—   Ú__annotations__rŒ   rŠ   rˆ   rœ   rœ   ¸   s   … à
ÓØƒOØÔrŠ   rœ   c                 ó°  — d} t         j                  j                  | «      }|€t        t        j
                  dd«      S d}d}|j                  «       j                  d«      rd}|dd  }|j                  «       j                  d«      rd}|dd  }	 |j                  «       }t        t        |   ||«      S # t        $ r˜ dd l
} |j                  t        «      }|j                  d	|| d
j                  t        d„ t        j                   D «       «      «      «       t         j                  j#                  | «       t        t        j
                  dd«      cY S w xY w)NÚTORCHINDUCTOR_FX_COMPILE_MODEFzprogressive+Té   zasync+é   r   z>Invalid value of %s for %s. Expected one of %s. Using default.z, c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrƒ   )Úrepr©Ú.0Úxs     rˆ   ú	<genexpr>z+_fx_compile_mode_default.<locals>.<genexpr>Ú   s   è ø€ ÒH¨œT !ŸWÑHùs   ‚)ÚosÚenvironÚgetrœ   r”   r˜   ÚlowerÚ
startswithÚupperÚKeyErrorr   Ú	getLoggerr•   ÚerrorÚjoinÚsortedÚ__members__Úpop)ÚnameÚvaluerŸ   r    r   Úlogs         rˆ   Ú_fx_compile_mode_defaultr½   ¿   s)  € Ø*€DÜ�J‰J�N‰N˜4Ó €EØ€}Üœ}×3Ñ3°U¸EÓBÐBà€IØ€Oà‡{�{ƒ}×Ñ Ô/ØˆØ�b�c�
ˆØ‡{�{ƒ}×Ñ Ô)Øˆ	Ø�a�b�	ˆðCØ—‘“ˆÜœ}¨UÑ3°YÀÓPÐPøÜò CÛàˆg×Ñ¤Ó)ˆØ�	‰	ØLØØØ�I‰I”fÑH¬m×.GÑ.GÔHÓHÓIô		
ô 	�
‰
�‰�tÔÜœ}×3Ñ3°U¸EÓBÒBðCús   Â#B4 Â4BEÅEc                 ó   — ddigS )NÚmax_autotuneTrŒ   rŒ   rŠ   rˆ   Ú_get_progression_configsrÀ   á   s   € ð 
˜Ððð rŠ   Ú
perf_hintsÚpre_grad_graphsÚpost_grad_graphsÚcudagraph_static_inputsÚinductor_metricsc                óÆ   — t         j                  j                  j                  «       }t	        t        | «      «      }|r|j                  s|S |j                  j                  S rƒ   )ÚtorchÚ_guardsÚTracingContextÚtry_getÚlistÚrangeÚfw_metadataÚstatic_input_indices)Ú	num_fixedÚcontextÚfixeds      rˆ   Úget_static_input_idxsrÒ   ÷   sM   € ô
 �m‰m×*Ñ*×2Ñ2Ó4€GÜ”�yÓ!Ó"€EÙ˜'×-Ò-Øˆà×Ñ×3Ñ3Ð3rŠ   c                ó$  — | j                   j                  d¬«      d   }g }t        |j                  d   t        j
                  j                  «      s|j                  d   }n|j                  }|D ]Ž  }t        |t        j
                  j                  «      rW|j                  j                  d«      x}�:t        |t        j                  «      r |j                  |j                  «       «       Œ~|j                  d «       Œ� ||j                  d<   y )NÚoutput©Úopr   ÚvalÚoriginal_output_strides)ÚgraphÚ
find_nodesÚ
isinstancer�   rÇ   r   ÚNodeÚmetar¯   ÚTensorÚappendÚstride)Úgmru   Úoutput_stridesÚoutput_node_argsrÔ   r×   s         rˆ   Úrecord_original_output_stridesrä     sÜ   € Ø—(‘(×%Ñ%¨Ð%Ó2°1Ñ5€KØ€Nä�k×&Ñ& qÑ)¬5¯8©8¯=©=Ô9Ø&×+Ñ+¨AÑ.Ñà&×+Ñ+Ðà"ò 	(ˆä�vœuŸx™xŸ}™}Ô-ØŸ™Ÿ™¨Ó.Ð.�Ð;Ü˜3¤§¡Ô-à×!Ñ! #§*¡*£,Õ/ð ×!Ñ! $Õ'ð	(ð 3A€K×ÑÐ.Ò/rŠ   c                óþ   — | j                   j                  dt        j                  j                  j
                  ¬«      D ]0  }t        | |j                  d   j                  «      }t        |«       Œ2 t        | «       y )NÚcall_function©rÖ   Útargetr   )rÙ   rÚ   rÇ   ÚopsÚhigher_orderÚinvoke_subgraphÚgetattrr�   rè   Ú)_recursive_record_original_output_stridesrä   )rá   ÚnodeÚsubgraphs      rˆ   rí   rí     sh   € à—‘×#Ñ#Ø¤5§9¡9×#9Ñ#9×#IÑ#Ið $ó ò <ˆô ˜2˜tŸy™y¨™|×2Ñ2Ó3ˆÜ1°(Õ;ð	<ô # 2Õ&rŠ   c           	     ó  — | j                   j                  dt        j                  j                  j
                  ¬«      D ]Á  }t        | |j                  d   j                  «      }|j                   j                  d¬«      D ]r  }t        t        |j                  d   «      «      D �cg c]8  }t        |j                  d   |   t        j                  j                  «      r|‘Œ: c}|j                  d<   Œt t        |«       ŒÃ y c c}w )Nræ   rç   r   rÔ   rÕ   Úuser_visible_output_idxs)rÙ   rÚ   rÇ   ré   rê   rë   rì   r�   rè   rÌ   ÚlenrÛ   r   rÜ   rÝ   Ú*_recursive_record_user_visible_output_idxs)rá   rî   rï   Úidxs       rˆ   ró   ró   %  sÛ   € à—‘×#Ñ#Ø¤5§9¡9×#9Ñ#9×#IÑ#Ið $ó ò =ˆô ˜2˜tŸy™y¨™|×2Ñ2Ó3ˆà—N‘N×-Ñ-°Ð-Ó:ò 	ˆDô !¤ T§Y¡Y¨q¡\Ó!2Ó3ö5àÜ˜dŸi™i¨™l¨3Ñ/´·±·±Ô?ò ò5ˆD�I‰IÐ0Ò1ð	ô 	3°8Õ<ñ=ùò5s   Â(=Dc                 ó4   — t        j                  t        «      S rƒ   )Údynamo_loggingÚget_step_loggerr¼   rŒ   rŠ   rˆ   Ú_step_loggerrø   5  s   € ä×)Ñ)¬#Ó.Ð.rŠ   c                 ó  — t         j                  j                  «       rjt         j                  j                  j                  j
                  dk7  r8t         j                  j                  «       dk\  rt        j                  d«       y y y y )NÚtf32)é   r   z­TensorFloat32 tensor cores for float32 matrix multiplication available but not enabled. Consider setting `torch.set_float32_matmul_precision('high')` for better performance.)	rÇ   ÚcudaÚis_availableÚbackendsÚmatmulÚfp32_precisionÚget_device_capabilityÚwarningsÚwarnrŒ   rŠ   rˆ   Ú_warn_tf32_disabledr  :  si   € ô 	�
‰
×ÑÔ!Ü�N‰N×Ñ×&Ñ&×5Ñ5¸Ò?Ü�J‰J×,Ñ,Ó.°&Ò8ä�‰ðdõ	
ð 9ð @ð 	"rŠ   c           
     óÀ  ‡— t        | j                  d¬«      D ��cg c]  \  }}|‘Œ	 c}}«      Š‰j                  t        | j                  d¬«      D ��cg c]  \  }}|‘Œ	 c}}«      «       dˆfd„}|j                  j
                  D �]F  }|j                  dk(  sŒ|j                  }|j                  d«      s|j                  d«      sŒCt        | |«      sŒP t        |«      |«      } t        |«      | «      }t        |t        «      r)t        |t        «      rb|j                  |j                  u rJŒ«|j                  |j                  k(  r0|j                  |j                  k(  rt!        j"                  ||«      rŒô|j                  d«      rdnd}	 ||j                  |	«      }
|	› |
› �}||_        t%        |||«       ‰j'                  |«       �ŒI yc c}}w c c}}w )	a§  
    In aot_export_module (make_fx), we create get_attr nodes with name prefix
    "_tensor_constant" and "_torchbind_obj". See Tracer.create_arg() in
    torch/fx/_symbolic_trace.py

    However, this might result in name collision if the original mod already
    has a different buffer with the same name.

    We resolve this potential name collision here by changing the target name
    with a new number post fix.
    F©Úremove_duplicatec                ó.  •— d}| j                   D ]”  }|j                  dk(  sŒ|j                  j                  |«      sŒ/t	        |j                  «      t	        |«      kD  sŒQ|j                  j                  |«      d   }|j                  «       sŒ€t        |t        |«      «      }Œ– ‰D ]f  }|j                  |«      sŒt	        |«      t	        |«      kD  sŒ-|j                  |«      d   }|j                  «       sŒRt        |t        |«      «      }Œh |dz   S )Nr   Úget_attréÿÿÿÿr_   )	ÚnodesrÖ   rè   r±   rò   ÚsplitÚisdigitÚmaxÚint)rÙ   ÚprefixÚirî   Úpost_fixÚkeyÚexisting_keyss         €rˆ   Úfind_smallest_iz0_resolve_name_collision.<locals>.find_smallest_i[  sé   ø€ ØˆØ—K‘Kò 	2ˆDØ�w‰w˜*Ó$¨¯©×)?Ñ)?ÀÕ)GÜ�t—{‘{Ó#¤c¨&£kÓ1Ø#Ÿ{™{×0Ñ0°Ó8¸Ñ<�HØ×'Ñ'Õ)Ü ¤3 x£=Ó1™ð	2ð !ò 	2ˆCØ�~‰~˜fÕ%Ü�s“8œc &›kÓ)Ø"Ÿy™y¨Ó0°Ñ4�HØ×'Ñ'Õ)Ü ¤3 x£=Ó1™ð	2ð �1‰uˆrŠ   r	  Ú_tensor_constantÚ_torchbind_objN)rÙ   zfx.Graphr  ÚstrÚreturnr  )rX   Únamed_parametersÚupdateÚnamed_buffersrÙ   r  rÖ   rè   r±   Úhasattrr   rÛ   rO   Úreal_objÚdeviceÚdtyperÇ   ÚequalÚsetattrÚadd)Úmodrá   rº   r×   r  rî   Útarget_nameÚ	gm_targetÚmodel_targetr  Únew_idÚnew_target_namer  s               @rˆ   Ú_resolve_name_collisionr*  G  s»  ø€ ô Ø"×3Ñ3ÀUÐ3ÓK×L‘)�$˜ŠÓLó€Mð ×ÑÜ¨#×*;Ñ*;ÈUÐ*;Ó*S×T™Y˜T 3’DÓTÓUôõð  —‘—‘ó $/ˆØ�7‰7�jÓ ØŸ+™+ˆKØ×)Ñ)Ø"ôà!×,Ñ,Ð-=Ô>Øä˜3 Ô,ØØ/œ
 ;Ó/°Ó3ˆIØ2œ: kÓ2°3Ó7ˆLÜ˜)Ô%5Ô6ä˜|Ô-=Ô>Ø!×*Ñ*¨l×.CÑ.CÑCàà× Ñ  L×$7Ñ$7Ò7Ø—O‘O |×'9Ñ'9Ò9Ü—K‘K 	¨<Ô8ð ð ×)Ñ)Ð*<Ô=ñ #à%ð ñ
 % R§X¡X¨vÓ6ˆFØ!' ¨¨Ð1ˆOØ)ˆDŒKÜ�B˜¨Ô3Ø×Ñ˜oÖ.ñI$/ùó- 	Mùó Us   œG
ÁGc                óÖ  — ddl m}m} t        | |«       i }| j	                  d¬«      D ]   \  }}|||<    |||||j
                  ¬«       Œ" | j                  d¬«      D ]   \  }}|||<    |||||j                  ¬«       Œ" |j                  j                  d¬«      }	g }
|	D ]±  }|j                  }||j                  v r!|j                  |   }|
j                  |«       Œ>||j                  v rE|j                  |   }|
j                  |«       t        ||   «      |j                  t!        |«      <   Œ‘||j"                  v sJ ‚|
j                  d «       Œ³ ddlm} t)        |j                  j+                  «       j,                  d   «      }g }|j.                  }|j0                  }|j2                  }t5        |«      D ]f  \  }}d }|t7        |«      t7        |«      z   t7        |«      z   k  r(t9        |j                  «      }||v r||   }n	||v r||   }|j                  |«       Œh  |||
|t;        j<                  «       d «      }t?        |jA                  «       «      |j                  d	<   |S )
Nr   )Ú_assign_attrÚ	_AttrKindFr  )Ú	attr_kindÚplaceholderrÕ   )Ú_unliftÚmutated_named_buffers)!Útorch.export.unflattenr,  r-  r*  r  Ú	PARAMETERr  ÚBUFFERrÙ   rÚ   rº   Úinputs_to_parametersrß   Úinputs_to_buffersrp   rÝ   rr   Úuser_inputsÚtorch.export._unliftr0  Útupleru   r�   Úbuffers_to_mutateÚuser_inputs_to_mutateÚoutput_tokensÚ	enumeraterò   r/   ÚpytreeÚtreespec_leafrX   Úvalues)r$  rá   Úgraph_signaturer,  r-  Ú
state_dictrº   ÚparamÚbufferÚplaceholder_nodesÚlifted_inputsrî   Ú	node_nameÚparameter_nameÚbuffer_namer0  ÚoutputsÚmutated_outputsÚbuffer_mutationsÚuser_input_mutationsr<  rô   Úoutr»   Úunlifted_gms                            rˆ   Ú_unlift_graphrP  ’  s•  € ÷ ?ä˜C Ô$àIK€JØ×+Ñ+¸UÐ+ÓCò 
‰ˆˆeØ ˆ
�4ÑÙØØØØ×)Ñ)ö		
ð
ð ×)Ñ)¸5Ð)ÓAò 
‰ˆˆfØ!ˆ
�4ÑÙØØØØ×&Ñ&ö		
ð
ð Ÿ™×+Ñ+¨}Ð+Ó=ÐØ&(€Mð "ò 'ˆØ—I‘Iˆ	Ø˜×<Ñ<Ñ<Ø,×AÑAÀ)ÑLˆNØ× Ñ  Õ0Ø˜/×;Ñ;Ñ;Ø)×;Ñ;¸IÑFˆKØ× Ñ  Ô-ä& z°+Ñ'>Ó?ð �G‰GÔ4°[ÓAÒBð  × ;Ñ ;Ñ;Ð;Ð;Ø× Ñ  Õ&ð'õ -ä).¨r¯x©x×/CÑ/CÓ/E×/JÑ/JÈ1Ñ/MÓ)N€GØ€OØ&×8Ñ8ÐØ*×@Ñ@ÐØ#×1Ñ1€MÜ˜gÓ&ò 
&‰ˆˆSØ-1ˆà”Ð%Ó&¬Ð-AÓ)BÑBÄSÈÓEWÑWÒWÜ" 3§8¡8Ó,ˆDØÐ'Ñ'Ø(¨Ñ.‘ØÐ-Ñ-Ø,¨TÑ2�à×Ñ˜uÕ%ð
&ñ Ø
ØØÜ×ÑÓØó€Kô 1;Ð;K×;RÑ;RÓ;TÓ0U€K×ÑÐ,Ñ-ØÐrŠ   Fc              #  ó  K  — t        d„ | j                  j                  d¬«      D «       «      }t        «       }| j                  «       D ]@  \  }}||v sŒt	        |t
        j                  j                  «      sŒ0|j                  |«       ŒB |rl| j                  j                  dt
        j                  j                  j                  ¬«      D ]*  }|j                  |j                  d   j                  «       Œ, |E d {  –—†  y 7 Œ­w)Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrƒ   )rè   r©   s     rˆ   r¬   z&_get_subgraph_names.<locals>.<genexpr>å  s   è ø€ ò 5Øˆ��ñ5ùs   ‚r	  rÕ   ræ   rç   r   )rX   rÙ   rÚ   Únamed_childrenrÛ   rÇ   r   rS   r#  ré   rê   rë   Údiscardr�   rè   )rá   Úskip_invoke_subgraphÚall_subgraph_namesÚfx_subgraph_namesÚ
child_nameÚchild_modulerî   s          rˆ   Ú_get_subgraph_namesrZ  â  sð   è ø€ ô +5ñ 5ØŸ(™(×-Ñ-°Ð-Ó<ô5ó +Ðô *4«ÐØ$&×$5Ñ$5Ó$7ò .Ñ ˆ
�Lð Ð+Ò+´
Øœ%Ÿ(™(×.Ñ.õ1
ð ×!Ñ! *Õ-ð.ñ Ø—H‘H×'Ñ'Ø¤u§y¡y×'=Ñ'=×'MÑ'Mð (ó 
ò 	;ˆDð ×%Ñ% d§i¡i°¡l×&9Ñ&9Õ:ð	;ð
 !× Ò ús   ‚ADÁ$DÁ9BDÃ?DÄ Dc                óF  — t        ddd¬«      5  t        j                  s| cd d d «       S t        j                  }t        j                  }t        | «      D ]'  }t        | |«      }t        |d«      }t        | ||«       Œ) t        | |||«      cd d d «       S # 1 sw Y   y xY w)NÚ_recursive_pre_grad_passesTÚpre_grad_pass_time_us©Úlog_pt2_compile_eventÚdynamo_compile_column_usrŒ   )
r%   r   Úuse_pre_grad_passesÚadd_pre_grad_passesÚremove_pre_grad_passesrZ  rì   r\  r"  rj   )rá   Úexample_inputsÚ
add_passesÚremove_passesÚsubgraph_namerï   Únew_subgraphs          rˆ   r\  r\  ú  s¨   € ô 
Ø$Ø"Ø!8ô
ñ Nô
 ×)Ò)Ø÷Nñ Nô ×/Ñ/ˆ
Ü×5Ñ5ˆÜ0°Ó4ò 	5ˆMÜ˜r =Ó1ˆHä5°hÀÓCˆLÜ�B˜ |Õ4ð		5ô
 ˜r >°:¸}ÓM÷N÷ Nò Nús   �B«A"BÂB c                ó8  ‡ ‡‡— dˆ ˆˆfd„}t        ddd¬«      5  t        j                  s‰ cd d d «       S t        t	        ‰ ‰«      «      }|D ]
  } ||«       Œ t        ‰ ‰«      }t	        |d¬«      D ]  }||vsŒ ||«       Œ |cd d d «       S # 1 sw Y   y xY w)	Nc                óR   •— t        ‰| «      }t        |‰‰«      }t        ‰| |«       y rƒ   )rì   Ú_recursive_joint_graph_passesr"  )rg  rï   rh  rá   Úinput_devicerU  s      €€€rˆ   Ú_run_on_sub_graph_modulez?_recursive_joint_graph_passes.<locals>._run_on_sub_graph_module  s/   ø€ Ü˜2˜}Ó-ˆÜ4ØÐ*¨Ló
ˆô 	��M <Õ0rŠ   rk  TÚjoint_graph_pass_time_usr^  F)rU  )rg  r  r  ÚNone)r%   r   Úuse_joint_graph_passesrX   rZ  rg   )rá   rU  rl  rm  Úold_subgraph_namesrg  Úout_gms   ```    rˆ   rk  rk    s±   ú€ ÷
1ô 
Ø'Ø"Ø!;ô
ñ ô
 ×,Ò,Ø÷ñ ô (Ô(;¸BÐ@TÓ(UÓVÐØ/ò 	4ˆMÙ$ ]Õ3ð	4ô $ B¨Ó5ˆô 1°ÈeÔTò 	8ˆMØÐ$6Ò6Ù(¨Õ7ð	8ð ÷7÷ ò ús   šB¶ABÁ;BÂBc                óæ   — t        ddd¬«      5  t        j                  s
	 d d d «       y t        | «      D ]  }t	        | |«      }t        ||«       Œ t        | |«       d d d «       y # 1 sw Y   y xY w)NÚ_recursive_post_grad_passesTÚpost_grad_pass_time_usr^  )r%   r   Úuse_post_grad_passesrZ  rì   rt  rh   )rá   Úis_inferencerg  rï   s       rˆ   rt  rt  :  sz   € Ü	Ø%Ø"Ø!9ô
ñ +ô
 ×*Ò*Ø÷+ð +ô 1°Ó4ò 	@ˆMÜ˜r =Ó1ˆHÜ'¨°,Õ?ð	@ô 	˜˜\Ô*÷+÷ +ñ +ús   �A'ª4A'Á'A0Tc                óf  — ddl m}m}m}m}m}  || |||«      }	|€ |	«       nd}
t        t        |	j                  j                  «      d   j                  d   «      D ��ci c]  \  }}|j                  |“Œ }}}g }g }i }| j                  j                  D ]V  }|j                  |v r|j                  |«       Œ#|j                  |   |k(  sŒ6|j                  dk7  sŒF|j                  |«       ŒX |D ]B  }d|j                  z   } || ||€|
||j                        nd|«       ||j                     ||<   ŒD |ddd…   D ]X  }|j                  r/|j                  D ]  }|j                  |   |k(  rŒJ d|› d�«       ‚ Œ>| j                  j!                  |«       ŒZ | j#                  «        |	|fS c c}}w )	aÁ  
    This function takes an GraphModule input "gm".
    The gm will be split into 2 components,
      1) const_gm, which consists the subgraph of gm that can be constant folded.
      2) gm (being inplace modified,) which returns the graph after constant folding.

    If an additional "lifted_constants" argument is passed in, we will assume the gm has
    been lifted and run the transformation accordingly.

    When a "skip_folding_node_fn" callback is passed, we will skip constant folding on
    the nodes for which the callback returns True.

    const_output_index is a mapping of corresponding node name from gm to the
    output index of const_gm.
    Returns (const_gm, const_output_index)
    r   )ÚCONST_MODULE_TAGÚMETA_TAGÚ
MODULE_TAGÚreplace_node_with_constantÚrun_and_get_constant_graphNr
  r/  Ú_FOLDED_CONST_znode: z user not empty.)Ú torch._inductor.constant_foldingry  rz  r{  r|  r}  r=  r9  rÙ   r  r�   rº   rß   rÝ   rÖ   ÚusersÚ
erase_nodeÚ	recompile)rá   Úskip_constructorÚlifted_constant_namesÚskip_folding_node_fnry  rz  r{  r|  r}  Úconst_gmÚconst_resultrô   r«   Úconst_outputsÚto_erase_nodeÚto_replace_nodeÚconst_output_indexrî   Únew_const_nameÚns                       rˆ   Úsplit_const_gmrŽ  I  sâ  € ÷,õ ñ *Ø
ÐÐ3Ð5Ió€Hð "7Ð!>‘8”:ÀD€Lô #,¬E°(·.±.×2FÑ2FÓ,GÈÑ,K×,PÑ,PÐQRÑ,SÓ"T÷Ù˜˜Qˆ�‰�‰ð€Mñ ð €MØ€OØÐØ—‘—‘ò 'ˆØ�9‰9˜Ñ%Ø×"Ñ" 4Õ(Ø�Y‰Y�xÑ Ð$4Ó4¸¿¹ÀMÓ9QØ× Ñ  Õ&ð	'ð  ò FˆØ)¨D¯I©IÑ5ˆÙ"ØØð )Ð0ð ˜]¨4¯9©9Ñ5Ò6ààô		
ð .;¸4¿9¹9Ñ-EÐ˜>Ò*ðFð ™d ˜dÑ#ò &ˆØ�:Š:Ø—Z‘Zò W�Ø—v‘v˜hÑ'¨:Ó5ÐV¸À¸vÐEUÐ7VÓVÐ5ñWð �H‰H×Ñ Õ%ð&ð ‡L�L„NàÐ'Ð'Ð'ùóEs   Á F-c                óZ  — t         j                  j                  }t        |j                  j
                  |j                  j
                  |j                  j
                  |j                  j
                  g«      }|D ]­  }| j                  j                  d|¬«      D ]‹  }t        |j                  j                  dd «      t         j                  «      sŒ8|j                  d   j                  t         j                   k(  sŒc|j                  d   j"                  j$                  dk(  sŒŠ  y Œ¯ y)Nræ   rç   r×   rü   TF)rÇ   ré   ÚatenrX   ÚmmÚdefaultÚaddmmÚbmmÚbaddbmmrÙ   rÚ   rÛ   rÝ   r¯   rÞ   r   Úfloat32r  Útype)rá   r�  Útf32_opsrè   rî   s        rˆ   Úis_tf32_warning_applicabler™  ‘  sá   € Ü�9‰9�>‰>€DÜà�G‰G�O‰OØ�J‰J×ÑØ�H‰H×ÑØ�L‰L× Ñ ð		
ó€Hð ò ˆØ—H‘H×'Ñ'¨?À6Ð'ÓJò 	ˆDä˜4Ÿ9™9Ÿ=™=¨°Ó5´u·|±|ÕDØ—I‘I˜eÑ$×*Ñ*¬e¯m©mÓ;Ø—I‘I˜eÑ$×+Ñ+×0Ñ0°FÓ:âñ	ðð rŠ   c                ór  — t        d„ | D «       «      }t        j                  r=t        j                  r-|s+t        j                  d«       t        j                  d¬«      S t        j                  j                  r+t        j                  d«       t        j                  d¬«      S t        j                  «       S )z’
    For CPU backend, enable comprehensive padding causes some unit tests
    fail due to changing number of generated kernels. Skip for now.
    c              3  ó�   K  — | ]>  }t        |t        j                  «      sŒt        |j                  j
                  «      –— Œ@ y ­wrƒ   )rÛ   rÇ   rÞ   rK   r  r—  )rª   Úts     rˆ   r¬   z6maybe_disable_comprehensive_padding.<locals>.<genexpr>­  s/   è ø€ ò Ø"#¼ÀAÄuÇ|Á|Õ9TŒˆq�x‰x�}‰}×ñùs
   ‚A¢$Az!Skip comprehensive padding on CPUF)Úcomprehensive_paddingz;Skip comprehensive padding for use_runtime_constant_folding)Úanyr   Údisable_padding_cpur�  Úperf_hint_logÚinfoÚpatchÚaot_inductorÚuse_runtime_constant_foldingÚ
contextlibÚnullcontext)rd  Úhas_gpus     rˆ   Ú#maybe_disable_comprehensive_paddingr¨  ¦  sŽ   € ô ñ Ø'5ôó €Gô ×!Ò!¤f×&BÒ&BÉ7Ü×ÑÐ>Ô?Ü�|‰|°%Ô8Ð8Ü	×	Ñ	×	9Ò	9Ü×ÑØIô	
ô �|‰|°%Ô8Ð8ä×%Ñ%Ó'Ð'rŠ   c                ó^   — | s|rt        j                  d¬«      S t        j                  «       S )zH
    graph partition does not support cpp_wrapper and aot_mode yet.
    F)Úgraph_partition)r   r¢  r¥  r¦  )Úcpp_wrapperÚaot_modes     rˆ   Úmaybe_disable_graph_partitionr­  ½  s'   € ñ ‘hÜ�|‰|¨EÔ2Ð2ä×%Ñ%Ó'Ð'rŠ   c                ó¦  — t        «       5  t        |«      }|s;t        j                  j	                  d¬«      } t        | |¬«      j                  |Ž  n\|st        j                  «       n t        j                  j                  |dd«      }|5   t        | |¬«      j                  |Ž  ddd«       ddd«       |S # 1 sw Y   ŒxY w# 1 sw Y   S xY w)z}
    If we can not detect fake mode from the context of inputs, create one.

    The created fake mode will be returned.
    T©Úallow_non_fake_inputs)r�   r°  N)r   r$   rÇ   Ú_subclassesÚFakeTensorModerV   Ú	propagater¥  r¦  r   r¢  ÚobjectÚpropagate_dont_convert_inputs)rá   rd  Úforce_allow_non_fake_inputsÚ	fake_modeÚctxs        rˆ   Úfake_tensor_propr¹  É  sÊ   € ô 
"Ó	#ñ Ü$ ^Ó4ˆ	ÙÜ×)Ñ)×8Ñ8ÈtÐ8ÓTˆIØ8ŒN˜2 IÔ.×8Ñ8¸.ÒIñ 3ô ×&Ñ&Ô(ä—Z‘Z×&Ñ& yÐ2IÈ4ÓPð ð
 ñ ØP”˜r¨	Ô2×PÑPØ#ñ÷÷ð  Ð÷ð ú÷ð  Ðús$   ‹BCÂB:Â(CÂ:C	Â?CÃCc                ó€   — t        j                  | «      5  t        j                  «       cd d d «       S # 1 sw Y   y xY wrƒ   )r   r¢  Úget_config_copy)Úconfig_patchess    rˆ   Úget_patched_config_dictr½  è  s1   € ô 
�‰�nÓ	%ñ (Ü×%Ñ%Ó'÷(÷ (ò (ús   –4´=c               #  ó’   K  — t         j                  r#t        t        «       d¬«      5  d –— d d d «       y d –— y # 1 sw Y   y xY w­w)NF)ÚdirÚdelete)r   Úforce_disable_cachesrG   rD   rŒ   rŠ   rˆ   Úwith_fresh_cache_if_configrÂ  ï  s>   è ø€ ä×"Ò"ô œY›[°Ô7ñ 	Û÷	ð 	ô 	÷	ð 	üs   ‚&A¨;­A»AÁ A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<   y)Ú_CompileFxKwargszBoxedBool | NoneÚ
cudagraphsúSequence[int]Ústatic_input_idxsrž   Úis_backwardz
int | NoneÚgraph_idr«  r¬  rw  úbool | NoneÚ
layout_optz.Callable[[list[ExternKernelNode]], Any] | NoneÚextern_node_serializerzBoxedDeviceIndex | NoneÚboxed_forward_device_indexÚ
fx_wrapperú,Callable[..., dict[Any, Callable[..., Any]]]Úget_decomp_fnNr¡   rŒ   rŠ   rˆ   rÄ  rÄ  û  sI   … Ø Ó Ø$Ó$ØÓØÓØÓØƒNØÓØÓØJÓJØ 7Ó7ØÓØ?Ô?rŠ   rÄ  )Útotalc                  ó*   — e Zd Z	 d	 	 	 	 	 	 	 	 	 dd„Zy)Ú_CompileFxCallableNc                 ó   — y rƒ   rŒ   )Úselfrá   rd  Úcompile_region_namerŽ   s        rˆ   Ú__call__z_CompileFxCallable.__call__  s   € ð rŠ   rƒ   ©
rá   rS   rd  úSequence[InputType]rÖ  ú
str | NonerŽ   úUnpack[_CompileFxKwargs]r  rC   )r•   r–   r—   r×  rŒ   rŠ   rˆ   rÓ  rÓ  
  s<   „ ð
 +/ð	àðð ,ðð (ð	ð
 +ðð 
ôrŠ   rÓ  c                ó  — |j                  dd «       |j                  dd«       |j                  dd«       |j                  dd «       |j                  dd«       |j                  dd«       |j                  d	d«       |j                  d
d «       |j                  dd «       |j                  dd «       t        j                  «       5 }|d   r.|j                  t	        j
                  t        d¬«      «      «       |j                  t        j                  j                  j                  «       «       |j                  t        t        j                  «      «       |j                  t        j                  dddddd¬«      «       |j                  t!        «       «       |j                  t#        «       «       t%        j&                  d|d   ¬«        t)        t*        d¬«      | |fd|i|¤Žcd d d «       S # 1 sw Y   y xY w)NrÅ  rÇ  rŒ   rÈ  FrÉ  r«  rÎ  rw  rÍ  rË  rÌ  )Úlog_cudagraph_skipÚcompile_fx_innerÚinductor_compileTÚcompile_inductorÚ#inductor_cumulative_compile_time_us)Ú
phase_namer_  Úlog_waitcounterÚwaitcounter_name_overrider`  )rÈ  Úinductor)Úcompiler_namerÖ  )Ú
setdefaultr¥  Ú	ExitStackÚenter_contextr   r¢  Úget_cpp_wrapper_configrÇ   r   Ú_python_dispatchÚ_disable_current_modesr\   Údynamo_configÚuse_lazy_graph_moduler„   r%   rÂ  rd   r"   Úpt2_compiler    Ú_compile_fx_inner)rá   rd  rÖ  rŽ   Ústacks        rˆ   rÞ  rÞ    sÎ  € ð ×Ñ�l DÔ)Ø
×ÑÐ)¨2Ô.Ø
×Ñ�m UÔ+Ø
×Ñ�j $Ô'Ø
×Ñ�m UÔ+Ø
×Ñ�l EÔ*Ø
×Ñ�n eÔ,Ø
×ÑÐ2°DÔ9Ø
×Ñ�l DÔ)Ø
×ÑÐ.°Ô5ô 
×	Ñ	Ó	ð !
 5ð �-Ò Ø×ÑÜ—‘Ô3ÀuÔMÓNôð 	×ÑœEŸK™K×8Ñ8×OÑOÓQÔRØ×ÑÔ2´=×3VÑ3VÓWÔXØ×ÑÜ×%Ñ%Ø"Ø-Ø&*Ø $Ø*<Ø)Nôô		
ð 	×ÑÔ6Ó8Ô9Ø×ÑœL›NÔ+Ü×&Ñ&ØØ˜}Ñ-õ	
ð PÔ"Ô#4ÀJÔOØØñ
ð !4ð
ð ñ	
÷9!
÷ !
ò !
ús   Ã	D#G6Ç6G?zcompilation time (in seconds)r†   c                óÈ  ‡-‡.— t         j                  }ddlm}  |«       r&ddlm} |j                  «       }|j                  «        t        j                  j                  j                  j                  «        t        j                  | j                  «      dk(  r¤|s¢t        j                  j                   j"                  s~ddlm} ddlm}	 |	j-                  | «       t        j.                  j0                  j3                  «       }
t5        j6                  dd|
i|j8                  ¬«       t;        | j<                  «      S |j?                  d	d
«      }t@        jC                  d|«       tE        ||«      }tG        tI        tK        tM        | j                  jN                  «      «      «      jP                  d   tR        tT        f«      sJ d| j                  › �«       ‚|jW                  d«      €&tY        t         jZ                  j\                  «      |d<   t         j^                  rta        | |fd|i|¤Ž tc        jb                  «       }te        «       }tg        «        ti        d„ d„ tk        | «      D «       D «       «      }tm        ddd¬«      5  t         jn                   xrD t         jp                  xs |xr. | xr) |xr% t        j                  j                   j"                   }t         jp                  }|}ts        d|«       tt        jC                  d||||t         jn                  «       tw        |«      D ]L  \  }}tG        |t        jx                  «      sŒ!t{        |j|                  j~                  «      sŒA||v sŒFd|_@        ŒN d}d}dŠ-d}tƒ        | «      }tc        j„                  «       }|r©t‡        jˆ                  | ||||«      \  }Š-|�v|\  }}tt        jC                  d|«       |r)t‡        jŠ                  «       }tt        jC                  d«       t‡        jŒ                  ||||||jW                  dd«      |¬«      \  }Š-ntt        jC                  d«       t        j                  j                   j"                  rp|�J ‚‰-�J ‚t�        j�                  «        	 t“        | ||fd|i|¤Ž}|€J ‚t�        j”                  «       \  }}|j—                  |«       	 t�        j¦                  «        �n�‰-�‰-d   dk(  rA|�J ‚tt        jC                  d‰-�‰-jW                  d d!«      nd"«       	 t“        | ||fd|i|¤Ž}�nE‰-d   d#k(  �r|�J ‚|€J ‚tt        jC                  d$«       t�        j�                  «        	 t“        | ||fd|i|¤Ž}|€J ‚tc        j„                  «       |z
  |_T        |\  }}||_U        ||_V        t�        j”                  «       \  }}|j—                  |«       	 t�        j¦                  «        |�t¯        |«      ‰-d%<   |j¨                  ‰-d&<   tt        jC                  d'|«       t‡        j°                  |||||«       n;‰-d   d(k(  sJ ‚|€J ‚|€J ‚|\  }}tt        jC                  d)|«       ||_U        ||_V        |€J ‚|} tG        | t²        «      r|| _Z        ‰-�‰-d   nd*Š.‰-rt·        ‰-«      ni }!t5        j¸                  d+‰.› �|!|¬,«       t5        jº                  d-‰.|‰-r‰-jW                  d.«      nd‰-r‰-jW                  d/«      nd‰-r‰-jW                  d «      nd0||¬1«       ‰-�t½        d2ˆ.fd3„ˆ-fd4„¬5«       | j¿                  |||«       t         jÀ                  }"|"�|"jÃ                  | «      } ddd«       tt        jC                  d6tc        jb                  «       |z
  «       tt        jÅ                  tÆ        jÈ                  «      �rªg }#tÊ        d7   jÍ                  «       D ]ý  \  }}$|jÏ                  d8«      }%tÑ        |%«      d9k  r|#jÓ                  |d:d;d;d;|$g«       Œ=tÑ        |%«      d<k\  rd8jÕ                  |%dd= «      nd8jÕ                  |%dd> «      }&|&j×                  d?«      }'|'rDtÑ        |%«      d<k\  r6|%d=d \  }(})}*}+d8jÕ                  |%dd= «      }&|#jÓ                  |&|(|)|*|+|$g«       ŒÊ|%d>d \  })}*}+d8jÕ                  |%dd> «      }&|#jÓ                  |&d:|)|*|+|$g«       Œÿ tt        jÙ                  d@«       tt        jÙ                  dAjÛ                  dBdCdDdEdFdG«      «       tt        jÙ                  dH«       |#D ]9  },tt        jÙ                   dAjÚ                  |,Ž «       tt        jÙ                  dH«       Œ; t        j                  j                  j                  j                  «         tÝ        «       tÆ        jÈ                  dI|d   rdJndK› dL|dM   › �«        S # t˜        tš        f$ r ‚ tœ        $ r3}tŸ        |t¡        «       «      j£                  |j¤                  «      d‚d}~ww xY w# t�        j¦                  «        w xY w# tœ        $ r3}tŸ        |t¡        «       «      j£                  |j¤                  «      d‚d}~ww xY w# t˜        tš        f$ r ‚ tœ        $ r3}tŸ        |t¡        «       «      j£                  |j¤                  «      d‚d}~ww xY w# t�        j¦                  «        w xY w# 1 sw Y   �ŒsxY w)NzÈ
    Inductor API that compiles a single graph.

    If you change the argument list for this function, make sure you
    also update the call to save_args_for_compile_fx_inner below accordingly.
    r   )Úuse_pipelined_autotuning)ÚAutotuneProcessPool)ÚCompileEventLogLevel)Ú_LazyGraphModulezbackward no-opÚ
compile_id)ÚmetadataÚ	log_levelrÇ  rŒ   z&static input idxs compile_fx_inner: %szGinductor can only compile FX graphs which return a tuple/list, but got rÅ  NrÖ  c              3  ó8   K  — | ]  }|�|j                   –— Œ y ­wrƒ   )Úsupports_caching)rª   Úbackends     rˆ   r¬   z$_compile_fx_inner.<locals>.<genexpr>–  s&   è ø€ ò 	#àð Ðð 	× Õ ñ	#ùs   ‚c              3  ó‚   K  — | ]7  }t        |j                  t        j                  t        j                  «      –— Œ9 y ­wrƒ   )rb   r—  r   r«  rÎ  ©rª   r  s     rˆ   r¬   z$_compile_fx_inner.<locals>.<genexpr>˜  s6   è ø€ ò 
ð ô +Ø—‘œV×/Ñ/´×1BÑ1B÷ñ
ùs   ‚=?Úfx_codegen_and_compileT)r_  rã  Úfx_cachezXFX cache status: use_cache=%s, local=%s, remote=%s, aot_mode=%s, force_disable_caches=%szFX cache key generated: %szUsing remote FX cacherÈ  F)rÈ  Ú	constantszFailed to generate FX cache keyÚcache_stateÚbypasszFX cache bypass reason: %sÚcache_bypass_reasonÚunknownz*FX cache disabled or key generation failedÚmissz,FX cache miss, compiling and saving to cacheÚtriton_bundler_metaÚtime_taken_nsz.Saving compiled graph to FX cache with key: %sÚhitzFX cache hit with key: %sÚdisabledÚfx_graph_cache_)rø  Útime_nsrß  r  Ú
componentszcache not enabled)r  Úcache_event_timer  r  r  Úremote_cache_enabledÚlocal_cache_enabledÚartifactc                 ó   •— d‰ › �ddœS )Nr  Újson©rº   ÚencodingrŒ   )r  s   €rˆ   ú<lambda>z#_compile_fx_inner.<locals>.<lambda>  s   ø€ Ø-¨k¨]Ð;Ø &ñ%€ rŠ   c                 ó.   •— t        j                  ‰ «      S rƒ   )r  Údumps)Ú
cache_infos   €rˆ   r  z#_compile_fx_inner.<locals>.<lambda>ƒ  s   ø€ ¤4§:¡:¨jÓ#9€ rŠ   ©Úmetadata_fnÚ
payload_fnz%FX codegen and compilation took %.3fsÚaten_mm_infoÚ_é   ú-ú?é   éüÿÿÿéýÿÿÿ)r”  r•  z$Overview info of inductor aten mms: z3{:<30} | {:<20} | {:<20} | {:<20} | {:<20} | {:<20}ÚNameÚBÚMÚNÚKÚCountz‚----------------------------------------------------------------------------------------------------------------------------------ztorchinductor done compiling Ú	BACKWARDSÚFORWARDSú graph rÉ  )orx   Úaot_compilationÚ torch._inductor.autotune_processró  rô  Úget_instanceÚwarm_uprÇ   Ú	_inductorÚasync_compileÚCompiledTritonKernelsÚcache_clearr„   Úcount_callsrÙ   Ú
_functorchr   Úbundled_autograd_cacheÚtorch._dynamo.utilsrõ  Útorch.fx._lazy_graph_modulerö  Úforce_recompilerÈ   ÚCompileContextÚcurrent_compile_idr"   Úlog_instant_eventÚPT2_COMPILEr0   Úforwardrç  Ústatic_inputs_logÚdebugÚget_input_idxs_to_checkrÛ   ÚnextÚiterÚreversedr  r�   r9  rË   r¯   rE   ÚtritonrÅ  Ú	save_argsr<   ÚtimerM   rc   ÚallrH   r%   rÁ  Úfx_graph_cacher+   r¼   r=  rÞ   rK   r  r—  Ú_is_inductor_staticr?   r  r3   Úprepare_keyÚget_remote_cacheÚload_with_keyrn   Úbegin_compilerÿ  ÚcollectÚset_triton_bundlerZ   r[   Ú	Exceptionrf   r	   Úwith_tracebackÚ__traceback__Úend_compileÚ_time_taken_nsÚ_fx_graph_cache_keyÚ_fx_graph_cache_debug_linesr  Ú_save_graphr>   rÖ  ÚdictÚinstantÚtry_add_pt2_compilerQ   Úpost_compileÚcudagraph_policyÚwrap_outputÚisEnabledForr   ÚINFOr#   Úitemsr  rò   rß   r¶   Úendswithr¡  Úformatrø   )/rá   rd  rÖ  Úgraph_kwargsr¬  ró  rô  Úpool_instancerõ  rö  r÷  rÇ  Úinputs_to_checkÚstartÚfx_graph_remote_cacheÚbackends_support_cachingÚ	use_cacheÚlocalÚremoter  ÚinputÚmb_compiled_graphÚkey_infoÚremote_cacher  Ú
start_timer  Údebug_linesÚtriton_bundler  ÚeÚ	cache_keyÚcompiled_graphÚcache_event_metadataÚpolicyÚmm_table_datar»   Úpartsrº   Ú
is_batchedÚbatchÚmr�  ÚkÚrowr  r  s/                                                @@rˆ   rð  rð  M  sÚ
  ù€ ô ×&Ñ&€HåIáÔ!åHà+×8Ñ8Ó:ˆØ×ÑÔô 
‡O�O×!Ñ!×7Ñ7×CÑCÔEô 	× Ñ  §¡Ó*¨aÒ/ÙÜ× Ñ ×'Ñ'×>Ò>õ 	=Ý@à×(Ñ(¨Ô,Ü—]‘]×1Ñ1×DÑDÓFˆ
Ü×,Ñ,ØØ" JÐ/Ø*×6Ñ6õ	
ô ˜rŸz™zÓ*Ð*à'3×'>Ñ'>Ð?RÐTVÓ'WÐÜ×ÑÐDÐFWÔXÜ-¨nÐ>OÓP€Oä”dœ4¤¨¯©¯©Ó 8Ó9Ó:×?Ñ?ÀÑBÄUÌDÀMÔRð Ø
QÐRT×RZÑRZÐQ[Ð\óÐRð ×Ñ˜Ó%Ð-Ü%.¬v¯}©}×/GÑ/GÓ%Hˆ�\Ñ"Ü×ÒÜ&ØØñ	
ð !4ð	
ð ò		
ô �I‰I‹K€Eä<Ó>Ðô ÔÜ"ñ 	#ñ
ô *¨"Ó-ô	
ô	#ó 	 Ðô 
Ø ¸Èdô
ñ h@ô ×+Ñ+Ð+ò CÜ×&Ñ&Ò?Ð*?òCà�òCð )òCô ×$Ñ$×+Ñ+×BÑBÐBð 	ô ×%Ñ%ˆØ&ˆÜ˜
 IÔ.ä�	‰	ØfØØØØÜ×'Ñ'ô	
ô " .Ó1ò 	1‰HˆAˆuä˜5¤%§,¡,Õ/Ü˜5Ÿ<™<×,Ñ,Õ-ØÐ*Ò*à,0�Õ)ð	1ð 04ÐØˆØˆ
ØˆÜ2°2Ó6ˆ	ô —\‘\“^ˆ
áÜ%1×%=Ñ%=Ø�N L°/À6ó&Ñ"ˆX�zð
 Ð#Ø#+Ñ ��[Ü—	‘	Ð6¸Ô<ÙÜ#/×#@Ñ#@Ó#B�LÜ—I‘IÐ5Ô6Ü0<×0JÑ0JØØØ"ØØ Ø ,× 0Ñ 0°ÀÓ FØ'ô1Ñ-Ð!¡:ô —	‘	Ð;Ô<ä×Ñ×"Ñ"×9Ò9Ø$Ð,Ð,Ð,ØÐ%Ð%Ð%ô
 ×'Ñ'Ô)ð,Ü$:ØØ"Ø#ñ%ð )<ð	%ð
 #ñ%Ð!ð )Ð4Ð4Ð4ô "×)Ñ)Ó+ñØ!Ø'à!×3Ñ3°MÕBô ×)Ñ)Ö+ð
 Ð :¨mÑ#<ÀÒ#HØ$Ð,Ð,Ð,Ü�I‰IØ,ð "Ð-ð —N‘NÐ#8¸)ÔDàEôðÜ$:ØØ"Ø#ñ%ð )<ð	%ð
 #ñ%Ò!ð ˜Ñ&¨&Ó0Ø$Ð,Ð,Ð,ØÐ'Ð'Ð'Ü�I‰IÐDÔEÜ×'Ñ'Ô)ð,Ü$:ØØ"Ø#ñ%ð )<ð	%ð
 #ñ%Ð!ð )Ð4Ð4Ð4Ü37·<±<³>ÀJÑ3NÐ!Ô0Ø)1Ñ&�	˜;Ø8AÐ!Ô5Ø@KÐ!Ô=ô "×)Ñ)Ó+ñØ!Ø'à!×3Ñ3°MÕBô ×)Ñ)Ô+Ø"Ð.Ü47Ð8KÓ4L�
Ð0Ñ1Ø*;×*JÑ*JˆJ�Ñ'Ü�I‰IÐFÈ	ÔRÜ×$Ñ$ØØ!ØØØõð ˜mÑ,°Ò5Ð5Ð5Ø$Ð0Ð0Ð0ØÐ'Ð'Ð'Ø'/Ñ$ˆY˜Ü�I‰IÐ1°9Ô=Ø4=ÐÔ1Ø<GÐÔ9à Ð,Ð,Ð,Ø*ˆÜ�n¤oÔ6Ø1DˆNÔ.ð *4Ð)?ˆJ�}Ò%ÀZð 	ñ DN¬t°JÔ/?ÐSUÐÜ×"Ñ"Ø˜k˜]Ð+Ø)Øõ	
ô 	×.Ñ.ØØ#Ø'Ù)3�
—‘˜uÔ%¸Ù7A�z—~‘~ lÔ3Àtñ ð —‘Ð4Ô5à(à!'Ø %õ	
ð  Ð!ÜØóó :õð 	×#Ñ# N°I¸|ÔLä×(Ñ(ˆØÐØ#×/Ñ/°Ó?ˆN÷Qh@ôT ‡I�IÐ5´t·y±y³{ÀUÑ7JÔKô ×ÑœŸ™Õ%ØˆÜ" >Ñ2×8Ñ8Ó:ò 	B‰JˆC�Ø—I‘I˜c“NˆEÜ�5‹z˜AŠ~à×$Ñ$ c¨3°°S¸#¸uÐ%EÔFØô ,/¨u«:¸ª?�3—8‘8˜E # 2˜JÔ'ÀÇÁÈÈsÐPRÈÓ@TˆDØŸ™Ð'9Ó:ˆJáœc %›j¨Ašoà!& r s ‘��q˜!˜QØ—x‘x  c r 
Ó+�Ø×$Ñ$ d¨E°1°a¸¸EÐ%BÕCð    ˜*‘��1�aØ—x‘x  c r 
Ó+�Ø×$Ñ$ d¨C°°A°q¸%Ð%@ÕAð)	Bô, 	�‰Ð7Ô8Ü�‰ØA×HÑHØ˜˜S # s¨Góô	
ô
 	�‰�ÔØ ò 	 ˆCÜ�H‰HÐQÐJ×QÑQÐSVÐWÔXÜ�H‰H�YÕð	 ô 
‡O�O×!Ñ!×7Ñ7×CÑCÔEà„LƒNÜ�‰Ø'Ø& }Ò5‰;¸:Ð
Fð GØ˜jÑ)Ð*ð	,ôð ÐøôE %¤iÐ0ò ØÜò Ü# A¤|£~Ó6×EÑEØ—O‘Oóàðûðûô
 ×)Ñ)Õ+ûô. ò Ü# A¤|£~Ó6×EÑEØ—O‘Oóàðûðûô: %¤iÐ0ò ØÜò Ü# A¤|£~Ó6×EÑEØ—O‘Oóàðûðûô
 ×)Ñ)Õ+ú÷uh@ñ h@ús§   ÊC	kÍkÍ0kÍ5DkÒ<g
ÓAkÔh1Ô-<kÕ*A+i0×Fkç
hç".hèhèhèh.è.kè1	i-è:.i(é(i-é-ké0j;ê.j6ê6j;ê;j>ê>këkëk!c                  ó$   — e Zd ZU dZded<   dd„Zy)Ú_FxCompileStatr   r  Úcodegen_and_compilec                ó    — d| j                   › �S )Nzcodegen_and_compile: )r„  ©rÕ  s    rˆ   Ú__repr__z_FxCompileStat.__repr__Â  s   € Ø& t×'?Ñ'?Ð&@ÐAÐArŠ   N)r  r  )r•   r–   r—   r„  r¢   r‡  rŒ   rŠ   rˆ   rƒ  rƒ  ¾  s   … à Ð˜Ó ôBrŠ   rƒ  c                  ór   — e Zd ZU dZ ee«      Zded<   dZded<   e		 	 	 	 	 	 	 	 	 	 d	d„«       Z
ed
d„«       Zy)Ú	FxCompileza
    An FxCompile represents a mechanism that can turn a GraphModule into an
    OutputCode.
    z%dict[type[FxCompile], _FxCompileStat]Ú_compile_statsNrÚ  rÖ  c                 ó   — y rƒ   rŒ   )rÕ  rá   rd  rh  rf  s        rˆ   r„  zFxCompile.codegen_and_compileÓ  s   € ð rŠ   c                ó8   — | j                   j                  «        y rƒ   )rŠ  Úclear)Úclss    rˆ   Ú_reset_statszFxCompile._reset_statsÜ  s   € à×Ñ× Ñ Õ"rŠ   ©
rá   rS   rd  rÙ  rh  rÆ  rf  rÄ  r  rC   ©r  ro  )r•   r–   r—   Ú__doc__r   rƒ  rŠ  r¢   rÖ  r   r„  Úclassmethodr�  rŒ   rŠ   rˆ   r‰  r‰  Æ  s}   … ññ =HÈÓ<W€NÐ9ÓWØ&*Ð˜Ó*ð
 ðàðð ,ðð 'ð	ð
 'ðð 
òó ðð ò#ó ñ#rŠ   r‰  c                  ó2   — e Zd Ze	 	 	 	 	 	 	 	 	 	 dd„«       Zy)Ú_InProcessFxCompilec                ó!  ‡‡4‡5‡6‡7‡8— d|v r|d   €J ‚|d   }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }	|j                  d	d«      }
t        j                  }|j                  d
d«      }|j                  dd«      }|j                  dt        «      }t	        d«      j                  «       5  t        j                  «       5  t        j                  x}�,ddl
}t        j                  d|«        |j                  |«       t        ‰«      r
t        «        t         d   j#                  «       }t%        j&                  t)        t%        j*                  «       d«      «        t-        «       t.        j0                  d|rdnd› d|› �«       t3        j4                  «       }t6        j8                  j:                  j<                  j?                  |‰|dd¬«       |jA                  «       Š8tC        dd„ ˆ8fd„¬«       t        jD                  jG                  ‰|«       ‰jH                  }|€tK        |«      }tM        ‰«       tO        dd¬«      5  t7        jP                  «       5  tS        ‰|«      }ddd«       ddd«       tU        ‰«       tC        dd„ ˆfd„¬«       t        jV                  «      5  tY        ‰«      }|5  t[        ‰|¬ «       ddd«       t        jD                  j]                  ‰|«       t^        jE                  d!ta        d"‰ddd¬#«      «       ‰jc                  dddd¬$«      Š5tC        dd%„ ˆ5fd&„¬«       t        jd                  jf                  dk7  r~t6        jh                  jj                  jm                  ‰jn                  «      }tq        t6        jr                  jD                  jt                  |«      t6        jr                  jD                  _;        ty        «       }|j{                  «       r.t         d'   j}                  «       }t        j€                  d|¬(«       t        j‚                  «       r 	 t…        d)t‡        t‰        «       «      i¬*«       ddd«       t        jV                  |«      5  t�        |«      5  t�        |	|«      5  d}d}d}d}|rªt        j�                  j’                  r�t•        ‰d,„ ¬-«      \  }}t—        |g |||	||||d|
|¬.«      }t        j˜                  |«      5  t        jš                  g «      5  |	sJ d/«       ‚|j�                  «        |jŸ                  «       \  }}ddd«       ddd«       t—        ‰f||||	||||||r|j                   nd|r|j                   nd|||
|d0œŽ}t£        j¤                  «       }|j§                  «        t        j˜                  |«      5  t        jš                  g «      5  t©        jª                  «       5   |jœ                  |Ž  g } |j¬                  �­t¯        «       Š7|j¬                  D ]”  }!t±        |!t²        «      rq|!jµ                  «       rat·        t¹        |!j»                  «       «      «      dk(  r<| j½                  t¿        ˆ7fd1„|!jÁ                  «       jÂ                  D «       «      «       Œ„| j½                  d«       Œ– tÅ        |«       d}"tO        d2d¬«      5  |jÆ                  r_|jÈ                  rS|jÊ                  rJ ‚|jÍ                  «       d   jÎ                  }#tÑ        jD                  d3|#jc                  d¬4«      «       �n…|jÆ                  �rOd5d6limj}$ |jÊ                  sJ d/«       ‚|jŸ                  «       \  }%}&tÑ        jD                  d7|%j                   «       |&j                   r tÑ        jD                  d8|&j                   «       d}'t        jÖ                  r5|jÙ                  t        jÖ                  «      }'tÑ        jD                  d9|'«       tO        d:d¬«      5  |$jÛ                  ||%j                   |&j                   |'|jÜ                  g tÞ        já                  |jâ                  jä                  |r|jâ                  jä                  ng z   «      ¢¬;«      }#ddd«       n)|jç                  «       }(|(jè                  }#të        |(d<d«      }"ddd«       dŠ6dŠ4t        jd                  jf                  dk7  rÄtí        jî                  t6        jr                  jD                  jñ                  «       «      Š6tí        jî                  t6        jr                  jD                  jò                  «      Š4tC        dd=„ ˆ6fd>„¬«       tC        dd?„ ˆ4fd@„¬«       ‰4r,ty        «       }|j{                  «       r|jõ                  dA‰4«       d})tö        jù                  t.        j0                  «      r{|jû                  «       \  }*}+})t¢        xjü                  |*z  c_~        t¢        xjþ                  |)z  c_        t¢        x�j                   |+z  c_€        tö        �j                  dB|*|+|)dCœ«       t        �j                  r>|jû                  «       \  },},})t6        jr                  jD                  �j                  |)«       t6        jr                  jD                  �j	                  |�j
                  �j                  «       |�rMt        �j                  �j                  �r0t        �j                  �st        jn                  �j                  �st7        jr                  �j                  �j                  |Ž rÚd}-‰jn                  �j                  D ]—  }.|.�j                  j                  dDd«      }/|.�j                  dEk(  sFt±        |/t6        �j                  «      r+t6        jr                  �j                  �j                  |/«      sŒw|.�j                  j                  dFd«      x}-sŒ— n dG}0|-r	|0› dH|-› dI�}0n|0› dI�}0|0t        jn                  _Š        |r†t        �j                  sut        jn                  �j                  sZ�t!        ‰«      }1|1rLdJ|1�j"                  › �}0|1�j                  j                  dFd«      x}-r|0› dH|-› dI�}0|0t        jn                  _Š        t        j                  r¢t±        #t†        �t$        t6        jh                  �j&                  f«      sJ �t)        |#«      «       ‚�t+        |#|jÜ                  ¬K«      cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       S |rUt        jn                  �j                  s:ddLl–m—}2  |2t        jn                  �j0                  «      t        jn                  _Š        | �j2                  �t)        | «         x�j4                  d5z  c_š        t6        jr                  jD                  �j6                  r”t6        jr                  jD                  �j8                  �ot‡        t6        �j:                  �j<                  �j?                  «       «      }3|j                  d«      }|�(|3t6        jr                  jD                  �j8                  |<   �tA        #|‰| t        jn                  �j                  |�jC                  «       t         d   |z
  |||| �jD                  ||‰8‰5|"‰6‰4«      cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       S # 1 sw Y   �ŒËxY w# 1 sw Y   �ŒÐxY w# 1 sw Y   �Œ‡xY w# tŠ        $ r t        j                  d+«       Y �Œ)w xY w# 1 sw Y   �Œ/xY w# 1 sw Y   �
ŒaxY w# 1 sw Y   �
ŒfxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒxY w# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)MzS
        Generates the OutputCode from the GraphModule and example_inputs.
        rÅ  NrÇ  rŒ   rÈ  FrÉ  r«  rÎ  rw  rÌ  rÐ  z/pytorch.wait_counter.actual_codegen_and_compiler   z3Sleeping for %s since sleep_sec_TESTING_ONLY is setrå  iÐ  ztorchinductor compiling r+  r,  r-  )Úsave_dirr  c                 ó   — dddœS )NÚfx_graph_runnableÚstringr  rŒ   rŒ   rŠ   rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>%  s   € Ø/Ø (ñ%€ rŠ   c                 ó   •— ‰ S rƒ   rŒ   )Úrunnable_graph_strs   €rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>)  s   ø€ Ð#5€ rŠ   r  Úadditional_fake_tensor_propT©r_  c                 ó   — dddœS )NÚbefore_post_grad_graphrš  r  rŒ   rŒ   rŠ   rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>X  s   € Ø4Ø (ñ%€ rŠ   c                 ó,   •— ‰ j                  ddd¬«      S ©NFT©Úprint_outputÚinclude_strideÚinclude_device©Úprint_readable©rá   s   €rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>\  s   ø€  2×#4Ñ#4Ø!&°tÈDð $5ó $€ rŠ   ©rw  ú%szAFTER POST GRAD©r¥  r¦  Úcolored)r¤  r¥  r¦  Úfast_sympy_printc                 ó   — dddœS )NÚinductor_post_grad_graphrš  r  rŒ   rŒ   rŠ   rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>~  s   € Ø :Ø$,ñ)€ rŠ   c                 ó   •— ‰ S rƒ   rŒ   )Úinductor_post_grad_graph_strs   €rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>‚  s   ø€ Ð'C€ rŠ   Úgraph_break)Ú	overwriteÚnum_graph_breaksÚpt2_configs)Úextra_loggingzfailed to log pt2_configsc                óê   — | j                   dk(  xrc t        | j                  t        «      xrG | j                  j	                  d«      xs* t        | j
                  j                  dd «      t        «      S )Nr	  r  r×   )rÖ   rÛ   rè   r  r±   rÝ   r¯   rO   )rî   s    rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>°  s_   € ¸$¿'¹'ÀZÑ:Oò ;Ü& t§{¡{´CÓ8ò;ð !ŸK™K×2Ñ2Ð3CÓDò XÜ)¨$¯)©)¯-©-¸¸tÓ*DÔFVÓWð	 rŠ   )r…  )rd  Ú	shape_envrÉ  r«  r¬  rÌ  rw  rÈ  Úis_const_graphrÎ  rÐ  z"AOT mode only supports C++ wrapper)rd  r¹  rÉ  r«  r¬  rÌ  rw  rÈ  r‹  Úconst_wrapper_codeÚconst_kernel_codeÚconst_modulerh  rÎ  rÐ  c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrƒ   )Údoprint)rª   ÚsÚps     €rˆ   r¬   z:_InProcessFxCompile.codegen_and_compile.<locals>.<genexpr>  s   øè ø€ Ò)X¸1¨!¯)©)°A¯,Ñ)Xùs   ƒzGraphLowering.compile_to_fnzOutput graph module: 
%s)r¤  r_   )ÚAotCodeCompilerzOutput wrapper code: 
%szOutput kernel code:
%sz#Serialized Extern Kernel Nodes: 
%szAotCodeCompiler.compile)Údevice_typeÚadditional_filesÚrunnerc                 ó   — dddœS )NÚ*inductor_provenance_tracking_node_mappingsr  r  rŒ   rŒ   rŠ   rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>Z  s   € Ø(TØ,2ñ1€ rŠ   c                 ó   •— ‰ S rƒ   rŒ   )rÇ  s   €rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>^  s   ø€ Ð/Y€ rŠ   c                 ó   — dddœS )NÚ0inductor_provenance_tracking_kernel_stack_tracesr  r  rŒ   rŒ   rŠ   rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>b  s   € Ø(ZØ,2ñ1€ rŠ   c                 ó   •— ‰ S rƒ   rŒ   )Úinductor_kernel_stack_trace_strs   €rˆ   r  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>f  s   ø€ Ð/N€ rŠ   Úinductor_provenancezGraph Metrics:
%s)Únum_bytes_accessedÚnodes_num_elemÚnode_runtimesr×   r/  Ústack_tracezWgraph with symbolic shapes inputs and config.triton.cudagraph_skip_dynamic_graphs=True.z Found from ú
z,disabling cudagraphs due to incompatible op )ÚfilenamerÃ  )Ú check_lowering_disable_cudagraph)£r¯   rx   r.  re   rW   Úguardr„   Úpreserve_rng_stater   Úsleep_sec_TESTING_ONLYrI  r¼   ÚwarningÚsleepr™  r  r#   ÚcopyÚsysÚsetrecursionlimitr  Úgetrecursionlimitrø   r   rb  ÚioÚStringIOrÇ   Ú_dynamoÚreproÚ	after_aotÚsave_graph_reproÚgetvaluerQ   rB  Úfx_graphr¹  rw   ri   r%   Úno_gradr¹  rí   Úset_fake_modeÚget_cuda_device_contextrt  Úfx_graph_transformedÚpost_grad_graphs_logr*   r¨  ÚtraceÚprovenance_tracking_levelr   Ú	tracebackÚget_graph_provenance_jsonrÙ   r;   r2  Ú_pre_grad_graph_idÚ _inductor_post_to_pre_grad_nodesr(   Úin_progressrÑ  r"   Úcompilation_metricÚ	is_fbcoder�   r  r½  rS  r¨  r­  r£  r¤  rŽ  rk   Úset_graph_handlerÚset_extern_kernel_nodesÚrunÚcodegen_with_cpp_wrapperr»   ra   ÚCachedMetricsHelperÚfreeze_runtime_assertsr`   Úgraph_contextÚgraph_outputsrU   rÛ   rm   Úhas_tensor_outputrò   rT   Ú
get_striderß   r9  Ú
get_layoutrà   Ú_check_triton_bf16_supportr¬  rÎ  r«  Úcodegenrá   r4   Ú	codecacherÂ  Úextern_kernel_nodesrÌ  ÚcompilerÃ  r[  ÚfromkeysÚwrapper_coderÄ  Úcompile_to_moduleÚcallrì   r  r  Údump_inductor_provenance_infoÚ_inductor_kernel_stack_traceÚ
add_to_setÚinductor_metrics_logra  Úcount_bytesrÎ  rÐ  rÏ  r¡  Úlog_tlparseÚlog_runtime_and_tensor_metaÚlog_collective_scheduleÚ	schedulerr  rG  Úcudagraph_skip_dynamic_graphsrª  Údisable_cudagraphs_reasonr   Úany_is_symbolicrÝ   rÖ   rÞ   rs   rè   rË   rS   r—  r=   Útorch._inductor.cudagraph_utilsrÔ  Údevice_node_mappingrŠ  r„  ÚRECORD_GRAPH_EXECUTIONÚGRAPH_COMPILE_IDSrÈ   r<  r=  r>   Ú
get_deltasrÖ  )9rÕ  rá   rd  rh  rf  rÅ  rÇ  rÈ  rÉ  r«  rÎ  r¬  rw  rÌ  rÐ  Ú	sleep_secrI  Úinductor_countersÚfdr¹  r·  Úcuda_contextÚprovenance_tracking_jsonÚmetrics_contextrµ  r‹  Úconst_graphr»  r¼  r†  rÙ   Úmetrics_helperrâ   rN  Úcompiled_fn_runnerÚcompiled_fnrÂ  r  Úkernel_codeÚserialized_extern_kernel_nodesÚcompiled_modulerÐ  Ú	num_bytesrÏ  r  rÑ  rî   Úmeta_valÚdisableÚmaybe_incompat_noderÔ  r÷  rÌ  r²  rÇ  rÁ  rœ  s9    `                                                  @@@@@rˆ   r„  z'_InProcessFxCompile.codegen_and_compileâ  s÷  ý€ ð  ˜|Ñ+°¸\Ñ0JÐ0VÐVÐVØ ,¨\Ñ :ˆ
Ø+7×+;Ñ+;Ð<OÐQSÓ+TÐØ(×,Ñ,¨]¸EÓBˆØ+×/Ñ/°
¸DÓAˆØ(×,Ñ,¨]¸EÓBˆØ'×+Ñ+¨L¸%Ó@ˆ
Ü×*Ñ*ˆØ)×-Ñ-¨n¸eÓDˆà×ÑÐ5°tÓ<ð 	ð GS×FVÑFVØÔ0óG
ˆô ÐJÓK×QÑQÓSñw	ä×+Ñ+Ó-ñw	ô $×:Ñ:Ð:�	ÐGÛä—‘ØIÈ9ôð �—
‘
˜9Ô%ä)¨"Ô-Ü#Ô%ä (¨Ñ 4× 9Ñ 9Ó ;Ðô ×!Ñ!¤#¤c×&;Ñ&;Ó&=¸tÓ"DÔEàŒL‹NÜ—‘Ø*Ù"-‘;°:Ð>ð ?Ø!˜
ð$ôô —‘“ˆBÜ�M‰M×Ñ×)Ñ)×:Ñ:Ø�B˜¨
¸Tð ;ô ð "$§¡£ÐäØñó 6õô �G‰G×Ñ˜R Ô0ð
 Ÿ™ˆIØÐ Ü1°.ÓA�	ô$ ˜BÔäØ-ÀTôñ Eô —]‘]“_ñ EÜ 0°°^Ó D�I÷E÷Eô 6°bÔ9ô
 Øñóõ	ô —‘ Ó+ñ ?Aä6°rÓ:�Ø!ñ OÜ/°ÀÕN÷Oä—‘×,Ñ,¨R°Ô@Ü$×*Ñ*ØÜ*Ø)ØØ'+Ø'+Ø $ôô	ð 02×/@Ñ/@Ø!&Ø#'Ø#'Ø%)ð	 0Aó 0Ð,ô !Øñ!ó  Dõô —<‘<×9Ñ9¸QÒ>äŸ™×*Ñ*×DÑDÀRÇXÁXÓNð -ô ;Ü!ŸO™O×1Ñ1×DÑDØ4óô —O‘O×)Ñ)ÔJô #6Ó"7�Ø"×.Ñ.Ô0Ü'/°Ñ'>×'DÑ'DÓ'FÐ$Ü&×9Ñ9Ø"&Ð9Iõô ×#Ñ#Ô%ð	AÜ,à -¬sÔ3JÓ3LÓ/Mð+õ÷o?AôD —‘ 	Ó*ñWä3°NÓCñWô .¨k¸8ÓDñWð
 &*Ð"Ø"�Ø%)Ð"Ø$(Ð!á¤× 3Ñ 3× PÒ Pô 4BØñ.ô4Ñ0�HÐ0ô #0Ø Ø')Ø"+Ø!)Ø$/Ø!)Ø/EØ%1Ø$/Ø'+Ø#-Ø&3ô#�Kô ×+Ñ+¨KÓ8ñä×1Ñ1°"Ó5ññ  +ÐPÐ,PÓP˜{Ø#Ÿ™Ô)à'×@Ñ@ÓBñ >Ð*Ð,=÷÷ ô &Øðð
 $2Ø'Ø%Ø +Ø%Ø+AØ!-Ø +Ø'9á4FÐ*×0Ò0ÈDñ 4EÐ)×/Ò/È$à!,Ø$3Ø)Ø"/ò/�ô2 ")×!<Ñ!<Ó!>�ð ×,Ñ,Ô.ä×'Ñ'¨Ó.ñJä×-Ñ-¨bÓ1ñJô )×6Ñ6Ó8ñJð
 �E—I‘I˜~Ñ.ØNP�NØ×*Ñ*Ð6ô +Ó,˜Ø#(×#6Ñ#6ò <˜Cä *¨3´Ô 7Ø$'×$9Ñ$9Ô$;Ü$'Ô(=¸c¿n¹nÓ>NÓ(OÓ$PÐTUÒ$Uð !/× 5Ñ 5Ü$)Ó)XÀÇÁÓ@P×@WÑ@WÔ)XÓ$Xõ!"ð !/× 5Ñ 5°dÕ ;ð<ô /¨uÔ5ð *.Ð&Ü%Ø5ÈTôñ >ð !Ÿ>š>¨e×.>Ò.>Ø',×'8Ò'8Ð8Ð#8Ø*/¯-©-«/¸!Ñ*<×*?Ñ*?˜KÜ+×1Ñ1Ø ;Ø +× :Ñ :ÈÐ :Ó Nöð
 #Ÿ^›^ÝBà#(×#4Ò#4ð Ø DóÐ#4ð 9>×8VÑ8VÓ8XÑ5˜L¨+Ü+×1Ñ1Ø ;¸\×=OÑ=Oôð  +×0Ò0Ü /× 5Ñ 5Ø$=¸{×?PÑ?Pô!"ð >BÐ:Ü ×4Ò4à$)×$@Ñ$@Ä×AVÑAVÓ$Wð !?ô !0× 5Ñ 5Ø$JØ$Bô!"ô
 ".Ø 9ÐQUô"ñ "ð />×.EÑ.EØ$)Ø$0×$6Ñ$6Ø$/×$5Ñ$5Ø$BØ05×0AÑ0Að	6&Ü)-¯©Ø,1×,>Ñ,>×,OÑ,Oñ 4?ð 1<×0HÑ0H×0YÒ0Yà57ñ	-.ó**ð	6&ð /Fó /" ÷	"ð "ð, /4×.EÑ.EÓ.G˜OØ*9×*>Ñ*>˜KÜ18Ø /°¸4ó2Ð.÷y>ðB BFÐ>Ø6:Ð3Ü—|‘|×=Ñ=ÀÒBÜEIÇZÁZÜ!ŸO™O×1Ñ1×OÑOÓQóFÐBô ;?¿*¹*Ü!ŸO™O×1Ñ1×NÑNó;Ð7ô )Ø&ñ)ó (Zõô )Ø&ñ)ó (Oõñ ;Ü.AÓ.C˜OØ.×:Ñ:Ô<Ø /× :Ñ :Ø$9Ø$Cô!"ð
 %)�MÜ+×8Ñ8¼¿¹ÔFØCH×CTÑCTÓCVÑ@˜	 >°=ä×2Ò2°iÑ?Õ2Ü×-Ò-°Ñ>Õ-Ü×.Ó.°.Ñ@Õ.Ü,×1Ò1Ø0à6?Ø2@Ø1>ñôô ×)Ó)Ø.3×.?Ñ.?Ó.AÑ+˜˜1˜mÜŸ™×-Ñ-×IÒIÈ-ÔXô —O‘O×)Ñ)×AÒAÀ%Ç/Â/×BWÒBWÔXò #Ü"ŸMšM×GÔGÜ &× 6Ô 6Ü !§¡× AÔ AÜ!ŸO™O×1Ò1×AÒAÀ>ÑRà&*˜Ø$&§H¡H§N¢Nò 
&˜DØ'+§y¢y§}¡}°U¸DÓ'A˜Hà $§¢¨=Ò 8Ü'1°(¼E¿LºLÔ'IÜ',§¡×'<Ò'<×'LÒ'LÈXÔ'Và (à.2¯iªi¯m©m¸MÈ4Ó.PÐP˜{ÑPÙ %ð
&ð #|˜Ù&Ø)0¨	°¸k¸]È"Ð&M™Gà)0¨	° n˜Gà<CœŸ™Ô9ñ
 #ä &× 6Ó 6ä !§¡× AÓ Aå.SÐTVÓ.WÐ+Ù.Ø(TÐUh×UoÒUoÐTpÐ&q˜GØ.A×.FÒ.F×.JÑ.JØ -¨tó/ð  ˜{ð  ð .5¨I°\À+ÀÈbÐ*Q à@GœAŸG™GÔ=ô ×(Ò(Ü)Ø'ä ¥$¬¯©×(<Ò(<Ð=ô ð -õ   Ó,ó	-ð  õ
  ,Ø%0¸e×>OÑ>Oô ÷aJ÷ J÷ Jò J÷[W÷ W÷ Wò W÷Aw	÷ w	ò w	ñF "¬!¯'©'×*KÓ*Kõñ =ä !§¡× ;Ò ;óô Ÿ™Ô9ð ×'Ò'­¨T«
Ñ3×GÓGÈ1ÑLÕGô Ÿ™×-Ñ-×DÓDä!ŸO™O×1Ñ1×CÒCÐOä%(ä!ŸMšM×8Ò8×KÒKÓMó&˜
ð $0×#3Ñ#3°JÓ#?˜Ø#Ð/ð !+ô "ŸO™O×1Ñ1×CÒCÀHÑMõ +Ø#ØØØ&äŸ™×9Ò9Ø&×1Ò1Ó3Ü  Ñ,Ð/@Ñ@Ø"Ø&Ø)Ø×0Ò0Ø$Ø'Ø*Ø4Ø*ØBØ7ó'÷mJ÷ J÷ Jò J÷[W÷ W÷ Wò W÷Aw	÷ w	ò w	÷ZEñ Eú÷Eñ Eú÷8Oñ Oûôr %ò Aô Ÿ™Ð$?×@ðAú÷y?Añ ?Aú÷Lñ ú÷ ñ ú÷X"ñ "ú÷I>ñ >ú÷AJð Jú÷ J÷ Jñ Jú÷ J÷ Jñ Jú÷[W÷ Wñ Wú÷ W÷ Wñ Wú÷ W÷ Wñ Wú÷Aw	÷ w	ñ w	ú÷ w	÷ w	ñ w	ús1  ÃAA8Ã)FAA#É-}%Ê}	Ê}%Ê:AA#Ë~$Ë}2	Ë-E*~$Ñ}?Ñ7AA#ÒAAÒ A@9	Ò-A"A@$Ô~>Ô%-~1Õ~>ÕA7A@$×A@×':×<C%%Û!Eà&A:â 2ãM%ðD%ô/	:ô8	A@õ	A@$õ
	A@9	õ	AAõ	AA#õ%	AA8õ8F%ü	:ü	A@ü!	A@$ü*	A@9	ü3	AAü<	AA#ý	AA8ý}"ý}%ý%}/ý*AA#ý2}<ý7~$ý?~!	þ~$þ ~!	þ!~$þ$~.þ)AA#þ1~;þ6~>þ>ÿA@$ÿÿÿ"ÿ%ÿ%.ÿ*:ÿ1	A@ÿ:A@ÿ?A@Á@	A@$Á@A@Á@A@$Á@	A@9	Á@$A@-Á@)A@9	Á@0	AAÁ@9AAÁ@>AAÁA	AA#ÁAAAÁAAA#ÁA	AA8ÁA#AA,	ÁA(AA8ÁA8ABNr�  )r•   r–   r—   r   r„  rŒ   rŠ   rˆ   r•  r•  á  sK   „ ØðUàðUð ,ðUð 'ð	Uð
 'ðUð 
òUó ñUrŠ   r•  c                ó@  — t         t        j                  k(  rt        «       }nIt         t        j                  k(  rddlm}  |«       }n$t         t        j                  k(  rddlm	}  |«       }t        r8ddlm} ddlm}	 t        |	«      sJ d«       ‚ ||«      }||j                  _        t"        rUddlm}
 ddlm}	 t        |	«      sJ d«       ‚t'        «       }t        «       }||_         |
|||«      }||j(                  _        |_        |j+                  | |||«      S )	Nr_   )Ú_DebugSerdeFxCompile)Ú_SubprocessFxCompile)Ú_AsyncFxCompile)Ú_OutOfProcessFxCompilez7async is only valid with an out-of-process compile mode)Ú_ProgressiveFxCompilez=progressive is only valid with an out-of-process compile mode)Úfx_compile_moder”   r˜   r•  r™   Úcompile_fx_extr+  rš   Úcompile_fx_subprocr,  Úfx_compile_asyncÚcompile_fx_asyncr-  r.  rÛ   Ú_compilerÖ  Úfx_compile_progressiver/  rÀ   Ú_optimized_compiler„  )rá   rd  rh  rÖ  rf  Úschemer+  r,  r-  r.  r/  Úprogression_configsÚfast_schemes                rˆ   rÿ  rÿ  û  s  € ô œ-×.Ñ.Ò.Ü$Ó&‰Ü	œM×3Ñ3Ò	3Ý8á%Ó'‰Ü	œM×4Ñ4Ò	4Ý<á%Ó'ˆåÝ5Ý:ô ˜&Ð"8Ô9ð 	
ØEó	
Ð9ñ ! Ó(ˆàð 	�‰Ô+õ Ý;Ý:ô ˜&Ð"8Ô9ð 	
ØKó	
Ð9ô 7Ó8Ðô *Ó+ˆØ*=ˆÔ'ñ ' {°FÐ<OÓPˆàð 	×!Ñ!Ô5ð "5€FÔð ×%Ñ% b¨.¸/È<ÓXÐXrŠ   c                ód  — g }t        | «      D ]“  \  }}t        |t        j                  «      sŒ!t	        |j
                  j                  «      sŒAt        «       5  ||v rt        |«      r
	 ddd«       Œet        |«      s
	 ddd«       Œz	 ddd«       |j                  |«       Œ• |S # 1 sw Y   ŒxY w)zš
    This function runs at compile time, and generates a list of indices for which we
    might need to do a copy to preserve alignment requirements.
    N)r=  rÛ   rÇ   rÞ   rK   r  r—  rt   rN   rL   rß   )ÚinputsrÇ  Úids_to_checkr  ro  s        rˆ   rC  rC  :  s¶   € ð €Lä˜fÓ%ò ‰ˆˆ5Ü˜%¤§¡Ô.àÜ�e—l‘l×'Ñ'Ô(àÜ0Ó2ñ 	ð Ð%Ñ%Ô*;¸EÔ*BØ÷		ð 	ô
 /¨uÔ5Ø÷	ð 	ð
 6÷	ð 	×Ñ˜AÕð)ð, Ð÷	ð 	ús   ÁB&Á3B&Â&B/	rŒ   )r  ÚplaceholdersÚmutated_input_idxsc               ó  ‡ ‡‡‡— ddl m}	 t        j                  j                  rEt        j                  |	|||||||t        j                  j                  j                  «       ¬«	      Šnt        Št        j                  «       Šdˆˆ ˆˆfd„}
|
S )Nr   )Úcudagraphify_impl)Údevice_indexÚstack_tracesrÈ  rw  r  r>  r?  r÷  c                ó¦   •— t        ‰dd «      }|€.t        j                  «       5   ‰‰| ‰«      }d d d «       |‰_         || «      S # 1 sw Y   ŒxY w)Nr"  )rì   r„   rÖ  r"  )Ú
new_inputsr"  Úcudagraphify_fnÚmodelrÇ  Úthread_locals     €€€€rˆ   rö  zcudagraphify.<locals>.run  s^   ø€ Ü˜l¨M¸4Ó@ˆØÐÜ×0Ñ0Ó2ñ TÙ-¨e°ZÐARÓS�÷Tà'2ˆLÔ$Ù˜:Ó&Ð&÷Tð Tús   ¥AÁA)rE  rÙ  r  r   )Útorch._inductor.cudagraph_treesrA  r   rG  Úcudagraph_treesÚ	functoolsÚpartialrÇ   rÈ   r<  r=  Ú	threadingrm  )rG  rÇ  rB  rC  rÈ  rw  r  r>  r?  Únew_cudagraphify_implrö  rF  rH  s   ``         @@rˆ   ÚcudagraphifyrO  ]  sy   û€ õô
 ‡}�}×$Ò$Ü#×+Ñ+Ø!Ø%Ø%Ø#Ø%ØØ%Ø1Ü—}‘}×3Ñ3×FÑFÓHô

‰ô ,ˆä—?‘?Ó$€L÷'ð 'ð €JrŠ   c                ó”   — t        j                  | j                  «       | j                  «       | j                  | j
                  ¬«      S )z1
    Copy and input while preserving strides
    )r   r  )rÇ   Úempty_stridedÚsizerà   r   r  )r«   s    rˆ   Ústatic_inputrS  Š  s/   € ô ×Ñ˜qŸv™v›x¨¯©«¸1¿7¹7È1Ï8É8ÔTÐTrŠ   c                ó    — t        | |«      }t        j                  |«      dk7  rt        | |«       yt        ||«      }|j	                  |«       y)z=Index into expanded dimensions of both dst and src then copy_r   N)rB   rÇ   Ú_debug_has_internal_overlapr@   Úcopy_)ÚdstÚsrcÚexpanded_dimsÚindexed_dstÚindexed_srcs        rˆ   Úindex_expanded_dims_and_copy_r\  ‘  sL   € ô & c¨=Ó9€KÜ×(Ñ(¨Ó5¸Ò:ô 	˜c 3Ô'ØÜ% c¨=Ó9€KØ×Ñ�kÕ"rŠ   c                ó*  ‡‡	‡
‡‡‡— t        |‰«      }t        t        |‰«      «      Št        ||«       t	        |t
        «      sJ ‚t        |«      D ��cg c]  \  }}|‰vrt        |«      ng ‘Œ c}}Št        |«      D ��cg c]@  \  }}t	        |t        j                  «      s|n|‰vrt        |«      n|j                  «       ‘ŒB c}}Št        t        |‰«      «      D ]8  \  }\  }}t	        |t        j                  «      sŒ$|‰vsŒ)t        ‰|   ||«       Œ: t        j                  j                  «        t        j                  j!                  «       }|j#                  t        j                  j%                  «       «       t        j                  j'                  |«      5   | t        ‰«      «       ddd«       |j                  «        t        j                  j%                  «       j#                  |«       t        j                  j                  «        t        j                  j)                  «       Š
t        j                  j+                  ‰
|d¬«      5   | t        ‰«      «      Šddd«       t	        ‰t
        t,        f«      s‰fŠt.        j0                  rdˆ
ˆˆˆˆfd„}n1t3        t5        ‰«      «      D �cg c]	  }|‰vsŒ|‘Œ c}Š	dˆ	ˆ
ˆˆˆfd„}t7        ||t        «       «      S c c}}w c c}}w # 1 sw Y   �ŒExY w# 1 sw Y   ŒœxY wc c}w )zQ
    Assumes inputs[static_input_idxs[i]] are always the same memory address
    NrH  )ÚstreamÚcapture_error_modec                ó–  •— t        ‰«      t        | «      k(  sJ ‚t        t        ‰| ‰«      «      D ]u  \  }\  }}}t        |t        j
                  «      sŒ%t        |t        j
                  «      sJ ‚|‰v r$|j                  «       |j                  «       k(  rŒgJ ‚t        |||«       Œw | j                  «        ‰j                  «        ‰	S rƒ   )
rò   r=  ÚziprÛ   rÇ   rÞ   Údata_ptrr\  r�  Úreplay)
rE  rô   rW  rX  rY  rÙ   Úinps_expanded_dimsrÇ  Ústatic_inputsÚstatic_outputss
        €€€€€rˆ   rö  zcudagraphify_impl.<locals>.runÝ  s¾   ø€ Ü�}Ó%¬¨Z«Ò8Ð8Ð8Ü2;Ü�M :Ð/AÓBó3ò KÑ.�Ñ.�c˜3 ô " #¤u§|¡|Ô4ØÜ! #¤u§|¡|Ô4Ð4Ð4ØÐ+Ñ+ØŸ<™<›>¨S¯\©\«^Ó;Ð;Ð;ô
 2°#°s¸MÕJðKð ×ÑÔØ�L‰LŒNà!Ð!rŠ   c                óÂ   •— ‰D ]8  }‰|   }| |   }t        |t        j                  «      sJ ‚t        ‰|   ||«       Œ: | j	                  «        ‰j                  «        ‰S rƒ   )rÛ   rÇ   rÞ   r\  r�  rc  )	rE  rô   rY  rX  Úcopy_indicesrÙ   rd  re  rf  s	       €€€€€rˆ   rö  zcudagraphify_impl.<locals>.runö  si   ø€ Ø#ò V�Ø 2°3Ñ 7�Ø  ‘o�Ü! #¤u§|¡|Ô4Ð4Ð4Ü-¨m¸CÑ.@À#À}ÕUð	Vð
 ×ÑÔØ�L‰LŒNà!Ð!rŠ   )rE  úlist[InputType]r  ú Callable[[list[InputType]], Any])rC  rX   rv   rq   rÛ   rË   r=  rA   rÇ   rÞ   rS  Údetachra  r\  rü   ÚsynchronizeÚStreamÚwait_streamÚcurrent_streamr^  Ú	CUDAGraphrÙ   r9  r   Úsize_assertsrÌ   rò   ro   )rG  r<  rÇ  Úcheck_input_idxsrô   r«   rY  r^  rö  rh  rÙ   rd  re  rf  s     `      @@@@@rˆ   rA  rA  ¢  sŸ  ý€ ô /¨vÐ7HÓIÐä)3Ü# FÐ,=Ó>ó*Ðô ˜6Ð#3Ô4ä�fœdÔ#Ð#Ð#ô   Ó'÷áˆC�ð !$Ð+<Ñ <Ô˜!ÔÀ"ÑDóÐô   Ó'÷	ñ ˆC�ô ˜a¤§¡Ô.ñ ð Ð+Ñ+ô ˜a”à—‘“ñ	ó	€Mô $-¬S°Ð9KÓ-LÓ#Mò PÑˆÑˆa�Ü�aœŸ™Õ&¨3Ð6GÒ+GÜ)¨-¸Ñ*<¸aÀÕOðPô
 
‡J�J×ÑÔÜ�Z‰Z×ÑÓ €FØ
×Ñ”u—z‘z×0Ñ0Ó2Ô3ä	�‰×	Ñ	˜6Ó	"ñ #ÙŒd�=Ó!Ô"÷#à
×ÑÔÜ	‡J�J×ÑÓ×+Ñ+¨FÔ3Ü	‡J�J×ÑÔô �J‰J× Ñ Ó"€EÜ	�‰×	Ñ	˜%¨À>Ð	Ó	Rñ 4Ùœt MÓ2Ó3ˆ÷4ä�n¤t¬U mÔ4Ø(Ð*ˆä×Ò÷	"ò 	"ô, !¤ ]Ó!3Ó4ö
Ø¸ÐCTÒ8TŠCò
ˆ÷		"ñ 		"ô (¨Ð-=¼z»|ÓLÐLùó]ùó	÷*#ñ #ú÷4ð 4üò8
s1   ÁK+ÂAK1Æ"K7ÉLÊ;	LËLË7LÌLc                ó<  — t        | t        «      sJ | «       ‚t        | «       t        j                  |xs i «      }|j                  dd«      st        j                  sd|d<   |j                  dt        j                  j                  «      }|r|j                  d«      r"J d«       ‚i |¥dt        | j                  «      i¥}dd	lm}  ||«      }|j                  d
d «      }| j                   j                  dd «      }t"        j$                  j'                  |«      }t)        j*                  d«      5  t"        j$                  j-                  |«      5  t/        ddd¬«      5  t1        «       5  t3        | |t5        j6                  ||¬«      |¬«      }	t        |	t8        «      sJ ‚|	j:                  cd d d «       cd d d «       cd d d «       cd d d «       S # 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)NrÎ  FTr«  zaot_inductor.output_pathz.pt2a
  The output path for aot_compile should not have an extension with .pt2 this is for specifying the output path for the .so in AOTInductor. If you would like to package the AOTInductor generated files into a pt2, please call `torch._inductor.aoti_compile_and_package`.r_   )Úmaybe_aoti_standalone_configrÌ  Údynamo_compile_idÚcompile_fx_aot)r_  Úreset_event_log_on_exit)rÌ  )Úinner_compiler¼  )rÛ   rS   r-   rÚ  Údeepcopyr¯   r   rÎ  r£  Úoutput_pathrd  r2   Úcoder   rt  r¹   rÝ   rÇ   rÈ   r<  rx   Úset_aot_compilationÚcompile_contextr!   r(   Ú
compile_fxrK  rL  r=   rÓ  )
Úmodel_Úexample_inputs_rx  r¼  rz  rt  rÌ  Úsaved_compile_idÚsaved_compile_contextÚcompiled_artifactss
             rˆ   rv  rv    sù  € ô �fœkÔ*Ð2¨FÓ2Ð*ô & fÔ-ô &*§]¡]°>Ò3GÀRÓ%H€Nà×Ñ˜|¨UÔ3´v×7HÒ7Hà(,ˆ�}Ñ%à ×$Ñ$Ø"¤F×$7Ñ$7×$CÑ$Có€Kñ Ø×'Ñ'¨Ô/ð 	
ðRó	
Ð/ð
Øð
à&¬	°&·+±+Ó(>ñ
ˆõ
 4á1°.ÓA€Nà+×/Ñ/Ð0HÈ$ÓOÐØ—{‘{—‘Ð':¸DÓAÐÜ!ŸM™M×8Ñ8Ð9IÓJÐä	×Ñ˜dÓ#ñ+ä�‰×%Ñ%Ð&;Ó<ñ+ô 	ØØ"&Ø$(ô	
ñ+ô 	Óñ+ô (ØØÜ#×+Ñ+ØØ'=ôð *ô
Ðô Ð,¬lÔ;Ð;Ð;à!×*Ñ*÷-+÷ +÷ +÷ +÷ +õ +ú÷ +÷ +ñ +ú÷ +÷ +ñ +ú÷ +÷ +ñ +úsa   Ä2 HÅG=Å!G(Å,AG	Æ.	G(Æ7	G=Ç 	HÇGÇG(Ç	G=Ç(G1Ç-G=Ç4	HÇ=H	ÈHÈHc                ó¶  ‡‡‡‡— ddl m}m}	 t        || «      }
t	        | t        t        |
«      «      ¬«      } t        j                  | d¬«      }|rt        | |d«        || «        |	|| |«      \  }Š‰D �cg c]  }||   ‘Œ	 }}t        |«      }|j                  j                  �^ }}|j                  d   }t        |«      D ��cg c],  \  }}t        |t         j"                  j$                  «      sŒ+|‘Œ. c}}|j&                  d<   g }t         j(                  j*                  j-                  «       }dgŠdŠ|��,|j.                  €J ‚|j.                  }t1        dt3        |«      dz
  «      Št5        t6           «       }|j8                  }|€J ‚d}t3        |«      dkD  rg Št;        t3        |«      «      D ]I  }|‰vrd ||<   |dkD  r(||   ||dz
     k(  r|dz  }n|j=                  ||   «       ‰j?                  |«       ŒK |j@                  €J ‚t;        t3        |j@                  «      «      D ]  }||vsŒd |j@                  |<   Œ |jB                  r|jB                  jD                  }tF        jH                  jK                  |dd«      5   ||||||d||¬	«      Šd d d «       tL        jN                  r‰S dˆˆˆˆfd
„}d|_(        |S c c}w c c}}w # 1 sw Y   Œ8xY w)Nr   )Ú%convert_conv_weights_to_channels_lastÚfreeze©rl  Trª  rñ   r_   r°  )rÇ  rÅ  rÉ  rw  rÍ  rË  c           
     ó‚   •— ‰D �cg c]  }| |‰t        |‰«         z
     ‘Œ }}| j                  «         ‰|«      S c c}w rƒ   )Úminr�  )r�   r  Úargs_newÚmax_offset_idxÚoptimized_functionÚpreserved_arg_indicesÚunwrapped_args_offsetss      €€€€rˆ   Úwrapperz%fw_compiler_freezing.<locals>.wrapper¨  sT   ø€ ð +ö
àð �Ð+¬C°°>Ó,BÑCÑCÓDð
ˆð 
ð 	�
‰
ŒÙ! (Ó+Ð+ùò
s   †<)r�   zlist[object]r  zSequence[torch.Tensor]))Útorch._inductor.freezingr…  r†  r'   rk  rD  rE  rk   Údecide_layout_optr¹  r$   rÙ   r  r�   r=  rÛ   rÇ   r   rÜ   rÝ   rÈ   rÉ   rÊ   Úparams_flat_unwrap_subclassesr  rò   rX   r  Úparams_unwrapped_to_flat_indexrÌ   r#  rß   Úparams_flatrÍ   rÎ   r   r¢  r´  rx   r.  Ú_boxed_call) Úaot_autograd_modelÚaot_example_inputsÚdynamo_modelÚnum_example_inputsrx  rÅ  rÉ  Úforward_devicer…  r†  Úinputs_devicesrË  Ú	opt_modelÚindr·  r  Úmodel_outputs_nodeÚmodel_outputsrô   r�  rÇ  Útracing_contextÚparams_flat_unwrapÚpreserved_indices_params_flatÚunwrapped_idxsÚcurrent_offsetr  r�  r‹  rŒ  r�  rŽ  s                                @@@@rˆ   Úfw_compiler_freezingr¥  J  s  û€ ÷ Wô (Ð(:Ð<NÓO€NÜ6ØÜœ$˜~Ó.Ó/ôÐô
 ×0Ñ0Ð1CÐRVÔW€JÙäÐ+Ð-?ÀÔFÙ-Ð.@ÔAá'-ØØØó(Ñ$€IÐ$ð >SÖS°cÐ,¨SÓ1ÐSÐÐSä Ð!3Ó4€Ið 'Ÿ_™_×2Ñ2Ñ€QÐØ&×+Ñ+¨AÑ.€Mä# MÓ2÷;Ù��Q´jÀÄEÇHÁHÇMÁMÕ6RŠó;Ð×ÑÐ6Ñ7ð $&Ðä—m‘m×2Ñ2×:Ñ:Ó<€OØ˜SÐØ€NØÑ"Ø×<Ñ<ÐHÐHÐHØ,×JÑJÐÜ˜Q¤Ð$6Ó 7¸!Ñ ;Ó<ˆÜ(2´3©Ó(9Ð%Ø(×GÑGˆØÐ)Ð)Ð)ØˆÜÐ!Ó" QÒ&Ø%'Ð"ä”sÐ-Ó.Ó/ò 	:ˆAØÐ-Ñ-Ø(,Ð" 1Ñ%Ø�q’5˜^¨AÑ.°.ÀÀQÁÑ2GÒGØ" aÑ'‘Nà-×1Ñ1°.ÀÑ2CÔDØ"×)Ñ)¨.Õ9ð	:ð ×*Ñ*Ð6Ð6Ð6Ü”s˜?×6Ñ6Ó7Ó8ò 	6ˆAØÐ5Ò5Ø15�×+Ñ+¨AÒ.ð	6ð ×&Ò&Ø /× ;Ñ ;× PÑ PÐä	�‰×	Ñ	˜9Ð&=¸tÓ	Dñ 

Ù*ØØØ/Ø!ØØØ'5Ø!ô	
Ð÷

ô 	×ÒØ!Ð!÷,ð ,ð €GÔà€NùòQ Tùó;÷L

ð 

ús   Á7KÃ,K	Ã3K	ÊKËKc                ó®  — | r>t         j                  j                  r$t         j                  rt	        t        d«      «       t         j                  j                  �t         j                  j                  nt        «       xr t        j                  }|| t         j                  j                  xr$ t        j                   xr t         j                   ddœS )Nz0cpp-wrapper does not support graph partition yetT)ztriton.autotune_at_compile_timeztriton.autotune_cublasLtútriton.cudagraphsztriton.store_cubin)
r   rG  rÅ  rª  r8   r7   Úautotune_at_compile_timer^   rx   r.  )rÝ  r¨  s     rˆ   rê  rê  µ  s¬   € ÙœfŸm™m×6Ò6¼6×;QÒ;QÜ+Ü'ØBóô	
ô �=‰=×1Ñ1Ð=ô 	�‰×.Ò.ô ‹\Ò/œa×/Ñ/ð	 ð ,DØ(@Ð$@ä�M‰M×$Ñ$ò +Ü×%Ñ%Ð%ò+ä×*Ñ*Ð*à"ñ	ð 	rŠ   c                óB  — t         j                  j                  «       st        j                  «       S t        d„ t        | «      D «       «      }t        |«      dk(  r1t         j                  j                  t        t        |«      «      «      S t        j                  «       S )zX
    Returns a cuda device context manager if there is a single device in the graph
    c              3  ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)rü   N)r—  rþ  s     rˆ   r¬   z*get_cuda_device_context.<locals>.<genexpr>Ö  s    è ø€ ò 8Ø°F·K±KÀ6Ó4IŒñ8ùs   ‚—r_   )rÇ   rü   rý   r¥  r¦  rX   rH   rò   r  rD  rE  )rá   Úcuda_devicess     rˆ   rè  rè  Ï  s„   € ô �:‰:×"Ñ"Ô$Ü×%Ñ%Ó'Ð'ä-7ñ 8Ü,¨RÓ0ô8ó .€Lô ˆ|Ó Ò!ô 	�
‰
×Ñœ$œt LÓ1Ó2Ó3ðô ×#Ñ#Ó%ðrŠ   )Úpartitioner_fn_overridec          
     óŠ  — t        | «      }|5  t        || «      }t        | dt        t	        |«      «      ¬«      } d d d «       |j                  dd «      }|� || |fd|i|¤ŽS t        j                  €1t        j                  dd¬«      5  t        | |fd|dœ|¤Žcd d d «       S t        t        j                  t        «      sJ ‚t        j                  t        j                  j                  j                  d¬«      5  t        j                  | |fd|dœ|¤Žcd d d «       S # 1 sw Y   ŒçxY w# 1 sw Y   y xY w# 1 sw Y   y xY w)NT)rU  rl  Ústatic_lifetime_input_indicesr   rž  rå  )Úcompilerr®  )rè  r'   rk  rD  rE  r¹   r   Úcustom_partitioner_fnr„   r%   r   rÛ   r:   Ú	__class__r•   )rá   Újoint_inputsr¬  rŽ   r  r›  r®  s          rˆ   Úpartition_fnr³  á  s€  € ô +¨2Ó.€LØ	ñ 	
ô ,¨L¸"Ó=ˆÜ*ØØ!%Üœd >Ó2Ó3ô
ˆ÷	
ð 7=·j±jØ'¨ó7Ð!ð Ð*Ù&ØØñ
ð +Hð
ð ñ	
ð 	
ô ×#Ñ#Ð+Ü×&Ñ&Ø1Èô
ñ 
	ô 7ØØðð $Ø.Kñ	ð ñ÷
	ñ 
	ô œ&×6Ñ6Ô8KÔLÐLÐLÜ×&Ñ&Ü×(Ñ(×2Ñ2×;Ñ;Ø"&ô
ñ 
	ô ×/Ñ/ØØðð $Ø.Kñ	ð
 ñ÷	
	ñ 
	÷K	
ð 	
ú÷0
	ð 
	ú÷
	ð 
	ús#   Ž-D!Â
D-Ã=D9Ä!D*Ä-D6Ä9Ec                óf   — t        | «      }t        j                  |j                  Ž }t	        |«      S rƒ   )ru   r>  Úarg_tree_leavesr�   rò   )rG  rž  rŸ  s      rˆ   Úget_num_model_outputsr¶   	  s/   € Ü$ UÓ+ÐÜ×*Ñ*Ð,>×,CÑ,CÐD€MÜˆ}ÓÐrŠ   c                ó¤   — | j                   r1t        j                  j                  st        j                  ddi«      S t        j                  «       S )Nr§  T)r»   r   rG  rÅ  r¢  r¥  r¦  )rÅ  s    rˆ   Úcudagraph_annotation_contextr¸  &	  s=   € ð ×Ò¤§¡× 8Ò 8Ü�|‰|Ð0°$Ð7Ó8Ð8Ü×!Ñ!Ó#Ð#rŠ   )Úfrozenc                  óD   — e Zd ZU ded<   ded<   ded<   ded<   dZd	ed
<   y)ÚCompilerConfigExtrarE   rÅ  r  rÉ  r5   rš  Úforward_is_partitionedNrÊ  Úcudagraphs_bwd_override)r•   r–   r—   r¢   r½  rŒ   rŠ   rˆ   r»  r»  1	  s$   … àÓØƒMØ$Ó$Ø%Ó%Ø+/Ð˜[Ô/rŠ   r»  c                ó|  — t        | t        «      r| j                  nd }t        t        j
                  j                  «      }d }|�Ã|j                  d«      x}�°|j                  �i|j                  t        j
                  j                  k7  rBt        |j                  «      }|j                  rt        j                  d«       nt        d«       |j                  r/|j                  �#|j                  s|j                  }t        d«       t        t        «      }t!        d «      }t        d«      }t#        |||||¬«      S )NÚcudagraph_annotationz9enabling cudagraphs due to override_cudagraphs annotationz:disabling cudagraphs due to override_cudagraphs annotationzGdisabling cudagraphs for backward due to override_cudagraphs annotationF)rÅ  rÉ  rš  r½  r¼  )rÛ   rS   rÝ   rE   r   rG  rÅ  r¯   Úfwdr6   r¡  r8   r»   ÚbwdrD  Ú_graph_counterr5   r»  )rá   Úgm_metarÅ  r½  Ú
annotationrÉ  rš  r¼  s           rˆ   Úcreate_compiler_config_extrarÅ  :	  s  € ô $ B¬Ô4ˆb�gŠg¸$€Gô œ6Ÿ=™=×3Ñ3Ó4€Jà+/Ðð 	ÐØ"Ÿ;™;Ð'=Ó>Ð>ˆZÐKà�>‰>Ð%¨*¯.©.¼F¿M¹M×<TÑ<TÒ*TÜ" :§>¡>Ó2ˆJØ�~Š~Ü×#Ñ#ØOõô 4ØPôð ×Ò 
§¡Ð :À:Ç>Â>Ø&0§n¡nÐ#Ü/ØYôô ”NÓ#€Hô & dÓ+€Nô
 ' uÓ-ÐäØØØ%Ø 7Ø5ôð rŠ   c           
     óŽ  ‡ — |rÍt        dd„ ˆ fd„¬«       t        ‰ «      }|j                  d   D �cg c]M  }t        |t        j
                  j                  j                  «      r|j                  j                  d«      nd‘ŒO c}|j                  d<   t        |‰ «      }	t        ‰ t        t        |	«      «      ¬	«      Š t        dd
„ ˆ fd„¬«       t        j                  j                  j!                  |t#        |«      «      }
t        ‰ «      }t$        j&                  rÚt)        j*                  |j                  Ž }t#        |«      }t        j,                  j.                  j1                  «       }|�%|j2                  r|s|j2                  j4                  }nd}||k  sJ ‚||z   }||k  sJ ‚t7        ||«      D �cg c]+  }t        ||   t        j
                  j                  «      r|‘Œ- c}|j                  d<   ng |j                  d<   t9        ‰ «       t;        |j<                  «      5   |‰ |t?        |
«      |j<                  |j@                  ||jB                  ¬«      }|sEt        |tD        «      r5|jF                  r)t#        |jF                  «      dkD  rd|jH                  _%        |cddd«       S c c}w c c}w # 1 sw Y   yxY w)a#  
    Compile the forward graph of the given graph module.

    Args:
        gm: The graph module to compile.
        example_inputs: The example inputs to use for compilation.
        num_orig_model_outputs: The number of model outputs from the original dynamo graph.
        num_example_inputs: The number of example inputs from the original dynamo graph.
        compiler_config_extra: Extra configuration for the compiler.
        inner_compile: The inner compile function to use.
        is_inference: Whether this is an inference graph.
    r  c                 ó   — dddœS )NÚbefore_joint_graphrš  r  rŒ   rŒ   rŠ   rˆ   r  z$compile_fx_forward.<locals>.<lambda>’	  s   € Ø,Ø$ñ!€ rŠ   c                 ó,   •— ‰ j                  ddd¬«      S r¢  r§  r©  s   €rˆ   r  z$compile_fx_forward.<locals>.<lambda>–	  ó   ø€ ˜r×0Ñ0Ø"°4Èð  1ó  € rŠ   r  r   rÑ  NÚoutput_stack_tracesr‡  c                 ó   — dddœS )NÚafter_joint_graphrš  r  rŒ   rŒ   rŠ   rˆ   r  z$compile_fx_forward.<locals>.<lambda>¬	  s   € Ø+Ø$ñ!€ rŠ   c                 ó,   •— ‰ j                  ddd¬«      S r¢  r§  r©  s   €rˆ   r  z$compile_fx_forward.<locals>.<lambda>°	  rÊ  rŠ   rñ   )rÇ  rÅ  rÉ  rw  rÍ  r_   T)&rQ   ru   r�   rÛ   rÇ   r   rî   rÜ   rÝ   r¯   r'   rk  rD  rE  r2  r   Únum_fw_fixed_argumentsrò   r   Úkeep_output_strider>  rµ  rÈ   rÉ   rÊ   rÍ   Únum_mutated_inp_runtime_indicesrÌ   ró   r¸  rÅ  rÒ   rÉ  rš  r>   Úpartition_mapsr¼  r»   )rá   rd  Únum_orig_model_outputsr™  Úcompiler_config_extrarx  rw  rÔ   Úargr›  rÑ   rž  rŸ  Únum_model_outputsrÐ   Úoriginal_output_start_indexÚorig_output_end_idxrô   Úresults   `                  rˆ   Úcompile_fx_forwardrÚ  x	  s›  ø€ ñ, äØñóõ		
ô ˜R“ˆð —{‘{ 1‘~ö.
ð ô ˜c¤5§8¡8§=¡=×#5Ñ#5Ô6ð —‘—‘˜]Ô+àñò.
ˆ�‰Ð)Ñ*ô ,¨N¸BÓ?ˆÜ*¨2¼DÄÀnÓAUÓ<VÔWˆäØñóõ		
ô �O‰O×!Ñ!×8Ñ8ØœC Ó/ó€Eô % R›ÐÜ× Ò Ü×.Ñ.Ð0B×0GÑ0GÐHˆÜ Ó.Ðä—-‘-×.Ñ.×6Ñ6Ó8ˆàÐ 7×#6Ò#6¹|à×#Ñ#×CÑCñ (ð +,Ð'à%Ð):Ò:Ð:Ð:ð :Ð<RÑRÐð #Ð&7Ò7Ð7Ð7ô Ð8Ð:MÓNö?
àÜ˜-¨Ñ,¬e¯h©h¯m©mÔ<ò ò?
Ð×ÑÐ :Ò;ð ?AÐ×ÑÐ :Ñ;ô
 /¨rÔ2ä	%Ð&;×&FÑ&FÓ	Gñ ÙØØÜ3°EÓ:Ø,×7Ñ7Ø*×3Ñ3Ø%Ø'<×'KÑ'Kô
ˆñ Ü˜6¤?Ô3Ø×%Ò%Ü�F×)Ñ)Ó*¨QÒ.àAEÐ!×8Ñ8Ô>à÷'ñ ùòU.
ùòz?
÷ð ús   ²AJ1Æ80J6È(A?J;Ê;Kc                ó¬  — ddl m} |5  t        | «      }t        j                  rlt        j                  |j                  Ž }t        |«      D ��cg c]+  \  }}t        |t        j                  j                  «      r|‘Œ- c}}|j                  d<   ng |j                  d<   t        | «      }	|j                  }
|j                   �t#        |j                   «      }
|j$                  j&                  rt)        | «      }nt+        t-        |	«      «      }t        j.                  rt        j0                  t3        «       «      nt5        j6                  «       5  t9        |
«      5   || |||
d|j:                  |j<                  ¬«      cddd«       cddd«       cddd«       S c c}}w # 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)a5  
    Compile the backward graph of the given graph module.

    Args:
        gm: The graph module to compile.
        example_inputs: The example inputs to use for compilation.
        compiler_config_extra: Extra configuration for the compiler.
        inner_compile: The inner compile function to use.
    r   )Úcompile_lockrñ   NT)rÇ  rÅ  rÈ  rÉ  rÍ  )Útorch._dynamo.convert_framerÜ  ru   r   Úbw_outputs_user_visibler>  rµ  r�   r=  rÛ   rÇ   r   rÜ   rÝ   rF   rÅ  r½  rE   r¼  r»   rI   rË   rÌ   r«  r¢  rê  r¥  r¦  r¸  rÉ  rš  )rá   rd  rÔ  rx  rÜ  rž  rŸ  rô   r�  rÑ   rÅ  rÇ  s               rˆ   Úcompile_fx_backwardrß  þ	  s¤  € õ 9à	ñ *Ü(¨›_ÐÜ×)Ò)Ü"×2Ñ2Ð4F×4KÑ4KÐLˆMô (¨Ó6÷Cá�C˜Ü˜a¤§¡§¡Ô/ò óCÐ×#Ñ#Ð$>Ò?ð CEÐ×#Ñ#Ð$>Ñ?ä˜rÓ"ˆð +×5Ñ5ˆ
Ø ×8Ñ8ÐDÜ"Ð#8×#PÑ#PÓQˆJð
 !×7Ñ7×=Ò=Ü/GÈÓ/KÑä $¤U¨5£\Ó 2Ðô ×%Ò%ô —‘Ô3Ó5Ô6ä×+Ñ+Ó-ñ		ô )¨Ó4ñ	ñ !ØØØ"3Ø%Ø Ø.×7Ñ7Ø+@×+OÑ+Oô÷	÷ 	ñ 	÷5*ñ *ùóC÷,	ð 	ú÷ 	÷ 	ñ 	ú÷5*÷ *ñ *úsU   ‰AG
Á0FÁ?CG
ÅF5Å#F Å>	F5Æ	G
ÆG
Æ F)Æ%F5Æ,	G
Æ5F>	Æ:G
Ç
Gc           
     ó  ‡ — t        dd„ ˆ fd„¬«       t        j                  dt        d‰ ddd¬«      «       t	        ‰ j
                  «      t        j                  j                  _        t        j                  j                  d	k(  rc‰ j
                  j                  D ]J  }|j                  sŒ|j                  t        j                  j                  j                  |j                  <   ŒL t!        ‰ |«      Š t        dd
„ ˆ fd„¬«       ‰ S )Nr  c                 ó   — dddœS )NÚbefore_pre_grad_graphrš  r  rŒ   rŒ   rŠ   rˆ   r  z%run_pre_grad_passes.<locals>.<lambda>C
  s   € Ø+Ø ñ
€ rŠ   c                 ó^   •— ‰ j                  ddd¬«      dt        ‰ j                  «      › �z   S ©NFTr£  z

 # graph id: ©r¨  ÚidrÙ   ©r  s   €rˆ   r  z%run_pre_grad_passes.<locals>.<lambda>G
  ó9   ø€ ˜6×0Ñ0Ø¨tÀDð 1ó 
ð œb §¡Ó.Ð/Ð
0ñ1€ rŠ   r  r«  zBEFORE PRE GRADTr¬  r_   c                 ó   — dddœS )NÚafter_pre_grad_graphrš  r  rŒ   rŒ   rŠ   rˆ   r  z%run_pre_grad_passes.<locals>.<lambda>b
  s   € Ø*Ø ñ
€ rŠ   c                 ó^   •— ‰ j                  ddd¬«      dt        ‰ j                  «      › �z   S rä  rå  rç  s   €rˆ   r  z%run_pre_grad_passes.<locals>.<lambda>f
  rè  rŠ   )rQ   Úpre_grad_graphs_logrB  r*   ræ  rÙ   rÇ   r2  rï  r   rë  rì  r  rÑ  Ú#_inductor_pre_grad_node_stack_tracerº   r\  )r  r€  rî   s   `  rˆ   Úrun_pre_grad_passesrî  <
  sæ   ø€ ô
 Øñ
ó1õ
ô ×ÑØÜØØØØØô	
ô	ô 02°&·,±,Ó/?„E‡O�O×ÑÔ,ä‡|�|×-Ñ-°Ò2Ø—L‘L×&Ñ&ò 	ˆDØ×Óà×$Ñ$ô —‘×%Ñ%×IÑIÈ$Ï)É)ÒTð	ô (¨°Ó@€FÜØñ
ó1õ
ð €MrŠ   c                  ó$   — e Zd ZU dZded<   dd„Zy)Ú_ConstantDecompTablezÏ
    Picklable wrapper around a user-supplied decomposition dict.

    This module-level class is addressable as (module, qualname), so pickle can
    serialize an instance by reducing its single field.
    ú"dict[OpOverload, Callable[_P, _T]]Útablec                ó   — | j                   S rƒ   )rò  r†  s    rˆ   r×  z_ConstantDecompTable.__call__y
  s   € Ø�z‰zÐrŠ   N)r  rñ  )r•   r–   r—   r’  r¢   r×  rŒ   rŠ   rˆ   rð  rð  n
  s   … ñð .Ó-ôrŠ   rð  c                óB  — |�t        |«      }nt        }ddlm} |j	                  dd«      r| S |rIt        j                  |«      5  t        | | t        j                  |«      |«      |||¬«      cddd«       S t        j                  ||¬«      }t        d„ |D «       «      r2t        j                  j                  j                  j                  «        t
        j                   st
        j"                  r×dd	lm}	 t
        j                   }
t
        j"                  }t        j                  t)        «       «      5  t+        j,                  |«      5  t/        | t0        «      rt3        | |«      n|}t5        |«      } |	| |i |«      5 \  }}}}}t7        ||t        j                  ||
|¬
«      |||¬«      cddd«       cddd«       cddd«       S t7        | |||||¬«      S # 1 sw Y   �ŒmxY w# 1 sw Y   nxY w	 ddd«       n# 1 sw Y   nxY wddd«       ŒI# 1 sw Y   ŒRxY w)a@  
    Main entry point for compiling given FX graph.  Despite the fact that this
    lives in :mod:`torch._inductor`, this function is responsible for calling
    into AOT Autograd (and we will eventually get a callback to
    ``inner_compile`` to perform actual compilation.  In other words, this
    function orchestrates end-to-end compilation for the inductor backend when
    you use :func:`torch.compile`.

    NB: This function TAKES OWNERSHIP of the input ``model_`` and can potentially
    mutate it!  Make a copy if you need to preserve the original GraphModule.
    Nr   )ÚCompilerBisectorrå  Úpre_grad_graph)rx  ÚdecompositionsÚignore_shape_envrÖ  )rÖ  c              3  ó„   K  — | ]8  }t        |t        j                  «      xr |j                  j                  d v –— Œ: y­w))rü   ÚxpuN)rÛ   rÇ   rÞ   r  r—  )rª   rv  s     rˆ   r¬   zcompile_fx.<locals>.<genexpr>´
  s8   è ø€ ò àô 	�1”e—l‘lÓ#ÒH¨¯©¯©¸Ð(HÓHñùs   ‚>A )Ú_fakify_script_objects)r«  rÎ  ©rx  rø  rÐ  rÖ  ©rÐ  rÖ  )rð  re   Ú!torch._inductor.compiler_bisectorrõ  Údisable_subsystemr   r¢  r~  rK  rL  rž  rÇ   r2  r3  ÚAsyncCompileÚwakeupr«  rÎ  Útorch._export.non_strict_utilsrû  rê  rx   Úset_real_inputsrÛ   rS   Ú _extract_inputs_from_exported_gmr$   Ú_maybe_wrap_and_compile_fx_main)r  r€  rx  r¼  r÷  rø  rÖ  rÐ  rõ  rû  Úcpp_wrapper_configÚfx_wrapper_configÚinputs_r·  Úpatched_modÚ	fake_argsr  s                    rˆ   r~  r~  }
  s   € ð( Ð!ä  Ó0ñ 	ô ,ˆõ
 Cà×)Ñ)¨*Ð6FÔGàˆáÜ�\‰\˜.Ó)ñ 		ÜØØà:œfŸl™l¨>Ó:¸=ÓIØ-Ø!1Ø$7ô÷		ñ 		ô ×%Ñ%ØØ/ô€Mô ñ à ôô ô 	�‰×%Ñ%×2Ñ2×9Ñ9Ô;ä×ÒœV×.Ò.ÝIä#×/Ñ/ÐÜ"×-Ñ-Ðô �L‰LÔ/Ó1Ó2ñ	ä×Ñ˜oÓ.ñ	ô ˜f¤kÔ2ô 1°¸ÔIà$ð ô
 )¨Ó1ˆIÙ'¨°¸¸YÓGð ñ LØØØØØä6ØØÜ"+×"3Ñ"3Ø%Ø$6Ø#4ô#ð
 &6Ø"/Ø(;ô÷ð ÷	÷ 	ò 	ô< +ØØØØØ#Ø/ôð ÷y		ñ 		ú÷Pð úð ÷	÷ 	ñ 	ú÷ 	÷ 	ñ 	úsN   Á*GÄ8HÅ5H Æ-G*Æ0	H Æ9	HÇG'Ç*G3Ç/H Ç7	HÈ H		ÈHÈHc           
     ó„  — | j                   j                  D �cg c]-  }|j                  dk(  sŒ|j                  j	                  d«      ‘Œ/ }}t
        j                  s+|D �cg c]   }t        |t        j                  «      r|nd ‘Œ" }}t        d„ |D «       «      rœt        t        «       ||«      D ]‚  \  }}}|€Œ
t        |t        j                  «      sŒ%t        |t        j                  «      sJ ‚|j                  |j                  k7  sŒ[t        d|› d|j                  › d|j                  › d�«      ‚ |S |S c c}w c c}w )Nr/  r×   c              3  ó$   K  — | ]  }|d u–— Œ
 y ­wrƒ   rŒ   )rª   Úvs     rˆ   r¬   z3_extract_inputs_from_exported_gm.<locals>.<genexpr>÷
  s   è ø€ Ò
.˜Qˆ1�DŒ=Ñ
.ùs   ‚zBDevice mismatch between fake input and example input at position #z: z vs zx. If the model was exported via torch.export(), make sure torch.export() and torch.aot_compile() run on the same device.)rÙ   r  rÖ   rÝ   r¯   r   rÎ  rÛ   rÇ   rÞ   rž  ra  r
   r  Ú
ValueError)rá   r€  rî   Úfake_inputsÚinprô   Úfir  s           rˆ   r  r  è
  s/  € ð *,¯©¯©öØ!%¸4¿7¹7ÀmÓ;Sˆ�	‰	�‰�eÕð€Kð ô ×Òð
 GRö
Ø?B”:˜c¤5§<¡<Ô0‰C°dÑ:ð
ˆð 
ô Ñ
. +Ô
.Ô.äœe›g {°OÓDò 	‰JˆC��QØ‰~¤*¨R´·±Õ">Ü! !¤U§\¡\Ô2Ð2Ð2Ø—9‘9 §¡Ó(Ü$Ø\Ð]`Ð\aÐacØŸ9™9˜+ T¨!¯(©(¨ð 4cðcóð ð		ð ÐàÐùò3ùò
s   ™D8®D8Á!%D=rý  c               óP  — t        j                  t        ||||¬«      }t        | «      st	        | ||«      S t        | t        «      r1t        | j                  j                  t        «      rt        | ||«      S t        d„ |D «       «      rt        | ||«      S t        | |||||¬«      S )zö
    Part of compile_fx, called after patching configs.

    Ultimately we want to call _compile_fx_main, where the actual work happens.
    But under various conditions, various forms of wrapping might be needed
    around _compile_fx_main.
    rü  c              3  óR   K  — | ]  }t        |t        t        t        f«      –— Œ! y ­wrƒ   ©rÛ   rË   r9  r[  r©   s     rˆ   r¬   z2_maybe_wrap_and_compile_fx_main.<locals>.<genexpr>)  s   è ø€ Ò
G°!Œ:�aœ$¤¤tÐ,×-Ñ
Gùó   ‚%'rý  )rK  rL  r  Úgraph_returns_tupleÚmake_graph_return_tuplerÛ   rS   rÙ   Ú_codegenr]   Úhandle_dynamo_export_graphrž  r&   Ú_compile_fx_main)r  r€  rx  rø  rÐ  rÖ  Ú
compile_gms          rˆ   r  r    s­   € ô$ ×"Ñ"Ü'Ø#Ø)Ø#Ø/ô€Jô ˜vÔ&Ü& v¨À
ÓKÐKä�&œ+Ô&¬:Ø�‰×Ñœ~ô,ô *¨&°/À:ÓNÐNä
Ñ
G°Ô
GÔGô $ F¨O¸ZÓHÐHô ØØØØØ#Ø/ôð rŠ   c               ó<  ‡ ‡‡‡— t        t        j                  «      5  t        «       5  t        j
                  j                  j                  t        j                  j                  dk(  «      5  t        j                  j                  j                  «       5  t        j                  rJ ‚t        |«      Št!        ‰ «      Š |«       }t#        j$                  ‰|¬«      Š	 	 	 	 	 	 	 	 dˆˆˆ ˆfd„}t#        j$                  |d¬«      }t'        t(        |«      }t        j*                  rSt	        j,                  «       s?t#        j$                  t.        ‰ ‰‰‰j0                  ‰j2                  ‰j4                  ¬«      }	n't#        j$                  |d¬«      }	t'        t(        |	«      }	t7        d¬	«      	 	 	 	 	 	 dˆˆfd
„«       }
t'        t(        |
«      }
t9        |«      xs  t        j:                  j=                  d¬«      }t        j>                  j@                  jC                  «       xs t        j>                  jA                  |«      }tD        jF                  �rÝt        jH                  �sÌddl%m&}  |«        tO        ‰ tP        «      rtS        ‰ |«      Š tU        jV                  dt        jX                  ¬«      5  t[        ‰ |d|¬«      \  }}tO        |tP        «      sJ ‚ddl.m/}  ||«      }|j`                  jb                  D �]  }|jd                  dk(  sŒd|jf                  vsŒ# ti        |jj                  «      |«      }tO        |t        jl                  «      r%|€J ‚|jo                  |d¬«      |jf                  d<   Œ}tO        |t        jp                  «      sts        tu        |«      «      r8t        jv                  jx                  j{                  ||«      |jf                  d<   ŒãtO        |t|        «      sŒô||jf                  d<   �Œ 	 ddd«       t        ‰ «      }d‰ jf                  v r‰ jf                  d   |jf                  d<   d‰ jf                  v r‰ jf                  d   |jf                  d<   t        j€                  jƒ                  «       }|rt        j€                  j„                  nt†        jˆ                  }tE        jŠ                  |«      5  t�        jŽ                  «       5   |«       5   |	||«      cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       S tE        jŠ                  |«      5  t        j>                  j‘                  |«      5  t�        jŽ                  «       5  tU        jV                  dt        jX                  ¬«      5  	  t“        j”                  ||
|	|t–        d‰|tR        |¬«
      ‰ |«      cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       cddd«       S # 1 sw Y   �ŒxY w# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       �Œ # 1 sw Y   �Œ*xY w# t˜        $ r}|j›                  «       d‚d}~ww xY w# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)aQ  
    Main part of compile_fx, called after wrapping is done.

    Roughly speaking, here the steps will be:
    (1) apply pre-grad passes
    (2) create `fw_compiler` and `bw_compiler` functions out of `inner_compile`
    (3) call aot_autograd, which:
    - (3a) creates a joint graph with `decompositions`,
    - (3b) partitions it with `partition_fn` into fw and bw graphs (applying joint-graph passes),
    - (3c) calls `fw_compiler` and `bw_compiler` on those graphs (applying post-grad passes)
    - (3d) finally, assembles the fw and bw compiled functions back together and returns.
    r_   )rÐ  c           
     óÌ   •— t        j                  d«      5  t        ‰t        «      rt	        ‰«      }nt	        | «      }t        | ||‰‰‰|¬«      cd d d «       S # 1 sw Y   y xY w)Nz$compile_fx.<locals>.fw_compiler_base)rÓ  r™  rÔ  rx  rw  )r„   r%   rÛ   rS   r¶  rÚ  )rá   rd  rw  rÓ  rÔ  rx  r  r™  s       €€€€rˆ   Úfw_compiler_basez*_compile_fx_main.<locals>.fw_compiler_baseb  sf   ø€ ô
 ×*Ñ*Ð+QÓRñ Ü˜f¤kÔ2Ü-BÀ6Ó-JÑ*ä-BÀ2Ó-FÐ*Ü)ØØ"Ø+AØ'9Ø*?Ø"/Ø!-ô÷÷ ò ús   —9AÁA#Frª  )r˜  r™  rx  rÅ  rÉ  rš  TÚbackward)râ  c                óx   •— t        j                  d«      5  t        | |‰‰¬«      cd d d «       S # 1 sw Y   y xY w)Nzcompile_fx.<locals>.bw_compiler)rÔ  rx  )r„   r%   rß  )rá   rd  rÔ  rx  s     €€rˆ   Úbw_compilerz%_compile_fx_main.<locals>.bw_compiler‹  s?   ø€ ô
 ×)Ñ)Ð*KÓLñô +ØØ"Ø*?Ø"/ô	÷÷ ò ús   —0°9r¯  )Úis_valid_aoti_model_name©Úunlift_effect_tokensÚselective_decompose)Útrace_jointr÷  r   )Ú_detect_fake_mode_from_gmr	  r×   N)Ústatic_shapesÚ dynamo_flat_name_to_original_fqnru  )
Úfw_compilerr!  Úinference_compilerr÷  r³  Úkeep_inference_input_mutationsrÔ  rø  rj   rÖ  )rá   rS   rd  rÙ  rw  rž   r  rC   )rá   rS   rd  rÙ  r  rC   )Nr\   rí  rî  r   rÇ   r   rí  Úpreserve_node_metar   rë  rì  r2  rB  Úreset_provenance_globalsÚ_raise_error_for_testingrò   rÅ  rK  rL  r1   rC   ÚfreezingÚis_grad_enabledr¥  rÅ  rÉ  rš  rR   r$   r±  r²  rÈ   rÉ   rÊ   rx   r.  Úenable_autograd_for_aotr   r"  rÛ   rS   rî  Úfunctorch_configr¢  r%  r.   Útorch._export.utilsr'  rÙ   r  rÖ   rÝ   r   rè   rÞ   Úfrom_tensorÚScriptObjectrP   r—  Ú_libraryÚfake_class_registryÚmaybe_to_fake_objrO   rP  Ú_CÚ_is_any_autocast_enabledÚ_DisableAutocastr¥  r¦  rç  r   Ú_disableÚtracingÚdynamo_commonr,   r³  rZ   Úremove_dynamo_frames)r  r€  rx  rø  rÐ  rÖ  r÷  r  r*  r+  r!  r·  r   r"  rá   rA  r'  rî   rè   rO  Údisable_amprÐ   rv  rÔ  r™  s   ` `                    @@rˆ   r  r  9  sd  û€ ô, 	œ}×BÑBÓCñv9ä Ó"ñv9ô 	�‰×Ñ×-Ñ-Ü�L‰L×2Ñ2°aÑ7ó	
ñv9ô 	�‰×Ñ×6Ñ6Ó8ñv9ô ×2Ò2Ð2Ð2ä  Ó1Ðä <¸VÓ DÐá&›ˆÜ!×)Ñ)¨-À}ÔUˆð	Øð	à/ð	ð ð	ð ÷		ð 	ô* ×ÑÐ.¸UÔCð 	ô 6´jÀ+ÓNˆä�?Š?¤5×#8Ñ#8Ô#:Ü5>×5FÑ5FÜ$Ø#Ø#5Ø+Ø0×;Ñ;Ø.×7Ñ7Ø4×CÑCô6Ñô "+×!2Ñ!2Ð3CÐRVÔ!WÐÜ!@ÜÐ.ó"Ðô 
'°*Ô	=ð	Øð	Ø-@ð	àõ	ó 
>ð	ô 6´jÀ+ÓNˆä$Øó
ò Jä×Ñ×-Ñ-ÀDÐ-ÓIð 	ô �M‰M×(Ñ(×0Ñ0Ó2ò 7Ü�}‰}×+Ñ+¨IÓ6ð 	ô
 ×Ó¤V×%CÓ%CÝ7á$Ô&ô
 ˜&¤+Ô.Ü,¨V°_ÓE�ä!×'Ñ'Ø%)Ü$*×$>Ñ$>ôñ %6ô '8ØØ#Ø %Ø#1ô	'Ñ#��Oô " "¤kÔ2Ð2Ð2ÝIá5°bÓ9�	ð ŸH™HŸN™Nó 6�DØ—w‘w *Ó,°¸d¿i¹iÒ1GØ!8¤¨D¯K©KÓ!8¸Ó!<˜Ü% f¬e¯l©lÔ;Ø#,Ð#8Ð8Ð#8Ø/8×/DÑ/DØ &°dð 0Eó 0˜DŸI™I eÒ,ô (¨´×0BÑ0BÔCÄ~Ü  ›LôHô !&§¡× BÑ B× TÑ TØ$-¨vó!"ð !ŸI™I eÒ,ô
 (¨Ô0@ÕAØ/5˜DŸI™I eÓ,ñ#6÷)%6ôN (¨°°OÓDˆKØ1°V·[±[Ñ@ØGMÇ{Á{Ø6ñH�× Ñ Ð!CÑDð # f§k¡kÑ1Ø8>¿¹ÐDWÑ8X�× Ñ Ð!4Ñ5ô  Ÿ(™(×;Ñ;Ó=ˆKá-8”—‘×)Ò)¼j×>TÑ>Tð ô —‘ Ó+ñ HÔ->×-GÑ-GÓ-Iñ HÉ7Ë9ñ HÙ)¨+°ÓG÷H÷ H÷ Hò H÷uv9÷ v9÷ v9÷ v9ô v9ô| �O‰O˜IÓ&ñ	9ä�M‰M×!Ñ! /Ó2ñ	9ô ×&Ñ&Ó(ñ	9ô ×"Ñ"Ø%)Ü$*×$>Ñ$>ôñ		9ð9ð”}×1Ñ1Ø +Ø +Ø'9Ø#1Ü!-Ø37Ø*?Ø%5Ü$7Ø(;ôð ˜/ó+÷	9÷ 	9÷ 	9÷ 	9ó 	9÷{v9÷ v9÷ v9÷ v9ô v9÷@%6ñ %6ú÷tHð Hú÷ H÷ Hñ Hú÷ H÷ Hó Hûô2 $ò 9ð ×,Ñ,Ó.°DÐ8ûð9ú÷-	9ð 	9ú÷ 	9÷ 	9ñ 	9ú÷ 	9÷ 	9ñ 	9ú÷ 	9÷ 	9ñ 	9ú÷{v9÷ v9ñ v9ú÷ v9÷ v9ñ v9ú÷ v9÷ v9ñ v9ú÷ v9÷ v9ñ v9ús�  ž\©A[=Á.)[(ÂH[	Ê2AXÌXÌCXÏ/XÐC[	Ó
YÓX:Ó'	X%Ó0	X:Ó9	YÔ	[	Ô	[(Ô	[=Ô	\Ô0[	Õ Z>Õ%Z)Õ:&ZÖ Y?Ö"-Y×	Z×	Z)×!	Z>×*	[	×3	[(×<	[=Ø	\ØX"Ø[	Ø%X.Ø*X:Ø1	YØ:YØ?YÙ
[	ÙYÙ[	Ù	Y<Ù&Y7Ù7Y<Ù<Y?Ù?ZÚZÚ	Z)ÚZÚZ)Ú 	Z>Ú)Z2Ú.Z>Ú5	[	Ú>[Û[	Û
	[(Û[Û[(Û	[=Û([1Û-[=Û4	\Û=\	Ü\Ü\c                óÄ  — t        | t        «      syt        | «      j                  \  }t        |t        t
        f«      ryt        |t        j                  j                  j                  «      rst        |j                  d«      r]t        |j                  j                  j                  «      dkD  r1t        d„ |j                  j                  j                  D «       «      ryy)z"True if a FX graph returns a tupleTÚ_schemar_   c              3  óL   K  — | ]  }t        |j                  «      d k(  –— Œ y­w)rÞ   N)r  r—  )rª   Úrets     rˆ   r¬   z&graph_returns_tuple.<locals>.<genexpr>  s   è ø€ ÒO¨c”�C—H‘H“ Õ)ÑOùs   ‚"$F)rÛ   rS   ru   r�   rË   r9  rÇ   r   rî   rÜ   r  rè   rò   rC  ÚreturnsrJ  )rá   Úrvs     rˆ   r  r    sš   € ä�bœ+Ô&ØÜ˜‹O× Ñ �E€RÜ�"”tœU�mÔ$Øä�2”u—x‘x—}‘}×)Ñ)Ô*Ü�B—I‘I˜yÔ)Ü�—	‘	×!Ñ!×)Ñ)Ó*¨QÒ.ÜÑO°R·Y±Y×5FÑ5F×5NÑ5NÔOÔOð ØrŠ   c                ó¢  ‡‡— t        | «      }|j                  \  }t        j                  |«      \  }Š| j                  j                  |«      5  | j                  j                  |«       ddd«       | j                  j                  |«       t        | «      sJ ‚ || |«      Št        j                  ‰«      dˆˆfd„«       }|S # 1 sw Y   Œ[xY w)z�
    Mutate gm so it returns a tuple.  This is only needed for graphs
    not created by torchdynamo that return non-tuples.
    Nc                 ó<   •— t        j                   ‰| i |¤Ž‰«      S rƒ   )r>  Útree_unflatten)r�   rŽ   r"  Úspecs     €€rˆ   r�  z(make_graph_return_tuple.<locals>.wrapper,  s    ø€ ä×$Ñ$¡[°$Ð%A¸&Ñ%AÀ4ÓHÐHrŠ   )r�   r   rŽ   r   r  r   )ru   r�   r>  Útree_flattenrÙ   Úinserting_beforerÔ   r�  r  rK  Úwraps)rá   r<  r  rî   rG  r�  r"  rK  s         @@rˆ   r  r    s´   ù€ ô �r‹?€DØ�I‰I�E€RÜ×"Ñ" 2Ó&�H€BˆØ	�‰×	"Ñ	" 4Ó	(ñ Ø
�‰�‰˜Ô÷à‡H�H×Ñ˜ÔÜ˜rÔ"Ð"Ð"á˜R Ó(€Kä‡_�_�[Ó!õIó "ðIð €N÷ð ús   ÁCÃCc                ó.  ‡‡— | j                   j                  Št        j                  j                   j	                  «       | j                   _        | j                  «         ||  ‰j                  |Ž «      Št        j                  ‰«      dˆˆfd„«       }|S )z‘
    `torch._dynamo.export` embeds pytrees in the FX graph codegen object,
    convert that to a normal FX graph so inductor can compile it.
    c                 óF   •— ‰j                   ‰ ‰j                  | Ž Ž «      S rƒ   )Úprocess_outputsÚprocess_inputs)r�   r   r"  s    €€rˆ   r�  z+handle_dynamo_export_graph.<locals>.wrapperB  s'   ø€ à×&Ñ&¡{Ð4J°G×4JÑ4JÈDÐ4QÐ'RÓSÐSrŠ   )r�   r   r  r   )	rÙ   r  rÇ   r   ÚCodeGenr‚  rR  rK  rN  )rá   r<  r  r�  r   r"  s       @@rˆ   r  r  3  sx   ù€ ð �h‰h×Ñ€GÜŸ™Ÿ™×.Ñ.Ó0€B‡H�HÔØ‡L�L„Ná˜RÐ!7 ×!7Ñ!7¸Ð!@ÓA€Kä‡_�_�[Ó!õTó "ðTð €NrŠ   c                ó†  — dd„}t        j                  | j                  j                  «       | j                  «      D ]‚  }t        |t        «      sŒt        |«      }|r,t        |«      r!|j                  «       t        j                  k7  rŒNt        |«      }|j                  d¬«      r y  ||j                  «       «       Œ„ y )Nc                ó¶   — ddl m} | €J ‚t        | j                  «      }|j	                  | «      }t        j                  |j                  › d�«        |d«      ‚)Nr   )r[   z9 does not support bfloat16 compilation natively, skippingzBF16 is not supported)Útorch._dynamo.excr[   r   r—  Úget_device_propertiesr  r  rº   )r  r[   Údevice_interfaceÚdevice_propss       rˆ   Úwarn_and_skipz1_check_triton_bf16_support.<locals>.warn_and_skipJ  s\   € Ý/àÐ!Ð!Ð!Ü3°F·K±KÓ@ÐØ'×=Ñ=¸fÓEˆÜ�‰Ø× Ñ Ð!Ð!ZÐ[ô	
ñ Ð/Ó0Ð0rŠ   F)Úincluding_emulation)r  útorch.device | Noner  r   )Ú	itertoolsÚchainÚgraph_inputsr@  rû  rÛ   rm   rl   rK   Ú	get_dtyperÇ   Úbfloat16r   Úis_bf16_supportedÚ
get_device)rÙ   rZ  rî   rÃ  rX  s        rˆ   rÿ  rÿ  I  sž   € ó	1ô —‘ × 2Ñ 2× 9Ñ 9Ó ;¸U×=PÑ=PÓQò )ˆÜ˜$¤Ô'ØÜ% dÓ+ˆáÜ˜+Ô&Ø�~‰~Ó¤5§>¡>Ò1àÜ3°KÓ@ÐØ×-Ñ-À%Ð-ÔHÙÙ�d—o‘oÓ'Õ(ñ)rŠ   )Úoptionsc               óB  — ddl m}  || «      sJ d«       ‚d}d}t        | j                  j                  t
        j                  j                  j                  «      r¶| j                  j                  }t
        j                  j                  j                  «       | j                  _        | j                  «        |j                  j                  �|j                  j                  }|j                  j                  �G|j                  j                  }n0t        | d«      r| j                  }t        | d«      r| j                  }|�t!        j"                  |«      nd}|�t!        j"                  |«      nd}	t!        j$                  ||xs i f«      \  }
}t'        d„ |
D «       «      rd	d
lm}m}  ||j.                  d«      ‚|
D �cg c]&  }t        |d   t
        j0                  «      r|d   nd‘Œ( }}|�||k7  rt3        d|› d|› �«      ‚|€||	dœni |¥||	dœ¥}||fS c c}w )z¹
    Flatten the inputs to the graph module and return the flat inputs and options.
    Add "aot_inductor.serialized_in_spec" and "aot_inductor.serialized_out_spec" to the options.
    r_   )r  zŽGraph output must be a tuple(). This is so that we can avoid pytree processing of the outputs. Please change the module to have tuple outputs.NÚ_in_specÚ	_out_specÚ c              3  óV   K  — | ]!  }t        |d    t        j                  «      –— Œ# y­w)r_   N)rÛ   rÇ   r6  r©   s     rˆ   r¬   z'_aoti_flatten_inputs.<locals>.<genexpr>•  s!   è ø€ Ò
M°AŒ:�a˜‘dœE×.Ñ.×/Ñ
Mùs   ‚')r   )Ú	UserErrorÚUserErrorTypez†TorchBind objects found in inputs. TorchBind object inputs are not supported in AOTInductor. TorchBind objects can only be attributes.z>Trying to flatten user inputs with exported input tree spec: 
z-
but actually got inputs with tree spec of: 
)zaot_inductor.serialized_in_specz aot_inductor.serialized_out_spec)r~  r  rÛ   rÙ   r  rÇ   r   r]   rS  r‚  Úpytree_infoÚin_specÚout_specr  rf  rg  r>  Útreespec_dumpsÚtree_flatten_with_pathrž  rV  rj  rk  ÚINVALID_INPUTrÞ   r  )rá   r�   rŽ   rd  r  rm  rn  r   Úserialized_in_specÚserialized_out_specÚflat_args_with_pathÚreceived_specrj  rk  r«   Úflat_example_inputss                   rˆ   Ú_aoti_flatten_inputsrw  e  s(  € õ 0á˜rÔ"ð ð	óÐ"ð €GØ€HÜ�"—(‘(×#Ñ#¤U§X¡X§^¡^×%BÑ%BÔCØ—(‘(×#Ñ#ˆÜ!ŸH™HŸN™N×2Ñ2Ó4ˆ�‰ÔØ
�‰Œà×Ñ×&Ñ&Ð2Ø×)Ñ)×1Ñ1ˆGØ×Ñ×'Ñ'Ð3Ø×*Ñ*×3Ñ3‰Hô �2�zÔ"Ø—k‘kˆGÜ�2�{Ô#Ø—|‘|ˆHà;BÐ;Nœ×.Ñ.¨wÔ7ÐTVÐà+3Ð+?Œ×Ñ˜hÔ'ÀRð ô *0×)FÑ)FØ	ˆvŠ|˜Ðó*Ñ&Ð˜ô Ñ
MÐ9LÔ
MÔMß>áØ×'Ñ'ð8ó
ð 	
ð CVöØ=>”
˜1˜Q™4¤§¡Ô.ˆˆ!Š°DÑ8ðÐð ð Ð˜}°Ò7ÜØMØˆið <àˆoðó
ð 	
ð ˆ?ð 0BØ0Cò	
ð

Øð
à/AØ0Cò
ð ð  Ð'Ð'ùò1s   Ç+Hc                ó  — t         j                  st         j                  rt        d«      ‚|�|n	t	        «       }t        | t        «      rt        | «      st        d«      ‚t        d„ |D «       «      rt        d«      ‚t        | «      }t        |«      xs  t        j                  j                  d¬«      }t        j                  j                   j#                  «       xs t        j                  j!                  |«      }t%        j&                  dt         j(                  ¬«      5  t+        t,        j.                  «      5  t1        «       5  t        j2                  j4                  j7                  t         j8                  j:                  dk(  «      5  t        j<                  j>                  jA                  «       5  tC        jD                  |«      5  t        j                  jG                  |«      5  tI        jJ                  «       5  tM        jN                  | ||||d¬	«      cd d d «       cd d d «       cd d d «       cd d d «       cd d d «       cd d d «       cd d d «       cd d d «       S # 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)
NzBautograd_cache_key is not supported with cpp_wrapper or fx_wrapperzDautograd_cache_key does not support graphs that don't return a tuplec              3  óR   K  — | ]  }t        |t        t        t        f«      –— Œ! y ­wrƒ   r  r©   s     rˆ   r¬   z%autograd_cache_key.<locals>.<genexpr>Ð  s   è ø€ Ò
F°!Œ:�aœ$¤¤tÐ,×-Ñ
Fùr  z;autograd_cache_key does not support nested container inputsTr¯  r#  r_   )rø  r÷  rÔ  r,  )(r   r«  rÎ  ÚRuntimeErrorre   rÛ   rS   r  ÚNotImplementedErrorrž  rÅ  r$   rÇ   r±  r²  rÈ   rÉ   rÊ   r3  r¢  r%  r\   rí  rî  r   r   rí  r-  rë  rì  r2  rB  r.  rx   rç  r>  r   r=  r,   Úautograd_cache_key)rÙ   rd  rø  r÷  rÔ  r·  r   s          rˆ   r|  r|  »  s…  € ô ×ÒœV×.Ò.ÜØPó
ð 	
ð
 )Ð4‰Ô:MÓ:Oð ô �%œÔ%Ô.AÀ%Ô.HÜ!ØRó
ð 	
ô Ñ
F°~Ô
FÔFÜ!ØIó
ð 	
ô 9¸Ó?Ðô ! Ó0ò ´E×4EÑ4E×4TÑ4TØ"ð 5Uó 5€Iô 	�‰×$Ñ$×,Ñ,Ó.ò 	3Ü�=‰=×'Ñ'¨	Ó2ð ô 	×ÑØ!%¼6×;UÑ;Uô	
ñ
ô 	œ}×BÑBÓCñ	
ô
 	!Ó"ñ
ô 	�‰×Ñ×-Ñ-Ü�L‰L×2Ñ2°aÑ7ó	
ñ
ô 	�‰×Ñ×6Ñ6Ó8ñ
ô 	
�‰˜	Ó"ñ
ô 	�‰×Ñ˜oÓ.ñ
ô 	×"Ñ"Ó$ñ
ô ×.Ñ.ØØØ-Ø)Ø"7Ø+/ô
÷
÷ 
÷ 
÷ 
÷ 
÷ 
÷ 
÷ 
÷ 
÷ 
ñ 
ú÷ 
÷ 
ñ 
ú÷ 
÷ 
ñ 
ú÷ 
÷ 
ñ 
ú÷ 
÷ 
ñ 
ú÷ 
÷ 
ñ 
ú÷ 
÷ 
ñ 
ú÷ 
÷ 
ñ 
úsÙ   Ä#K8Ä=K#ÅAKÆ)J9	Æ6J$Ç JÇ,I:ÈI%È	I:È%	JÈ.	J$È7	J9	É 	KÉ		K#É	K8É%I.É*I:É1	JÉ:JÉ?JÊ	J$ÊJÊJ$Ê	J9	Ê$J-Ê)J9	Ê0	KÊ9KÊ>KË	K#ËKËK#Ë	K8Ë#K,	Ë(K8Ë8L)r‡   r  r  z.Callable[[Callable[_P, _T]], Callable[_P, _T]])r�   r´  rŽ   r´  r  ro  )r  rœ   )r  zlist[dict[str, Any]])rÏ   r  r  ú	list[int])rá   rS   r  ro  )r  zCallable[..., None]r‘  )r$  rS   rá   rS   r  ro  )r$  rS   rá   rS   rA  r’   r  rS   )F)rá   rS   rU  rž   r  zGenerator[str, None, None])rá   rS   rd  rÙ  r  rS   )FN)rá   rS   rU  rž   rl  r\  r  rS   )rá   rS   rw  rž   r  ro  )TNN)
rá   rS   rƒ  rž   r„  zlist[str] | Noner…  z&Callable[[torch.fx.Node], bool] | Noner  z"tuple[GraphModule, dict[str, int]])rá   rS   r  rž   )rd  rÙ  r  ú"AbstractContextManager[None, None])r«  rž   r¬  rž   r  r~  )rá   rS   rd  rÙ  r¶  rž   r  z torch._subclasses.FakeTensorModerƒ   )r¼  zstr | dict[str, Any] | Noner  zdict[str, Any])r  zGenerator[None, None, None]rØ  )
rá   rS   rd  rÙ  rÖ  rÚ  rf  rÛ  r  rC   )rá   rS   rd  rÙ  rh  rÆ  rÖ  rÚ  rf  rÛ  r  rC   )r<  rÙ  rÇ  rÆ  r  rÆ  )rŒ   )rG  úCallable[..., Any]rÇ  rÆ  rB  r  rC  zlist[str | None]rÈ  rž   rw  rž   r  ztuple[torch.Tensor, ...]r>  zSequence[PlaceholderInfo]r?  ztuple[int, ...]r  r  )r«   útorch.Tensorr  r€  )rW  r€  rX  r€  rY  r}  r  ro  )rG  r  r<  zlist[torch.Tensor]rÇ  rÆ  r  rj  )
r  rS   r€  ri  rx  rÓ  r¼  údict[str, Any] | Noner  z'list[str | Weights] | str | GraphModule)r–  rS   r—  rÙ  r˜  rS   r™  r  rx  r  rÅ  rE   rÉ  r  rš  r5   r  z0Callable[[list[object]], Sequence[torch.Tensor]])T)rÝ  rž   r  zdict[str, object])rá   útorch.fx.GraphModuler  zAbstractContextManager[None])
rá   rS   r²  zSequence[object]r¬  zCallable[..., Any] | NonerŽ   r´  r  ztuple[GraphModule, GraphModule])rG  rS   r  r  )rÅ  rE   r  z'contextlib.AbstractContextManager[None])rá   zGraphModule | GmWrapperr  r»  )rá   rS   rd  rÙ  rÓ  r  r™  r  rÔ  r»  rx  úCallable[..., OutputCode]rw  rž   r  rC   )
rá   rS   rd  rÙ  rÔ  r»  rx  rƒ  r  rC   )r  rS   r€  rÙ  r  rS   )r  rS   r€  rÙ  rx  rƒ  r¼  r�  r÷  z+dict[OpOverload, Callable[..., Any]] | Nonerø  rž   rÖ  rÚ  r  ÚCompileFxOutput)rá   rS   r€  rÙ  r  rÙ  )r  rS   r€  rÙ  rx  rƒ  rø  rž   rÐ  rÏ  rÖ  rÚ  r  r„  )rá   rS   r<  rÙ  r  r  r  r  )rÙ   rk   r  ro  )
rá   r‚  r�   zlist[Any] | tuple[Any, ...]rŽ   r�  rd  r�  r  z tuple[list[Any], dict[str, Any]])rø  rž   ('  Ú
__future__r   r¥  rÚ  ÚenumrK  rÞ  r]  r  r   r­   rÛ  rM  rI  r  Úabcr   r   Úcollectionsr   r   Údataclassesr   Úinspectr	   r
   Úoperatorr   Útypingr   r   r   r   Útyping_extensionsr   r   r   r   r   r   Úunittestr   Útorch._inductor.async_compilerÇ   Útorch.fxÚtorch.utils._pytreer   Ú_pytreer>  Úfunctorch.compiler   r   Útorch._dispatch.pythonr   Útorch._dynamor   r   rí  rö   r„   Útorch._dynamo.backendsr   r?  Útorch._dynamo.device_interfacer   Útorch._dynamo.repro.after_aotr    r9  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Útorch._functorchr,   r3  Ú7torch._functorch._aot_autograd.subclass_parametrizationr-   Útorch._functorch.aot_autogradr.   r/   r0   r1   Útorch._inductor.codecacher2   r3   r4   r  r5   r6   r7   r8   r9   Ú!torch._inductor.custom_graph_passr:   Útorch._inductor.debugr;   r<   Útorch._inductor.output_coder=   r>   r?   r@   rA   rB   rC   Ú'torch._inductor.runtime.cache_dir_utilsrD   Útorch._inductor.utilsrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   Ú"torch._library.fake_class_registryrO   Útorch._library.opaque_objectrP   Útorch._loggingrQ   Útorch._utils_internalrR   rS   Ú%torch.fx.experimental.symbolic_shapesrT   rU   Ú torch.fx.passes.fake_tensor_proprV   Útorch.monitorrW   Útorch.utils._ordered_setrX   Ú_dynamo.excrZ   r[   Úfx._lazy_graph_moduler\   Úfx.graphr]   Úutils._tritonr^   rh  r`   ra   Úcodegen.commonrb   rc   rB  rd   Údecompositionre   Úexcrf   Úfx_passes.joint_graphrg   Úfx_passes.post_gradrh   ri   Úfx_passes.pre_gradrj   rÙ   rk   Úirrl   rm   Útriton_bundlerrn   ro   rp   rq   rr   rs   rt   ru   rv   rw   Úvirtualizedrx   Úcollections.abcry   rz   r{   r|   Ú
torch._opsr}   Ú)torch.export.pt2_archive._package_weightsr~   r   r€   r�   ró  r‰   r�   Útorch._inductor.fb.utilsÚ&torch._functorch._aot_autograd.schemasr�   r‘   r’   rË   r´  rÞ   r  r„  ÚEnumr”   rœ   r½   rÀ   Ú_fx_compile_configr�   r0  rŸ   r3  r    r6  r´   r•   r¼   Ú_loggingÚgetArtifactLoggerr   rì  rê  rA  r  rÒ   rä   rí   ró   Ú	lru_cacherø   Úcacher  r*  rP  rZ  r\  rk  rt  rŽ  r™  r¨  r­  r¹  r½  ÚcontextmanagerrÂ  rÄ  rÓ  rÞ  rð  rƒ  r‰  r•  rÿ  rC  rO  rS  r\  rA  rv  rÂ  r¥  rê  rè  r³  r¶  r¸  r»  rÅ  rÚ  rß  rî  rð  r~  r  r  r  r  r  r  rÿ  rw  r|  rŒ   rŠ   rˆ   ú<module>rÃ     sà
  ðÝ "ã Û Û Û Û 	Û Û Û Û 	Û 
Û Û Û ß #Ý #Ý -Ý !Ý  Ý Ý ß 7Ó 7ß U× UÝ ã $Û ß $Ð $Ý AÝ Ý ;÷ó õ ;Ý CÝ =÷÷ ÷ ñ ÷ Fõ÷ó ÷ OÑ N÷õ õ B÷÷÷ ñ õ >÷÷ ÷ õ @Ý 7Ý +Ý ?Ý  ß WÝ ;Ý &Ý /ç 5Ý :Ý %Ý &ß 3Ñ 3ß UÝ Ý .Ý Ý 5ß BÝ /Ý  ß 'Ý )÷
÷ 
õ 
õ ñ ß=Ñ=å:Ý%ÝAå$ñ ˆtƒ_€ÙˆTƒ]€áÐ(˜×(Ò(Ô*ó%ô÷ Lá÷ñ ð 	�$�v‘,� ¨%¯,ª,Ñ!7Ð7Ñ8¸3Ñ>ÀÀcÁÑJÈWÑTð ô
�D—I’Iô ð ÷ð ó ðóCóDñ .Ó/Ð Ø$×)Ò)€Ø%×/Ò/Ð Ø+×;Ò;Ð à€g×Ò˜Ó!€Ø—’×0Ò0°¸<ÓH€Ø—n’n×6Ò6°xÐARÓSÐ Ø—~’~×7Ò7¸ÐBTÓUÐ Ø—N’N×4Ò4ØÐ'óÐ ð —~’~×7Ò7¸ÐBTÓUÐ ó
4óAó,'ó=ð  €×Ò�TÓò/ó ð/ð ‡‚ò	
ó ð	
óH/ðVMØ	ðMØ%ðMØ8FðMàóMðb 38ð!Øð!Ø+/ð!àó!ð0NØðNà'ðNð óNð0 "'Ø(,ð'Øð'àð'ð &ð'ð ó	'ôT+ð" "Ø.2ØCGð	E(ØðE(àðE(ð ,ðE(ð Að	E(ð
 (óE(óPð*(Ø'ð(à'ó(ð.	(Øð	(Ø!%ð	(à'ó	(ð ).ðØðà'ðð "&ðð &ó	ð@ 37ð(Ø/ð(àó(ð ×Òòó ñô@�y¨ö @ô˜õ ð '+ð6
Øð6
à'ð6
ð $ð6
ð 'ð	6
ð
 ô6
ñr Ð2Ô3ð '+ðmØðmà'ðmð $ðmð -ð	mð
 òmó 4ñm÷`Bò Bô#�õ #ô6W™)õ Wð@ '+ð<YØð<Yà'ð<Yð
 #ð<Yð $ð<Yð -ð<Yð ô<Yð~ Øð à$ð ð ô ðJ (*ð*ð +-Ø.0Ø*,ñ*Øð*à$ð*ð ð	*ð
 #ð*ð ð*ð ð*ð (ð*ð ,ð*ð (ð*ð ô*ôZUð#Ø	ð#à	ð#ð ð#ð 
ô	#ð( (*ð_MØð_Màð_Mð %ð_Mð &ô	_MñJ )9Ø,0ð	@+Øð@+à$ð@+ð &ð@+ð *ð	@+ð
 -ô@+ñF �q“�ðhØ#ðhà+ðhð ðhð ð	hð
 &ðhð ðhð ðhð %ðhð 6ôhõVô4ð6 :>ñ<Øð<à"ð<ð 7ð<ð ð<ð %ô<ô~ð$Øð$à,ô$ñ �$Ô÷0ð 0ó ñ0ð;Øð;àô;ñH 0@ØðCØðCà'ðCð  ðCð ð	Cð
 /ðCð -ðCð ðCð ôCñT 0@ð	;Øð;à'ð;ð /ð;ð -ð	;ð
 ô;ð|/Øð/Ø*=ð/àô/ñd �$Ôô˜7 2 r 6™?ó ó ññ" 0@Ø,0ØBFØ"Ø&*ðhØðhà(ðhð -ðhð *ð	hð
 @ðhð ðhð $ðhð ôhðVØðØ&9ðàôðJ CVØ&*ñ/Øð/à(ð/ð -ð/ð ð	/ð @ð/ð $ð/ð ô/ðp CVØ&*ñK9ØðK9à(ðK9ð -ðK9ð ð	K9ð @ðK9ð $ðK9ð ôK9ô\ð$Øðàðð #ðð ô	ð4Øðàðð #ðð ô	ô,)ð> %)ðS(ð
 &*ñS(ØðS(à
%ðS(ð "ðS(ð
 #ðS(ð &ôS(ðt ð	C
ð õC
rŠ   