Ë
    g^(hÿZ ã                  ót	  — 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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mZ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+Z, d dl-m.Z. d dl'm/Z/ d dl0m1Z1 d dl2m3Z3m4Z5mZ6m*Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d dlFm4ZG d dlHmIZI d dlJmKZKmLZLmMZM d dlNmOZOmPZPmQZQ d dlRmSZSmTZTmUZUmVZV d dlWmXZX d dlYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ d dl`maZa d dlbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZj d dlkmlZl d dlmmnZn d dl(moZo d dlpmqZqmrZr d dlsmtZt d d lumvZv d d!lwmxZx d"d#lymzZz 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„m4Z4m…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(d0l“m”Z” d(d1l•m–Z–m—Z— d(d2l˜m™Z™ d(d3lšm›Z› d(d4l*mœZœm�Z�mžZžmŸZŸm Z m¡Z¡m¢Z¢m£Z£m¤Z¤ d(d5l¥m¦Z¦ erd d6l§m¨Z¨m©Z© d d7lYmªZª d d8l«m¬Z¬ d(d9l•m­Z­  e d:«      Z® ed;«      Z¯es e4�j`                  «       s	dzd<„Z±d{d=„Z²nd d>l³m²Z²m±Z± er
d d?l´mµZµm¶Z¶m·Z·  G d@„ dAe�jp                  «      Z¹d|dB„Zº eº«       Z» e�jx                  e½«      Z¾e'�j~                  �j�                  e½dC«      ZÁe'�j~                  �j�                  e½dD«      ZÂe'�j~                  �j�                  e½dE«      ZÃe'�j~                  �j�                  e½dF«      ZÄd}dG„ZÅd~dH„ZÆ e�jŽ                  d«      ddI„«       ZÈ e�jŽ                  d«      d€dJ„«       ZÉ	 	 	 	 	 	 	 	 d�dK„ZÊd‚dL„ZË	 	 	 	 	 	 dƒdM„ZÌd~dN„ZÍd„d…dP„ZÎ	 	 	 d†	 	 	 	 	 	 	 	 	 d‡dQ„ZÏdˆdR„ZÐ	 	 	 	 d‰dS„ZÑ	 	 	 	 	 	 dŠdT„ZÒ	 d„	 	 	 	 	 	 	 d‹dU„ZÓ	 dŒ	 	 	 d�dV„ZÔe�jª                  dŽdW„«       ZÖ G dX„ dYe"dO¬Z«      Z× G d[„ d\e!«      ZØ	 	 	 	 	 	 	 	 d�d]„ZÙ e±d^¬_«      	 	 	 	 	 	 	 	 d�d`„«       ZÚ G da„ db«      ZÛ G dc„ dde«      ZÜ G de„ dfeÜ«      ZÝ	 	 	 	 	 	 	 	 	 	 d‘dg„ZÞ	 	 	 	 	 	 d’dh„Zß	 d“didididjœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d”dk„Zàd•dl„Zá	 	 	 	 	 	 	 	 d–dm„Zâ	 d“	 	 	 	 	 	 	 d—dn„ZãeÙdf	 	 	 	 	 	 	 	 	 d˜do„Zä ed «      Zå	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d™dp„Zædšdq„Zçd›dr„ZèeÙddf	 	 	 	 	 	 	 	 	 	 	 dœds„Zédˆdt„Zê	 	 	 	 	 	 	 	 d�du„Zë	 	 	 	 	 	 	 	 d�dv„Zìdždw„Zí	 dŒddxœ	 	 	 	 	 	 	 	 	 dŸdy„Zîy) é    )ÚannotationsN)ÚABCÚabstractmethod)Údefaultdict)ÚAbstractContextManager)Úcurrentframe)Úcount)ÚAnyÚCallableÚOptionalÚTYPE_CHECKINGÚTypeVarÚUnion)ÚNeverÚoverrideÚ	ParamSpecÚProtocolÚ	TypedDictÚUnpack)Úmock)Ú#min_cut_rematerialization_partition)Úfx)Úenable_python_dispatcher)Úcompiled_autogradÚconfigÚloggingÚutils)Úget_interface_for_device)Úwrap_compiler_debug)	Úchromium_event_timedÚCompileEventLoggerÚcountersÚdetect_fake_modeÚdynamo_timedÚflatten_graph_inputsÚget_metrics_contextÚlazy_format_graph_codeÚset_feature_use)r   )Ú!unwrap_tensor_subclass_parameters)Úaot_export_moduleÚmake_boxed_funcÚSerializableAOTDispatchCompiler)Ú	code_hashÚFxGraphCacheÚoutput_code_log)ÚBoxedDeviceIndexÚformat_default_skip_messageÚ#log_cudagraph_skip_and_bump_counterÚPlaceholderInfo)Úsave_args_for_compile_fx_inner)ÚCompiledAOTIÚCompiledFxGraphÚCompiledFxGraphConstantsWithGmÚget_expanded_dimsÚindex_expanded_dimsÚ
OutputCode)Ú	cache_dir)Ú	BoxedBoolÚcount_tangentsÚfresh_inductor_cacheÚ	InputTypeÚis_gpuÚshould_assume_input_alignedÚ should_use_remote_fx_graph_cacheÚtensor_is_aligned)Útrace_structured)Úcompile_time_strobelight_meta)ÚGraphModule)Úfree_unbacked_symbolsÚSymExprPrinter)ÚFakeTensorProp)Ú_WaitCounter)Ú
OrderedSeté   )Úaot_autograd)ÚShortenTracebackÚ	SkipFrame)Ú_use_lazy_graph_module)Ú_PyTreeCodeGen)Ú
has_tritoné   )r   Úmetrics)ÚDebugContext)Úselect_decomp_table)ÚInductorError)Újoint_graph_passes)Úpost_grad_passesÚview_to_reshape)Úpre_grad_passes)ÚGraphLowering)Úget_device_typeÚIRNode)Úcomplex_memory_overlap)Ú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)Ú	GeneratorÚSequence)Ú_StrideExprStr)Ú
OpOverload)ÚExternKernelNodeÚ_PÚ_Tc                ó"   — t         j                  S ©N)Údynamo_utilsÚidentity©Úattrs    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/compile_fx.pyÚtime_and_logry   ˆ   s   € Ü×$Ñ$Ð$ó    c                  ó   — y rs   © )ÚargsÚkwargss     rx   Úlog_optimus_to_scubar   ‹   s   € Ørz   )r   ry   )ÚFQNÚGraphInputNameÚGraphSignaturec                  ó   — e Zd ZdZdZdZy)ÚFxCompileModer   rS   rL   N)Ú__name__Ú
__module__Ú__qualname__ÚNORMALÚ	SERIALIZEÚ
SUBPROCESSr|   rz   rx   r„   r„   ™   s   „ Ø€Fð €Ià�Jrz   r„   c                 óê  — d} t         j                  j                  | «      }|€t        j                  S 	 |j                  «       }t        |   S # t        $ r› dd l} |j                  t        «      }|j                  d|| dj                  t        d„ t        j                  j                  «       D «       «      «      «       t         j                  j                  | «       t        j                  cY S w xY w)NÚTORCHINDUCTOR_FX_COMPILE_MODEr   z>Invalid value of %s for %s. Expected one of %s. Using default.ú, c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrs   )Úrepr©Ú.0Úxs     rx   ú	<genexpr>z+_fx_compile_mode_default.<locals>.<genexpr>²   s   è ø€ ÒO¨œT !ŸWÑOùs   ‚)ÚosÚenvironÚgetr„   rˆ   ÚupperÚKeyErrorr   Ú	getLoggerr…   ÚerrorÚjoinÚsortedÚ__members__ÚkeysÚpop)ÚnameÚvaluer   Úlogs       rx   Ú_fx_compile_mode_defaultr£   ¢   sÂ   € Ø*€DÜ�J‰J�N‰N˜4Ó €EØ€}Ü×#Ñ#Ð#ð$Ø—‘“ˆÜ˜UÑ#Ð#øÜò $Ûàˆg×Ñ¤Ó)ˆØ�	‰	ØLØØØ�I‰I”fÑO¬m×.GÑ.G×.LÑ.LÓ.NÔOÓOÓPô		
ô 	�
‰
�‰�tÔÜ×#Ñ#Ò#ð$ús   µA ÁB!C2Ã1C2Ú
perf_hintsÚpre_grad_graphsÚpost_grad_graphsÚcudagraph_static_inputsc                óÌ   — t         j                  j                  j                  «       }t	        t        | «      «      }|r|j                  s|S ||j                  j                  z   S rs   )ÚtorchÚ_guardsÚTracingContextÚtry_getÚlistÚrangeÚfw_metadataÚstatic_input_indices)Ú	num_fixedÚcontextÚfixeds      rx   Úget_static_input_idxsr´   Ä   sR   € ô
 �m‰m×*Ñ*×2Ñ2Ó4€GÜ”�yÓ!Ó"€EÙ˜'×-Ò-Øˆà�7×&Ñ&×;Ñ;Ñ;Ð;rz   c                ó¤  — | j                   j                  d¬«      d   }g }|j                  d   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_nodesr}   Ú
isinstancer©   r   ÚNodeÚmetar–   ÚTensorÚappendÚstride)Úgmrg   Úoutput_stridesr¶   r¹   s        rx   Úrecord_original_output_stridesrÅ   Ñ   s«   € Ø—(‘(×%Ñ%¨Ð%Ó2°1Ñ5€KØ€NØ×"Ñ" 1Ñ%ò (ˆä�vœuŸx™xŸ}™}Ô-ØŸ™Ÿ™¨Ó.Ð.�Ð;Ü˜3¤§¡Ô-à×!Ñ! #§*¡*£,Õ/à×!Ñ! $Õ'ð(ð 3A€K×ÑÐ.Ò/rz   c                 ó4   — t        j                  t        «      S rs   )Údynamo_loggingÚget_step_loggerr¢   r|   rz   rx   Ú_step_loggerrÉ   à   s   € ä×)Ñ)¬#Ó.Ð.rz   c                 ó  — t         j                  j                  «       rgt         j                  j                  j                  j
                  s8t         j                  j                  «       dk\  rt        j                  d«       y y y y )N)é   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Ú
allow_tf32Úget_device_capabilityÚwarningsÚwarnr|   rz   rx   Ú_warn_tf32_disabledrÔ   å   sc   € ô 	�
‰
×ÑÔ!Ü—‘×#Ñ#×*Ñ*×5Ò5Ü�J‰J×,Ñ,Ó.°&Ò8ä�‰ðdõ	
ð 9ð 6ð 	"rz   c           	     óš  — ddl m}m} 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(                  «      d	   j*                  d   }g }|j,                  }|j.                  }|j0                  }t3        |«      D ]y  \  }}d }|t5        |«      t5        |«      z   t5        |«      z   k  r;|j                  |v r||j                     }n|j                  |v r||j                     }|j                  |«       Œ{  |||
|t7        j8                  «       d |i «      }|S )
Nr   )Ú_assign_attrÚ	_AttrKindF)Úremove_duplicate)Ú	attr_kindÚplaceholderr·   )Ú_unliftéÿÿÿÿ)Útorch.export.unflattenrÖ   r×   Únamed_parametersÚ	PARAMETERÚnamed_buffersÚBUFFERr»   r¼   r    Úinputs_to_parametersrÁ   Úinputs_to_buffersrb   r¿   rd   Úuser_inputsÚtorch.export._unliftrÛ   r­   Únodesr}   Úbuffers_to_mutateÚuser_inputs_to_mutateÚoutput_tokensÚ	enumerateÚlenÚpytreeÚLeafSpec)ÚmodrÃ   Úgraph_signaturerÖ   r×   Ú
state_dictr    ÚparamÚbufferÚplaceholder_nodesÚlifted_inputsÚnodeÚ	node_nameÚparameter_nameÚbuffer_namerÛ   ÚoutputsÚmutated_outputsÚbuffer_mutationsÚuser_input_mutationsré   ÚidxÚoutr¡   Úunlifted_gms                            rx   Ú_unlift_graphr   ò   sq  € ÷ ?àOQ€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ð  × ;Ñ ;Ñ;Ð;Ð;Ø× Ñ  Õ&ð'õ -ä�2—8‘8—>‘>Ó" 2Ñ&×+Ñ+¨AÑ.€GØ€OØ&×8Ñ8ÐØ*×@Ñ@ÐØ#×1Ñ1€MÜ˜gÓ&ò 	&‰ˆˆSØ6:ˆà”Ð%Ó&¬Ð-AÓ)BÑBÄSÈÓEWÑWÒWØ�x‰xÐ+Ñ+Ø(¨¯©Ñ2‘Ø—‘Ð1Ñ1Ø,¨S¯X©XÑ6�à×Ñ˜uÕ%ð	&ñ Ø
ØØÜ�‰ÓØØØ
ó€Kð Ðrz   c           	   #  óø  K  — t        t        j                  | j                  j	                  dt
        j                  j                  j                  ¬«      | j                  j	                  dt
        j                  j                  j                  ¬«      «      «      D ]Ú  }|j                  t
        j                  j                  j                  k(  r;|j                  d   j                  }|j                  d   j                  }|–— |–— Œo|j                  t
        j                  j                  j                  k(  sŒ¡|j                  d   j                  }|j                  d   j                  }|–— |–— ŒÜ y ­w)NÚcall_function©r¸   ÚtargetrS   rL   r   )rœ   Ú	itertoolsÚchainr»   r¼   r©   ÚopsÚhigher_orderÚcondÚ
while_loopr  r}   r    )rÃ   rõ   Útrue_subgraph_nameÚfalse_subgraph_nameÚcond_subgraph_nameÚbody_subgraph_names         rx   Ú_get_subgraph_namesr  >  s  è ø€ ÜÜ�‰Ø�H‰H×Ñ ?¼5¿9¹9×;QÑ;Q×;VÑ;VÐÓWØ�H‰H×ÑØ"¬5¯9©9×+AÑ+A×+LÑ+Lð  ó ó	
óò %ˆð �;‰;œ%Ÿ)™)×0Ñ0×5Ñ5Ò5Ø!%§¡¨1¡×!2Ñ!2ÐØ"&§)¡)¨A¡,×"3Ñ"3ÐØ$Ò$Ø%Ó%Ø�[‰[œEŸI™I×2Ñ2×=Ñ=Ó=Ø!%§¡¨1¡×!2Ñ!2ÐØ!%§¡¨1¡×!2Ñ!2ÐØ$Ò$Ø$Ó$ñ#%ùs   ‚D:E:Ä==E:c                ó  — t        ddd¬«      5  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   Úadd_pre_grad_passesÚremove_pre_grad_passesr  Úgetattrr  Úsetattrr[   )rÃ   Úexample_inputsÚ
add_passesÚremove_passesÚsubgraph_nameÚsubgraphÚnew_subgraphs          rx   r  r  S  sŽ   € ô 
Ø$Ø"Ø!8ô
ñ Nô
 ×/Ñ/ˆ
Ü×5Ñ5ˆÜ0°Ó4ò 	5ˆMÜ˜r =Ó1ˆHä5°hÀÓCˆLÜ�B˜ |Õ4ð		5ô
 ˜r >°:¸}ÓM÷N÷ Nò Nús   �A#A<Á<Bc                ó®   — t        ddd¬«      5  t        | «      D ]  }t        | |«      }t        |«       Œ t	        | «       d d d «       y # 1 sw Y   y xY w)NÚ_recursive_joint_graph_passesTÚjoint_graph_pass_time_usr  )r$   r  r  r!  rX   )rÃ   r  r  s      rx   r!  r!  f  s\   € Ü	Ø'Ø"Ø!;ô
ñ ô
 1°Ó4ò 	4ˆMÜ˜r =Ó1ˆHÜ)¨(Õ3ð	4ô 	˜2Ô÷÷ ñ ús   �3AÁAFc                ó²   — t        ddd¬«      5  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  r  r$  rY   )rÃ   Úis_inferencer  r  s       rx   r$  r$  r  sb   € Ü	Ø%Ø"Ø!9ô
ñ +ô
 1°Ó4ò 	@ˆMÜ˜r =Ó1ˆHÜ'¨°,Õ?ð	@ô 	˜˜\Ô*÷+÷ +ñ +ús   �5AÁAc                ó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_foldingr(  r)  r*  r+  r,  rê   Útupler»   ræ   r}   r    rÁ   r¿   r¸   ÚusersÚ
erase_nodeÚ	recompile)rÃ   Úskip_constructorÚlifted_constant_namesÚskip_folding_node_fnr(  r)  r*  r+  r,  Úconst_gmÚconst_resultrý   r’   Úconst_outputsÚto_erase_nodeÚto_replace_nodeÚconst_output_indexrõ   Únew_const_nameÚns                       rx   Úsplit_const_gmr>  ~  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  ÚatenrK   ÚmmÚdefaultÚaddmmÚbmmÚbaddbmmr»   r¼   r½   r¿   r–   rÀ   ÚdtypeÚfloat32ÚdeviceÚtype)rÃ   r@  Útf32_opsr  rõ   s        rx   Úis_tf32_warning_applicablerK  Æ  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Ó:âñ	ðð rz   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rs   )r½   r©   rÀ   r@   rH  rI  )r‘   Úts     rx   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_cpurO  Úperf_hint_logÚinfoÚpatchÚaot_inductorÚuse_runtime_constant_foldingÚ
contextlibÚnullcontext)r  Úhas_gpus     rx   Ú#maybe_disable_comprehensive_paddingrZ  Û  sŽ   € ô ñ Ø'5ôó €Gô ×!Ò!¤f×&BÒ&BÉ7Ü×ÑÐ>Ô?Ü�|‰|°%Ô8Ð8Ü	×	Ñ	×	9Ò	9Ü×ÑØIô	
ô �|‰|°%Ô8Ð8ä×%Ñ%Ó'Ð'rz   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   rT  rW  rX  )Úcpp_wrapperÚaot_modes     rx   Úmaybe_disable_graph_partitionr_  ò  s'   € ñ ‘hÜ�|‰|¨EÔ2Ð2ä×%Ñ%Ó'Ð'rz   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)Úmoderb  N)r   r#   r©   Ú_subclassesÚFakeTensorModerI   Ú	propagaterW  rX  r   rT  ÚobjectÚpropagate_dont_convert_inputs)rÃ   r  Úforce_allow_non_fake_inputsÚ	fake_modeÚctxs        rx   Úfake_tensor_proprl  þ  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rs   )r   rT  Úget_config_copy)Úconfig_patchess    rx   Úget_patched_config_dictrp    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_cachesr>   r;   r|   rz   rx   Úwith_fresh_cache_if_configru  $  s>   è ø€ ä×"Ò"ô "¤i£k¸%Ô@ñ 	Û÷	ð 	ô 	÷	ð 	üs   ‚&A¨;­A»AÁ Ac                  ór   — 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<   y)Ú_CompileFxKwargszOptional[BoxedBool]Ú
cudagraphsúSequence[int]Ústatic_input_idxsÚboolÚis_backwardzOptional[int]Úgraph_idr]  r^  r&  zOptional[bool]Ú
layout_optz1Optional[Callable[[list[ExternKernelNode]], Any]]Úextern_node_serializerzOptional[BoxedDeviceIndex]Úboxed_forward_device_indexN)r…   r†   r‡   Ú__annotations__r|   rz   rx   rw  rw  0  s=   … Ø#Ó#Ø$Ó$ØÓØÓØÓØƒNØÓØÓØMÓMØ :Ô:rz   rw  )Útotalc                  ó$   — e Zd Z	 	 	 	 	 	 	 	 dd„Zy)Ú_CompileFxCallablec                 ó   — y rs   r|   )ÚselfrÃ   r  r~   s       rx   Ú__call__z_CompileFxCallable.__call__>  s   € ð
 rz   N©rÃ   rF   r  úSequence[InputType]r~   úUnpack[_CompileFxKwargs]Úreturnr:   )r…   r†   r‡   r‡  r|   rz   rx   r„  r„  =  s-   „ ðàðð ,ðð +ð	ð
 
ôrz   r„  c           	     óx  — |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 }|j                  t        j
                  j                  j                  «       «       |j                  t        t        j                  «      «       |j                  t        j                  dddd¬«      «       |j                  t        d«      j                  «       «       t        j                  j                   j"                  r7|j                  t        j                  j                   j%                  «       «       |j                  t'        «       «       |j                  t)        «       «       t+        j,                  d|d   ¬«        t/        t0        d¬«      | |fi |¤Žcd d d «       S # 1 sw Y   y xY w)Nrx  rz  r|   r|  Fr}  r]  r&  r€  r~  r  Úcompile_fx_innerÚinductor_compileTÚ#inductor_cumulative_compile_time_us)Ú
phase_namer  r  z#pytorch.wait_counter.dynamo_compile)r|  Úinductor)Úcompiler_name)Ú
setdefaultrW  Ú	ExitStackÚenter_contextr©   r   Ú_python_dispatchÚ_disable_current_modesrP   Údynamo_configÚuse_lazy_graph_modulert   r$   rJ   ÚguardÚ_dynamoÚcallback_handlerÚprevent_duplicate_callbacksÚinstall_callbacksru  rU   r!   Úpt2_compiler   Ú_compile_fx_inner)rÃ   r  r~   Ústacks       rx   r�  r�  F  sÓ  € ð
 ×Ñ�l DÔ)Ø
×ÑÐ)¨2Ô.Ø
×Ñ�m UÔ+Ø
×Ñ�j $Ô'Ø
×Ñ�m UÔ+Ø
×Ñ�n eÔ,Ø
×ÑÐ2°DÔ9Ø
×Ñ�l DÔ)Ø
×ÑÐ.°Ô5ô 
×	Ñ	Ó	ð 
 5Ø×ÑœEŸK™K×8Ñ8×OÑOÓQÔRØ×ÑÔ2´=×3VÑ3VÓWÔXØ×ÑÜ×%Ñ%Ø"Ø-Ø&*Ø)Nô	ô	
ð 	×ÑœLÐ)NÓO×UÑUÓWÔXä�=‰=×)Ñ)×EÒEØ×Ñ¤§¡× >Ñ >× PÑ PÓ RÔSà×ÑÔ6Ó8Ô9Ø×ÑœL›NÔ+Ü×&Ñ&ØØ˜}Ñ-õ	
ð PÔ"Ô#4ÀJÔOØØñ
ð ñ
÷7
÷ 
ò 
ús   Â7E/H0È0H9zcompilation time (in seconds)rv   c                óò  ‡‡— t         j                  }t        j                  | j                  «      dk(  r.|s,ddlm} |j                  | «       t        | j                  «      S |j                  dd«      }t        j                  d|«       t        ||«      }t        t        t!        t#        | j                  j$                  «      «      «      j&                  d   t(        t*        f«      sJ d| j                  › �«       ‚|j-                  d«      x}€(t/        t0        j2                  j4                  «      x|d<   }t0        j6                  rt9        | |fi |¤Ž t;        j:                  «       }t=        «       }	t?        d	«      jA                  «       5 }
t?        d
«      jA                  «       5  t0        jB                   xr t0        jD                  xs |	xr | }t0        jD                  }|	}tG        d|«       tI        |«      D ]L  \  }}t        |tJ        jL                  «      sŒ!tO        |jP                  jR                  «      sŒA||v sŒFd|_*        ŒN d}d}dŠd}tW        | «      }t;        jX                  «       }|rht[        j\                  | ||||«      \  }Š|�J|\  }}|rt[        j^                  «       }t[        j`                  ||||||j-                  dd«      |¬«      \  }Š‰�‰d   dk(  r|�J ‚tc        | ||fi |¤Ž}nó‰d   dk(  rÍ|�J ‚|€J ‚te        jf                  «        	 tc        | ||fi |¤Ž}|€J ‚t;        jX                  «       |z
  |_4        |d   }||_5        te        jl                  «       \  }}|jo                  |«       	 te        j~                  «        |�t�        |«      ‰d<   |jh                  ‰d<   t[        j‚                  |||||«       n‰d   dk(  sJ ‚|€J ‚|€J ‚|d   }||_5        |€J ‚|}‰�‰d   ndŠt…        j†                  d‰› �‰xs i |¬«       t…        jˆ                  d‰|‰r‰j-                  d«      nd‰r‰j-                  d«      nd‰r‰j-                  d«      nd||¬«       ‰�t‹        dˆfd „ˆfd!„¬"«       |j�                  |||«       ddd«       ddd«       tŽ        j                  d#t;        j:                  «       |z
  «       tŽ        j‘                  d$d%j“                  d&„ t”        d'   j—                  «       D «       «      «       tJ        j˜                  jš                  jœ                  jŸ                  «         t¡        «       t¢        j¤                  d(|d   rd)nd*› d+|d,   › �«       S # tp        tr        f$ r ‚ tt        $ r3}tw        |ty        «       «      j{                  |j|                  «      d‚d}~ww xY w# te        j~                  «        w xY w# 1 sw Y   �ŒHxY w# 1 sw Y   �ŒMxY w)-zÈ
    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   )Ú_LazyGraphModulerz  r|   z&static input idxs compile_fx_inner: %szGinductor can only compile FX graphs which return a tuple/list, but got rx  Nz+pytorch.wait_counter.fx_codegen_and_compilez*pytorch.wait_counter.all_compilation_typesÚfx_cacheTr|  F)r|  Ú	constantsÚcache_stateÚbypassÚmissÚtriton_bundler_metaÚtime_taken_nsÚhitÚdisabledÚfx_graph_cache_)ÚmetadataÚtime_nsrŽ  ÚkeyÚ
componentsÚcache_bypass_reasonz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   €rx   ú<lambda>z#_compile_fx_inner.<locals>.<lambda>:  s   ø€ Ø-¨k¨]Ð;Ø &ñ%€ rz   c                 ó.   •— t        j                  ‰ «      S rs   ©r¸  Údumps)Ú
cache_infos   €rx   r»  z#_compile_fx_inner.<locals>.<lambda>>  s   ø€ ¤4§:¡:¨jÓ#9€ rz   ©Úmetadata_fnÚ
payload_fnz%FX codegen and compilation took %.3fsz&Overview info of inductor aten mms: %sr�   c              3  ó4   K  — | ]  \  }}d |› d|› d�–— Œ y­w)ú(ú: ú)Nr|   )r‘   r°  r¡   s      rx   r“   z$_compile_fx_inner.<locals>.<genexpr>G  s(   è ø€ ò 
Ù$. C¨ˆa�ˆu�B�u�g˜QÔñ
ùs   ‚Úaten_mm_infoztorchinductor done compiling Ú	BACKWARDSÚFORWARDSú graph r}  )Srj   Úaot_compilationrt   Úcount_callsr»   Útorch.fx._lazy_graph_moduler£  Úforce_recompiler+   Úforwardr“  Ústatic_inputs_logÚdebugÚget_input_idxs_to_checkr½   ÚnextÚiterÚreversedræ   r}   r/  r­   r–   r<   r   Útritonrx  Ú	save_argsr4   ÚtimerB   rJ   rš  rt  Úfx_graph_cacher(   rê   r©   rÀ   r@   rH  rI  Ú_is_inductor_staticr7   r¯  r.   Úprepare_keyÚget_remote_cacheÚload_with_keyÚfx_codegen_and_compiler`   Úbegin_compileÚ_time_taken_nsÚ_fx_graph_cache_keyÚcollectÚset_triton_bundlerN   rO   Ú	ExceptionrW   r   Úwith_tracebackÚ__traceback__Úend_compileÚstrÚ_save_graphr!   ÚinstantrŸ  rD   Úpost_compiler¢   rS  r›   r"   ÚitemsÚ	_inductorÚasync_compileÚCompiledTritonKernelsÚcache_clearrÉ   r   ÚINFO)rÃ   r  Úgraph_kwargsr^  r£  rz  Úinputs_to_checkrx  ÚstartÚfx_graph_remote_cacheÚ_Ú	use_cacheÚlocalÚremoteÚiÚinputÚmb_compiled_graphÚkey_infoÚremote_cacher¥  Ú
start_timer°  Údebug_linesÚ	cache_keyÚtriton_bundler©  ÚeÚcompiled_graphr¿  r¦  s                               @@rx   r   r   {  s>  ù€ ô ×&Ñ&€Hä×Ñ §¡Ó)¨QÒ.±xõ 	Aà×(Ñ(¨Ô,Ü˜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ð #×&Ñ& |Ó4Ð4ˆ
Ð=Ü2;¼F¿M¹M×<TÑ<TÓ2UÐUˆ�\Ñ" ZÜ×ÒÜ&ØØñ	
ð ò	
ô �I‰I‹K€Eä<Ó>Ðô 	ÐBÓC×IÑIÓKðZKØOPÜÐAÓB×HÑHÓJñZKô
 ×+Ñ+Ð+ò Ü×&Ñ&Ò?Ð*?òà�ð 	ô
 ×%Ñ%ˆØ&ˆÜ˜
 IÔ.ô " .Ó1ò 	1‰HˆAˆuä˜5¤%§,¡,Õ/Ü˜5Ÿ<™<×,Ñ,Õ-ØÐ*Ò*à,0�Õ)ð	1ð 37ÐØˆØˆ
ØˆÜ2°2Ó6ˆ	ô —\‘\“^ˆ
áÜ%1×%=Ñ%=Ø�N L°/À6ó&Ñ"ˆX�zð
 Ð#Ø#+Ñ ��[ÙÜ#/×#@Ñ#@Ó#B�LÜ0<×0JÑ0JØØØ"ØØ Ø ,× 0Ñ 0°ÀÓ FØ'ô1Ñ-Ð! :ð Ð ¨MÑ!:¸hÒ!FØ$Ð,Ð,Ð,Ü 6Ø�N Oñ!Ø7Cñ!Ñð
 ˜Ñ&¨&Ò0Ø$Ð,Ð,Ð,ØÐ'Ð'Ð'Ü×'Ñ'Ô)ð,Ü$:Ø˜¨ñ%Ø;Gñ%Ð!ð )Ð4Ð4Ð4Ü37·<±<³>ÀJÑ3NÐ!Ô0Ø$ Q™K�	Ø8AÐ!Ô5ô "×)Ñ)Ó+ñØ!Ø'à!×3Ñ3°MÕBô ×)Ñ)Ô+Ø"Ð.Ü47Ð8KÓ4L�
Ð0Ñ1Ø*;×*JÑ*JˆJ�Ñ'Ü×$Ñ$ØØ!ØØØõð ˜mÑ,°Ò5Ð5Ð5Ø$Ð0Ð0Ð0ØÐ'Ð'Ð'Ø  ™ˆIØ4=ÐÔ1à Ð,Ð,Ð,Ø*ˆð *4Ð)?ˆJ�}Ò%ÀZð 	ô 	×"Ñ"Ø˜k˜]Ð+ØÒ% 2Øõ	
ô 	×&Ñ&ØØ#Ø'Ù)3�
—‘˜uÔ%¸Ù7A�z—~‘~ lÔ3Àtñ ð —‘Ð4Ô5à(à!'Ø %õ	
ð  Ð!ÜØóó :õð 	×#Ñ# N°JÀ	ÔJ÷uZK÷ ZKôx ‡I�IÐ5´t·y±y³{ÀUÑ7JÔKô ‡H�HØ0Ø�	‰	ñ 
Ü2:¸>Ñ2J×2PÑ2PÓ2Rô
ó 	
ôô 
‡O�O×!Ñ!×7Ñ7×CÑCÔEà„LƒNÜ�‰Ø'Ø& }Ò5‰;¸:Ð
Fð GØ˜jÑ)Ð*ð	,ôð ÐøôC %¤iÐ0ò ØÜò Ü# A¤|£~Ó6×EÑEØ—O‘Oóàðûðûô
 ×)Ñ)Õ+ú÷mZKñ ZKú÷ ZKñ ZKúsj   ÆW,Æ&A6WÈWÈ=WÉCWÌA"U8ÎDWÒW,Õ8WÖ.V>Ö>W×W×W×W×W)	×$W,×,W6c                  ó$   — e Zd ZU dZded<   dd„Zy)Ú_FxCompileStatr   ÚintÚcodegen_and_compilec                ó    — d| j                   › �S )Nzcodegen_and_compile: )r  )r†  s    rx   Ú__repr__z_FxCompileStat.__repr__]  s   € Ø& t×'?Ñ'?Ð&@ÐAÐArz   N©r‹  rè  )r…   r†   r‡   r  r�  r
  r|   rz   rx   r  r  Y  s   … à Ð˜Ó ôBrz   r  c                  ód   — e Zd ZU dZ ee«      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_statsc                 ó   — y rs   r|   )r†  rÃ   r  ró  rò  s        rx   r  zFxCompile.codegen_and_compilem  s   € ð rz   c                ó8   — | j                   j                  «        y rs   )r  Úclear)Úclss    rx   Ú_reset_statszFxCompile._reset_statsv  s   € à×Ñ× Ñ Õ"rz   N©
rÃ   rF   r  r‰  ró  ry  rò  rw  r‹  r:   ©r‹  ÚNone)r…   r†   r‡   Ú__doc__r   r  r  r�  r   r  Úclassmethodr  r|   rz   rx   r  r  a  sr   … ññ =HÈÓ<W€NÐ9ÓWð
 ðàðð ,ðð 'ð	ð
 'ðð 
òó ðð ò#ó ñ#rz   r  c                  ó2   — e Zd Ze	 	 	 	 	 	 	 	 	 	 dd„«       Zy)Ú_InProcessFxCompilec                ó8  ‡‡‡-‡.‡/— d|v r|d   €J ‚|d   }|j                  dd«      }|j                  dd«      }|j                  dd «      }|j                  dd«      }	t        j                  }
|j                  dd«      }|j                  d	d «      }|j                  d
d «      }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,        j.                  d|rdnd› d|› �«       d>ˆˆfd„Š-t1        dd„ ˆ-fd„¬«       t        j2                  j5                  ‰‰«       t7        ‰«      }t9        ‰«       t;        j<                  «       5  t?        ‰‰«      }d d d «       tA        ‰«       t        jB                  «      5  tE        ‰«      }|5  tG        ‰|¬«       d d d «       t        j2                  jI                  ‰‰«       tJ        j3                  dtM        d‰ddd¬«      «       t1        dˆfd„¬ «       t        jN                  jP                  rdt:        jR                  jT                  jW                  ‰jX                  «      Š/t1        dd!„ ˆ/fd"„¬«       ‰/t:        jZ                  j2                  _.        t_        «       }|ja                  «       rbt"        jb                  d#k  r!te        t        d$   jg                  «       «      }nt        d$   ji                  «       }tk        jl                  d|¬%«       t        jn                  «       r 	 tq        d&ts        tu        «       «      i¬'«       d d d «       t        jB                  |«      5  ty        ‰«      5  t{        |	|
«      5  d }d }d }d }|
r‡t        j|                  j~                  rmt�        ‰«      \  }}tƒ        |g |||	|
|||d¬)«
      }t        j„                  |«      5  |	sJ d*«       ‚|j‡                  «        |j‰                  «       \  }}d d d «       tƒ        ‰‰|||	|
|||||r|jŠ                  nd |r|jŠ                  nd ||¬+«      }t�        jŽ                  «       }t        j„                  |«      5   |j†                  ‰Ž  g }|j�                  �­t“        «       Š.|j�                  D ]”  }t•        |t–        «      rq|j™                  «       rat›        t�        |jŸ                  «       «      «      dk(  r<|j¡                  t£        ˆ.fd,„|j¥                  «       j¦                  D «       «      «       Œ„|j¡                  d «       Œ– t©        |«       t«        d-d¬.«      5  |j­                  «        |j®                  �r,d/d0lXmY} |j´                  sJ d*«       ‚|j‰                  «       \  } }!t·        j2                  d1| jŠ                  «       |!jŠ                  r t·        j2                  d2|!jŠ                  «       d }"|j¸                  r1|j»                  |j¸                  «      }"t·        j2                  d3|"«       t«        d4d¬.«      5  |j½                  || jŠ                  |!jŠ                  |"|j¾                  g tÀ        jÃ                  |jÄ                  jÆ                  «      ¢¬5«      }#d d d «       n|jÉ                  «       jÊ                  }#d d d «       |jÍ                  «       \  }$}%}&tŒ        xjÎ                  |$z  c_g        tŒ        xjÐ                  |&z  c_h        tŒ        xjÒ                  |%z  c_i        |�r.t        jÔ                  jÖ                  �rt        jX                  jØ                  sùt;        jZ                  jÚ                  jÜ                  ‰Ž rÓd }'‰jX                  jÞ                  D ]‘  }(|(jà                  j                  d6d «      })|(jâ                  d7k(  sCt•        |)t:        jä                  «      r)t:        jZ                  jÚ                  jÝ                  |)«      sŒr|(jà                  j                  d8d «      x}'sŒ‘ n d9}*|'r	|*› d:|'› d;�}*n|*› d;�}*|*t        jX                  _l        |rqt        jX                  jØ                  sWtç        ‰«      }+|+rJd<|+jè                  › �}*|+jà                  j                  d8d «      x}'r|*› d:|'› d;�}*|*t        jX                  _l        t        j                  rYt•        #tr        tê        f«      sJ ‚tí        |#«      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 |rSt        jX                  jØ                  s9dd=lwmx},  |,t        jX                  jò                  «      t        jX                  _l        | jô                  t÷        | «         xjø                  d/z  c_|        tû        #|‰|t        jX                  jØ                  |jý                  «       t        d   |z
  |‰||||«      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   �ŒwxY w# tv        $ r t        j                  d(«       Y �Œw xY w# 1 sw Y   �ŒxY w# 1 sw Y   �Œlx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 «       y # 1 sw Y   y xY w)?Nrx  rz  r|   r|  Fr}  r]  r&  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Ê  c                 ó¼   •— t        j                  «       } t        j                  j                  j
                  j                  | ‰‰dd ¬«       | j                  «       S )Nr‘  )Úsave_dir)ÚioÚStringIOr©   r›  ÚreproÚ	after_aotÚsave_graph_reproÚgetvalue)Úfdr  rÃ   s    €€rx   Úlog_graph_runnablezC_InProcessFxCompile.codegen_and_compile.<locals>.log_graph_runnable´  sJ   ø€ Ü—[‘[“]�Ü—‘×#Ñ#×-Ñ-×>Ñ>Ø˜˜N¨JÀð ?ô ð —{‘{“}Ð$rz   r¶  c                 ó   — dddœS )NÚfx_graph_runnableÚstringr¹  r|   r|   rz   rx   r»  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>½  s   € Ø/Ø (ñ%€ rz   c                 ó   •—  ‰ «       S rs   r|   )r%  s   €rx   r»  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>Á  s   ø€ Ñ#5Ó#7€ rz   rÀ  ©r&  ú%szAFTER POST GRADT©Úinclude_strideÚinclude_deviceÚcoloredÚinductor_post_grad_graphc                 ó,   •— ‰ j                  ddd¬«      S )NFT©Úprint_outputr-  r.  )Úprint_readable)rÃ   s   €rx   r»  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>ü  s   ø€  r×'8Ñ'8Ø%*¸4ÐPTð (9ó (€ rz   ©rÂ  c                 ó   — dddœS )NÚinductor_post_to_pre_grad_nodesr¸  r¹  r|   r|   rz   rx   r»  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>  s   € Ø$EØ(.ñ-€ rz   c                 ó.   •— t        j                  ‰ «      S rs   r½  )Úprovenance_tracking_jsons   €rx   r»  z9_InProcessFxCompile.codegen_and_compile.<locals>.<lambda>
  s   ø€ ¬4¯:©:Ð6NÓ+O€ rz   )é   é
   Úgraph_break)Ú	overwriteÚnum_graph_breaksÚpt2_configs)Úextra_loggingzfailed to log pt2_configs)	r  Ú	shape_envr}  r]  r^  r  r&  r|  Úis_const_graphz"AOT mode only supports C++ wrapper)r  rA  r}  r]  r^  r  r&  r|  r;  Úconst_wrapper_codeÚconst_kernel_codeÚconst_moduleró  c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrs   )Údoprint)r‘   ÚsÚps     €rx   r“   z:_InProcessFxCompile.codegen_and_compile.<locals>.<genexpr>m  s   øè ø€ Ò)X¸1¨!¯)©)°A¯,Ñ)Xùs   ƒzGraphLowering.compile_to_fn)r  rS   )ÚAotCodeCompilerzOutput wrapper code: 
%szOutput kernel code:
%sz#Serialized Extern Kernel Nodes: 
%szAotCodeCompiler.compile)Údevice_typeÚadditional_filesr¹   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 )Ú check_lowering_disable_cudagraphr  )r–   rj   rË  rJ   rš  rt   Úpreserve_rng_stater   Úsleep_sec_TESTING_ONLYrØ  r¢   ÚwarningÚsleeprK  rÔ   r"   ÚcopyÚsysÚsetrecursionlimitÚmaxÚgetrecursionlimitrÉ   r   rñ  rD   rÑ  Úfx_graphri   rZ   r©   Úno_gradrl  rÅ   Úset_fake_modeÚget_cuda_device_contextr$  Úfx_graph_transformedÚpost_grad_graphs_logr'   ÚtraceÚenabledr   Ú	tracebackÚget_graph_provenance_jsonr»   rí  Ú _inductor_post_to_pre_grad_nodesr&   Úin_progressÚversion_infoÚsumÚvaluesr‚  r!   Úcompilation_metricÚ	is_fbcoder   rè  rp  Ú
ValueErrorrZ  r_  rU  rV  r>  r\   Úset_graph_handlerÚrunÚcodegen_with_cpp_wrapperr¡   rT   ÚCachedMetricsHelperÚgraph_outputsrH   r½   r^   Úhas_tensor_outputrë   rG   Ú
get_striderÁ   r/  Ú
get_layoutrÂ   Ú_check_triton_bf16_supportr$   Úfreeze_runtime_assertsr^  Ú	codecacherJ  r]  r/   Úextern_kernel_nodesr  ÚcompilerK  ÚdictÚfromkeysÚwrapper_coderL  Úcompile_to_moduleÚcallÚcount_bytesÚnum_bytes_accessedÚnode_runtimesÚnodes_num_elemrÖ  Úcudagraph_skip_dynamic_graphsÚdisable_cudagraphs_reasonr   Úany_is_symbolicræ   r¿   r¸   rÀ   re   r  r­   r5   Útorch._inductor.cudagraph_utilsrO  Údevice_node_mappingr  rI  r  r6   Ú
get_deltas)0r†  rÃ   r  ró  rò  rx  rz  r|  r}  r]  r^  r&  r  r€  Ú	sleep_secrØ  Úinductor_countersrA  rj  Úcuda_contextÚmetrics_contextr>  r;  Úconst_graphrC  rD  r6  r»   Úmetrics_helperrÄ   rþ   rJ  rz  Úkernel_codeÚserialized_extern_kernel_nodesÚcompiled_fnÚ	num_bytesr€  r  rM  rõ   Úmeta_valÚdisableÚmaybe_incompat_noderO  r%  rI  r9  s0    ``                                          @@@rx   r  z'_InProcessFxCompile.codegen_and_compile|  sà
  ü€ ð ˜|Ñ+°¸\Ñ0JÐ0VÐVÐVØ ,¨\Ñ :ˆ
Ø+7×+;Ñ+;Ð<OÐQSÓ+TÐØ(×,Ñ,¨]¸EÓBˆØ".×"2Ñ"2°:¸tÓ"DˆØ(×,Ñ,¨]¸EÓBˆÜ×*Ñ*ˆØ)×-Ñ-¨n¸eÓDˆà×ÑÐ5°tÓ<ð 	ð BN×AQÑAQØ(¨$óB
Ð"ô
 ÐJÓK×QÑQÓSñ_	ä×+Ñ+Ó-ñ_	ô $×:Ñ:Ð:�	ÐGÛä—‘ØIÈ9ôð �—
‘
˜9Ô%ä)¨"Ô-Ü#Ô%ä (¨Ñ 4× 9Ñ 9Ó ;Ðô ×!Ñ!¤#¤c×&;Ñ&;Ó&=¸tÓ"DÔEàŒL‹NÜ—‘Ø*Ù"-‘;°:Ð>ð ?Ø!˜
ð$ôö%ô Øñó 8õô �G‰G×Ñ˜R Ô0ô
 .¨nÓ=ˆIô$ ˜BÔô —‘“ñ AÜ,¨R°Ó@�	÷Aô +¨2Ô.ô —‘ Ó+ñ :Aä6°rÓ:�Ø!ñ OÜ/°ÀÕN÷Oä—‘×,Ñ,¨R°Ô@Ü$×*Ñ*ØÜ*Ø)ØØ'+Ø'+Ø $ôô	ô !Ø.ó õô —<‘<×'Ò'äŸ™×*Ñ*×DÑDÀRÇXÁXÓNð -ô %Ø"ñ%ó $Põð 1ô —O‘O×)Ñ)ÔJô #6Ó"7�Ø"×.Ñ.Ô0ä×'Ñ'¨'Ò1Ü+.¬x¸Ñ/F×/MÑ/MÓ/OÓ+PÑ(ä+3°MÑ+B×+HÑ+HÓ+JÐ(Ü&×9Ñ9Ø"&Ð9Iõô ×#Ñ#Ô%ð	AÜ,à -¬sÔ3JÓ3LÓ/Mð+õ÷e:Aôz —‘ 	Ó*ñQä3°NÓCñQô .¨k¸8ÓDñQð
 &*Ð"Ø"�Ø%)Ð"Ø$(Ð!á¤× 3Ñ 3× PÒ PÜ3AÀ"Ó3EÑ0�HÐ0ä"/Ø Ø')Ø"+Ø!)Ø$/Ø!)Ø/EØ%1Ø$/Ø'+ô#�Kô ×,Ñ,¨[Ó9ñ Ù*ÐPÐ,PÓP˜{Ø#Ÿ™Ô)à'×@Ñ@ÓBñ >Ð*Ð,=÷ô &Øð $2Ø'Ø%Ø +Ø%Ø+AØ!-Ø +Ø'9á)ð (:×'?Ò'?àá(ð '8×&=Ò&=àØ!,Ø$3ô+�ô. ")×!<Ñ!<Ó!>�Ü×(Ñ(¨Ó/ñ YØ�E—I‘I˜~Ñ.ØQS�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ôñ 3Ið
 ×4Ñ4Ô6à Ÿ>›>ÝBà#(×#4Ò#4ð Ø DóÐ#4ð 9>×8VÑ8VÓ8XÑ5˜L¨+Ü+×1Ñ1Ø ;¸\×=OÑ=Oôð  +×0Ò0Ü /× 5Ñ 5Ø$=¸{×?PÑ?Pô!"ð >BÐ:Ø$×8Ò8à$)×$@Ñ$@Ø(-×(AÑ(Aó%&ð !?ô
 !0× 5Ñ 5Ø$JØ$Bô!"ô
 ".Ø 9ÐQUô"ñ "ð />×.EÑ.EØ$)Ø$0×$6Ñ$6Ø$/×$5Ñ$5Ø$BØ05×0AÑ0Að6&Ü)-¯©Ø,1×,>Ñ,>×,OÑ,Oó**ð6&ð /Fó /" ÷	"ð "ð" +0×*AÑ*AÓ*C×*HÑ*H˜K÷g3Iðj @E×?PÑ?PÓ?RÑ<�I˜~¨}Ü×.Ò.°)Ñ;Õ.Ü×)Ò)¨]Ñ:Õ)Ü×*Ò*¨nÑ<Õ*ò #Ü"ŸM™M×GÓGÜ !§¡× 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á!¬!¯'©'×*KÒ*KÜ.SÐTVÓ.WÐ+Ù.Ø(TÐUh×UoÑUoÐTpÐ&q˜GØ.A×.FÑ.F×.JÑ.JØ -¨tó/ð  ˜{ð  ð .5¨I°\À+ÀÈbÐ*Q Ø@GœAŸG™GÔ=ä×(Ò(Ü)¨+¼¼T°{ÔCÐCÐCÜ+¨KÓ8÷wYð Y÷qQ÷ Q÷ Qò Q÷]_	÷ _	ò _	ñH
 "¬!¯'©'×*KÒ*Kõñ
 =Ü !§¡× ;Ñ ;óô Ÿ™Ô9ð ×'Ñ'¬¨T«
Ñ3×GÒGÈ1ÑLÕGä*Ø#ØØØ&ÜŸ™×9Ñ9Ø&×1Ñ1Ó3Ü  Ñ,Ð/@Ñ@Ø"Ø&Ø)Ø$Ø'Ø2ó÷WYð Y÷qQ÷ Q÷ Qò Q÷]_	÷ _	ò _	÷RAñ Aú÷Oñ Oûôh &ò Aô Ÿ™Ð$?×@ðAú÷o:Añ :Aú÷jñ ú÷z"ñ "ú÷E3Iñ 3Iú÷9Yð Yúð Y÷qQ÷ Qñ Qú÷ Q÷ Qñ Qú÷ Q÷ Qñ Qú÷]_	÷ _	ñ _	ú÷ _	÷ _	ñ _	ús~  Â=nÃD(m;Ç:j3È(m;È/k2È=k 	ÉE*k2Î6kÏm;Ï2m&Ï>m	ÐAl<Ñ(-k?ÒA&l<Ó;C#l&×C"lÛ AlÜ#lÝE-l&â0Cl&å?	l<æ	m	æ	m&æ	m;æ#	næ6Cl&é<	l<ê	m	ê	m&ê	m;ê 	nê3j=ê8m;ë k
ëk2ëk/	ë+k2ë.k/	ë/k2ë2k<ë7m;ë?l	ìl<ìlìlìl#ìl&ì&l/ì+l<ì3	m	ì<mím	í	m&ímím&í	m;í&m/í+m;í2	ní;n	î nînNr  )r…   r†   r‡   r   r  r|   rz   rx   r  r  {  sK   „ Øðzàðzð ,ðzð 'ð	zð
 'ðzð 
òzó ñzrz   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	}  |«       }j                  | |||«      S )NrS   )Ú_DebugSerdeFxCompile)Ú_SubprocessFxCompile)Úfx_compile_moder„   rˆ   r  r‰   Úcompile_fx_extr•  rŠ   Úcompile_fx_subprocr–  r  )rÃ   r  ró  rò  Úschemer•  r–  s          rx   rÞ  rÞ  ú  sc   € ô œ-×.Ñ.Ò.Ü$Ó&‰Ü	œM×3Ñ3Ò	3Ý8á%Ó'‰Ü	œM×4Ñ4Ò	4Ý<á%Ó'ˆà×%Ñ% b¨.¸/È<ÓXÐXrz   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À   r@   rH  rI  rf   rC   rA   rÁ   )Úinputsrz  Úids_to_checkrú  rû  s        rx   rÒ  rÒ    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        Šd Šdˆˆˆ ˆfd„}
|
S )Nr   )Úcudagraphify_impl)Údevice_indexÚstack_tracesr|  r&  r¥  rž  rŸ  Ú
compile_idc                ó~   •— ‰€'t        j                  «       5   ‰‰| ‰«      Šd d d «        ‰| «      S # 1 sw Y   ŒxY wrs   )rt   rP  )Ú
new_inputsr�  Úcudagraphify_fnÚmodelrz  s    €€€€rx   rl  zcudagraphify.<locals>.runW  sH   ø€ àÐÜ×0Ñ0Ó2ñ TÙ-¨e°ZÐARÓS�÷Tá˜:Ó&Ð&÷Tð Tús   ˜3³<)r¦  r‰  r‹  r
   )Útorch._inductor.cudagraph_treesr¡  r   rÖ  Úcudagraph_treesÚ	functoolsÚpartialr©   rª   ÚCompileContextÚcurrent_compile_id)r¨  rz  r¢  r£  r|  r&  r¥  rž  rŸ  Únew_cudagraphify_implrl  r�  r§  s   ``         @@rx   Úcudagraphifyr°  5  sr   û€ õô
 ‡}�}×$Ò$Ü#×+Ñ+Ø!Ø%Ø%Ø#Ø%ØØ%Ø1Ü—}‘}×3Ñ3×FÑFÓHô

‰ô ,ˆà€K÷'ð 'ð €Jrz   c                ó”   — t        j                  | j                  «       | j                  «       | j                  | j
                  ¬«      S )z1
    Copy and input while preserving strides
    )rF  rH  )r©   Úempty_stridedÚsizerÂ   rF  rH  )r’   s    rx   Ústatic_inputr´  a  s/   € ô ×Ñ˜qŸv™v›x¨¯©«¸1¿7¹7È1Ï8É8ÔTÐTrz   c                óV   — t        | |«      } t        ||«      }| j                  |«       y)z=Index into expanded dimensions of both dst and src then copy_N)r9   Úcopy_)ÚdstÚsrcÚexpanded_dimss      rx   Úindex_expanded_dims_and_copy_rº  h  s'   € ô ˜c =Ó
1€CÜ
˜c =Ó
1€CØ‡I�Iˆc…Nrz   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        ||«      S c c}}w c c}}w # 1 sw Y   �Œ<x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
    NÚthread_local)Ú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 rs   )
rë   rê   Úzipr½   r©   rÀ   Údata_ptrrº  r  Úreplay)
r¦  rý   r·  r¸  r¹  r»   Úinps_expanded_dimsrz  Ústatic_inputsÚstatic_outputss
        €€€€€rx   rl  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Ø!Ð!rz   c                óÂ   •— ‰D ]8  }‰|   }| |   }t        |t        j                  «      sJ ‚t        ‰|   ||«       Œ: | j	                  «        ‰j                  «        ‰S rs   )r½   r©   rÀ   rº  r  rÂ  )	r¦  rý   r¹  r¸  Úcopy_indicesr»   rÃ  rÄ  rÅ  s	       €€€€€rx   rl  zcudagraphify_impl.<locals>.runÅ  si   ø€ Ø#ò V�Ø 2°3Ñ 7�Ø  ‘o�Ü! #¤u§|¡|Ô4Ð4Ð4Ü-¨m¸CÑ.@À#À}ÕUð	Vð
 ×ÑÔØ�L‰LŒNØ!Ð!rz   )r¦  úlist[InputType]r‹  ú Callable[[list[InputType]], Any])rÒ  rK   rh   rc   r½   r­   rê   r8   r©   rÀ   r´  ÚdetachrÀ  rº  rÌ   ÚsynchronizeÚStreamÚwait_streamÚcurrent_streamr½  Ú	CUDAGraphr»   r/  r   Úsize_assertsr®   rë   ra   )r¨  rœ  rz  Úcheck_input_idxsrý   r’   r¹  r½  rl  rÇ  r»   rÃ  rÄ  rÅ  s     `      @@@@@rx   r¡  r¡  s  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ò
ˆ÷	"ñ 	"ô (¨Ð-=Ó>Ð>ùóYùó	÷*#ñ #ú÷4ð 4üò6
s1   ÁK"ÂAK(Æ"K.ÉK;Ê;	LËLË.K8Ë;Lc                ó¼  — t        | t        «      sJ | «       ‚t        | «       |€ddini |¥ddi¥}|j                  dt        j
                  j                  «      }|r|j                  d«      r"J d«       ‚i |¥dt        | j                  «      i¥}|j                  dd «      }| j                  j                  dd «      }t        j                  j                  |«      }t        j                   d«      5  t        j                  j#                  |«      5  t%        ddd¬	«      5  t'        «       5  t)        | |t+        j,                  ||¬
«      |¬«      }t        |t.        «      sJ ‚|j0                  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]  Tz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  Údynamo_compile_idÚcompile_fx_aot)r  Úreset_event_log_on_exit)r  )Úinner_compilero  )r½   rF   r)   r–   r   rU  Úoutput_pathÚendswithr-   ÚcoderŸ   r¿   r©   rª   r­  rj   Úset_aot_compilationÚcompile_contextr    r&   Ú
compile_fxr«  r¬  r5   Úfilename)	Úmodel_Úexample_inputs_rÖ  ro  r×  r  Úsaved_compile_idÚsaved_compile_contextÚcompiled_artifactss	            rx   rÔ  rÔ  Ò  sÝ  € ô �fœkÔ*Ð2¨FÓ2Ð*ô & fÔ-ð Ð!ð 
˜Ñà4�Ð4 ¨tÑ4ð ð !×$Ñ$Ø"¤F×$7Ñ$7×$CÑ$Có€Kñ Ø×'Ñ'¨Ô/ð 	
ðRó	
Ð/ð
Øð
à&¬	°&·+±+Ó(>ñ
ˆð
 ,×/Ñ/Ð0HÈ$ÓOÐØ—{‘{—‘Ð':¸DÓAÐÜ!ŸM™M×8Ñ8Ð9IÓJÐä	×Ñ˜dÓ#ñ+ä�‰×%Ñ%Ð&;Ó<ñ+ô 	ØØ"&Ø$(ô	
ñ+ô 	Óñ+ô (ØØÜ#×+Ñ+ØØ'=ôð *ô
Ðô Ð,¬lÔ;Ð;Ð;à!×*Ñ*÷-+÷ +÷ +÷ +÷ +õ +ú÷ +÷ +ñ +ú÷ +÷ +ñ +ú÷ +÷ +ñ +úsa   Ã2 GÄF=Ä!F(Ä,AF	Å.	F(Å7	F=Æ 	GÆFÆF(Æ	F=Æ(F1Æ-F=Æ4	GÆ=G	ÇGÇGc                ó¼  ‡‡‡‡— ddl m}m}	 t        | «       t	        j
                  | d¬«      }
|
rt        | |d«        || «        |	|| |«      \  }Š‰D �cg c]  }||   ‘Œ	 }}t        ‰«      |z
  }t        |«      }|j                  j                  �^ }}|j                  d   }t        |«      D ��cg c],  \  }}t        |t        j                  j                   «      sŒ+|‘Œ. c}}|j"                  d<   t%        t'        |«      «      }t        j(                  j*                  j-                  «       }dgŠdŠ|��/|j.                  €J ‚|j.                  }t1        dt        |«      dz
  «      Št3        t4           «       }|j6                  }|€J ‚d}t        |«      dkD  rg Št'        t        |«      «      D ]I  }|‰vrd ||<   |dkD  r(||   ||dz
     k(  r|dz  }n|j9                  ||   «       ‰j;                  |«       ŒK |j<                  €J ‚t'        t        |j<                  «      «      D ]  }||vsŒd |j<                  |<   Œ |j>                  r||j>                  j@                  z  }tB        jD                  jG                  |dd«      5   ||||||d||
¬«      Šd d d «       tH        jJ                  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ÚfreezeTr*  Úuser_visible_output_idxsrS   rb  )rz  rx  r}  r&  r€  r~  c           
     ó‚   •— ‰D �cg c]  }| |‰t        |‰«         z
     ‘Œ }}| j                  «         ‰|«      S c c}w rs   )Úminr  )r}   rú  Úargs_newÚmax_offset_idxÚoptimized_functionÚpreserved_arg_indicesÚunwrapped_args_offsetss      €€€€rx   Úwrapperz%fw_compiler_freezing.<locals>.wrapperm  sT   ø€ ð +ö
àð �Ð+¬C°°>Ó,BÑCÑCÓDð
ˆð 
ð 	�
‰
ŒÙ! (Ó+Ð+ùò
s   †<)r}   zlist[object]r‹  zSequence[torch.Tensor])'Útorch._inductor.freezingrä  rå  r!  r\   Údecide_layout_optrl  rë   r#   r»   ræ   r}   rê   r½   r©   r   r¾   r¿   r­   r®   rª   r«   r¬   Úparams_flat_unwrap_subclassesrW  rK   r  Úparams_unwrapped_to_flat_indexÚaddrÁ   Úparams_flatr¯   r°   r   rT  rg  rj   rË  Ú_boxed_call) Úaot_autograd_modelÚaot_example_inputsÚdynamo_modelÚnum_example_inputsrÖ  rx  r}  Úforward_devicerä  rå  r~  Ú	opt_modelÚindr±   rj  rö  Úmodel_outputs_nodeÚmodel_outputsrý   r=  rz  Útracing_contextÚparams_flat_unwrapÚpreserved_indices_params_flatÚunwrapped_idxsÚcurrent_offsetrú  rî  rê  rë  rì  rí  s                                @@@@rx   Úfw_compiler_freezingr    s  û€ ÷ Wô "Ð"4Ô5ä×0Ñ0Ð1CÐRVÔW€JÙäÐ+Ð-?ÀÔFÙ-Ð.@ÔAá'-ØØØó(Ñ$€IÐ$ð >SÖS°cÐ,¨SÓ1ÐSÐÐSÜÐ)Ó*Ð-?Ñ?€Iä Ð!3Ó4€Ið 'Ÿ_™_×2Ñ2Ñ€QÐØ&×+Ñ+¨AÑ.€Mä# MÓ2÷;Ù��Q´jÀÄEÇHÁHÇMÁMÕ6RŠó;Ð×ÑÐ6Ñ7ô œU 9Ó-Ó.Ðä—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ð ×&Ò&Ø ×!<Ñ!<×!QÑ!QÑQÐä	�‰×	Ñ	˜9Ð&=¸tÓ	Dñ 

Ù*ØØØ/Ø!ØØØ'5Ø!ô	
Ð÷

ô 	×ÒØ!Ð!÷,ð ,ð €GÔà€NùòS Tùó;÷L

ð 

ús   ÁKÂ4,KÃ!KÊ
KËKc                 óä   — t         j                  j                  rt        t	        d«      «       t         j                  j
                  �t         j                  j
                  n	t        «       ddddœS )Nzcpp wrapper enabledFT)ztriton.autotune_at_compile_timeztriton.autotune_cublasLtztriton.cudagraphsztriton.store_cubin)r   rÖ  rx  r2   r1   Úautotune_at_compile_timerR   r|   rz   rx   Úget_cpp_wrapper_configr  z  sY   € Ü‡}�}×ÒÜ+Ü'Ð(=Ó>ô	
ô �}‰}×5Ñ5ÐAô �M‰M×2Ò2ä“à$)Ø"Ø"ñ
ð 
rz   c                óâ  — t         j                  j                  «       st        j                  «       S | j
                  j                  d¬«      }t        d„ |D «       «      }t        d„ t        | «      j                  d   D «       «      }t        d„ ||z  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
    rÚ   r·   c              3  ó´   K  — | ]P  }t        |j                  j                  d «      t        j                  «      r|j                  d    j
                  –— ŒR y­w©r¹   N)r½   r¿   r–   r©   rÀ   rH  )r‘   rõ   s     rx   r“   z*get_cuda_device_context.<locals>.<genexpr>•  sB   è ø€ ò 9àÜ�d—i‘i—m‘m EÓ*¬E¯L©LÔ9ð 	�	‰	�%Ñ×Õñ9ùs   ‚AAc              3  óè   K  — | ]j  }t        |t        j                  «      rNt        |j                  j	                  d «      t
        j                  «      r|j                  d    j                  –— Œl y­wr
  )r½   r   r¾   r¿   r–   r©   rÀ   rH  )r‘   Úargs     rx   r“   z*get_cuda_device_context.<locals>.<genexpr>›  sN   è ø€ ò 7àÜ�cœ2Ÿ7™7Ô#¬
°3·8±8·<±<ÀÓ3FÌÏÉÔ(Uð 	�‰�‰×Õñ7ùs   ‚A0A2r   c              3  ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)rÌ   N)rI  )r‘   rH  s     rx   r“   z*get_cuda_device_context.<locals>.<genexpr>   s    è ø€ ò 8Ø¸f¿k¹kÈVÓ>SŒñ8ùs   ‚—rS   )r©   rÌ   rÍ   rW  rX  r»   r¼   rK   rg   r}   rë   rH  rÓ  rÔ  )rÃ   ró   Úinput_devicesÚout_devicesÚcuda_devicess        rx   r\  r\  �  sÝ   € ô �:‰:×"Ñ"Ô$Ü×%Ñ%Ó'Ð'àŸ™×+Ñ+¨}Ð+Ó=ÐÜ.8ñ 9à%ô9ó /€Mô -7ñ 7ä˜r“?×'Ñ'¨Ñ*ô7ó -€Kô
 .8ñ 8Ø+¨kÑ9ô8ó .€Lô ˆ|Ó Ò!ô 	�
‰
×Ñœ$œt LÓ1Ó2Ó3ðô ×#Ñ#Ó%ðrz   c                ó@  ‡ ‡‡‡‡‡— |rGt        j                  |«      5  t        ‰ | t        j                  |«      ‰«      |¬«      cddd«       S t         j                  �rŠt        j                  ddit	        «       ¥«      5  t        j                  |«      5  |}t        ‰ t        «      �r	‰ j                  j                  D �cg c],  }|j                  dk(  r|j                  j                  d«      ‘Œ. }}|D �cg c]   }t        |t        j                  «      r|nd‘Œ" }}t!        d„ |D «       «      r�t#        t%        «       ||«      D ]g  \  }	}
}|
€Œ
t        |t        j                  «      sJ ‚|
j&                  |j&                  k7  sŒ@t)        d|	› d	|
j&                  › d
|j&                  › d�«      ‚ |}t        ‰ |t+        j,                  ‰d¬«      |¬«      cddd«       cddd«       S t+        j,                  t        ‰|¬«      }t/        ‰ «      st1        ‰ ||«      S t        ‰ t        «      r1t        ‰ j                  j2                  t4        «      rt7        ‰ ||«      S t9        t:        j<                  «      5  t?        «       5  t        j@                  jB                  jE                  t         jF                  jH                  «      5  t        ‰ t        «      rrtK        dˆ fd„¬«       tL        jO                  dtQ        d‰ ddd¬«      «       tS        ‰ j                  «      t        jT                  jN                  _+        tY        ‰ |«      Š t!        d„ |D «       «      r(t[        ‰ ||«      cddd«       cddd«       cddd«       S t         j\                  rJ ‚t_        |«      Šta        t         jb                  jd                  «      Štg        d«      Šti        tj        «      Š|�|n	tm        «       }	 	 	 	 	 	 	 	 d&ˆˆˆˆˆ ˆfd„}t+        j,                  |d¬«      }to        tp        |«      }t         jr                  r5t        jt                  «       s!t+        j,                  tv        ‰ ‰‰‰‰‰¬«      }n't+        j,                  |d¬«      }to        tp        |«      }	 	 	 	 	 	 	 	 d'd„}ty        d¬«      	 	 	 	 	 	 d(ˆˆˆˆfd„«       }to        tp        |«      }t{        |«      xs  t        j|                  j                  d¬«      }t        j€                  j‚                  j…                  «       xs t        j€                  jƒ                  |«      }t
        j†                  �rèt‰        j                  d¬«      5  t‹        ‰ |d|¬«      \  }}dd lFmG}  ||«      }|j                  j                  D ]r  }|j                  d!k(  sŒd|j                  vsŒ"t‘        ||j’                  «      }t        |t        j                  «      sŒS|j•                  |d¬"«      |j                  d<   Œt 	 ddd«       t—        ‰ «      }d#‰ j                  v r‰ j                  d#   |j                  d#<   d$‰ j                  v r‰ j                  d$   |j                  d$<   t        j˜                  j›                  «       }|rt        j˜                  jœ                  ntž        j                   }t        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«       S t        j¢                  |«      5  t        j€                  j©                  |«      5  t¥        j¦                  «       5  t‰        j                  d¬«      5  	  t«        |||||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c c}w c c}w # 1 sw Y   nxY wddd«       �Œ7# 1 sw Y   �ŒAx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«       �Œ-# 1 sw Y   �Œ7x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«       y# 1 sw Y   yx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.
    )rÖ  ÚdecompositionsNr]  FrÚ   r¹   c              3  ó$   K  — | ]  }|d u–— Œ
 y ­wrs   r|   )r‘   Úvs     rx   r“   zcompile_fx.<locals>.<genexpr>å  s   è ø€ Ò:¨�q ”}Ñ:ùs   ‚zBDevice mismatch between fake input and example input at position #rÅ  z vs zx. If the model was exported via torch.export(), make sure torch.export() and torch.aot_compile() run on the same device.T)r]  Úinductor_pre_grad_graphc                 ó^   •— ‰ j                  ddd¬«      dt        ‰ j                  «      › �z   S )NFTr2  z

 # graph id: )r4  Úidr»   )rÞ  s   €rx   r»  zcompile_fx.<locals>.<lambda>  s9   ø€  6×#8Ñ#8Ø!&°tÈDð $9ó $ð &¤b¨¯©Ó&6Ð%7Ð8ñ$9€ rz   r5  r+  zBEFORE PRE GRADr,  c              3  óR   K  — | ]  }t        |t        t        t        f«      –— Œ! y ­wrs   )r½   r­   r/  rx  r�   s     rx   r“   zcompile_fx.<locals>.<genexpr>4  s   è ø€ ÒK°aŒz˜!œd¤E¬4Ð0×1ÑKùs   ‚%'c           
     óò  •— t        j                  d«      5  |rt        | «       t        j                  j
                  j                  ‰t        |«      «      }t        | «      }t        j                  �rDt        j                  |j                  Ž }t        |«      }t        j                  j                  j!                  «       }|�%|j"                  r|s|j"                  j$                  }nd}t'        ‰t(        «      rX‰j*                  j,                  �^ }	}
|
j.                  dk(  sJ ‚t        j0                  |
j                  «      \  }}	t        |«      }n|}||k  sJ ‚||z   }||k  sJ ‚t3        ||«      D �cg c]+  }t'        ||   t        j4                  j6                  «      r|‘Œ- c}|j8                  d<   ng |j8                  d<    ‰| |t;        |«      ‰‰|‰¬«      cd d d «       S c c}w # 1 sw Y   y xY w)Nz$compile_fx.<locals>.fw_compiler_baser   r¶   ræ  )rz  rx  r}  r&  r€  )rt   r$   r!  r©   rí  r   Únum_fw_fixed_argumentsrë   rg   r   Úkeep_output_striderì   Úarg_tree_leavesr}   rª   r«   r¬   r¯   Únum_mutated_inp_runtime_indicesr½   rF   r»   ræ   r¸   Útree_flattenr®   r   r¾   r¿   r´   )rÃ   r  r&  r³   rý  rþ  Únum_model_outputsr²   Úoriginal_output_start_indexrö  Úorig_model_outputs_nodeÚorig_model_outputsÚnum_orig_model_outputsÚorig_output_end_idxrý   rx  rú  r}  rÖ  rÞ  rù  s                  €€€€€€rx   Úfw_compiler_basez$compile_fx.<locals>.fw_compiler_baseR  s  ø€ ô
 ×*Ñ*Ð+QÓRñ IÙä1°"Ô5äŸ™×-Ñ-×DÑDØ&¬¨NÓ(;ó�ô &1°£_Ð"Ü×,Ó,Ü$*×$:Ñ$:Ð<N×<SÑ<SÐ$T�MÜ(+¨MÓ(:Ð%ä#Ÿm™m×:Ñ:×BÑBÓD�GàÐ*¨w×/BÒ/BÉ<à#×/Ñ/×OÑOñ 4ð 78Ð3ä! &¬+Ô6Ø6<·l±l×6HÑ6HÑ3˜Ð3Ø6×9Ñ9¸XÒEÐEÐEÜ06×0CÑ0CØ3×8Ñ8ó1Ñ-Ð*¨Aô 25Ð5GÓ1HÑ.à1BÐ.à1Ð5FÒFÐFÐFð  4Ð6LÑLð (ð
 /Ð2CÒCÐCÐCô $)Ø7Ð9Ló$öKàô & m°CÑ&8¼%¿(¹(¿-¹-ÔHò	 òKÐ&×+Ñ+Ð,FÒGð KMÐ&×+Ñ+Ð,FÑGá$ØØ"Ü&;¸EÓ&BØ)Ø%Ø!-Ø/=ô÷CIñ IùònK÷oIð Iús   —E G-Å70G(Æ'7G-Ç(G-Ç-G6r*  )rø  rù  rÖ  rx  r}  rú  c                ó~   — t        | «      }|5  t        | «       d d d «       t        | |fi |¤ddi¤ŽS # 1 sw Y   ŒxY w)NÚcompilerr‘  )r\  r!  r   )rÃ   Újoint_inputsr~   r‰  s       rx   Úpartition_fnz compile_fx.<locals>.partition_fn·  sP   € ô
 3°2Ó6ˆLØñ 2Ü-¨bÔ1÷2ä6Ø�LñØ$*ñØ5?òð ÷2ð 2ús   Ž3³<Úbackward)r�  c                óú  •— ddl m} t        j                  d«      5  |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!        | «      }t
        j"                  rt        j$                  t'        «       «      nt)        j*                  «       5   ‰| |t-        t/        |«      «      ‰d‰
‰	¬«      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)Nr   )Úcompile_lockzcompile_fx.<locals>.bw_compilerræ  T)rz  rx  r|  r}  r€  )Útorch._dynamo.convert_framer,  rt   r$   rg   r   Úbw_outputs_user_visiblerì   r  r}   rê   r½   r©   r   r¾   r¿   r=   r]  rT  r  rW  rX  r­   r®   )rÃ   r  r,  rý  rþ  rý   r=  r³   rx  rú  r}  rÖ  s           €€€€rx   Úbw_compilerzcompile_fx.<locals>.bw_compilerÃ  s\  ø€ õ Aô ×)Ñ)Ð*KÓLñàñô &1°£_Ð"Ü×1Ò1Ü$*×$:Ñ$:Ð<N×<SÑ<SÐ$T�Mô '0°Ó&>÷Ká"˜C Ü% a¬¯©¯©Ô7ò óKÐ&×+Ñ+Ð,FÒGð KMÐ&×+Ñ+Ð,FÑGä& rÓ*�ô ×)Ò)ô —L‘LÔ!7Ó!9Ô:ä#×/Ñ/Ó1ññ
 )ØØ&Ü*.¬u°U«|Ó*<Ø#-Ø$(Ø!)Ø3Aô÷ð ÷!÷ ò ùóK÷ð úð ÷!÷ ñ ú÷ ÷ ñ úsT   �E1 AEÁ&0E 
ÂA-EÄ!EÄ$	EÄ-	E1Å EÅEÅEÅ	E1ÅE%	Å!E1Å1E:ra  )Úunlift_effect_tokens)Útrace_jointr  r   )Ú_detect_fake_mode_from_gmÚget_attr)Ústatic_shapesÚ dynamo_flat_name_to_original_fqnrÓ  )Úfw_compilerr/  Úinference_compilerr  r)  Úkeep_inference_input_mutationsrx  )rÃ   rF   r  r‰  r&  r{  r‹  r:   )rÃ   rF   r(  zSequence[object]r~   rg  r‹  ztuple[GraphModule, GraphModule])rÃ   rF   r  r‰  r‹  r:   )Xr   rT  rÜ  r]  r  rj   Úset_real_inputsr½   rF   r»   ræ   r¸   r¿   r–   r©   rÀ   rP  rÀ  r	   rH  rj  r«  r¬  Úgraph_returns_tupleÚmake_graph_return_tupleÚ_codegenrQ   Úhandle_dynamo_export_graphrP   r˜  r™  r   r   ra  Úpreserve_node_metar_  r`  rD   Úpre_grad_graphs_logrÑ  r'   r  rí  Ú_pre_grad_graph_idr  r%   Ú_raise_error_for_testingrë   r<   rÖ  rx  r0   rÓ  Ú_graph_counterrV   r,   r:   ÚfreezingÚis_grad_enabledr  rE   r#   rd  re  rª   r«   r¬   rË  Úfunctorch_configr*   Útorch._export.utilsr2  r  r  Úfrom_tensorr   Ú_CÚ_is_any_autocast_enabledÚ_DisableAutocastrW  rX  r[  r   Ú_disableÚtracingrM   rN   Úremove_dynamo_frames) rÞ  rß  rÖ  ro  r  Úinputs_rõ   Úfake_inputsÚinprý   Úfirú  Úrecursive_compile_fxr%  r6  r7  r)  r/  rj  rÿ  rÃ   rï   r2  r  rÿ   Údisable_ampr²   r  rx  rú  r}  rù  s    ` `                         @@@@rx   rÜ  rÜ  «  sª  ý€ ñ, Ü�\‰\˜.Ó)ñ 	ÜØØà:œfŸl™l¨>Ó:¸=ÓIØ-ô÷	ñ 	ô ×Óä�L‰Là! 5ðä,Ó.ðóñ)	ô ×Ñ˜oÓ.ñ)	ð ,;ˆGä˜&¤+Õ.ð !'§¡× 2Ñ 2öàØ—w‘w -Ò/ð —I‘I—M‘M %Õ(ð�ð ð  +öàô & c¬5¯<©<Ô8‘C¸dÑBð�ð ô
 Ñ:¨kÔ:Ô:ä&)¬%«'°;ÀÓ&Hò "™
˜˜R Ø™>Ü#-¨a´·±Ô#>Ð>Ð#>Ø!Ÿy™y¨A¯H©HÓ4Ü&0Ø&hÐilÐhmÐmoØ')§y¡y k°°a·h±h°Zð @oð%oó'"ð !"ð	"ð *�GÜØØÜ'×/Ñ/°È4ÔPØ-ô	÷I)	÷ )	ò )	ôV %×,Ñ,ÜØ#Ø%ôÐô ˜vÔ&Ü&ØØØ ó
ð 	
ô �&œ+Ô&¬:Ø�‰×Ñœ~ô,ô *ØØØ ó
ð 	
ô 	œ}×BÑBÓCñd9ä Ó"ñd9ô 	�‰×Ñ×-Ñ-¬f¯l©l×.BÑ.BÓCñd9ô �fœkÔ*ÜØ)ó9õô  ×%Ñ%ØÜ&Ø%ØØ#'Ø#'Ø ôô	ô 8:¸&¿,¹,Ó7GŒE�O‰O×!Ñ!Ô4ä/°¸ÓHˆFô
 ÑK¸?ÔKÔKÜ'ØØØ$ó÷Id9÷ d9÷ d9ó d9ôT ×2Ò2Ð2Ð2ä  Ó1Ðô œvŸ}™}×7Ñ7Ó8ˆ
ô *¨$Ó/ˆô œÓ'ˆð -Ð8‰NÔ>QÓ>Sð 	ðN	ØðN	à/ðN	ð ðN	ð ÷	N	ò N	ôb ×ÑÐ.¸UÔCð 	ô 6´jÀ+ÓNˆä�?Š?¤5×#8Ñ#8Ô#:Ü5>×5FÑ5FÜ$Ø#Ø#5Ø+Ø%Ø!Ø-ô6Ñô "+×!2Ñ!2Ð3CÐRVÔ!WÐÜ!@ÜÐ.ó"Ðð
	Øð
	à*ð
	ð ð
	ð -ó	
	ô 
'°*Ô	=ð"	Øð"	Ø-@ð"	à÷"	ó 
>ð"	ôH 6´jÀ+ÓNˆä$Øó
ò Jä×Ñ×-Ñ-ÀDÐ-ÓIð 	ô �M‰M×(Ñ(×0Ñ0Ó2ò 7Ü�}‰}×+Ñ+¨IÓ6ð 	ô
 ×ÓÜ!×'Ñ'¸TÔBñ Ü&7ØØ#Ø %Ø#1ô	'Ñ#��Oõ Já5°bÓ9�	ð ŸH™HŸN™Nò �DØ—w‘w *Ó,°¸d¿i¹iÒ1GÜ!(¨¨T¯[©[Ó!9˜Ü% f¬e¯l©lÕ;Ø/8×/DÑ/DØ &°dð 0Eó 0˜DŸI™I eÒ,ñ	÷#ô2 (¨°°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÷]d9÷ d9÷ d9ó d9ôd �O‰O˜IÓ&ñ	9ä�M‰M×!Ñ! /Ó2ñ	9ô ×&Ñ&Ó(ñ	9ô ×"Ñ"¸Ô=ñ		9ð9ð”|Ø +Ø +Ø'9Ø#1Ø!-Ø37Ø)ôð ˜/ó+÷	9÷ 	9÷ 	9÷ 	9ó 	9÷cd9÷ d9÷ d9ó d9÷_	ñ 	üò.ùò÷')	ð )	ú÷ )	÷ )	ó )	ú÷L	ñ ú÷XHð Hú÷ H÷ Hñ Hú÷ H÷ Hó Hûô& $ò 9ð ×,Ñ,Ó.°DÐ8ûð9ú÷!	9ð 	9ú÷ 	9÷ 	9ñ 	9ú÷ 	9÷ 	9ñ 	9ú÷ 	9÷ 	9ñ 	9ú÷cd9÷ d9ñ d9ú÷ d9÷ d9ñ d9ú÷ d9÷ d9ñ d9úsÙ  ž(_5Â`"Â,`Ã1`Ã5`Ã;%`Ä 2`Å5`Æ	A`Ç	`"É9dÊAc?ËB!c*Í'	c?Í0	dÎG%c*Õ(A	`/	Ö2`/	×0`/	×2"`/	ØCc*Ûa'	Û2aÛ:	`<Ü	aÜ	a'	Ü	c*Ü	c?Ü'	dÜ:c*Ý c	Ý/c Þb+ÞbÞa4Þ5	b+Þ>	c ß	c	ß	c*ß	c?ß"	dß5_?à
`à`	à`"à"`,à/`9à4c*à<aáaá	a'	áaáa'	á
c*á'a1á,c*á4	bá=bâbâbâbâb+â"	c â+b4â0c â7	c	ã c	ãc	ã	c*ãcãc*ã!	c?ã*c3ã/c?ã6	dã?d	ädäd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Ú_schemarS   c              3  óL   K  — | ]  }t        |j                  «      d k(  –— Œ y­w)rÀ   N)rè  rI  )r‘   Úrets     rx   r“   z&graph_returns_tuple.<locals>.<genexpr>C  s   è ø€ ÒO¨c”�C—H‘H“ Õ)ÑOùs   ‚"$F)r½   rF   rg   r}   r­   r/  r©   r   rõ   r¾   Úhasattrr  rë   rU  ÚreturnsÚall)rÃ   Úrvs     rx   r:  r:  8  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ð Ørz   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 rs   )rì   Útree_unflatten)r}   r~   r�  Úspecs     €€rx   rî  z(make_graph_return_tuple.<locals>.wrapper]  s    ø€ ä×$Ñ$¡[°$Ð%A¸&Ñ%AÀ4ÓHÐHrz   )r}   r
   r~   r
   r‹  r
   )rg   r}   rì   r  r»   Úinserting_beforer¶   r1  r:  r«  Úwraps)rÃ   rœ  Ú
compile_gmrõ   r[  rî  r�  r_  s         @@rx   r;  r;  J  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 rs   )Úprocess_outputsÚprocess_inputs)r}   Úcodegenr�  s    €€rx   rî  z+handle_dynamo_export_graph.<locals>.wrappers  s'   ø€ à×&Ñ&¡{Ð4J°G×4JÑ4JÈDÐ4QÐ'RÓSÐSrz   )r}   r
   r‹  r
   )	r»   r<  r©   r   ÚCodeGenr2  rf  r«  ra  )rÃ   rœ  rb  rî  rg  r�  s       @@rx   r=  r=  d  sx   ù€ ð �h‰h×Ñ€GÜŸ™Ÿ™×.Ñ.Ó0€B‡H�HÔØ‡L�L„Ná˜RÐ!7 ×!7Ñ!7¸Ð!@ÓA€Kä‡_�_�[Ó!õTó "ðTð €Nrz   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   )rO   z9 does not support bfloat16 compilation natively, skippingzBF16 is not supported)Útorch._dynamo.excrO   r   rI  Úget_device_propertiesrÒ   rÓ   r    )rH  rO   Údevice_interfaceÚdevice_propss       rx   Úwarn_and_skipz1_check_triton_bf16_support.<locals>.warn_and_skip{  s\   € Ý/àÐ!Ð!Ð!ä3°F·K±KÓ@ÐØ'×=Ñ=¸fÓEˆÜ�‰Ø× Ñ Ð!Ð!ZÐ[ô	
ñ Ð/Ó0Ð0rz   F)Úincluding_emulation)rH  zOptional[torch.device]r‹  r   )r  r  Úgraph_inputsrg  ro  r½   r^   r]   r@   Ú	get_dtyper©   Úbfloat16r   Úis_bf16_supportedÚ
get_device)r»   ro  rõ   rK  rm  s        rx   rs  rs  z  s    € ó
1ô —‘ × 2Ñ 2× 9Ñ 9Ó ;¸U×=PÑ=PÓQò )ˆÜ˜$¤Ô'ØÜ% dÓ+ˆáÜ˜+Ô&Ø�~‰~Ó¤5§>¡>Ò1àô 4°KÓ@ÐØ×-Ñ-À%Ð-ÔHÙÙ�d—o‘oÓ'Õ(ñ)rz   )Úoptionsc               óè  — 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«      \  }
}|
D �cg c]&  }t        |d   t
        j&                  «      r|d   nd‘Œ( }}|�||k7  rt)        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.
    rS   )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Ú 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   rQ   rh  r2  Úpytree_infoÚin_specÚout_specrX  rx  ry  rì   Útreespec_dumpsÚtree_flatten_with_pathrÀ   rj  )rÃ   r}   r~   rv  r:  r|  r}  rg  Úserialized_in_specÚserialized_out_specÚflat_args_with_pathÚreceived_specr’   Úflat_example_inputss                 rx   Ú_aoti_flatten_inputsr…  ™  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Š|˜Ðó*Ñ&Ð˜ð CVöØ=>”
˜1˜Q™4¤§¡Ô.ˆˆ!Š°DÑ8ðÐð ð Ð˜}°Ò7ÜØMØˆið <àˆoðó
ð 	
ð ˆ?ð 0BØ0Cò	
ð

Øð
à/AØ0Cò
ð ð  Ð'Ð'ùò1s   Æ+G/)rw   rè  r‹  z.Callable[[Callable[_P, _T]], Callable[_P, _T]])r}   rg  r~   rg  r‹  r  )r‹  r„   )r±   r  r‹  ú	list[int])rÃ   rF   r‹  r  )r‹  zCallable[..., None]r  )rî   rF   rÃ   rF   rï   r‚   r‹  rF   )rÃ   rF   r‹  zGenerator[str, None, None])rÃ   rF   r  r‰  r‹  rF   )F)rÃ   rF   r&  r{  r‹  r  )TNN)
rÃ   rF   r3  r{  r4  zOptional[list[str]]r5  z)Optional[Callable[[torch.fx.Node], bool]]r‹  z"tuple[GraphModule, dict[str, int]])rÃ   rF   r‹  r{  )r  r‰  r‹  ú"AbstractContextManager[None, None])r]  r{  r^  r{  r‹  r‡  )rÃ   rF   r  r‰  ri  r{  r‹  z torch._subclasses.FakeTensorModers   )ro  z$Optional[Union[str, dict[str, Any]]]r‹  zdict[str, Any])r‹  zGenerator[None, None, None]rˆ  )rÃ   rF   r  r‰  rò  rŠ  r‹  r:   )
rÃ   rF   r  r‰  ró  ry  rò  rŠ  r‹  r:   )rœ  r‰  rz  ry  r‹  ry  )r|   )r¨  úCallable[..., Any]rz  ry  r¢  r  r£  zlist[Optional[str]]r|  r{  r&  r{  r¥  ztuple[torch.Tensor, ...]rž  zSequence[PlaceholderInfo]rŸ  ztuple[int, ...]r‹  rˆ  )r’   útorch.Tensorr‹  r‰  )r·  r‰  r¸  r‰  r¹  r†  r‹  r  )r¨  rˆ  rœ  zlist[torch.Tensor]rz  ry  r‹  rÉ  )
rÞ  rF   rß  rÈ  rÖ  r„  ro  zOptional[dict[str, str]]r‹  zUnion[list[str], str])rö  rF   r÷  r‰  rø  rF   rù  r  rÖ  rˆ  rx  r<   r}  r  rú  r0   r‹  z0Callable[[list[object]], Sequence[torch.Tensor]])r‹  zdict[str, object])rÃ   útorch.fx.GraphModuler‹  zAbstractContextManager[None])rÞ  rF   rß  r‰  rÖ  zCallable[..., OutputCode]ro  úOptional[dict[str, Any]]r  z.Optional[dict[OpOverload, Callable[..., Any]]]r‹  zGUnion[Callable[[list[object]], Sequence[torch.Tensor]], str, list[str]])rÃ   rF   rœ  r‰  rb  rˆ  r‹  rˆ  )r»   r\   r‹  r  )
rÃ   rŠ  r}   z!Union[list[Any], tuple[Any, ...]]r~   r‹  rv  r‹  r‹  z tuple[list[Any], dict[str, Any]])ïÚ
__future__r   rW  Úenumr«  r  r  r¸  r   r”   rU  rØ  rÒ   Úabcr   r   Úcollectionsr   r   Úinspectr   r	   Útypingr
   r   r   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Ç   rt   Útorch._dynamo.device_interfacer   Útorch._dynamo.repro.after_aotr   Útorch._dynamo.utilsr    r!   r"   r#   r$   r%   r&   r'   r(   Útorch._functorchrE  Ú7torch._functorch._aot_autograd.subclass_parametrizationr)   Útorch._functorch.aot_autogradr*   r+   r,   Útorch._inductor.codecacher-   r.   r/   r„  r0   r1   r2   r3   Útorch._inductor.debugr4   Útorch._inductor.output_coder5   r6   r7   r8   r9   r:   Ú%torch._inductor.runtime.runtime_utilsr;   Útorch._inductor.utilsr<   r=   r>   r?   r@   rA   rB   rC   Útorch._loggingrD   Útorch._utils_internalrE   rF   Ú%torch.fx.experimental.symbolic_shapesrG   rH   Ú torch.fx.passes.fake_tensor_proprI   Útorch.monitorrJ   Útorch.utils._ordered_setrK   Ú_dynamo.backends.commonrM   Ú_dynamo.excrN   rO   Úfx._lazy_graph_modulerP   Úfx.graphrQ   Úutils._tritonrR   rz  rT   rÑ  rU   ÚdecompositionrV   ÚexcrW   Úfx_passes.joint_graphrX   Úfx_passes.post_gradrY   rZ   Úfx_passes.pre_gradr[   r»   r\   Úirr]   r^   Úoutput_coder_   Útriton_bundlerr`   ra   rb   rc   rd   re   rf   rg   rh   ri   Úvirtualizedrj   Úcollections.abcrk   rl   rm   Ú
torch._opsrn   ro   rp   rq   ri  ry   r   Útorch._inductor.fb.utilsÚ&torch._functorch._aot_autograd.schemasr€   r�   r‚   ÚEnumr„   r£   r—  r™   r…   r¢   Ú_loggingÚgetArtifactLoggerrR  r?  r^  rÐ  r´   rÅ   Ú	lru_cacherÉ   rÔ   r   r  r  r!  r$  r>  rK  rZ  r_  rl  rp  Úcontextmanagerru  rw  r„  r�  r   r  r  r  rÞ  rÒ  r°  r´  rº  r¡  rÔ  rB  r  r  r\  rÜ  r:  r;  r=  rs  r…  r|   rz   rx   ú<module>rÃ     s,  ðÝ "ã Û Û Û 	Û Û Û Û 	Û 
Û Û ß #Ý #Ý -Ý  Ý ß I× Iß U× UÝ ã $Û ß $Ð $Ý AÝ Ý ;÷ó õ DÝ =÷
÷ 
õ 
õ 8õ÷ñ ÷
 OÑ N÷ó õ A÷÷ õ <÷	÷ 	ó 	õ ,Ý ?Ý  ß WÝ ;Ý &Ý /å 2ß 5Ý :Ý %Ý &ß Ý Ý .Ý Ý 5ß BÝ /Ý  ß 'Ý IÝ )÷
÷ 
õ 
õ ñ ß3å:Ý%å$ñ ˆtƒ_€ÙˆTƒ]€áÐ(˜×(Ò(Ô*ó%ô÷ Lá÷ñ ô�D—I’Iô ó$ñ. +Ó,€à€g×Ò˜Ó!€Ø—’×0Ò0°¸<ÓH€Ø—n’n×6Ò6°xÐARÓSÐ Ø—~’~×7Ò7¸ÐBTÓUÐ Ø—N’N×4Ò4ØÐ'óÐ ó

<óAð €×Ò�TÓò/ó ð/ð €×Ò�TÓò	
ó ð	
ðIØ	ðIØ%ðIØ8FðIàóIóX%ð*NØðNà'ðNð óNó&	ô	+ð "Ø15ØFJð	E(ØðE(àðE(ð /ðE(ð Dð	E(ð
 (óE(óPð*(Ø'ð(à'ó(ð.	(Øð	(Ø!%ð	(à'ó	(ð ).ðØðà'ðð "&ðð &ó	ð@ <@ð(Ø8ð(àó(ð ×Òòó ðô
;�y¨õ 
;ô˜ô ð2
Øð2
à'ð2
ð 'ð2
ð ó	2
ñj Ð2Ô3ðZØðZà'ðZð -ðZð ò	Zó 4ðZ÷zBñ Bô#�ô #ô4|˜)ô |ð~YØðYà'ðYð
 #ðYð -ðYð óYð0 Øð à$ð ð ó ðJ (*ð)ð +-Ø.0Ø*,ñ)Øð)à$ð)ð ð	)ð
 &ð)ð ð)ð ð)ð (ð)ð ,ð)ð (ð)ð ó)óXUðØ	ðà	ðð ðð 
ó	ð (*ð\?Øð\?àð\?ð %ð\?ð &ó	\?ðD )9Ø/3ð	;+Øð;+à$ð;+ð &ð;+ð -ð	;+ð
 ó;+ñ| �q“€ðdØ#ðdà+ðdð ðdð ð	dð
 &ðdð ðdð ðdð %ðdð 6ódóNó&ðB 0@Ø/3ØEIðJ9ØðJ9à(ðJ9ð -ðJ9ð -ð	J9ð
 CðJ9ð MóJ9óZð$Øðàðð #ðð ó	ð4Øðàðð #ðð ó	ó,)ðD (,ðI(ð
 )-ñI(ØðI(à
+ðI(ð %ðI(ð
 &ðI(ð &ôI(rz   