Ë
    ÄÓ^j¢Õ ã                  ó6  — 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mZ d dlmZ d dlmZmZmZ d dlZd dlm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mZ d d
lm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& d dlm'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD ddlEmFZFmGZGmHZH ddlImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZTmUZUmVZV ddlWmXZX ddlGmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe ddlfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZs ddltmuZu dd lvmwZw dd!lxmyZy dd"lzm{Z{m|Z|m}Z}m~Z~mZm€Z€m�Z�m‚Z‚mƒZƒm„Z„m…Z…m†Z† dd#l‡mˆZˆm‰Z‰ er;d d$lŠm‹Z‹mŒZŒm�Z�mŽZŽ d d%l�m�Z� d d&l‘m’Z’ d d'lm“Z“ d d(l”m•Z• dd)l–m—Z— dd*l˜m™Z™ dd+lšm›Z› e�eLz  Zœd d,l�mžZž  e�j>                  e «      Z¡e�jD                  �jG                  e d-«      Z¤e�jJ                  �jL                  Z¦ e�jN                  «       Z¨ eF�jR                  «       rd d.lªm«Z« d d/l¬m­Z­ nd=d0„Z­d=d1„Z«d>d2„Z®	 	 	 	 	 	 d?d3„Z¯d@d4„Z°dAd5„Z±	 	 	 	 dBd6„Z²	 	 	 	 	 	 dCd7„Z³dDd8„Z´ G d9„ d:e�jj                  �jl                  «      Z· G d;„ d<e·«      Z¸y)Eé    )ÚannotationsN)Údefaultdict)Úcontextmanager)ÚAnyÚNoReturnÚTYPE_CHECKING)ÚExpr)ÚdeviceÚTensor)Úget_decompositions)ÚdefakeÚdynamo_timed)ÚFakeScriptObject)Úis_opaque_reference_typeÚis_opaque_typeÚis_opaque_value_type)Úget_layout_constraint_tag)Ú
LazyStringÚtrace_structured)Úcompute_required_storage_lengthÚmake_channels_last_strides_for)Ú
FakeTensor)Úfull_aoti_runtime_assert)ÚBackwardState)Ú_get_placeholder_exprÚfree_unbacked_symbolsÚhas_free_symbolsÚresolve_unbacked_bindingsÚRuntimeAssertÚShapeEnvÚSympyBooleanÚSymTypes)ÚNode)Ú_is_view_op)Úno_dispatch)Ú
OrderedSet)Úint_ooé   )ÚconfigÚirÚmetrics)ÚBackendFeatureÚDeviceOpOverridesÚFileBackedGraphModuleÚget_backend_featuresÚget_device_op_overridesÚget_wrapper_codegen_for_deviceÚinit_backend_registrationÚWorkspaceArg)ÚCppWrapperCodegenErrorÚLoweringExceptionÚMissingOperatorWithDecompÚMissingOperatorWithoutDecomp)Úcount_flops_fx)Úassign_origin_nodeÚConstantÚDonatedBufferÚFixedLayoutÚget_device_typeÚGraphPartitionSignatureÚInputBufferÚ	PointwiseÚ	ReductionÚShapeAsConstantBufferÚ
StorageBoxÚ	TensorBoxÚTorchBindObject)Úconstrain_to_fake_tensorsÚconstrain_to_fx_stridesÚFALLBACK_ALLOW_LISTÚfallback_handlerÚ%fallback_node_due_to_unsupported_typeÚ	loweringsÚmake_fallbackÚmaybe_layout_constraintsÚneeds_realized_inputsÚrequire_contiguousÚtag_to_layout_constraintÚunsupported_output_tensorÚuser_lowerings)Úautotune_cache)ÚAutotuneCacheBundler)ÚSizeVarAllocator)Úgather_originsÚ get_cloned_parameter_buffer_nameÚget_donated_idxsÚget_sympy_Expr_dtypeÚGraphPartitionMapÚis_same_tensorÚ#maybe_get_suppress_shape_guards_ctxÚnormalize_nameÚshould_assume_input_alignedÚshould_fallback_by_defaultÚSUPPORTED_MKLDNN_DEVICESÚValueWithLineMap)ÚNullHandlerÚV)ÚCallableÚIterableÚIteratorÚSequence)Ú
ModuleType)Ú_EffectType)ÚGraphModule)ÚGraph)ÚPythonWrapperCodegen)ÚDep)ÚBaseSchedulerNode)Úoutput_code_logÚ
perf_hints)Ú save_triton_kernel_perf_artifact)Úlog_module_codec                  ó   — y ©N© ©ÚargsÚkwargss     ú`/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/graph.pyrr   rr   œ   ó   € Øó    c                  ó   — y rt   ru   rv   s     ry   rq   rq   Ÿ   rz   r{   c                óâ  — t        | t        j                  t        j                  t        j                  j
                  j                  f«      sJ d«       ‚t        | t        j                  j
                  j                  «      rt        j                  S t        | t        j                  «      rt        | «      S | j                  rt        j                  S | j                  rt        j                  S y )Nzgget_constant_buffer_dtype only supports input of sympy.Symbol, sympy.Expr or sympy.core.numbers.Integer)Ú
isinstanceÚsympyÚSymbolr	   ÚcoreÚnumbersÚIntegerÚtorchÚint64rY   Ú
is_integerÚis_floatÚfloat32)Úconstant_buffers    ry   Úmay_get_constant_buffer_dtyperŠ   £   s«   € ÜØœ%Ÿ,™,¬¯
©
´E·J±J×4FÑ4F×4NÑ4NÐOôð ð 	róð ô
 �/¤5§:¡:×#5Ñ#5×#=Ñ#=Ô>Ü�{‰{Ðä�/¤5§:¡:Ô.Ü# OÓ4Ð4à×!Ò!Ü�{‰{ÐØ	×	!Ò	!Ü�}‰}Ðàr{   c           	     óÂ   — |j                  d«      }| }t        |«      D ]=  \  }}t        ||«      s t        ddj	                  |d | «      › �«      ‚t        ||«      }Œ? |S )Nú.z#Node referenced nonexistent target )ÚsplitÚ	enumerateÚhasattrÚRuntimeErrorÚjoinÚgetattr)ÚobjÚtargetÚtarget_atomsÚattr_itrÚiÚatoms         ry   Úgetattr_recursiver™   ·   sv   € ð —<‘< Ó$€LØ€HÜ˜\Ó*ò +‰ˆˆ4Ü�x Ô&ÜØ5°c·h±h¸|ÈBÈQÐ?OÓ6PÐ5QÐRóð ô ˜8 TÓ*‰ð+ð €Or{   c                ób  — i }| j                  d¬«      d   }d|j                  vr|S t        |j                  d   t        j
                  j                  «      s|j                  d   }n|j                  }t        |«      D ],  \  }}||j                  d   v sŒ|j                  d   |   ||<   Œ. |S )NÚoutput©Úopr   Úuser_visible_output_idxsÚoriginal_output_strides)Ú
find_nodesÚmetar~   rw   r„   Úfxr#   rŽ   )ÚgÚretÚoutput_nodeÚoutput_node_argsÚidxÚnodes         ry   Úget_user_visible_output_stridesr©   Å   s¹   € Ø')€CØ—,‘, (�,Ó+¨AÑ.€Kà!¨×)9Ñ)9Ñ9Øˆ
ä�k×&Ñ& qÑ)¬5¯8©8¯=©=Ô9Ø&×+Ñ+¨AÑ.Ñà&×+Ñ+ÐäÐ/Ó0ò I‰	ˆˆTØ�+×"Ñ"Ð#=Ñ>Ò>Ø#×(Ñ(Ð)BÑCÀCÑHˆC�ŠIðIð €Jr{   c                ó–   — | j                   j                  dk(  xr/ | j                  t        j                  k(  xr | j                  «       S )NÚcpu)r
   ÚtypeÚlayoutr„   ÚstridedÚ	is_pinned©Úts    ry   Ú_is_cpu_strided_tensor_pinnedr²   ×   s2   € Ø�8‰8�=‰=˜EÑ!ÒQ a§h¡h´%·-±-Ñ&?ÒQÀAÇKÁKÃMÐQr{   c                ó¨  — i | ¥}g |j                  «       ¢}t        g |¢«      }|r¬|j                  «       }t        |j                  «      r„|j
                  rxt        |j
                  d   t        j                  j                  «      rG|j
                  d   }||vr4|j                  |d«       |j                  |«       |j                  |«       |rŒ¬|S )zc
    Extend user_visible_output_strides to include view ops that lead to user-visible outputs.
    r   N)Úkeysr&   Úpopr$   r”   rw   r~   r„   r¢   r#   Ú
setdefaultÚaddÚappend)Úuser_visible_outputsÚresultÚqueueÚvisitedÚcurrentÚbases         ry   Ú"extend_user_visible_output_stridesr¿   Û   s±   € ð ":Ð$8Ð!9€FØˆf�k‰k‹mÐ€EÜ˜˜5˜Ó"€GÙ
Ø—)‘)“+ˆä˜Ÿ™Ô'Ø—’Ü˜7Ÿ<™<¨™?¬E¯H©H¯M©MÔ:à—<‘< ‘?ˆDØ˜7Ñ"Ø×!Ñ! $¨Ô-Ø—‘˜DÔ!Ø—‘˜TÔ"ò ð €Mr{   c                ó>  — t         j                  syt        |«      }t        t        j
                  t        j                  t        j                  t        j                  g«      }t        t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  g«      }	 	 	 	 dd„}t+        | j,                  «      D �]Z  }t/        |j0                  t2        j4                  j6                  j8                  «      rd|j:                  d<   ŒLt/        |j0                  t2        j<                  j>                  «      rJtA        |j0                  «      t2        jB                  jD                  jF                  k(  rd|j:                  d<   ŒÄ ||«      }|sŒÏ||v rd|j:                  d<   |j:                  jI                  dd«      r0|jJ                  D ]!  } ||«      }	|	sŒ|	|vsŒd|j:                  d<   Œ# t         jL                  r�Œ@||v s�ŒF||vs�ŒLd|j:                  d<   �Œ] y)aŠ  
    Nodes like convolution/convolution_backward want its input to be dense.
    If we pad their inputs, we result in extra calls to copy kernels!  On the other hand, padding usually helps reduction.

    The pass finds nodes that dislike padding. These are nodes that can be reached
    from a convolution/convolution_backward in the backward direction without
    going thru a reduction.
    Nc                óØ   — | j                   dk(  rZt        | j                  t        j                  j
                  «      r,t        | j                  d«      r| j                  j                  S d S )NÚcall_functionÚ_overloadpacket)r�   r~   r”   r„   Ú_opsÚ
OpOverloadr�   rÃ   )r¨   s    ry   Ú_get_overload_packetz8mark_nodes_dislike_padding.<locals>._get_overload_packet  sU   € ð
 �w‰w˜/Ò)ä˜4Ÿ;™;¬¯
©
×(=Ñ(=Ô>Ü˜Ÿ™Ð%6Ô7ð	 �K‰K×'Ñ'ð	
ð ð	
r{   TÚdislike_paddingF)r¨   útorch.fx.NodeÚreturnz"torch._ops.OpOverloadPacket | None)'r)   Úcomprehensive_paddingr¿   r&   ÚatenÚconvolutionÚconvolution_backwardÚ
_scaled_mmÚ_scaled_mm_v2Úvar_meanÚsumÚmeanÚprodÚanyÚaminÚamaxÚminÚmaxÚargminÚargmaxÚscatter_reduceÚreversedÚnodesr~   r”   r„   Ú_higher_order_opsÚtriton_kernel_wrapÚTritonKernelWrapperMutationr¡   rÄ   rÅ   r   Ú_CÚTagÚneeds_exact_stridesÚgetÚall_input_nodesÚpad_outputs)
r£   Úuser_visible_output_stridesÚextended_user_visible_nodesÚops_dislike_paddingÚops_like_paddingrÆ   Úcurr�   ÚpriorÚprior_ops
             ry   Úmark_nodes_dislike_paddingrî   ó   s  € ô ×'Ò'Øä"DØ#ó#Ðô %ä×ÑÜ×%Ñ%Ü�O‰OÜ×Ñð		
óÐô "ä�M‰MÜ�H‰HÜ�I‰IÜ�I‰IÜ�H‰HÜ�I‰IÜ�I‰IÜ�H‰HÜ�H‰HÜ�K‰KÜ�K‰KÜ×Ñð	
óÐð"

Øð

à	+ó

ô ˜Ÿ™Ó ó (3ˆÜØ�J‰JÜ×#Ñ#×6Ñ6×RÑRô
ð +/ˆC�H‰HÐ&Ñ'Øô �s—z‘z¤5§:¡:×#8Ñ#8Ô9Ü)¨#¯*©*Ó5Ü�x‰x�|‰|×/Ñ/ò0ð +/ˆC�H‰HÐ&Ñ'Øá! #Ó&ˆÙØØÐ$Ñ$Ø*.ˆC�H‰HÐ&Ñ'à�8‰8�<‰<Ð)¨5Ô1à×,Ñ,ò 9�Ù/°Ó6�ÙØØÐ#3Ò3Ø48�E—J‘JÐ0Ò1ð9ô ×!Ô! cÐ-HÓ&Hð Ð)Ó)Ø.2�—‘Ð*Ó+ñQ(3r{   c                óà  — t        t        j                  dd «      ��Rt        t        j                  j                  dd «      ��,t	        | j
                  t        j                  «      �rt        | j
                  j                  «      dkD  råt        | j
                  j                  d   d«      rÂ| j
                  j                  d   j                  D ]œ  }|j                  d   t        j                  j                  j                  j                  t        j                  j                  j                  j                  t        j                  j                  j                   j                  fv sŒœ y y)NÚmkldnnÚ_convolution_pointwiser   ÚtargetsTF)r’   r„   Úopsrð   r~   r”   Ú	functoolsÚpartialÚlenrw   r�   rò   Úfnsrñ   ÚdefaultÚbinaryÚ_convolution_pointwise_)r¨   r”   s     ry   Úis_mkldnn_convrû   U  s  € ô 	”—	‘	˜8 TÓ*Ñ6Ü”E—I‘I×$Ñ$Ð&>ÀÓEÑQÜ�t—{‘{¤I×$5Ñ$5Õ6Ü�—‘× Ñ Ó! AÒ%Ü�D—K‘K×$Ñ$ QÑ'¨Ô3à—k‘k×&Ñ& qÑ)×1Ñ1ò 	ˆFØ�z‰z˜!‰}Ü—	‘	× Ñ ×7Ñ7×?Ñ?Ü—	‘	× Ñ ×7Ñ7×>Ñ>Ü—	‘	× Ñ ×8Ñ8×?Ñ?ð!ò ñ
 ð	ð r{   c                  óD  ‡ — e Zd ZU dZded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dJˆ fd„ZdKd„Z	 	 	 	 dLd„Z	 	 	 	 dMd	„Z	 	 	 	 dNd
„Z		 	 	 	 dOd„Z
	 	 	 	 dPd„Z	 	 	 	 	 	 dQd„ZdRdSd„ZdTd„Zej                   dUd„«       ZdVd„ZedWd„«       ZdXd„Z	 	 	 	 	 	 	 	 dYd„ZdZd„Zd[d„Zd\d„Zed]d„«       Zed^d„«       Z	 	 	 	 d_d„Zd`d„Z	 	 	 	 dad„Zdbd„Z dcd„Z!ddˆ fd„Z"ded „Z#dd!œdfd"„Z$dgd#„Z%dhd$„Z&d[d%„Z'did&„Z(djd'„Z)dkdld(„Z*dmd)„Z+	 	 	 	 	 	 	 	 dnˆ fd*„Z,e-j\                  doˆ fd+„«       Z/edpd,„«       Z0	 	 	 	 	 	 	 	 dqd-„Z1drd.„Z2drd/„Z3e-j\                  	 	 	 	 	 	 	 	 dsˆ fd0„«       Z4dKd1„Z5edtd2„«       Z6edud3„«       Z7	 	 	 	 	 	 	 	 	 	 	 	 dvd4„Z8edwd5„«       Z9dxd6„Z:dyˆ fd7„Z;	 	 	 	 	 	 dzd8„Z<dKd9„Z=	 	 	 	 d{	 	 	 	 	 	 	 	 	 d|d:„Z>	 	 	 	 d}d;„Z?	 	 d~d<„Z@dKd=„ZAd~d>„ZBdd?„ZC	 	 d€d@„ZDdZEdAedB<   d�dC„ZFd�dD„ZG	 	 	 	 d‚dE„ZHdƒdF„ZId„dG„ZJd…dH„ZKˆ xZLS )†ÚGraphLoweringz?Lower an FX graph into Inductor IR and track compilation state.úlist[ir.IRNode]Úgraph_outputsNFc                ó¦  •— t         ‰| �  |«       || _        || _        |�|n| j	                  ||	¬«      | _        d| _        |	| _        |
| _        || _	        || _
        || _        || _        || _        d| _        d| _        |€t!        «       }d| _        nd| _        || _        |j&                  j)                  «       | _        t-        t.        j0                     «       | _        t5        |«      | _        g | _        i | _        i | _        i | _        d | _         t-        «       | _!        |r|jD                  n	t-        «       | _"        |r|jF                  n	t-        «       | _#        d| _$        tK        t,        «      | _&        tK        t,        «      | _'        i | _(        i | _)        g | _*        g | _+        |r|ni | _,        |rt-        |j[                  «       «      n	t-        «       | _.        |r|j^                  ni | _/        |r|j`                  ni | _0        |jb                  je                  dt-        «       «      | _3        |r|jh                  ni | _4        i | _5        i | _6        i | _7        i | _8        t-        «       | _9        t-        «       | _:        t-        «       | _;        t-        «       | _<        i | _=        t-        «       | _>        t-        «       | _?        d | _@        d | _A        ddlBmC} t‰        jŠ                  «       r|r|n|| _F        d | _G        i | _H        t-        «       | _I        g | _J        i | _K        tK        t˜        «      | _M        i | _N        i | _O        t¡        j                   «       | _Q        || _R        || _S        || _T        || _U        i | _V        || _W        || _X        t³        t´        «      | _[        d | _\        d | _]        d | _^        d | __        d | _`        | j
                  r| jÃ                  «       n	t-        «       | _b        t-        dg«      | _c        tÉ        |jÊ                  «      | _f        tÏ        |jÊ                  | jÌ                  «       d	| _h        d	| _i        g | _j        d | _k        i | _l        |jÛ                  «       | _n        | jÜ                  ja                  «       D ]  \  }}|| j`                  |<   Œ | jÜ                  ji                  «       D ]  \  }}|| jh                  |<   Œ | jÞ                  jb                  je                  d
i «      | _p        |�|jâ                  ni | _q        tå        «         tç        jè                  d «      tê        «      | _u        i | _v        t-        «       | _w        t-        «       | _x        i | _y        t-        «       | _z        t-        «       | _{        t-        «       | _|        tû        jü                  «       | _        d| _€        �t        «       | _‚        i | _ƒ        y )N)Úis_inferencer   FTr«   Úmutated_named_buffers)Úextern_node_json_serializerzaten.convolution_backwardÚ Ú dynamo_flat_name_to_original_fqnéÿÿÿÿ)„ÚsuperÚ__init__Úget_decomp_fnÚexample_inputsÚdecide_layout_optÚ
layout_optÚnum_channels_last_convr  Úis_backwardÚis_const_graphÚconst_wrapper_codeÚconst_kernel_codeÚconst_moduleÚinputs_to_checkÚ_defers_input_alignmentÚextra_tracebackr    Úreuse_shape_envÚ
_shape_envÚdeferred_runtime_assertsÚcopyÚras_by_symbolr&   r   r€   Úbound_unbacked_symbolsrU   ÚsizevarsÚgraph_input_namesÚgraph_inputsÚgraph_inputs_originalÚgraph_input_storage_offsetsÚpartition_mapsÚzero_dim_cpu_tensor_listÚdevice_typesÚdevice_idxsÚdevice_typer   Úadditional_buffer_depsÚadditional_star_depsÚ_void_ctrl_dep_op_namesÚbuffer_to_padded_sizeÚbuffersÚ
operationsÚconst_output_indexr´   Úfolded_constantsÚ	constantsÚnamed_buffersr¡   rä   r  Únamed_parametersÚtorchbind_constantsÚopaque_value_type_classesÚseen_subgraphsÚconstant_reprsÚremoved_operationsÚremoved_buffersÚremoved_inplace_buffersÚmutated_buffersÚsdpa_constraint_cacheÚnever_reuse_buffersÚinplaced_to_removeÚ
device_opsÚwrapper_codeÚ&torch._inductor.extern_node_serializerr  r)   Ú	is_fbcodeÚextern_node_serializerÚcurrent_nodeÚlistsÚmutated_inputsÚmutated_input_idxsÚname_to_bufferÚlistÚname_to_usersÚ
name_to_opÚ_cutedsl_capture_nodesÚtimeÚcreation_timeÚnameÚcpp_wrapperÚ
fx_wrapperÚrecord_multi_kernel_choiceÚmulti_kernel_to_choiceÚaot_modeÚgraph_idÚnextÚ_post_grad_graph_counterÚpost_grad_graph_idÚ	schedulerÚautotuning_inputsÚautotuning_mappingÚautotuning_gridsÚcurrent_deviceÚfind_nodes_prefer_channels_lastÚnodes_prefer_channels_lastÚ_warned_fallbackr©   Úgraphrç   rî   Ú	cache_keyÚ
cache_pathÚcache_linemapÚdisable_cudagraphs_reasonÚdevice_node_mappingÚ__copy__Úorig_gmÚmoduler  Úallocated_constant_namer2   rô   Ú	lru_cacher/   Úeffectful_opsÚunaligned_buffersÚno_fuse_buffer_namesÚbuffer_layout_constraintsÚlow_precision_codegen_opsÚinvoke_quant_opsÚall_codegen_kernel_namesÚ	itertoolsÚcountÚworkspace_idÚplaceholder_idxrX   Úbw_donated_idxsÚdep_size_hint_cache)ÚselfÚgmr
  Ú	shape_envrR  rM  rQ  r  r@  r  r  r  r,  r  r  r  rL  r  rN  r	  r  ÚkÚvÚ	__class__s                          €ry   r  zGraphLowering.__init__o  sƒ  ø€ ô. 	‰Ñ˜ÔØ*ˆÔØ,ˆÔð Ð%ñ à×'Ñ'¨¸Ð'ÓFð 	Œð
 '(ˆÔ#Ø(ˆÔØ&ˆÔØ,ˆÔØ"4ˆÔØ!2ˆÔØ(ˆÔØ.ˆÔØ',ˆÔ$à$ˆÔØÐÜ ›
ˆIØ#(ˆDÕ à#'ˆDÔ Ø#ˆŒð ×.Ñ.×3Ñ3Ó5ð 	Ôô '1´·±Ñ&>Ó&@ˆÔ#ä(¨Ó3ˆŒØ,.ˆÔØQSˆÔØ=?ˆÔ"ð =?ˆÔ(Ø>BˆÔÜ9C»ˆÔ%á)5ˆL×%Ò%¼:»<ð 	Ôñ )5ˆL×$Ò$¼*»,ð 	Ôð !ˆÔÜBMÜóC
ˆÔ#ô ALÌJÓ@WˆÔ!ð HJˆÔ$ð <>ˆÔ"à(*ˆŒØ.0ˆŒá"4Ñ¸"ð 	Ôñ
 "ô Ð)×.Ñ.Ó0Ô1ä“ð 	Ôñ '3ˆL×"Ò"¸ð 	Œñ +7ˆL×&Ò&¸Bð 	Ôð @B¿w¹w¿{¹{Ø#¤Z£\ó@
ˆÔ"ñ .:ˆL×)Ò)¸rð 	Ôð
 ð 	Ô ð ;=ˆÔ&Ø68ˆÔØ.0ˆÔÜ3=³<ˆÔÜ0:³ˆÔÜ8B»ˆÔ$Ü0:³ˆÔØ=?ˆÔ"Ü4>³LˆÔ Ü3=³<ˆÔØ-1ˆŒØ26ˆÔåVô ×ÑÔ!Ñ&<ñ #à,ð 	Ô#ð ,0ˆÔØ+-ˆŒ
Ü/9«|ˆÔØ-/ˆÔØ46ˆÔÜ@KÌDÓ@QˆÔØ35ˆŒà<>ˆÔ#Ü!ŸY™Y›[ˆÔØˆŒ	Ø&ˆÔØ$ˆŒð
 +6ˆÔ'Ø68ˆÔ#à ˆŒØ ˆŒÜ"&Ô'?Ó"@ˆÔØ>BˆŒð =AˆÔØDHˆÔØ7;ˆÔð 48ˆÔð 7;·o²oˆD×0Ñ0Ô2Ì:Ë<ð 	Ô'ô !+Ð,GÐ+HÓ IˆÔÜ+JÈ2Ï8É8Ó+TˆÔ(Ü" 2§8¡8¨T×-MÑ-MÔNØ ˆŒØ!ˆŒð ð 	Ôð 6:ˆÔ&ð GIˆÔ Ø-/¯[©[«]ˆŒØ—L‘L×.Ñ.Ó0ò 	&‰DˆAˆqØ$%ˆD×Ñ˜qÒ!ð	&à—L‘L×1Ñ1Ó3ò 	)‰DˆAˆqØ'(ˆD×!Ñ! !Ò$ð	)à04·±×0@Ñ0@×0DÑ0DØ.°ó1
ˆÔ-ð 5AÐ4LˆL×0Ò0ÐRTð 	Ô$ô 	"Ô#Ø$=¤I×$7Ñ$7¸Ó$=Ô>RÓ$SˆÔ!à;=ˆÔô 3=³,ˆÔÜ5?³\ˆÔ!ð EGˆÔ&ä:D»,ˆÔ&ä1;³ˆÔô :D»ˆÔ%ô &ŸO™OÓ-ˆÔð  "ˆÔå/Ó1ˆÔð ACˆÕ r{   c                ó8   — | j                   j                  «        y rt   )r  Úfreeze_runtime_asserts©rv  s    ry   r}  z$GraphLowering.freeze_runtime_assertsN  s   € Ø�‰×.Ñ.Õ0r{   c                ó4   — | j                  |«      \  }}}||fS rt   )Ú%symbolic_sizes_strides_storage_offset)rv  ÚexÚsizesÚstridesÚ_s        ry   Úget_placeholder_sizes_stridesz+GraphLowering.get_placeholder_sizes_stridesQ  s%   € ð !×FÑFÀrÓJÑˆˆw˜Ø�gˆ~Ðr{   c                ó   — | j                   r1|j                  «       |j                  «       }}|j                  «       }nzddlm}  |dt        | j                  j                  «      › �«      }| j                  j                  |j                  «       |j                  «       |j                  «       |«      \  }}}|D �cg c]  }t        j                  |«      ‘Œ }}|D �cg c]  }t        j                  |«      ‘Œ }	}t        |t        j                  «      r|j                  j                   nt        j                  |«      }
||	|
fS c c}w c c}w )zá
        Support dynamic shapes and dynamic strides by assigning variables
        to each dimension.  We duck-shape tensors, so if two tensors
        have the same size they get assigned the same symbolic variable.
        r   )ÚConstantSourceÚ__inductor_unknown_tensor_)r  ÚsizeÚstrideÚstorage_offsetÚtorch._dynamo.sourcer‡  rö   r  Úbacked_var_to_valÚ'transfer_symbols_from_foreign_shape_envr   Úsympifyr~   r„   ÚSymIntr¨   Úexpr)rv  r�  r‰  rŠ  r‹  r‡  Úsourcer—   Úr_sizeÚr_strideÚr_storage_offsets              ry   r€  z3GraphLowering.symbolic_sizes_strides_storage_offsetW  s   € ð ×ÒØŸ7™7›9 b§i¡i£k�&ˆDØ×.Ñ.Ó0‰Nå;ñ $Ø,¬S°·±×1RÑ1RÓ-SÐ,TÐUóˆFð —‘×GÑGØ—‘“	Ø—	‘	“Ø×!Ñ!Ó#Øó	ñ	ØØØð -1Ö1 q”%—-‘- Õ"Ð1ˆÐ1Ø.4Ö5¨”E—M‘M !Õ$Ð5ˆÐ5ô ˜.¬%¯,©,Ô7ð ×Ñ×$Ò$ä—‘˜~Ó.ð 	ð
 �xÐ!1Ð1Ð1ùò 2ùÚ5s   Â<EÃEc                óÞ   — |j                  «       D �cg c]  }t        j                  |«      ‘Œ }}|j                  «       D �cg c]  }t        j                  |«      ‘Œ }}||fS c c}w c c}w )z+
        Primarily used to weights
        )r‰  r   rƒ   rŠ  )rv  r�  r—   r‰  rŠ  s        ry   Ústatic_sizes_stridesz"GraphLowering.static_sizes_strides‚  sZ   € ð +-¯'©'«)Ö4 Q”—‘˜aÕ Ð4ˆÐ4Ø,.¯I©I«KÖ8 q”%—-‘- Õ"Ð8ˆÐ8Ø�Vˆ|Ðùò 5ùÚ8s   “A%ÁA*c                óP  — t        |t        j                  «      r|j                  }t        |t        j                  «      r|j                  }t        |t        j
                  «      r1|j                  | j                  v r| j                  |j                     S |j                  «       S rt   )	r~   r*   rD   ÚdatarC   ÚComputedBufferrL  r)  Úget_size)rv  r¨   s     ry   Úget_allocation_sizez!GraphLowering.get_allocation_sizeŒ  sw   € ô �dœBŸL™LÔ)Ø—9‘9ˆDÜ�dœBŸM™MÔ*Ø—9‘9ˆDä�tœR×.Ñ.Ô/Ø—	‘	˜T×7Ñ7Ñ7ð ×-Ñ-¨d¯i©iÑ8Ð8à—=‘=“?Ð"r{   c                óŽ   — |j                  «       }| j                  |«      }|j                  }|j                  }t	        |||«      S rt   )Ú
get_layoutrœ  rŠ  Úoffsetr   )rv  r¨   r­   r‰  rŠ  rŸ  s         ry   Úget_allocation_storage_sizez)GraphLowering.get_allocation_storage_size¡  sA   € ð —‘Ó"ˆØ×'Ñ'¨Ó-ˆØ—‘ˆØ—‘ˆÜ.¨t°V¸VÓDÐDr{   c                óh   — t        |t        «      sJ |«       ‚|| j                  t        |«      «      v S rt   )r~   r,   r/   r=   )rv  r
   Úfeatures      ry   Úhas_featurezGraphLowering.has_featureª  s4   € ô
 ˜'¤>Ô2Ð;°GÓ;Ð2Ø˜$×3Ñ3´OÀFÓ4KÓLÐLÐLr{   c                óä  — ||f| j                   vrÁd}| j                  j                  |j                  «      }t	        |t
        j                  «      rd| j                   ||f<   y	 |j                  «       r)| j                  j                  |j                  «       «      r#|r|j                  «       }n|j                  «       }|| j                   ||f<   | j                   ||f   S # t        $ r Y Œ-w xY w)zc
        Get the size hint for a dependency with caching to avoid expensive recomputation.
        r   )ru  r  rä   rL  r~   r*   ÚNonTensorObjÚhas_unbacked_symbolsr  Úall_unbacked_explicitly_hintedÚ	get_numelÚnumbytes_hintÚ
numel_hintÚKeyError)rv  ÚdepÚcount_bytesÚresÚinps        ry   Úget_dep_size_hintzGraphLowering.get_dep_size_hint²  sç   € ð �Ð T×%=Ñ%=Ñ=ØˆCð ×#Ñ#×'Ñ'¨¯©Ó1ˆCÜ˜#œrŸ™Ô/Ø?@�×(Ñ(¨#¨{Ð);Ñ<Øðà×0Ñ0Ô2Ø—}‘}×CÑCÀCÇMÁMÃOÔTá"Ø!×/Ñ/Ó1™à!Ÿn™nÓ.˜ð <?ˆD×$Ñ$ c¨;Ð%7Ñ8Ø×'Ñ'¨¨kÐ(:Ñ;Ð;øô ò ñ ð	ús   Á%AC# Ã#	C/Ã.C/c                ó8   — | j                   x}r|S t        d«      ‚)NzNo current device)rZ  r�   ©rv  r
   s     ry   Úget_current_device_or_throwz)GraphLowering.get_current_device_or_throwÏ  s$   € Ø×(Ñ(Ð(ˆ6Ð(ØˆMäÐ2Ó3Ð3r{   c              #  ób   K  — | j                   }|| _         	 d –— || _         y # || _         w xY w­wrt   )rZ  )rv  r
   rì   s      ry   Úset_current_devicez GraphLowering.set_current_deviceÕ  s1   è ø€ à×#Ñ#ˆØ$ˆÔð	(Ûà"'ˆDÕø %ˆDÕüs   ‚/—# ›/£	,¬/c                ó8   — | j                   ry| j                  ryy)NÚ	inferenceÚbackwardÚforward)r  r  r~  s    ry   Úget_training_phasez GraphLowering.get_training_phaseÞ  s   € Ø×ÒØØ×ÒØØr{   c               óî  — t         j                  syt         j                  ry| j                  j                  D �cg c]?  }|j
                  t        j                  j                  j                  j                  u sŒ>|‘ŒA }}| j                  j                  D ]  }t        |«      sŒ|j                  |«       Œ! t        |«      }|dk(  ryt        j                  j                  j                   r;t        j                  j                  j#                  «       rt%        d„ |D «       «      ryt        t'        | j                  j                  «      «      d|z  k\  rt(        j+                  d«       yt-        d„ |D «       «      rt(        j+                  d«       ydd	„}dd
„}dd„}|rÍt/        t0        «      }|D ]@  }	t3        |	«      }
|
€Œ ||	«      rd}n ||	«      rd}n ||	«      rd}nd}||xx   |
z  cc<   ŒB t(        j+                  d«       d}d}d}d}t5        |j7                  «       «      }|d   |z  |d   |z  z   |d   |z  z   |d   |z  z   }||k  }|st(        j+                  d||«       |S t-        t9        ||«      «      rt(        j+                  d«       yt-        t9        ||«      «      rt(        j+                  d«       yt%        t9        ||«      «      rt(        j+                  d«       yyc c}w )zl
        Decide if we should enable layout optimization for this graph based on
        heuristics.
        FTr   c              3  ó–   K  — | ]A  }d D ]:  }|j                   |   j                  d   j                  j                  t        v –— Œ< ŒC y­w©)r   r(   ÚvalN)rw   r¡   r
   r¬   r`   ©Ú.0Únr§   s      ry   ú	<genexpr>z2GraphLowering.decide_layout_opt.<locals>.<genexpr>  sR   è ø€ ò àØ!òð ð —‘�s‘× Ñ  Ñ'×.Ñ.×3Ñ3Ô7OÔOðØOñùs   ‚AA	i,  z*Skipped layout opt because only a few convc              3  ót   K  — | ]0  }d D ])  }t        |j                  |   j                  d   «      –— Œ+ Œ2 y­wr½  )r   rw   r¡   r¿  s      ry   rÂ  z2GraphLowering.decide_layout_opt.<locals>.<genexpr>  sE   è ø€ ò 
àØò
ð ô ˜QŸV™V C™[×-Ñ-¨eÑ4×5ð
Ø5ñ
ùs   ‚68zeSee perf regression with dynamic shape. Follow up in https://github.com/pytorch/pytorch/issues/102670c                óÂ   — | j                   d   j                  d   }t        |t        j                  «      sJ ‚| j                   d   dkD  xr |j                  d«      dkD  S )Nr(   r¾  r  )rw   r¡   r~   r„   r   r‰  )rÁ  Úmeta_vals     ry   Ú
is_groupedz3GraphLowering.decide_layout_opt.<locals>.is_grouped  sQ   € Ø—v‘v˜a‘y—~‘~ eÑ,ˆHÜ˜h¬¯©Ô5Ð5Ð5Ø—6‘6˜"‘: ‘>Ò: h§m¡m°AÓ&6¸Ñ&:Ð:r{   c                ó  — | j                   d   j                  d   j                  d«      dz  | j                   d   j                  d   j                  d«      k  xr. | j                   d   j                  d   j                  d«      dkD  S )Nr(   r¾  r   é   ©rw   r¡   r‰  ©rÁ  s    ry   Úis_in_out_channelz:GraphLowering.decide_layout_opt.<locals>.is_in_out_channel   sv   € à—‘�q‘	—‘˜uÑ%×*Ñ*¨1Ó-°Ñ1°Q·V±V¸A±Y·^±^ÀEÑ5J×5OÑ5OÐPQÓ5RÑRò 6Ø—F‘F˜1‘I—N‘N 5Ñ)×.Ñ.¨qÓ1°AÑ5ðr{   c                ó¾   — | j                   d   j                  d   j                  d«      dk  xr. | j                   d   j                  d   j                  d«      dk  S )Nr(   r¾  r   é@   rÉ  rÊ  s    ry   Úis_small_channelz9GraphLowering.decide_layout_opt.<locals>.is_small_channel&  sT   € à—‘�q‘	—‘˜uÑ%×*Ñ*¨1Ó-°Ñ3ò 8Ø—F‘F˜1‘I—N‘N 5Ñ)×.Ñ.¨qÓ1°RÑ7ðr{   ÚgroupedÚsmallÚin_outrø   zConv inputs meta not foundgî|?5^ºõ?g¼t“Vê?g333333ç?gu“Vé?zhSkipped layout opt in inference because weighted flops indicate slowdown, default: %d, channels last: %dzFSkip layout opt because found grouped convolution with >1 in_channels!zBSkip layout opt because some convolutions have smaller out_channelz>Skip layout opt because all convolution channels are too small)rÁ  r   rÉ   Úbool)rÁ  rÈ   rÉ   rÒ  )r)   Úlayout_optimizationÚforce_layout_optimizationr^  rÝ   r”   r„   ró   rË   rÌ   rø   rû   r¸   rö   Úbackendsrð   ÚenabledÚis_availableÚallrF  ÚlogÚdebugrÔ   r   Úfloatr8   rÑ   ÚvaluesÚmap)rw  r  rÁ  Ú
conv_nodesÚnconvrÆ  rË  rÎ  Úflop_countsr¨   Úcounted_flopsÚ	node_typeÚGROUPED_MULTIPLIERÚDEFAULT_MULTIPLIERÚIN_OUT_MULTIPLIERÚSMALL_MULTIPLIERÚtotal_flopsÚweighted_flopsÚdo_layout_opts                      ry   r  zGraphLowering.decide_layout_optå  sí  € ô ×)Ò)Øä×+Ò+Øð —x‘x—~‘~ö
Ø¨¯©´U·Y±Y·^±^×5OÑ5O×5WÑ5WÒ)WŠAð
ˆ
ð 
ð —‘—‘ò 	%ˆAÜ˜aÕ Ø×!Ñ! !Õ$ð	%ô �J“ˆà�AŠ:Øô �N‰N×!Ñ!×)Ò)Ü—‘×%Ñ%×2Ñ2Ô4Üñ à#ôô ð ô
 Œt�B—H‘H—N‘NÓ#Ó$¨¨e©Ò3Ü�I‰IÐBÔCØäñ 
àô
ô 
ô
 �I‰IØwôð ó	;ó
	ó	ñ Ü,7¼Ó,>ˆKØ"ò 8�Ü .¨tÓ 4�Ø Ð(Øá˜dÔ#Ø )‘IÙ% dÔ+Ø '‘IÙ& tÔ,Ø (‘Ià )�Ià˜IÓ&¨-Ñ7Ô&ð8ô  —	‘	Ð6Ô7ð
 "'ÐØ!&ÐØ %ÐØ$Ðä˜k×0Ñ0Ó2Ó3ˆKð ˜IÑ&Ð);Ñ;Ø˜gÑ&Ð)9Ñ9ñ:à˜hÑ'Ð*;Ñ;ñ<ð ˜iÑ(Ð+=Ñ=ñ>ð ð +¨kÑ9ˆMÙ Ü—	‘	Ø~ØØ"ôð
 !Ð ô& Œs�:˜zÓ*Ô+Ü�I‰IØXôð ô ŒsÐ$ jÓ1Ô2Ü�I‰IØTôð ô ŒsÐ# ZÓ0Ô1Ü�I‰IÐVÔWØàùòg
s   »?K2Á;K2c                ó@   — | j                   �| j                   › d|› �S |S )z2Prepend the given name with the graph name if any.r„  )rL  ©rv  rL  s     ry   Úqualify_namezGraphLowering.qualify_name†  s&   € à�9‰9Ð Ø—i‘i�[  $ Ð(Ð(Øˆr{   c                óÂ   — t        | ||| j                  | j                  | j                  | j                  | j
                  | j                  | j                  |«      ¬«
      S )aÞ  
        Make a subgraph of the current graph with all inherited parts, except
        the graph module (`gm`) and `example_inputs`.  The subgraphs are lowered
        separately and lifted into a separate function in the parent output
        wrapper code.  The subgraph name is qualified by the parent graph's
        name. Note that the lifting of subgraph is supported for python wrapper
        only. For cpp wrapper, we inline the subgraphs in the parent wrapper.
        )
Úparentrw  r
  rx  rM  rQ  r@  r  r  rL  )ÚSubgraphLoweringr  rM  rQ  r@  r  r  rì  )rv  rw  r
  Úsubgraph_names       ry   Úmake_subgraphzGraphLowering.make_subgraphŒ  sZ   € ô  ØØØ)Ø—o‘oØ×(Ñ(Ø—]‘]Ø#'×#>Ñ#>Ø×*Ñ*Ø×(Ñ(Ø×"Ñ" =Ó1ô
ð 	
r{   c                óø  — d}t         j                  j                  j                  j                  g}t        t           «       }t        | j                  j                  j                  «      D ]¦  }|j                  t         j                  j                  j                  j                  u r|j                  |«       |€|}ŒS|j                  |v rŒbt        |«      r|j                  |«       Œ|j                  D ]  }||v sŒ|j                  |«        Œ¦ Œ¨ | j                  j                  j                  D ]B  }|�||k(  r |S ||v sŒ|j                  D ]"  }|j                  |v rŒ|j                  |«       Œ$ ŒD |S )aD  
        The rule to decide if an node prefer channels last is simple.
        1. if it's input/output of a convolution
        2. if one of its user prefers channels last

        We have rule 1 because cudnn runs a faster convolution kernel for channels last inputs;
        Rule 2 is also important. It makes sure that indirect inputs to convolution also prefers
        channels last.

        Consider the scenario: conv -> batch-norm -> relu -> conv
        Without rule 2, batch-norm output may use a contiguous layout. That will cause 2 extra copies:
        1. the output of batch-norm should be channels last initially since its input is a conv's output.
           Forcing the batch-norm's output to be contiguous results in the first copy
        2. The second conv's input is initially contiguous. This layout is propagated from the batch-norm's output.
           We need to convert it to channels last layout which results in the second copy.
        With rule 2, we make sure all the tensors in the chain use channels last layout. So both copies
        can be saved.
        N)r„   ró   rË   Úbmmrø   r&   r#   rÜ   rf  r^  rÝ   r”   rÌ   r·   rû   Úusers)rv  Ú	last_convÚnodes_cannot_propagateÚ
output_setrÁ  Úusers         ry   r[  z-GraphLowering.find_nodes_prefer_channels_last§  sZ  € ð& ˆ	Ü"'§)¡)§.¡.×"4Ñ"4×"<Ñ"<Ð!=ÐÜ¤Ñ%Ó'ˆ
Ü˜$Ÿ+™+×+Ñ+×1Ñ1Ó2ò 	ˆAØ�x‰xœ5Ÿ9™9Ÿ>™>×5Ñ5×=Ñ=Ñ=Ø—‘˜qÔ!ØÐ$Ø !�IØØ�x‰xÐ1Ñ1ØÜ˜aÔ Ø—‘˜qÔ!ØØŸ™ò �Ø˜:Ò%Ø—N‘N 1Ô%Ùñð	ð< —‘×"Ñ"×(Ñ(ò 	)ˆAàÐ$¨¨iªØð Ðð �JŠØŸG™Gò )�DØ—{‘{Ð&<Ñ<Ø Ø—N‘N 4Õ(ñ)ð	)ð Ðr{   c                ó„   — || j                   vr2| j                   j                  |«       t        j                  d|«       y y )NzUsing FallbackKernel: %s)r]  r·   Úperf_hint_logÚinforë  s     ry   Úwarn_fallbackzGraphLowering.warn_fallbackç  s:   € Ø�t×,Ñ,Ñ,Ø×!Ñ!×%Ñ% dÔ+Ü×ÑÐ9¸4Õ@ð -r{   c                óR  — | j                   j                  |j                  «       |j                  �%| j                  j                  |j                  «       t
        j                  j                  r7|| j                  vr(t
        j                  j                  | j                  |<   y y y rt   )	r#  r·   r¬   Úindexr$  rc   r^  rA  rc  r²  s     ry   Úadd_device_infozGraphLowering.add_device_infoì  sy   € Ø×Ñ×Ñ˜fŸk™kÔ*Ø�<‰<Ð#Ø×Ñ× Ñ  §¡Ô.Ü�7‰7×Ò F°$×2JÑ2JÑ$JÜ/0¯w©w×/CÑ/CˆD×$Ñ$ VÒ,ð %KÐr{   c                ó"   — t         j                  S rt   )rc   Ú	fake_moder~  s    ry   r  zGraphLowering.fake_modeó  s   € ä�{‰{Ðr{   c                óˆ   — | j                   rt        j                  j                  ryt	        d„ | j
                  D «       «      S )a  True when generating dual-wrapper-mode C++ for both JIT and AOTI.

        Dual-wrapper mode emits a JIT pass that drives Triton autotune/compile
        alongside the AOTI output, so it is needed iff at least one device in
        the graph uses the Triton backend.
        Fc              3  óF   K  — | ]  }t        j                  |«      –— Œ y ­wrt   )r*   Ú	is_triton)rÀ  Úds     ry   rÂ  z5GraphLowering.is_dual_wrapper_mode.<locals>.<genexpr>  s   è ø€ Ò> q”2—<‘< —?Ñ>ùs   ‚!)rQ  r)   ÚtritonÚautotune_at_compile_timerÔ   r#  r~  s    ry   Úis_dual_wrapper_modez"GraphLowering.is_dual_wrapper_mode÷  s1   € ð �}Š}¤§¡× FÒ FØÜÑ>¨D×,=Ñ,=Ô>Ó>Ð>r{   c           	     óˆ  — || j                   v r| j                   |   S || j                  v r| j                  |   S || j                  v rzt        j                  j                  |   }t        j                  |t        j                  |j                  |j                  gt        j                  j                  |«      ¢­Ž ¬«      S y )N©rL  r­   )rE  r  r.  rc   r^  r*   ÚConstantBufferr<   r
   Údtyper—  )rv  Úbuffer_namer™  s      ry   Útry_get_bufferzGraphLowering.try_get_buffer  s­   € ð ˜$×-Ñ-Ñ-Ø×&Ñ& {Ñ3Ð3Ø˜$×+Ñ+Ñ+Ø×$Ñ$ [Ñ1Ð1Ø˜$Ÿ.™.Ñ(Ü—7‘7×$Ñ$ [Ñ1ˆDÜ×$Ñ$Ø Ü—~‘~Ø—K‘K §¡ðÜ./¯g©g×.JÑ.JÈ4Ó.Pòôð ð r{   c                ó   — t        d«      ‚)Nz'Should not be called for the main graph)r�   )rv  Úsymbols     ry   Úadd_symbol_graph_inputz$GraphLowering.add_symbol_graph_input  s   € ÜÐDÓEÐEr{   c                óH   — | j                  |«      }|�|S t        d|› �«      ‚)Nz$Failed to find buffer matching name )r  r�   ©rv  r  Úbufs      ry   Ú
get_bufferzGraphLowering.get_buffer  s1   € ð ×!Ñ! +Ó.ˆØˆ?ØˆJÜÐAÀ+ÀÐOÓPÐPr{   c                óÂ  — || j                   v r| j                   |   j                  S t        | j                  d«      r‡|| j                  j                  v ro| j                  j                  |   }|| j
                  v r| j
                  |   j                  «       S || j                  v r| j                  |   j                  «       S || j
                  v r| j
                  |   j                  «       S || j                  v r| j                  |   j                  «       S t        j                  d|«      }|r | j                  |j                  d«      «      S t        d|› �«      ‚)NÚmutation_real_namez1(as_strided|reinterpret_tensor)\(([a-zA-Z0-9_]+),r(   úcould not find )r.  r  r�   rV  r  rE  Ú	get_dtyper  ÚreÚmatchÚgroupr«  )rv  r  Úmutated_bufÚms       ry   r  zGraphLowering.get_dtype   s7  € Ø˜$Ÿ.™.Ñ(Ø—>‘> +Ñ.×4Ñ4Ð4ô �D—N‘NÐ$8Ô9Ø˜tŸ~™~×@Ñ@Ñ@àŸ.™.×;Ñ;¸KÑHˆKØ˜d×1Ñ1Ñ1Ø×*Ñ*¨;Ñ7×AÑAÓCÐCØ˜d×/Ñ/Ñ/Ø×(Ñ(¨Ñ5×?Ñ?ÓAÐAØ˜$×-Ñ-Ñ-Ø×&Ñ& {Ñ3×=Ñ=Ó?Ð?Ø˜$×+Ñ+Ñ+Ø×$Ñ$ [Ñ1×;Ñ;Ó=Ð=Ü�H‰HÐIÈ;ÓWˆÙØ—>‘> !§'¡'¨!£*Ó-Ð-Ü˜¨¨Ð6Ó7Ð7r{   c                óF  — || j                   v r| j                   |   j                  «       S || j                  v r0| j                  |   }|j                  «       sy|j	                  «       S || j
                  v r| j
                  |   j	                  «       S t        d|› �«      ‚)Nr(   r  )r.  ÚnumelrE  Úhas_tensor_outputr¨  r  r«  r  s      ry   r¨  zGraphLowering.get_numel6  s™   € Ø˜$Ÿ.™.Ñ(Ø—>‘> +Ñ.×4Ñ4Ó6Ð6Ø˜$×-Ñ-Ñ-Ø×%Ñ% kÑ2ˆCØ×(Ñ(Ô*ØØ—=‘=“?Ð"Ø˜$×+Ñ+Ñ+Ø×$Ñ$ [Ñ1×;Ñ;Ó=Ð=Ü˜¨¨Ð6Ó7Ð7r{   c                ó^   •— t        d«      5  t        ‰| �  |Ž cd d d «       S # 1 sw Y   y xY w)NzGraphLowering.run)r   r  Úrun)rv  rw   r{  s     €ry   r#  zGraphLowering.runB  s-   ø€ ÜÐ-Ó.ñ 	&Ü‘7‘; Ð%÷	&÷ 	&ò 	&ús   �#£,c                ó  — |j                   �
J d|› �«       ‚t        |t        j                  «      sJ ‚| j	                  dt        | j                  «      › �«      }| j                  j                  |«       || j                  |<   ||_         |S )NzOperation registered twice: r�   )	Úoperation_namer~   r*   Ú	Operationrì  rö   r+  r¸   rH  )rv  r�   rL  s      ry   Úregister_operationz GraphLowering.register_operationF  sƒ   € Ø× Ñ Ð(ÐMÐ,HÈÈÐ*MÓMÐ(Ü˜"œbŸl™lÔ+Ð+Ð+Ø× Ñ  2¤c¨$¯/©/Ó&:Ð%;Ð!<Ó=ˆØ�‰×Ñ˜rÔ"Ø "ˆ�‰˜ÑØ ˆÔØˆr{   ©Úset_namec               ó„  — | j                  dt        | j                  «      › �«      }| j                  j                  |«       || j                  |<   |j                  «       }|�St        |t        j                  «      r(|j                  «       r|t        j                  d«      k(  s| j                  |«       |r||_        |S )Nr  r«   )rì  rö   r*  r¸   rE  Ú
get_devicer~   r*   rš  Úis_zero_elementsr„   r
   rÿ  rL  )rv  Úbufferr)  rL  r
   s        ry   Úregister_bufferzGraphLowering.register_bufferO  s§   € Ø× Ñ  3¤s¨4¯<©<Ó'8Ð&9Ð!:Ó;ˆØ�‰×Ñ˜FÔ#Ø$*ˆ×Ñ˜DÑ!Ø×"Ñ"Ó$ˆð Ðä˜6¤2×#4Ñ#4Ô5Ø×+Ñ+Ô-ØœeŸl™l¨5Ó1Ò1ð × Ñ  Ô(áØˆFŒKØˆr{   c                ój   — | j                  ddj                  |«      z   «      }|| j                  |<   |S )NÚlist_r„  )rì  r‘   rB  )rv  Úoperation_namesrL  s      ry   Úregister_operation_listz%GraphLowering.register_operation_listc  s3   € Ø× Ñ  ¨3¯8©8°OÓ+DÑ!DÓEˆØ*ˆ�
‰
�4ÑØˆr{   c                ó&   ‡ ‡— dˆˆ fd„Š ‰|«       y )Nc                óì   •— t        | t        t        f«      r| D ]
  } ‰|«       Œ t        | t        j                  «      r4| j                  «       D ]   }‰j                  |   j                  | «       Œ" y y rt   )r~   rF  Útupler*   rD   Úget_read_namesrG  r¸   )ÚvalueÚxÚ	read_nameÚregisterrv  s      €€ry   r:  z1GraphLowering.register_users_of.<locals>.registeri  sm   ø€ Ü˜%¤$¬ Ô/Øò  �AÙ˜Q•Kð ä˜%¤§¡Ô.Ø!&×!5Ñ!5Ó!7ò @�IØ×&Ñ& yÑ1×8Ñ8¸Õ?ñ@ð /r{   )r7  úIterable[ir.IRNode] | ir.IRNoderÉ   ÚNoneru   )rv  Únode_outputr:  s   ` @ry   Úregister_users_ofzGraphLowering.register_users_ofh  s   ù€ ö	@ñ 	�Õr{   c                óÄ   — t        |t        «      sJ ‚| j                  j                  |«       || j                  vry| j                  |   D ]  }|j                  «        Œ y)z’
        When a buffer is mutated we need to make sure all the reads to
        the old version are realized before the mutation happens.
        N)r~   Ústrr8  r·   rG  Úrealize)rv  rL  rø  s      ry   Úmark_buffer_mutatedz!GraphLowering.mark_buffer_mutateds  s\   € ô
 ˜$¤Ô$Ð$Ð$Ø×Ñ× Ñ  Ô&à�t×)Ñ)Ñ)Øà×&Ñ& tÑ,ò 	ˆDØ�L‰L�Nñ	r{   c                óþ   — || j                   v r|| j                  v s
J d|z   «       ‚t        | j                   |   «      }|| j                  j                  v r| j                  j                  |   S | j                  |   S )zò
        In AOTI, module buffers may have been mutated during the tracing and compilation.
        Thus we need to read from previously stored original buffers, to make sure the
        generated model.so uses correct initial values.
        z$Can not find the original value for )rg  r.  rW   rf  r¡   )rv  rL  Ú	orig_names      ry   Úget_original_value_of_constantz,GraphLowering.get_original_value_of_constant�  sŠ   € ð �t×3Ñ3Ñ3¸ÀÇÁÑ8Nð 	
Ø2°TÑ9ó	
ÐNô 5°T×5QÑ5QÐRVÑ5WÓXˆ	ð ˜DŸK™K×,Ñ,Ñ,ð �K‰K×Ñ˜YÑ'ð	
ð —‘ Ñ%ð	
r{   c                ó¦  — t         j                  j                  s2| j                  j	                  «       D ]  \  }}t        ||«      sŒ|c S  |€dt        | j                  «      › �}|}|d   j                  «       rd|› �}| j                  |«      }t        |«      }|}d}|| j                  v r|› d|› �}|dz  }|| j                  v rŒ|| j                  |<   |j                  ›d|j                  ›dt        |j                  «       «      ›dt        |j                  «       «      ›dt        |«      d›�	| j                   |<   || j"                  |<   |S )NÚconstantr   Ú	constant_r„  r(   ú r8  )r)   Úaot_inductorÚuse_runtime_constant_foldingr.  Úitemsr[   rö   Úisdigitrì  r]   r
   r  r5  r‰  rŠ  Úhashr4  rg  )rv  rL  r™  Úconstant_namer7  rD  ÚprefixÚcnts           ry   Úallocate_non_dup_const_namez)GraphLowering.allocate_non_dup_const_name‘  sX  € Ü×"Ñ"×?Ò?Ø(,¯©×(<Ñ(<Ó(>ò )Ñ$�˜uÜ! $¨Õ.Ø(Ò(ð)ð ˆ<Øœc $§.¡.Ó1Ð2Ð3ˆDØˆ	Ø�‰7�?‰?ÔØ˜t˜fÐ%ˆDØ× Ñ  Ó&ˆô   Ó%ˆØˆØˆØ�d—n‘nÑ$Ø�X˜Q˜s˜eÐ$ˆDØ�1‰HˆCð �d—n‘nÒ$ð  $ˆ�‰�tÑà�{‰{ˆo˜Q˜tŸz™z˜n¨AÜ�T—Y‘Y“[Ó!Ð$ A¤e¨D¯K©K«MÓ&:Ð%=¸QÜ�D‹z˜!ˆnðð 	×Ñ˜DÑ!ð
 .7ˆ×$Ñ$ TÑ*Øˆr{   c                óî   — | j                  ||«      }t        j                  t        j                  |t        |j                  |j                  g| j                  |«      ¢­dt        |«      iŽ¬«      «      S )Nr¯   r
  )
rR  rD   Úcreater*   r  r<   r
   r  r—  r²   )rv  r™  rL  Únew_names       ry   Úadd_tensor_constantz!GraphLowering.add_tensor_constant®  sr   € Ø×3Ñ3°D¸$Ó?ˆÜ×ÑÜ×ÑØÜ"Ø—K‘KØ—J‘Jðð ×.Ñ.¨tÓ4òô <¸DÓAñ	ôó

ð 
	
r{   c                óv  ‡— | j                   ‰   j                  |k(  s|€‰S t        j                  j                  j                  «       5  | j                  ‰› d|j                  › |j                  xs d› �| j                   ‰   j                  |«      «      }|| j                   v s
J |› d�«       ‚t        ˆfd„| j                  D «       «      r| j                   |   | j                  |<   t        ˆfd„| j                  D «       «      r| j                   |   | j                  |<   |cddd«       S # 1 sw Y   yxY w)z¼
        We AOT copy constants to the devices they are needed on.
        If device_override doesn't match the constant's device, then
        copy it and return a different name.
        Nr„  r   z' should be in V.graph.constants alreadyc              3  ó:   •K  — | ]  }‰t        |«      k(  –— Œ y ­wrt   ©r]   )rÀ  r  rL  s     €ry   rÂ  z.GraphLowering.constant_name.<locals>.<genexpr>Ò  s#   øè ø€ ò àð œ {Ó3Õ3ñùó   ƒc              3  ó:   •K  — | ]  }‰t        |«      k(  –— Œ y ­wrt   rY  )rÀ  Ú
param_namerL  s     €ry   rÂ  z.GraphLowering.constant_name.<locals>.<genexpr>Ú  s#   øè ø€ ò àð œ zÓ2Õ2ñùrZ  )r.  r
   r„   ÚutilsÚ_python_dispatchÚ_disable_current_modesrR  r¬   rþ  ÚtorÔ   r/  r0  )rv  rL  Údevice_overrideÚnon_dup_const_names    `  ry   rO  zGraphLowering.constant_name¼  sE  ø€ ð �>‰>˜$Ñ×&Ñ&¨/Ò9¸_Ð=TØˆKÜ�[‰[×)Ñ)×@Ñ@ÓBñ 	&ð "&×!AÑ!AØ�&˜˜/×.Ñ.Ð/°×0EÑ0EÒ0JÈÐ/KÐLØ—‘˜tÑ$×'Ñ'¨Ó8ó"Ðð
 &¨¯©Ñ7ð Ø%Ð&Ð&MÐNóÐ7ô ó à#'×#5Ñ#5ôô ð :>¿¹Ø&ñ:�×"Ñ"Ð#5Ñ6ô ó à"&×"7Ñ"7ôô ð =A¿N¹NØ&ñ=�×%Ñ%Ð&8Ñ9ð &÷=	&÷ 	&ò 	&ús   Á
CD/Ä/D8c                óÐ  •— | xj                   dz  c_         t        ‰| �	  |||«      }| j                  |«      }t	        |t
        «      rrt        j                  j                  st        |j                  «      }n|j                  j                  }|| j                  |<   | j                  j                  |«       |S t	        |t        t         t"        f«      rAt%        j&                  |«      }|| j                  |<   | j                  j                  |«       |S t	        |t(        «      r9t+        ||¬«      }|| j                  |<   | j                  j                  |«       |S |€| j                  j                  |«       y t	        |t,        «      r| j                  j                  |«       y t	        |t.        j0                  «      rMt3        j4                  ||j6                  ¬«      }|| j                  |<   | j                  j                  |«       |S t9        t;        |«      «      rCt3        j<                  ||¬«      }|| j                  |<   | j                  j                  |«       |S t	        |t.        j>                  «      sJ |«       ‚|j@                  s8| jC                  |«      \  }	}
t%        jD                  |jG                  «       «      }n| jI                  |«      \  }	}
}| j                  re| jJ                  rY| j                   | jJ                  v rAtM        jN                  tQ        |tS        |j6                  |jT                  |	|
«      ¬«      «      }n@tM        jN                  tW        |tS        |j6                  |jT                  |	|
«      ¬«      «      }|| j                  |<   | j                  j                  |«       || jX                  |<   |jZ                  jZ                  | j\                  |<   | j^                  j`                  r| jc                  |j6                  «       te        «       5  tg        |«      s| jh                  jk                  |«       d d d «       |S # 1 sw Y   |S xY w)Nr(   ©rL  r7  )rL  r
   r
  )6rs  r  Úplaceholderrì  r~   r"   rc   r^  r  r   r¨   r‘  r  r  r¸   ÚintrÒ  rÛ  r   r�  r   rE   r   r„   Ú	Generatorr*   ÚGeneratorStater
   r   r¬   ÚOpaqueObjectStater   Ú_has_symbolic_sizes_stridesr—  rƒ   r‹  r€  rt  rD   rT  r;   r<   r  r?   r   r™  r  rA  rô  rÿ  r\   r^   rj  r·   )rv  r”   rw   rx   Úexampler‘  r“   ÚgenÚ
opaque_objr‚  rƒ  r‹  Útensorr{  s                €ry   re  zGraphLowering.placeholderå  sœ  ø€ ð 	×Ò Ñ!ÕÜ‘'Ñ% f¨d°FÓ;ˆØ×"Ñ" 6Ó*ˆÜ�gœxÔ(ô —7‘7×&Ò&Ü,¨W¯\©\Ó:‘à—|‘|×(Ñ(�Ø(,ˆD×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆKÜ˜¤#¤t¬UÐ!3Ô4Ü—=‘= Ó)ˆDØ(,ˆD×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆKÜ˜Ô!1Ô2Ü! v°WÔ=ˆCØ(+ˆD×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆJØˆ_Ø×"Ñ"×)Ñ)¨&Ô1ØÜ�gœ}Ô-ð ×"Ñ"×)Ñ)¨&Ô1Øä˜¤§¡Ô1Ü×#Ñ#¨¸¿¹ÔGˆCØ(+ˆD×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆJÜ%¤d¨7£mÔ4Ü×-Ñ-°6ÀÔIˆJØ(2ˆD×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØÐä˜'¤5§<¡<Ô0Ð9°'Ó9Ð0ð
 ×2Ò2à!×6Ñ6°wÓ?‰NˆE�7Ü"Ÿ]™]¨7×+AÑ+AÓ+CÓD‰Nà-1×-WÑ-WØó.Ñ*ˆE�7˜Nð
 ×ÒØ×$Ò$Ø×$Ñ$¨×(<Ñ(<Ñ<ä×%Ñ%ÜØÜ& w§~¡~°w·}±}ÀeÈWÓUôó‰Fô ×%Ñ%ÜØÜ& w§~¡~°w·}±}ÀeÈWÓUôóˆFð %+ˆ×Ñ˜&Ñ!Ø×Ñ×%Ñ% fÔ-Ø3Aˆ×(Ñ(¨Ñ0Ø-3¯[©[×-=Ñ-=ˆ×"Ñ" 6Ñ*Ø×Ñ×"Ò"Ø× Ñ  §¡Ô0ô 1Ó2ñ 	3Ü.¨wÔ7Ø×&Ñ&×*Ñ*¨6Ô2÷	3ð ˆ÷	3ð ˆús   Ð*'QÑQ%c           	     ó	  •‡— ‰t         j                  u r/t        |d   t        t        t
        f«      rt        ‰| �  ‰||«      S t        ‰t        j                  j                  «      st        ‰d«      r ‰|i |¤ŽS ‰t        v�rht        ‰t        j                  j                  «      s
J ‰› d�«       ‚‰j                  «       j                  d«      d   }|t         v rt#        ‰d| j$                  d¬«       nöt&        j(                  rÀt+        ‰g«      rt,        nt.        }t0        j3                  dt5        |j6                  ‰||«      «       t9        ‰d¬	«      }|€<t        j:                  j<                  j?                  ‰«      r| j@                  rtB        }nt9        ‰d¬	«      }tE        |«      }t#        ‰|| j$                  ¬
«       n&t+        ‰g«      rt-        ‰||«      ‚t/        ‰||«      ‚	 t0        jG                  dt        ‰   «       | jH                  }	tK        ‰«      }
|
r�||}}|
tL        u r‚d|	jN                  v rƒ|	jN                  d   \  }}t        ‰t        j                  j                  «      sJ ‚dˆfd„} |||«      \  }} |||«      \  }} |||«      \  }}tM        ||||«      \  }}n |
|	g|¢­i |¤Ž\  }}d|	jN                  v s+|	jN                  jQ                  di «      jQ                  d«      r tS        ‰d¬«      |i |¤Ž}n•d }‰tT        v r_‰tV        jX                  vrMtV        jX                  j[                  ‰«       	 tU        ‰   |i |¤Ž}tV        jX                  j]                  ‰«       |€*‰t        v rt        ‰   |i |¤Ž}n tS        ‰d¬«      |i |¤Ž}|
r| j_                  |	||«       |S # tV        jX                  j]                  ‰«       w xY w# t`        $ r›}d }t        | d«      r^| jH                  �Rt        | jH                  d«      r<| jH                  jN                  �&| jH                  jN                  jQ                  dd «      }tc        |‰|||¬«      je                  |jf                  «      d ‚d }~ww xY w)Nr   Ú_inductor_lowering_functionz is not an OpOverloadrŒ   FT)Úwarnr	  Úoverride_decompz"Creating implicit fallback for:
%s)Úwith_default)Úlayout_constraintr	  z  via %sÚeager_input_valsc                óv   •— t         j                  j                  j                  ‰| |«      }|€J ‚|d   |d   fS )Nr   r(   )r„   r¢   Úoperator_schemasÚnormalize_function)rw   rx   rº   r”   s      €ry   Ú	normalizez.GraphLowering.call_function.<locals>.normalize®  sE   ø€ Ü%*§X¡X×%>Ñ%>×%QÑ%QØ &¨¨fó&˜Fð $*Ð#5Ð5Ð#5Ø#)¨!¡9¨f°Q©iÐ#7Ð7r{   Úshould_fallbackÚcustomÚfallback_to_eager©Úadd_to_fallback_setrA  r¡   Ústack_trace)r  )rw   r   rx   r   rÉ   ztuple[Any, Any])4ÚoperatorÚgetitemr~   rF  r5  Údictr  rÂ   r„   rÄ   ÚOpOverloadPacketr�   rK   rÅ   rL  r�   rH   rL   r	  r)   Úimplicit_fallbacksr   r6   r7   rÙ  rû  r   Úoperator_strr   Ú_libraryr]  Ú
is_builtinr  rO   rP   rÚ  rA  rM   rF   r¡   rä   rI   rR   rc   Úactive_user_lowering_opsr·   ÚdiscardÚpropagate_mutationÚ	Exceptionr5   Úwith_tracebackÚ__traceback__)rv  r”   rw   rx   Ú	base_nameÚerrorÚtagÚdecided_constraintÚdefault_tagrÁ  Úlayout_constraintsÚold_argsÚ
old_kwargsÚ	fake_argsÚfake_kwargsry  ÚoutÚer  r{  s    `                 €ry   rÂ   zGraphLowering.call_functionP  s‚  ù€ à”X×%Ñ%Ñ%¬*°T¸!±W¼tÄUÌDÐ>QÔ*RÜ‘7Ñ(¨°°vÓ>Ð>ô ˜&¤%§*¡*×"=Ñ"=Ô>Ä7ØÐ1ôD
ñ ˜4Ð* 6Ñ*Ð*àœÒ"Ü˜f¤e§j¡j×&;Ñ&;Ô<ð Ø�(Ð/Ð0óÐ<ð Ÿ™›×+Ñ+¨CÓ0°Ñ3ˆIØÔ/Ñ/ÜØØØ"&×"4Ñ"4Ø$(ö	ô ×*Ò*ô *¨6¨(Ô3õ .ä5ð ô
 —‘Ø9Ü˜u×1Ñ1°6¸4ÀÓHôô
 ,EØ¨ô,�ð �KÜŸ™×,Ñ,×7Ñ7¸Ô?Ø×(Ò(ô +ñ 'ô 1JØ¨Tô1�Kô *BÀ+Ó)NÐ&äØØ&8Ø"&×"4Ñ"4öô $ V HÔ-ô 0°¸¸fÓEÐEä2°6¸4ÀÓHÐHðU	8Ü�I‰I�j¤)¨FÑ"3Ô4à×!Ñ!ˆAÜ!9¸&Ó!AÐÙ!Ø'+¨V˜*�Ø%Ô)BÑBð
 *¨Q¯V©VÑ3Ø12·±Ð8JÑ1KÑ.˜	 ;ô  *¨&´%·*±*×2GÑ2GÔHÐHÐHõ8ñ 2;¸9ÀkÓ1RÑ.˜	 ;Ù'0°°vÓ'>™˜˜fÙ/8¸À:Ó/NÑ,˜ *ä'@Ø  &¨)°[ó(™˜™fñ $6°aÐ#I¸$Ò#IÀ&Ñ#I‘L�D˜&à  A§F¡FÑ*¨a¯f©f¯j©j¸À2Ó.F×.JÑ.JØ#ô/ð JÔ& vÀ5ÔIØðØ#ñ‘ð �ð œnÑ,Ø¤a×&@Ñ&@Ñ@ô ×.Ñ.×2Ñ2°6Ô:ðCä,¨VÑ4°dÐE¸fÑE˜ä×2Ñ2×:Ñ:¸6ÔBð �;Ø¤Ñ*Ü'¨Ñ/°Ð@¸Ñ@™ð RÔ.¨vÈ5ÔQØ!ðØ%+ñ˜ñ "ð ×'Ñ'¨¨8°ZÀÀvÔNàˆJøô% ×2Ñ2×:Ñ:¸6ÕBûô& ò 	8ØˆKä˜˜nÔ-Ø×%Ñ%Ð1Ü˜D×-Ñ-¨vÔ6Ø×%Ñ%×*Ñ*Ð6à"×/Ñ/×4Ñ4×8Ñ8¸ÈÓM�Ü#Ø�6˜4 °[ôç‰n˜QŸ_™_Ó-°4ð8ûð	8ús3   Ç.EO  Í
N< ÍA#O  Î<!OÏO  Ï 	RÏ)BQ?Ñ?Rc                óZ   — t        | j                  «      dk(  xr | j                  d   dk  S )zM
        True if this is a small constant attr that will be inlined.
        r(   r   é   )rö   Úshaper°   s    ry   Úcan_inline_constantz!GraphLowering.can_inline_constantò  s(   € ô
 �1—7‘7‹|˜qÑ Ò4 Q§W¡W¨Q¡Z°1¡_Ð4r{   c           	     óB  — t        | j                  |«      }t        |t        j                  j
                  «      rE|| j                  v r| j                  |   S t        j                  ||¬«      }|| j                  |<   |S t        |t        j                  j                  «      r+|| j                  |<   d| j                  |<   t        ||¬«      S t        |t        «      r+|| j                  |<   d| j                  |<   t        ||¬«      S t        t!        |«      «      r+|| j                  |<   d| j                  |<   t        ||¬«      S t        |t        j"                  «      sJ ‚t$        j&                  j(                  s)t$        j*                  st-        |«      s|| j.                  v r| j1                  ||«      S t3        «       5  |j4                  dk(  r9t7        |j9                  «       |j:                  |j<                  ¬«      cd d d «       S | j?                  |«      r\t@        jC                  d|«       ddl"m#}  ||jI                  «       |j:                  |j<                  tK        |«      ¬	«      cd d d «       S 	 d d d «       | j1                  ||«      S # 1 sw Y   ŒxY w)
N)rL  Úgraph_moduler  rd  ru   )r7  r  r
   zInlining constant: %s r(   )rn  )r  r
   Ú
pin_memory)&r™   rf  r~   r„   r¢   rj   r3  r*   ÚSubgraphrá   ÚScriptObjectr1  r4  rE   r   r   r¬   r   r)   rJ  rK  Úalways_keep_tensor_constantsrQ   r  rV  r%   rœ  r:   Úitemr  r
   r�  rÙ  rÚ  Úloweringrn  Útolistr²   )rv  r”   rw   rx   r7  r˜  rn  s          ry   Úget_attrzGraphLowering.get_attrú  s-  € ô " $§+¡+¨vÓ6ˆä�eœUŸX™X×1Ñ1Ô2à˜×,Ñ,Ñ,Ø×*Ñ*¨6Ñ2Ð2ä—+‘+ 6¸Ô>ˆCØ*-ˆD×Ñ Ñ'ØˆJä�eœUŸX™X×2Ñ2Ô3Ø/4ˆD×$Ñ$ VÑ,Ø*,ˆD×Ñ Ñ'Ü"¨°eÔ<Ð<Ü˜Ô/Ô0Ø/4ˆD×$Ñ$ VÑ,Ø*,ˆD×Ñ Ñ'Ü"¨°eÔ<Ð<ÜœD ›KÔ(Ø/4ˆD×$Ñ$ VÑ,Ø*,ˆD×Ñ Ñ'Ü"¨°eÔ<Ð<ä˜%¤§¡Ô.Ð.Ð.ä×Ñ×<Ò<Ü×2Ò2Ü(¨Ô/Ø˜×3Ñ3Ñ3à×+Ñ+¨E°6Ó:Ð:ä‹]ñ 	Ø�{‰{˜bÒ ÜØŸ*™*›,¨e¯k©kÀ%Ç,Á,ô÷	ñ 	ð
 ×'Ñ'¨Ô.Ü—	‘	Ð2°FÔ;å,áØ—L‘L“NØŸ+™+Ø Ÿ<™<Ü<¸UÓCô	÷	ñ 	ð
 /÷	ð" ×'Ñ'¨¨vÓ6Ð6÷#	ð 	ús   Ç?JÈA#JÊJc                ó   — t         ‚rt   ©ÚAssertionError©rv  r”   rw   rx   s       ry   Úcall_modulezGraphLowering.call_module5  ó   € ÜÐr{   c                ó   — t         ‚rt   r©  r«  s       ry   Úcall_methodzGraphLowering.call_method8  r­  r{   c                ó	  •— t         ‰| �  |||«      }t        |t        t        f«      s|f}t        |t        t        f«      sJ t        |«      «       ‚|D �cg c].  }t        t        |«      «      rt        j                  |¬«      n|‘Œ0 }}t        d„ |D «       «      sJ |«       ‚t        j                  j                  j                  d   }t        |t        t        f«      s|f}|D �cg c]!  }t        j                  j                  |«      ‘Œ# }}g }t!        |«      t!        |«      k(  sJ ‚t#        ||«      D �]C  \  }}	t        |t        j$                  t        j&                  f«      s|j)                  |«       ŒCt        |j+                  «       t        j,                  «      r/|j)                  t        j                  j/                  |«      «       Œšt0        j2                  j                  j5                  |«      sJ ‚|	j6                  d   j9                  «       D �
cg c]4  }
t        |
t0        j:                  «      r|
j<                  j>                  n|
‘Œ6 }}
|j)                  t        j@                  ||«      «       �ŒF || _!        | jD                  jG                  «       D �]r  \  }}t        |tH        tJ        jL                  t0        j2                  j                  jN                  t0        j2                  j                  jP                  f«      rŒnt        |t$        «      sJ dt        |«      › �«       ‚|jS                  «        t        |t$        «      sJ ‚|jT                  }t        |t        jV                  «      sJ ‚|}|jT                  }t        |tX        «      r|j[                  «       |k7  s�Œt        j\                  j_                  || j`                  |   «       	 | jB                  jc                  |«      }| j`                  |   | jB                  |<   �Œu | jg                  «        th        jk                  d| jl                  | jn                  �| jn                  «       y d«       y c c}w c c}w c c}
w # td        $ r Y �Œàw xY w)N©r7  c              3  óœ  K  — | ]Ä  }t        |t        t        j                  t	        d «      t        j
                  t        j                  t        j                  j                  j                  t        t        j                  t        j                  t        t        j                  t        j                   t        j"                  f«      –— ŒÆ y ­wrt   )r~   rD   r*   r:   r¬   r  r   r	   ÚlogicÚboolalgÚBooleanrf  ÚEffectfulKernelrB   rE   ÚOpaqueMultiOutputÚOpaqueValueTypeConstantri  )rÀ  r8  s     ry   rÂ  z'GraphLowering.output.<locals>.<genexpr>K  sŽ   è ø€ ò 
ð& ô% ØäÜ—K‘KÜ˜“JÜ×%Ñ%Ü—J‘JÜ—K‘K×'Ñ'×/Ñ/ÜÜ×&Ñ&Ü×,Ñ,Ü#Ü×(Ñ(Ü×.Ñ.Ü×(Ñ(ð÷ñ
ùs   ‚C
Cr   r¾  z'Unsupported inductor graph input type: zGForce channels last inputs for %d conv for the current graph with id %dr  )8r  r›   r~   r5  rF  r¬   r   r*   r¸  rØ  rc   r^  rA  rw   ÚExternKernelÚrealize_inputrö   ÚziprD   ÚBaseViewr¸   Úget_output_specÚCommBufferLayoutÚ
copy_inputr„   Ú	_inductorÚis_storage_and_layoutr¡   rŠ  r�  r¨   r‘  Útry_match_insignificant_stridesrÿ   r  rL  rE   r   ÚBasicrh  ri  rA  r™  rC   r?   Úget_nameÚMutationLayoutSHOULDREMOVEÚrealize_intor  rþ  Ú
ValueErrorÚfinalizerÙ  rÚ  r  rR  )rv  r”   rw   rx   rº   r8  Úfx_node_argsÚresult_correct_stridesÚrÚfx_nodeÚsÚmeta_stridesrL  r7  Úvalue_storage_boxÚindr{  s                   €ry   r›   zGraphLowering.output;  sÚ  ø€ ô ‘‘ ¨¨fÓ5ˆÜ˜&¤5¬$ -Ô0à�YˆFÜ˜&¤5¬$ -Ô0Ð>´$°v³,Ó>Ð0ð ö
àô 4HÌÈQËÔ3PŒB×&Ñ&¨QÕ/ÐVWÑWð
ˆð 
ô ñ 
ð& ô'
ô 
ð 	ð( ó)	ð 
ô, —w‘w×+Ñ+×0Ñ0°Ñ3ˆÜ˜,¬´¨Ô6à(˜?ˆLØ<BÖC°q”"—/‘/×/Ñ/°Õ2ÐCˆÐCØ!#Ðä�<Ó ¤C¨£KÒ/Ð/Ð/Ü˜f lÓ3ó 	‰JˆAˆwÜ˜a¤"§,¡,´·±Ð!<Ô=Ø&×-Ñ-¨aÕ0Ü˜A×-Ñ-Ó/´×1DÑ1DÔEð '×-Ñ-¬b¯o©o×.HÑ.HÈÓ.KÕLô —‘×)Ñ)×?Ñ?ÀÔBÐBÐBð %Ÿ\™\¨%Ñ0×7Ñ7Ó9ö ð ô $.¨a´·±Ô#>�A—F‘F—K’KÀAÑEð �ð  ð
 '×-Ñ-Ü×6Ñ6°q¸,ÓGöð%	ð, 4ˆÔà×,Ñ,×2Ñ2Ó4ó 	‰KˆD�%ÜØä#Ü—K‘KÜ—O‘O×&Ñ&×5Ñ5Ü—O‘O×&Ñ&×8Ñ8ð	ôð Ü˜e¤YÔ/ð Ø9¼$¸u»+¸ÐGóÐ/ð �M‰MŒOÜ˜e¤YÔ/Ð/Ð/Ø—J‘JˆEÜ˜e¤R§]¡]Ô3Ð3Ð3Ø %ÐØ—J‘JˆEÜ˜e¤[Ô1°U·^±^Ó5EÈÔ5Mä×-Ñ-×:Ñ:Ø˜4×5Ñ5°dÑ;ôðØ×,Ñ,×2Ñ2Ð3DÓE�CØ.2×.HÑ.HÈÑ.N�D×&Ñ& sÓ+ð9	ð@ 	�‰ŒÜ�	‰	ØUØ×'Ñ'Ø!Ÿ]™]Ð6ˆD�M‰Mõ	
ð =?õ	
ùòw
ùò< Dùò" øôP "ò Úðús$   Á3Q$Ã(&Q)È9Q.Ï7Q3Ñ3	R Ñ?R c                óF   — | j                   D ]  }|j                  «        Œ y rt   )r*  Údecide_layout)rv  r  s     ry   rÈ  zGraphLowering.finalize¨  s!   € Ø—<‘<ò 	 ˆCØ×ÑÕñ	 r{   c              #  ób   K  — | j                   }	 || _         d –— || _         y # || _         w xY w­wrt   )rA  )rv  r¨   Úolds      ry   Úset_current_nodezGraphLowering.set_current_node¬  s1   è ø€ à×Ñˆð	$Ø $ˆDÔÛà #ˆDÕø ˆDÕüs   ‚/�# ›/£	,¬/c              #  óT   K  — | j                   }	 d –— || _         y # || _         w xY w­wrt   ©r=  )rv  rÔ  s     ry   Úset_current_wrapper_codez&GraphLowering.set_current_wrapper_codeµ  s)   è ø€ à×Ñˆð	$Ûà #ˆDÕø ˆDÕüs   ‚(� ”(œ	%¥(c                ó–  ‡ — t        |«      t        |«      k(  sJ ‚t        |«      t        |«      k(  sJ ‚|j                  t        j                  j                  j
                  u �r	|j                  d   }t        |t        «      sJ ‚t        j                  j                  j                  |d   |d   |j                  «       D ��ci c];  \  }}|t        |t        j                  j                  «      r|j                  d   n|“Œ= c}}|d   «      }	|	D ]X  }
|d   |
   }|d   |
   }||u rŒ‰ j!                  t        j                  j"                  j$                  j&                  ||fi «       ŒZ yt        |j                  t        j(                  j*                  «      sJ ‚	 	 	 	 	 	 	 	 dˆ fd„}|j                  j,                  }t/        t1        ||«      «      D ]!  \  }\  }}|j2                  |   } ||||«       Œ# |j2                  D �ci c]  }|j4                  |“Œ }}|D ]  }||   }||   }||   } ||||«       Œ yc c}}w c c}w )	ax  Propagate mutations on new_args/new_kwargs back to old_args/old_kwargs.

        Assumes we may have cloned old_args/old_kwargs into new_args/new_kwargs
        and then called fx_node(*new_args, **new_kwargs).

        If fx_node mutates any of new_args/new_kwargs, and they are different from
        old_args/old_kwargs, then we need to update the original tensor.
        rx   Ú
kernel_idxÚconstant_args_idxr¾  Útma_descriptor_metadataNc                óL  •— ||u ry | j                   �’| j                   j                  r{t        |t        j                  «      r|f}|f}t        ||«      D ]K  \  }}||u rŒ‰j                  t        j                  j                  j                  j                  ||fi «       ŒM y y y rt   )Ú
alias_infoÚis_writer~   r*   ÚIRNoder»  rÂ   r„   ró   rË   Úcopy_rø   )Ú
schema_argÚold_argÚnew_argÚold_arg_itemÚnew_arg_itemrv  s        €ry   Úmaybe_propagatez9GraphLowering.propagate_mutation.<locals>.maybe_propagateç  s¦   ø€ ð ˜'Ñ!ØØ×$Ñ$Ð0°Z×5JÑ5J×5SÒ5Sô ˜g¤r§y¡yÔ1Ø&˜j�GØ&˜j�Gä25°g¸wÓ2Gò Ñ.�L ,Ø# |Ñ3Ø Ø×&Ñ&ÜŸ	™	Ÿ™×,Ñ,×4Ñ4°|À\Ð6RÐTVõñð 6TÐ0r{   )râ  ztorch._C.Argumentrã  ú	ir.IRNoderä  rè  rÉ   r<  )rö   r”   r„   ró   Úhigher_orderÚtriton_kernel_wrapper_mutationrx   r~   r‚  rÞ   rß   Úget_mutated_tensorsrL  r¢   r#   r¡   rÂ   rË   rá  rø   rÄ   rÅ   Ú_schemarŽ   r»  Ú	argumentsrL  )rv  rÌ  r”  r•  Únew_argsÚ
new_kwargsrx   ry  rz  ÚmutatedrL  rã  rä  rç  Úschemar§   râ  ÚargÚschema_kwargsÚkeys   `                   ry   rŠ  z GraphLowering.propagate_mutation½  sN  ø€ ô  �8‹}¤ H£Ò-Ð-Ð-Ü�:‹¤# j£/Ò1Ð1Ð1à�>‰>œUŸY™Y×3Ñ3×RÑRÒRØ—^‘^ HÑ-ˆFÜ˜f¤dÔ+Ð+Ð+Ü×-Ñ-×@Ñ@×TÑTØ˜<Ñ(ØÐ.Ñ/ð !'§¡£÷á˜˜1ð ¬
°1´e·h±h·m±mÔ(D�q—v‘v˜e’}È!ÑKóð Ð4Ñ5óˆGð  ò Y�Ø$ XÑ.¨tÑ4�Ø$ XÑ.¨tÑ4�Ø˜gÑ%Øà×"Ñ"¤5§9¡9§>¡>×#7Ñ#7×#?Ñ#?À'È7ÐASÐUWÕXðYð ä˜'Ÿ.™.¬%¯*©*×*?Ñ*?Ô@Ð@Ð@ð	Ø)ð	Ø4=ð	ØHQð	àõ	ð( —‘×'Ñ'ˆÜ'0´°X¸xÓ1HÓ'Iò 	:Ñ#ˆCÑ#�'˜7Ø×)Ñ)¨#Ñ.ˆJÙ˜J¨°Õ9ð	:ð 39×2BÑ2BÖC¨3˜Ÿ™ 3™ÐCˆÐCàò 	:ˆCØ  ‘oˆGØ  ‘oˆGØ& sÑ+ˆJÙ˜J¨°Õ9ñ		:ùóYùòT Ds   ÃA I È	Ic                óX   — | j                   j                  di «      j                  d«      S )z:Get the user-annotated stream index from FX node metadata.r{  Ústream)r¡   rä   rÊ  s    ry   Ú_get_node_streamzGraphLowering._get_node_stream  s$   € ð �v‰v�z‰z˜( BÓ'×+Ñ+¨HÓ5Ð5r{   c                ó  — | j                  |«      }|j                  D ]_  }| j                  |«      }||k(  rŒ| j                  j                  |«      }t	        |t
        j                  «      sŒP|j                  «        Œa y)aV  Realize IR inputs that are on a different stream.

        Without this, pointwise ops across stream boundaries would be inlined
        into each other during lowering, making it impossible for the scheduler
        to split them into separate kernels.

        None means the default stream, so it is compared like any other value.
        N)r÷  rå   Úenvrä   r~   r*   rD   rA  )rv  rÁ  Únode_streamÚ
input_nodeÚinput_streamÚir_values         ry   Ú$_realize_inputs_at_stream_boundariesz2GraphLowering._realize_inputs_at_stream_boundaries  sp   € ð ×+Ñ+¨AÓ.ˆØ×+Ñ+ò 	#ˆJØ×0Ñ0°Ó<ˆLØ˜{Ò*ØØ—x‘x—|‘| JÓ/ˆHÜ˜(¤B§L¡LÕ1Ø× Ñ Õ"ñ	#r{   c                óÎ!  •‡ ‡‡#‡$‡%‡&‡'— d&ˆfd„}	 	 	 	 	 	 d'ˆ%ˆ&ˆ fd„}ddl m} t        ‰ j                  «      Š$t        ‰ j                  «      Š't        ‰g«      }‰j                  dk(  }|r4‰ j                  ‰«      \  }}|t        ||«      z  }‰ j                  ‰«       t        j                  j                  |«      5  t        j                  j                  ‰ j                  ‰«      «      5  ‰ j                  ‰«      5  t!        j                  ‰«      5  |rµ‰j"                  r©t%        ‰j"                  t&        j(                  j*                  «      r{t&        j,                  j.                  j1                  ‰j"                  «      rHt3        ‰«      s|j5                  ddˆfd„«      r' |d	«        t7        ‰j"                  d
¬«      i ¤Ž}	�n«‰j                  dk(  rzt%        ‰j"                  t&        j(                  j*                  t&        j(                  j8                  f«      r2t;        ‰«      r' |d	«        t7        ‰j"                  d
¬«      i ¤Ž}	�n"‰j                  dk(  rü‰j"                  t&        j<                  j>                  j@                  u rÌtB        jD                  dk7  r¹ |d«       tB        jD                  dk(  r‚}
}‰jF                  jI                  d«      x}r|d   }|d   }tK        ||||«      \  }}ntM        ‰g|¢­i |¤Ž\  }}‰ jO                  ‰j"                  ||«      }	‰ jQ                  ‰|
|||«       n3tS        dtB        jD                  › �«      ‚ |d«       tT        ‰(‰ �­  ‰«      }	t&        j<                  jX                  jZ                  j\                  t&        j<                  jX                  j^                  j\                  t&        j<                  jX                  j`                  j\                  t&        j<                  jX                  jb                  j\                  t&        j<                  jX                  jd                  j\                  gŠ#tg        d„ ‰jh                  D «       «      }‰‰ jj                  v Š&tg        ˆ#fd„‰jh                  D «       «      Š%‰jF                  jI                  dd
«      r­t%        |	tl        «      r�|	jo                  «        ‰jF                  d   jq                  «       }t'        jr                  j.                  jt                  |Ž }|	jw                  «       |k7  r7|s5t        jx                  |«      }t        jz                  j}                  |	|«      }	|rDt%        |	tl        «      r4t%        |	j~                  t        j€                  «      r|	jo                  «        |s‰%�rt%        ‰jF                  jI                  d«      t&        j‚                  «      �rê‰&r‰ jj                  jI                  ‰«      }n‰jF                  d   jq                  «       }|��¬t        |«      dkD  �r�tB        j„                  xs ‰& xr ‰% }t&        j†                  j‰                  ‰jF                  d   «      }t        t‹        |«      «      dkD  }|sl|rjt        |	j�                  «       «      dk(  rN‰‰ jŽ                  v r@‰&s>‰%s<t        j�                  j“                  |	j�                  «       t&        j”                  «      }|sÐt        |«      rÅ‰jF                  d   j—                  «       s$t%        |	j~                  t        j€                  «      r6t        jz                  j}                  |	t        jx                  |«      |¬«      }	nNt        |	j�                  «       «      dk(  rt        |«      dkD  rg }t        jz                  j™                  |	||¬«      }	t        t        ‰jh                  «      «      }|dkD  �r)t%        |	tl        «      �r‰jh                  D �]  }|j"                  tš        v �rn|	j�                  «        t&        j<                  jX                  jž                  j\                  t&        j<                  jX                  j                   j\                  t&        j<                  jX                  j¢                  j\                  g}g }‰ j¤                  s=|j§                  t&        j<                  jX                  j¨                  j\                  «       t&        jª                  j¬                  �rŸ|t&        j<                  j®                  j°                  j\                  t&        j<                  j®                  j°                  j²                  t&        j<                  jX                  j´                  j\                  t&        j<                  j¶                  j¸                  j\                  t&        j<                  j¶                  j¸                  jº                  t&        j<                  j¶                  j¸                  j²                  t&        j<                  j¶                  j¸                  j¼                  gz  }|t&        j<                  j®                  j¾                  j\                  t&        j<                  j®                  j¾                  j²                  t&        j<                  j®                  jÀ                  j²                  t&        j<                  j®                  jÂ                  j\                  t&        j<                  j¶                  jÄ                  j\                  t&        j<                  j¶                  jÆ                  j²                  gz  }t&        jª                  jÈ                  r2|t&        j<                  jÊ                  jÌ                  j\                  gz  }|j"                  |v rPt        jz                  j}                  |	t        jx                  ‰jF                  d   jq                  «       «      d¬«      }	|j"                  |v rd‰|jÎ                  d   u rSt        jz                  j}                  |	t        jx                  tÑ        ‰jF                  d   jÒ                  «      «      «      }	|j                  dk(  s�Œ–t%        |	j~                  j~                  tÔ        tÖ        f«      s�ŒÂtB        jØ                  r9|	j~                  jÛ                  «       dk(  r|	j~                  jÝ                  «       s�Œ|	jo                  «        �Œ |	j~                  }t%        |tÞ        «      sqt%        |t        j€                  t        jà                  f«      rG|j~                  }t%        |tÞ        «      s+t%        |t        j€                  t        jà                  f«      rŒGt%        |tÞ        «      r-|jã                  t        ‰jh                  «      «      r	 ||	‰«      }	|	jå                  t        ‰jh                  «      «       t%        |	tl        «      r)|	jç                  «       r ||	‰«      }	|	j�                  «        t%        |	tl        «      rbt%        |	j~                  tÞ        «      rH|	j~                  j~                  }t%        |tÔ        «      r"|jÝ                  d¬«      r|	jo                  «        ddd«       ddd«       ddd«       ddd«       té        	‰«       ‰ jë                  |	«       t        tì        jî                     «       }‰ j                  ‰$d D ]  }||jñ                  «       z  }Œ ‰ j                  ‰'d D ]  }||jñ                  «       z  }Œ t         jò                  jô                  jö                  }‰j                  dk(  r<t%        |	tì        jî                  «      r"|jù                  |	«      r|jû                  |	«       d(ˆ$ˆ'ˆ fd„} t         jò                  jü                  r‰j                  dk(  r|	S tÿ        t         jò                  jô                  jö                  ‰jF                  jI                  d i «      «      }!|!€J ‚t        d!„ |!D «       «      }"||"k\  s'J d"|› d#|"› d$‰�j                  «       › d% | «       › �«       ‚‰ �j                  ‰|«       |	S # 1 sw Y   �ŒéxY w# 1 sw Y   �ŒîxY w# 1 sw Y   �ŒóxY w# 1 sw Y   �ŒøxY w))z4Lower and execute a single FX node into Inductor IR.c                óZ   •— t         j                  dt        ‰j                  «      | «       y )Nzlowering %s %s)rÙ  rÚ  r   Úformat_node)ÚmsgrÁ  s    €ry   rÚ  z%GraphLowering.run_node.<locals>.debug"  s   ø€ Ü�I‰IÐ&¬
°1·=±=Ó(AÀ3ÕGr{   c           	     óÒ  •— t         j                  j                  |j                  d   «      }|j                  d   j	                  «       }t        t        |«      «      dkD  }|sƒ|r�t        | j                  «       «      dk(  re|‰j                  v rW‰sU‰sSt        j                  j                  | t        j                  t        |j                  d   j                  «      «      «      } | S )Nr¾  r   é   )r„   Ú_prims_commonÚ%is_non_overlapping_and_dense_or_falser¡   rŠ  rö   r   r›  r\  r*   r¹  Úrequire_stride_orderÚget_stride_orderr   rœ  )rº   rÁ  Údenserƒ  Úunbacked_symbols_in_stridesÚis_input_for_as_stridedÚis_user_visiblerv  s        €€€ry   Ú&maybe_apply_channels_last_stride_orderzFGraphLowering.run_node.<locals>.maybe_apply_channels_last_stride_order(  sÅ   ø€ ô ×'Ñ'×MÑMØ—‘�u‘óˆEð —f‘f˜U‘m×*Ñ*Ó,ˆGÜ*-Ô.CÀGÓ.LÓ*MÐPQÑ*QÐ'á/ÙÜ˜Ÿ™Ó)Ó*¨aÒ/Ø˜×8Ñ8Ñ8Ù'Ù/äŸ™×=Ñ=ØÜ×'Ñ'Ü6°q·v±v¸e±}×7JÑ7JÓKóó�ð ˆMr{   r   )ÚCompilerBisectorrÂ   ÚinductorrK   c                 ó   •— t        ‰ «      S rt   )ÚreprrÊ  s   €ry   ú<lambda>z(GraphLowering.run_node.<locals>.<lambda>[  s   ø€ ¼¸a»€ r{   rI   Fr}  Úflexible_layoutÚ-user_defined_triton_kernel_layout_constraintsÚneeds_fixed_stride_orderru  r(   z1Unknown triton_kernel_default_layout_constraint: r  c              3  ó:   K  — | ]  }|j                   d k(  –— Œ y­w)r›   Nrœ   )rÀ  rø  s     ry   rÂ  z)GraphLowering.run_node.<locals>.<genexpr>¤  s   è ø€ ÒD°D˜DŸG™G xÕ/ÑDùs   ‚c              3  ó:   •K  — | ]  }|j                   ‰v –— Œ y ­wrt   )r”   )rÀ  rø  Úas_strided_opss     €ry   rÂ  z)GraphLowering.run_node.<locals>.<genexpr>¦  s   øè ø€ ò *Ø26�—‘˜~Ô-ñ*ùrZ  Úinductor_realize_to_stridesr¾  Nr  )Úallow_paddingTr›   éd   )Ú	thresholdre  c                 óÜ   •— ‰j                   ‰d  D � cg c]  } d| j                  «       › d| › d�‘Œ }} |j                  d„ ‰j                  ‰d  D «       «       dj	                  |«      S c c} w )Núunbacked_symbol_defs=ú in:
ú
c              3  óJ   K  — | ]  }d |j                  «       › d|› d�–— Œ y­w)r  r  r   N)Úget_unbacked_symbol_defs©rÀ  r�   s     ry   rÂ  zBGraphLowering.run_node.<locals>.format_new_defs.<locals>.<genexpr>u  s2   è ø€ ò àð (¨×(CÑ(CÓ(EÐ'FÀfÈRÈDÐPRÔSñùs   ‚!#z***
)r*  r"  Úextendr+  r‘   )r  rË  Úbuffer_watermarkÚoperation_watermarkrv  s     €€€ry   Úformat_new_defsz/GraphLowering.run_node.<locals>.format_new_defsp  s†   ø€ ð  Ÿ<™<Ð(8Ð(9Ð:öàð (¨×(DÑ(DÓ(FÐ'GÀvÈcÈUÐRTÒUðˆAð ð �H‰Hñ àŸ/™/Ð*=Ð*>Ð?ôô ð —<‘< “?Ð"ùòs   “A)Úunbacked_bindingsc              3  ó„   K  — | ]8  }t         j                  j                  j                  j	                  ||«      –— Œ: y ­wrt   )rc   r  rx  Úunbacked_renamingsrä   )rÀ  rÍ  s     ry   rÂ  z)GraphLowering.run_node.<locals>.<genexpr>¦  s5   è ø€ ò /
àô �K‰K×!Ñ!×4Ñ4×8Ñ8¸¸A×>ñ/
ùs   ‚>A zfailed ú >= z (inductor >= fx)
fx node is: z
new operations are:

)r  r@  rÉ   r<  )rº   rè  rÁ  rÈ   rÉ   rè  ©rÉ   r@  )‚Ú!torch._inductor.compiler_bisectorr  rö   r*  r+  r&   r�   Úfetch_args_kwargs_from_envrV   rþ  r*   rà  Úcurrent_originsÚcurrent_stream_idxr÷  rÕ  rc   r”   r~   r„   rÄ   rÅ   r†  r]  r‡  rJ   Údisable_subsystemrI   ÚHigherOrderOperatorr_   ró   ré  rê  r)   Ú'triton_kernel_default_layout_constraintr¡   rä   rF   rG   rÂ   rŠ  r�   r  Úrun_noderË   Ú
as_stridedrø   Úas_strided_Úas_strided_scatterÚresizeÚ	resize_asrÔ   rô  rç   rD   rA  rŠ  rÀ  Úany_is_symbolicÚmaybe_get_strider  r¹  r  r™  r¼  r   ræ   r  r  r   r›  r\  ÚFlexibleLayoutÚ stride_ordered_for_memory_formatÚchannels_lastÚ_is_viewÚrequire_exact_stridesrN   Úrealize_hintrÍ   ÚmmÚ_int_mmr  r¸   rÌ   rá   Ú_has_mkldnnrð   Ú_linear_pointwiserù   Úmkldnn_rnn_layerÚonednnÚqlinear_pointwisern  Úbinary_tensorrñ   rú   Ú _convolution_transpose_pointwiseÚqconv_pointwiseÚqconv2d_pointwiseÚhas_mklÚmklÚ_mkl_linearrw   r   rœ  r@   rA   Údelay_realize_cheap_outputsÚ	num_readsÚhas_large_inner_fnrC   Ú
MutableBoxÚshould_realize_on_reuseÚ
mark_reuseÚhas_exceeded_max_readsr9   r>  r   r€   r"  r^  r  rx  Úis_unbacked_symintr·   r  r   r  Úcreate_deferred_runtime_asserts))rv  rÁ  rÚ  r  r  ÚoriginsÚis_call_functionrw   rx   rº   r”  r•  ru  Úinp_argsÚ
inp_kwargsÚ	is_outputrƒ  Úsym_stridesÚstride_orderr  r	  r
  Ú	num_usersrø  Úneed_fixed_layoutÚneed_fixed_channels_last_layoutÚ_dataÚcurrÚnew_unbacked_defsr  r�   rx  r'  r(  Úrenamed_unbacked_bindingsr  r%  r  r  r&  r{  s)   ``                                 @@@@@€ry   r4  zGraphLowering.run_node  s&  ÿ€ õ	Hð	Øð	Ø"/ð	à÷	õ0 	Gä˜tŸ|™|Ó,ÐÜ! $§/¡/Ó2Ðô $.¨q¨c£?ˆØŸ4™4 ?Ñ2ÐÙØ×:Ñ:¸1Ó=‰LˆD�&Ø”~ d¨FÓ3Ñ3ˆGØ×5Ñ5°aÔ8ä�I‰I×%Ñ% gÓ.ñN	)ä�I‰I×(Ñ(¨×)>Ñ)>¸qÓ)AÓBñN	)ð ×!Ñ! !Ó$ñN	)ô ×Ñ˜qÓ!ñ	N	)ñ !à—H’HÜ˜qŸx™x¬¯©×)>Ñ)>Ô?Ü—N‘N×(Ñ(×3Ñ3°A·H±HÔ=ä9¸!Ô<Ø'×9Ñ9Ø" K³ôñ
 Ð(Ô)ØNÔ)¨!¯(©(ÈÔNØðàñ’ð
 —‘˜Ò'ÜØ—H‘HœuŸz™z×4Ñ4´e·j±j×6TÑ6TÐUôô /¨qÔ1ñ Ð(Ô)ØNÔ)¨!¯(©(ÈÔNØðàñ’ð
 —‘˜Ò'Ø—H‘H¤§	¡	× 6Ñ 6× UÑ UÑUÜ×BÑBÐFWÒWáÐEÔFä×BÑBØ1ò2ð  $�HØ!'�Jà+,¯6©6¯:©:Ð6HÓ+IÐIÐ'ÐIØ#3°AÑ#6˜Ø%5°aÑ%8˜
Ü'@à à"Ø$Ø&ó(™˜™fô (?¸qÐ'RÀ4Ò'RÈ6Ñ'R™˜˜fØ!×/Ñ/°·±¸$ÀÓG�FØ×+Ñ+¨A¨x¸ÀTÈ6ÕRä&ØKÌF×LzÑLzÐK{Ð|óð ñ �b”	Ü™Ñ)¨!Ó,�ô —	‘	—‘×)Ñ)×1Ñ1Ü—	‘	—‘×*Ñ*×2Ñ2Ü—	‘	—‘×1Ñ1×9Ñ9Ü—	‘	—‘×%Ñ%×-Ñ-Ü—	‘	—‘×(Ñ(×0Ñ0ðˆNô ÑD¸A¿G¹GÔDÓDˆIØ 4×#CÑ#CÐCˆOÜ&)ó *Ø:;¿'¹'ô*ó 'Ð#ð �v‰v�z‰zÐ7¸Ô?ÄJØœ	ôEð —‘Ô ØŸ&™& ™-×.Ñ.Ó0�Ü#Ÿo™o×3Ñ3×CÑCÀWÐM�Ø×*Ñ*Ó,°Ò7ÁÜ#%×#6Ñ#6°wÓ#?�LÜŸ_™_×AÑAÀ&È,ÓW�FáÜ˜v¤yÔ1Ü˜vŸ{™{¬B¯K©KÔ8ð —‘Ô áÒ4¼*Ø—‘—
‘
˜5Ó!¤5§<¡<õ;ñ #Ø"×>Ñ>×BÑBÀ1ÓE‘GàŸf™f U™m×2Ñ2Ó4�GàÑ&¬3¨w«<¸!Ó+;ä×*Ñ*ÒA°/Ð.Aò%6à5Ð5ð "ô "×/Ñ/×UÑUØŸ™˜u™ó�Eô Ô1°'Ó:Ó;¸aÑ?ð 0ñ 8Ù!Ü §¡Ó 1Ó2°aÒ7Ø ×!@Ñ!@Ñ@Ù /Ù 7ä"$×"3Ñ"3×"TÑ"TØ"ŸO™OÓ-¬u×/BÑ/Bó#˜ñ 7¼3¸w¼<ð Ÿ6™6 %™=×1Ñ1Ô3´zØ"ŸK™KÜŸK™Kô8ô &(§_¡_×%IÑ%IØ &Ü "× 3Ñ 3°GÓ <Ø.;ð &Jó &™Fô  # 6§?¡?Ó#4Ó5¸Ò:¼sÀ7»|ÈaÒ?OØ*, Ü%'§_¡_×%JÑ%JØ &¨¸}ð &Kó &˜Fô œJ q§w¡wÓ/Ó0ˆIØ˜1‹}¤¨F´IÕ!>ØŸG™Gó I-�DØ—{‘{Ô&;Ò;Ø×+Ñ+Ô-ô "ŸI™IŸN™N×?Ñ?×GÑGÜ!ŸI™IŸN™N×-Ñ-×5Ñ5Ü!ŸI™IŸN™N×2Ñ2×:Ñ:ð-Ð)ð
 ;=Ð7Ø#ŸšØ-×4Ñ4´U·Y±Y·^±^×5OÑ5O×5WÑ5WÔXÜ Ÿ8™8×/Ó/Ø-Ü %§	¡	× 0Ñ 0× BÑ B× JÑ JÜ %§	¡	× 0Ñ 0× BÑ B× IÑ IÜ %§	¡	§¡× ?Ñ ?× GÑ GÜ %§	¡	× 0Ñ 0× BÑ B× JÑ JÜ %§	¡	× 0Ñ 0× BÑ B× IÑ IÜ %§	¡	× 0Ñ 0× BÑ B× IÑ IÜ %§	¡	× 0Ñ 0× BÑ B× PÑ Pð2ñ Ð-ð <Ü %§	¡	× 0Ñ 0× GÑ G× OÑ OÜ %§	¡	× 0Ñ 0× GÑ G× NÑ NÜ %§	¡	× 0Ñ 0× HÑ H× OÑ OÜ %§	¡	× 0Ñ 0× QÑ Q× YÑ YÜ %§	¡	× 0Ñ 0× @Ñ @× HÑ HÜ %§	¡	× 0Ñ 0× BÑ B× IÑ Ið@ñ Ð;ô  %Ÿx™x×/Ò/Ø 1´e·i±i·m±m×6OÑ6O×6WÑ6WÐ5XÑ XÐ 1ØŸ;™;Ð*;Ñ;Ü%'§_¡_×%IÑ%IØ &Ü "× 3Ñ 3°A·F±F¸5±M×4HÑ4HÓ4JÓ KØ.2ð &Jó &˜Fð !ŸK™KÐ+JÑJØ ! T§Y¡Y¨q¡\Ñ 1ä%'§_¡_×%IÑ%IØ &Ü "× 3Ñ 3Ü$BÀ1Ç6Á6È%Á=×CVÑCVÓ$Wó!"ó&˜Fð —w‘w (Ô*ä% f§k¡k×&6Ñ&6¼ÄIÐ8NÖOô !'× BÒ Bà$*§K¡K×$9Ñ$9Ó$;¸qÒ$@à(.¯©×(FÑ(FÔ(Há (Ø"ŸN™NÖ,ðSI-ðV Ÿ™�Ü$ U¬JÔ7¼JØœBŸK™K¬¯©Ð7ô=ð "ŸJ™J�Eô % U¬JÔ7¼JØœBŸK™K¬¯©Ð7õ=ô
 ˜e¤ZÔ0°U×5RÑ5RÜ˜Ÿ™“Lô6ñ DÀFÈAÓN�Fð ×!Ñ!¤# a§g¡g£,Ô/ô ˜&¤)Ô,°×1NÑ1NÔ1Pñ @ÀÈÓJ�Ø×#Ñ#Ô%ô ˜&¤)Ô,´¸F¿K¹KÌÔ1TØ—{‘{×'Ñ'�Ü˜d¤IÔ.à×.Ñ.¸Ð.Ô=ØŸ™Ô(÷]N	)÷ N	)÷ N	)÷ N	)ô` 	˜6 1Ô%Ø×Ñ˜vÔ&ä&¤u§|¡|Ñ4Ó6ÐØ—<‘<Ð 0Ð 1Ð2ò 	@ˆCØ ×!=Ñ!=Ó!?Ñ?Ñð	@à—/‘/Ð"5Ð"6Ð7ò 	?ˆBØ ×!<Ñ!<Ó!>Ñ>Ñð	?ô —G‘G×$Ñ$×.Ñ.ˆ	ð
 �D‰D�MÒ!Ü˜6¤5§<¡<Ô0Ø×,Ñ,¨VÔ4à×!Ñ! &Ô)÷		#ô �7‰7×Ò 1§4¡4¨=Ò#8ØˆMô. 6Ü�G‰G×Ñ×&Ñ&¨¯©¯
©
Ð3FÈÓ(Kó
Ðð !Ð,Ð,Ð,ô %/ñ /
à&ô/
ó %
Ð!ð
 !Ð$=Ò=ð 	
ØÐ'Ð(¨Ð-FÐ,Gð HØŸ=š=›?Ð+ð ,&Ù&5Ó&7Ð%8ð:ó	
Ð=ð
 	×,Ò,¨QÐ0AÔBØˆ÷KN	)ñ N	)ú÷ N	)ñ N	)ú÷ N	)ñ N	)ú÷ N	)ñ N	)ús�   Â=/ACÃ,ACÃ>AC ÄnAB3	ò+*AB3	óC(AB3	÷ DAB3	ûAC ûACûACÁB3AB=ÁB8AC ÁC AC
ÁCACÁCAC	ÁCACÁCAC$c                ó@  ‡ — t         j                  ry d	ˆ fd„}t        «       rv|j                  t        j
                  j                  j                  j                  u r<‰ j                  r0‰ j                  |«      \  }}|d   dk7  r ||d   |d   › d�«       y y ‰ xj                  |z  c_        t        j                  j                  j                  }|D �]G  }‰ j                   j#                  |g «      }|j$                  |   }	|j'                  «       j)                  |	«      srd
d„}
 |
|	j*                  «      r% |||	j*                  k\  |› d|	j*                  › �«        |
|	j,                  «      r% |||	j,                  k  |› d|	j,                  › �«       |D ]ƒ  }t/        |j0                  «      }|‰ j                  z
  }|r=t3        |t4        ¬«      }‰ j                   j7                  |g «      j9                  |«       Œf ||j0                  |j0                  › «       Œ… �ŒJ y )Nc                óz   •— t        j                  | |«      }‰j                  |d¬«       ‰j                  |«       y )NTr(  )r*   ÚAssertScalarr.  r'  )r‘  r  Ú	assert_oprv  s      €ry   Úmake_assertzBGraphLowering.create_deferred_runtime_asserts.<locals>.make_assert×  s4   ø€ ÜŸ™¨¨cÓ2ˆIØ× Ñ  °TÐ Ô:Ø×#Ñ# IÕ.r{   r   Tz to be Truec                óZ   — | t         t          fv ry	 t        | «       y# t        $ r Y yw xY w)NFT)r'   rf  Ú	TypeError)rÍ  s    ry   Úis_convertiblezEGraphLowering.create_deferred_runtime_asserts.<locals>.is_convertibleó  s5   € Ø¤¬&¨Ð 1Ñ1Ø#(ð)Ü œFØ#'øÜ(ò )Ù#(ð)ús   ’ ž	*©*r+  z <= )rô  )r‘  r!   r  r@  rÉ   r<  )rÍ  r	   rÉ   rÒ  )r)   Údo_not_emit_runtime_assertionsr   r”   r„   ró   rË   Ú_assert_scalarrø   rQ  r.  r  rc   r^  r  rx  r  rµ   Úvar_to_rangeÚ _default_unspecified_value_rangeÚissubsetÚlowerÚupperr   r‘  r×   r@  r¶   r¸   )rv  rÁ  re  rk  Ú	node_argsr„  rx  Úi0ÚrasÚvrrn  ÚraÚfvsÚmissingÚi1s   `              ry   rX  z-GraphLowering.create_deferred_runtime_asserts³  sÏ  ø€ ô ×0Ò0Øõ@	/ô %Ô&Ø—‘œEŸI™IŸN™N×9Ñ9×AÑAÑAØ—’à×:Ñ:¸1Ó=‰LˆI�qØ˜‰|˜tÒ#Ù˜I a™L¨Y°q©\¨N¸+Ð*FÕGð $ð ×'Ò'Ð+<Ñ<Õ'äŸ™×(Ñ(×2Ñ2ˆIð (ó ;�Ø×(Ñ(×,Ñ,¨R°Ó4�à×+Ñ+¨BÑ/�Ø ×AÑAÓC×LÑLÈRÔPó)ñ & b§h¡hÔ/Ù# B¨"¯(©(¡N°r°d¸$¸r¿x¹x¸jÐ4IÔJÙ% b§h¡hÔ/Ù# B¨"¯(©(¡N°r°d¸$¸r¿x¹x¸jÐ4IÔJàò ;�BÜ/°·±Ó8�CØ! D×$?Ñ$?Ñ?�GÙÜ  ¬cÔ2˜Ø×*Ñ*×5Ñ5°b¸"Ó=×DÑDÀRÕHá# B§G¡G°·±¨yÕ:ò;ñ);r{   c                ó–   — t         j                  rt        d«      ‚t        j                  dvrt        dt        j                  › �«      ‚y )NzC++ codegen is disabled)ÚlinuxÚdarwinÚwin32zUnsupported platform )r)   Údisable_cpp_codegenr4   ÚsysÚplatformr~  s    ry   Ú!validate_can_generate_cpp_wrapperz/GraphLowering.validate_can_generate_cpp_wrapper
	  s@   € Ü×%Ò%Ü(Ð)BÓCÐCä�<‰<Ð;Ñ;Ü(Ð+@ÄÇÁÀÐ)OÓPÐPð <r{   c                óÊ  — | j                   j                  «       }|j                  d«       |j                  d«       t        |«      dk  s%J dj	                  dj                  |«      «      «       ‚t        |«      dk(  }|rdn|j                  «       | _        | j                  r| j                  «        t        | j                  «      | _        t        | j                  | j                  | j                  «      }|€J d| j                  › d�«       ‚|j                  ||||«      | _        | j                   r0| j                   j                  j"                  | j                  _        y y )	Nr«   r¡   r(   zDoes not support mixing {}ú+r   zDevice z not supported)r#  r  r‰  rö   Úformatr‘   rµ   r%  rM  r…  r0   r<  r1   rN  rT  r=  r  Ú_names_iter)rv  Úis_subgraphrð  Úparent_wrapper_codeÚpartition_signaturesr#  Úonly_cpuÚwrapper_code_gen_clss           ry   Úinit_wrapper_codezGraphLowering.init_wrapper_code	  sP  € ð ×(Ñ(×-Ñ-Ó/ˆØ×Ñ˜UÔ#Ø×Ñ˜VÔ$ä�<Ó  AÒ%ð 	
Ð'C×'JÑ'JØ�H‰H�\Ó"ó(
ó 	
Ð%ô �|Ó$¨Ñ)ˆÙ$,™5°,×2BÑ2BÓ2DˆÔà×ÒØ×2Ñ2Ô4ä1°$×2BÑ2BÓCˆŒÜ=Ø×Ñ˜d×.Ñ.°·±ó 
Ðð $Ð/ð 	
Ø�d×&Ñ&Ð' ~Ð6ó	
Ð/ð 1×7Ñ7ØØØØ ó	
ˆÔð ×ÒØ,0×,=Ñ,=×,JÑ,J×,VÑ,VˆD×ÑÕ)ð r{   c                ó@  — dd l }|j                  | j                  «      }|j                  |«      }g }|j                  j                  D ]T  }|j
                  dk(  sŒ|j                  t        j                  j                  j                  u sŒD|j                  |«       ŒV g }i }i }g }	i }
|D �]ð  }|j                  d   D ]R  }|D ]K  }||v rŒt        |t        j                  j                  «      sŒ-t!        |«      ||<   |j                  |«       ŒM ŒT |j                  d   }t        j"                  j$                  j'                  |j                  d   |j                  d   |j)                  «       D ��ci c];  \  }}|t        |t        j                  j                  «      r|j*                  d   n|“Œ= c}}|j                  d   «      }i }|j                  j-                  |«      5  |j)                  «       D ]‰  \  }}||v rL|j                  j/                  t        j0                  |f¬	«      }t!        |	«      ||<   |	j                  |«       ŒV||
v r	|
|   ||<   Œct!        |	«      |
|<   |	j                  |«       |
|   ||<   Œ‹ 	 d d d «       |||j2                  <   �Œó |	|z   }|j                  j                  D ]$  }|j
                  d
k(  sŒt5        |«      f|_         n |j9                  «        t        j                  j;                  |«      }|j=                  |«      }t!        |«      dkD  rÂ|t!        |	«      d  }i | _        |D ]¨  }d}g }|j                  d   D ]t  }g }|D ]Q  }t        |t        j                  j                  «      s|j                  |«       Œ9d}|j                  |||      «       ŒS |j                  t5        |«      «       Œv |sŒ�|| j>                  |j2                  <   Œª |d t!        |	«       | _         || _!        y c c}}w # 1 sw Y   �Œ�xY w)Nr   rÂ   Úgridrx   rÚ  rÛ  r¾  rÜ  )rw   r›   FT)"r  Údeepcopyre  r^  rÝ   r�   r”   r„   ró   ré  rê  r¸   rx   r~   r¢   r#   rö   rÞ   rß   rë  rL  r¡   Úinserting_beforerÂ   ÚclonerL  r5  rw   Ú	recompileÚInterpreterr#  rY  rW  rX  )rv  r
  r  Ú	cloned_gmÚtriton_nodesr¨   Úgrid_inputsÚvisited_gridsÚtriton_inputsÚkwargs_inputsÚvisited_kwargsr‘  r¾  rx   ry  rz  rð  rï  Únew_nodeÚnew_outputsÚrunnerÚreturned_outputsÚgrid_outputsÚdynamic_gridÚ	new_gridsÚnew_grids                             ry   Úextract_autotune_inputsz%GraphLowering.extract_autotune_inputs6	  sò  € ó 	à—M‘M $§,¡,Ó/ˆ	ØŸ™ ~Ó6ˆØˆØ—O‘O×)Ñ)ò 	*ˆDà—‘˜?Ó*Ø—K‘K¤5§9¡9×#9Ñ#9×#XÑ#XÒXà×#Ñ# DÕ)ð	*ð ,.ˆØ24ˆà(*ˆØ-/ˆØ)+ˆØ ó &	2ˆDàŸ™ FÑ+ò 0�Øò 0�CØ˜mÑ+Ø ä! #¤u§x¡x§}¡}Õ5Ü-0°Ó-=˜ cÑ*Ø#×*Ñ*¨3Õ/ñ0ð0ð —[‘[ Ñ*ˆFä×-Ñ-×@Ñ@×TÑTØ—‘˜LÑ)Ø—‘Ð/Ñ0ð !'§¡£÷á˜˜1ð ¬
°1´e·h±h·m±mÔ(D�q—v‘v˜e’}È!ÑKóð —‘Ð5Ñ6óˆGð *,ˆJØ—‘×1Ñ1°$Ó7ñ 6Ø"ŸL™L›Nò 6‘D�A�qØ˜G‘|Ø#,§?¡?×#@Ñ#@ÄÇÁÐTUÐSWÐ#@Ó#X˜Ü(+¨MÓ(:˜
 1™Ø%×,Ñ,¨XÔ6Ø à˜NÑ*Ø(6°qÑ(9˜
 1™Ø Ü(+¨MÓ(:�N 1Ñ%Ø!×(Ñ(¨Ô+Ø$2°1Ñ$5�J˜q’Mñ6÷6ð (2ˆM˜$Ÿ)™)Ó$ðM&	2ðP $ kÑ1ˆØ—O‘O×)Ñ)ò 	ˆDØ�w‰w˜(Ó"Ü" ;Ó/Ð1�”	Ùð	ð
 	×ÑÔÜ—‘×%Ñ% iÓ0ˆØ!Ÿ:™: nÓ5Ðäˆ{Ó˜aÒØ+¬C°Ó,>Ð,@ÐAˆLØ$&ˆDÔ!Ø$ò A�Ø$�Ø.0�	Ø ŸK™K¨Ñ/ò 	6�DØ!�HØ#ò J˜Ü)¨#¬u¯x©x¯}©}Ô=Ø$ŸO™O¨CÔ0Ø$Ø'+˜Ø Ÿ™¨°]À3Ñ5GÑ(HÕIðJð ×$Ñ$¤U¨8£_Õ5ð	6ò  Ø7@�D×)Ñ)¨$¯)©)Ò4ðAð" "2Ð2F´C¸Ó4FÐ!GˆÔØ"/ˆÕùóo÷6ñ 6ús   Å5A PÇ(BPÐP	c                ón  ‡ — t        ˆ fd„dD «       «      }d‰ j                  v xrG ‰ j                  xr9 t        j                  j
                   xr t        d„ ‰ j                  D «       «      }|s|�rd
ˆ fd„}t        j                  j
                  r€t        j                  j                  rVd}‰ j                  D ]   }t        |t        j                  «      sŒd} n |r# |«       }‰ j                  |«       t        ‰ «       ‰ j                  «       S ‰ j                  s‰ j                  «       S d‰ _        ‰ j                  «       j                   } |«       }t"        j$                  j&                  j)                  «       5   ||«       ddd«       ~d‰ _        ‰ j*                  j-                  «        ‰ j.                  j-                  «        ‰ j0                  j-                  «        t2        j4                  j6                  j8                  j-                  «        t2        j4                  j6                  j:                  j-                  «        t=        j>                  «        t        j@                  d	di«      5  ‰ j                  «       cddd«       S ‰ j                  «       S # 1 sw Y   �ŒxY w# 1 sw Y   yxY w)a„  
        For GPU, Triton kernels are autotuned and stored as cubin files.

        For CPU with user-defined Triton kernels, AOTI also needs the
        same two-pass compile when `autotune_at_compile_time` is off,
        since `CpuTritonKernelCache` is otherwise only populated by the
        autotune block (see `DeferredCpuTritonCallWrapper` in
        `cpp_wrapper_cpu.py`).
        c              3  ó:   •K  — | ]  }|‰j                   v –— Œ y ­wrt   )r#  )rÀ  r
   rv  s     €ry   rÂ  z9GraphLowering.codegen_with_cpp_wrapper.<locals>.<genexpr>¡	  s   øè ø€ ÒP°f�f × 1Ñ 1Ô1ÑPùrZ  )ÚcudaÚxpur«   c              3  óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wrt   )r~   r*   ÚUserDefinedTritonKernelr#  s     ry   rÂ  z9GraphLowering.codegen_with_cpp_wrapper.<locals>.<genexpr>©	  s"   è ø€ ò Ø?A”
˜2œr×9Ñ9×:ñùs   ‚$&c                 óŽ  •— 	 	 	 	 dd„} t         j                  j                  j                  «       }|�—t	        t
        j                  t        «      sy|j                  r|j                  j                  «        |j                  D �cg c]  }|�|‘Œ }}t        j                  |t
        j                  «      D �cg c]
  } | |«      ‘Œ }}nMt	        t
        j                  t        «      r‰j                  nt
        j                  D �cg c]
  } | |«      ‘Œ }}‰j                  rŒddlm} t#        ‰j$                  «      D ��cg c]2  \  }}|‰j                  v rt	        ||   t         j&                  «      r|‘Œ4 }	}}|	D ]/  }||   }
t	        |
t         j&                  «      sJ ‚ ||
«      ||<   ~
Œ1 |S c c}w c c}w c c}w c c}}w )Nc                ó.  — | €y t        | t        j                  t        j                  f«      r| j                  j
                  S t        | t        «      rt        | «      S t        | t        j                  «      sJ dt        t        | «      «      z   «       ‚| S )Nz&Unknown type when creating real inputs)r~   r„   r�  ÚSymFloatr¨   Úhintr   r   r   r@  r¬   )r8  s    ry   ÚmaterializezXGraphLowering.codegen_with_cpp_wrapper.<locals>.extract_real_inputs.<locals>.materialize°	  sx   € ð �yà#Ü# A¬¯©´e·n±nÐ'EÔFà Ÿv™vŸ{™{Ð*Ü# A¤zÔ2Ü% a›yÐ(ä)¨!¬U¯\©\Ô:ð ØDÄsÌ4ÐPQË7Ã|ÑSóÐ:ð  !˜r{   r(   )Úclone_preserve_strides)r8  z,torch.SymInt | torch.SymFloat | torch.TensorrÉ   zint | float | torch.Tensor)r„   Ú_guardsÚTracingContextÚtry_getr~   rc   Úreal_inputsrb   Úoutput_stridesÚclearÚparams_flatrp  Úchainr
  rC  Ú
compile_fxr²  rŽ   r  r   )r±  Útracing_contextÚparamr¹  r8  r¶  r²  r§   rL  rD  Úmutated_inprv  s              €ry   Úextract_real_inputszCGraphLowering.codegen_with_cpp_wrapper.<locals>.extract_real_inputs¯	  sÀ  ø€ ð!ØCð!à/ó!ô" #(§-¡-×">Ñ">×"FÑ"FÓ"H�Ø"Ð.´zÜ—M‘M¤;ô8ð '×5Ò5Ø'×6Ñ6×<Ñ<Ô>ð &5×%@Ñ%@ö#à!Ø Ð,ò ð#�Kð #ô "+§¡°¼a¿m¹mÓ!Lö#àñ $ A�ð#�Kñ #ô  *¬!¯-©-¼ÔEð !×/Ò/ä!"§¡ö#àñ $ A�ð#�Kð #ð ×&Ò&ÝBô *3°4×3DÑ3DÓ)E÷*á%˜C Ø 4×#6Ñ#6Ñ6Ü& {°3Ñ'7¼¿¹ÔFò ð*Ð&ñ *ð  2ò (˜ð '2°#Ñ&6˜Ü)¨+´u·|±|ÔDÐDÐDÙ+AÀ+Ó+N˜ CÑ(Ù'ð(ð #Ð"ùòW#ùò
#ùò#ùó*s   ÂF2Â9F7ÄF<Å7GFTNztriton.autotune_at_compile_time)rÉ   ú list[int | float | torch.Tensor])!rÔ   r#  rQ  r)   r  r  r+  Úautotune_with_sample_inputsr~   r*   r¬  r¦  rq   ÚcodegenrM  Úcompile_to_moduleÚcallr„   r]  r^  r_  r6  r¸  r5  r;  rc   r^  r  Úprecomputed_replacementsÚinv_precomputed_replacementsr+   ÚresetÚpatch)rv  Úhas_gpuÚneeds_cpu_triton_two_passr¿  Úuser_defined_kernelsr�   r¶  Úcompileds   `       ry   Úcodegen_with_cpp_wrapperz&GraphLowering.codegen_with_cpp_wrapper•	  s.  ø€ ô ÓPÀÔPÓPˆð
 �T×&Ñ&Ð&ò Ø—‘òä—M‘M×:Ñ:Ð:òô ñ ØEIÇ_Á_ôó ð	 	"ñ Ò/õD#ôL �}‰}×5Ò5ô —=‘=×<Ò<Ø+0Ð(Ø"Ÿo™oò "˜Ü% b¬"×*DÑ*DÕEØ37Ð0Ù!ð"ñ ,Ù&9Ó&;˜Ø×4Ñ4°[ÔAÜ8¸Ô>Ø—|‘|“~Ð%à—}’}ð  Ÿ<™<›>Ð)ð $)�Ô Ø×1Ñ1Ó3×8Ñ8�á1Ó3�Ü—[‘[×1Ñ1×HÑHÓJñ *Ù˜[Ô)÷*àð $(�Ô Ø×$Ñ$×*Ñ*Ô,Ø×'Ñ'×-Ñ-Ô/Ø×'Ñ'×-Ñ-Ô/Ü—‘× Ñ ×9Ñ9×?Ñ?ÔAÜ—‘× Ñ ×=Ñ=×CÑCÔEÜ—‘”Ü—\‘\Ð#DÀeÐ"LÓMñ *ØŸ<™<›>÷*ñ *ð —<‘<“>Ð!÷!*ñ *ú÷*ð *ús   Å>	JÉ4J+ÊJ(Ê+J4c                ó”   — ddl m} t        j                  dd«      5   || j                  «      | _         ddd«       y# 1 sw Y   yxY w)zÐ
        (Re)initializes the scheduler member.  When initializing the scheduler, no CUBIN
        files should be generated (to avoid biasing any benchmarks and pessimizing
        fusion decisions).
        r(   )Ú	Schedulerztriton.store_cubinFN)rV  rÏ  r)   rÈ  r+  )rv  rÏ  s     ry   Ú_update_schedulerzGraphLowering._update_scheduler 
  s;   € õ 	)ä�\‰\Ð.°Ó6ñ 	8Ù& t§¡Ó7ˆDŒN÷	8÷ 	8ñ 	8ús	   �>¾Ac                óL  — t        dd¬«      5  | j                  «        | j                  «        t        j                  j                  | j                  | j                  j                  «       | j                  j                  | «       | j                  j                  «        t        j	                  dt        j                  j                  «       | j                  j                  | j                   «      }| j                  j#                  «        |cd d d «       S # 1 sw Y   y xY w)NzGraphLowering.codegenT©Úlog_pt2_compile_eventzFFinished codegen for all nodes. The list of kernel names available: %s)r   r�  rÐ  rc   rÚ  Údraw_orig_fx_graphre  rV  rÝ   r=  Úpush_codegened_graphrÂ  rÙ  r^  ro  Úgenerater  Úpop_codegened_graph)rv  rº   s     ry   rÂ  zGraphLowering.codegen+
  sÏ   € ÜÐ1ÈÔNñ 	Ø×"Ñ"Ô$à×"Ñ"Ô$Ü�G‰G×&Ñ& t§|¡|°T·^±^×5IÑ5IÔJà×Ñ×2Ñ2°4Ô8Ø�N‰N×"Ñ"Ô$ä�I‰IØXÜ—‘×0Ñ0ôð
 ×&Ñ&×/Ñ/°×0AÑ0AÓBˆFØ×Ñ×1Ñ1Ô3Ø÷!	÷ 	ò 	ús   ŽDDÄD#c                óh  — t        dd¬«      5  |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        | j                  «        | j                  j                  «        ddd«       y# 1 sw Y   yxY w)aÔ  
        This is a more compact version of the `codegen()` above
        where we codegen this graph as a subgraph of some parent
        graph. The parent graph is passed as an argument: the
        intention is to inline codegening of the subgraph in
        the parent graph's wrapper code (including the generated
        kernels). The wrapper code is not finalized (via `.generate()`
        call), as this will be done in the parent graph's `codegen()`.
        zGraphLowering.codegen_subgraphTrÒ  N)
r   r=  r<  rM  r#  r$  r%  rÐ  rV  rÂ  )rv  Úparent_graphs     ry   Úcodegen_subgraphzGraphLowering.codegen_subgraph>
  s”   € ô Ð:ÐRVÔWñ 		%Ø ,× 9Ñ 9ˆDÔØ*×5Ñ5ˆDŒOØ+×7Ñ7ˆDÔØ ,× 9Ñ 9ˆDÔØ+×7Ñ7ˆDÔØ+×7Ñ7ˆDÔà×"Ñ"Ô$Ø�N‰N×"Ñ"Ô$÷		%÷ 		%ñ 		%ús   ŽBB(Â(B1c                óæ   — d}g }g }| j                   j                  D ]N  }|j                  «       }||z  }|j                  ||dz  f«       |j                  ||j	                  «       f«       ŒP |||fS )Nr   r  )rV  rÝ   Úget_read_write_buffers_sizesr¸   Úget_estimated_runtime)rv  Útotal_bytesÚnode_countsÚnode_runtimesr¨   Ú	num_bytess         ry   r­  zGraphLowering.count_bytesS
  sˆ   € ð
 ˆØˆØˆØ—N‘N×(Ñ(ò 	GˆDØ×9Ñ9Ó;ˆIØ˜9Ñ$ˆKØ×Ñ  i°1¡nÐ5Ô6Ø× Ñ  $¨×(BÑ(BÓ(DÐ!EÕFð		Gð ˜K¨Ð6Ð6r{   zCallable[[str], None] | NoneÚsave_output_codec                ól   — t        dddd¬«      5  | j                  «       cd d d «       S # 1 sw Y   y xY w)NzGraphLowering.compile_to_moduleÚcode_genTÚ,inductor_code_gen_cumulative_compile_time_us)Ú
phase_namerÓ  Údynamo_compile_column_us)r   Ú_compile_to_moduler~  s    ry   rÃ  zGraphLowering.compile_to_modulef
  s9   € ÜØ-Ø!Ø"&Ø%Sô	
ñ 	-ð ×*Ñ*Ó,÷	-÷ 	-ò 	-ús   �*ª3c                ó<  — | j                   r| j                  «       n| j                  «       \  }}t        |t        «      r| j                  |«      }n*t        |t        «      r|}nt        dt        |«      › �«      ‚|j                  €J ‚t        |j                  «       t        j                  d|j                  «       t        j                  d|j                  «       t        j                   r(t#        d|j                  › �t$        j&                  ¬«       t        |t        «      rut(        j                  j+                  |j                  «       t(        j                  j-                  t.        j0                  j3                  |j                  «      d   dz   «       |S )Nz Unrecognized wrapper code type: úOutput code written to: %szCompiled module path: )Úfiler   ú.debug)rM  rÍ  rÂ  r~   ra   Ú_compile_to_module_linesr.   ÚNotImplementedErrorr¬   Ú__file__rr   rÙ  rÚ  ro   rû  r)   Úbenchmark_kernelÚprintrƒ  Ústderrrc   Úoutput_coder  ÚosÚpathÚsplitext)rv  r=  r„  Úmods       ry   rè  z GraphLowering._compile_to_moduleo
  s/  € ð 04×/?Ò/?ˆD×)Ñ)Ô+ÀTÇ\Á\Ã^ñ 	ˆ�aô �lÔ$4Ô5Ø×/Ñ/°Ó=‰CÜ˜Ô&;Ô<Ø‰Cä%Ø2´4¸Ó3EÐ2FÐGóð ð �|‰|Ð'Ð'Ð'ä˜Ÿ™Ô%Ü�	‰	Ð.°·±Ô=Ü×ÑÐ9¸3¿<¹<ÔHÜ×"Ò"ÜÐ*¨3¯<©<¨.Ð9ÄÇ
Á
ÕKÜ�lÔ$9Ô:Ü�G‰G×Ñ §¡Ô-Ü�G‰G�L‰LœŸ™×)Ñ)¨#¯,©,Ó7¸Ñ:¸XÑEÔFàˆ
r{   c                ó˜  ‡‡— ddl m} t        j                  j                  rw| j
                  j                  j                  «       }|j                  dd«      }d|z   | j
                  j                  j                  «       z   dz   }|‰j                  z   ‰_
        t        j                  �t        j                  ‰j                  «       t        j                  d‰j                  «       t        j                   «       }t#        j$                  |‰j                  ¬«       	 ‰j&                  D ��cg c]  \  }}||j(                  f‘Œ }}}|j+                  ‰j                  «      \  }	Št        j                  d	‰«       t,        j                  j/                  ‰«       t,        j                  j1                  t2        j4                  j7                  ‰«      d
   dz   «       t9        dˆfd„ˆfd„¬«       t=        dd¬«      5  |j?                  |	‰|i | j@                  ¥| jB                  ¥| jD                  ¥¬«      }
d d d «       |	| _#        ‰| _$        || _%        t        jL                  r4t        jN                  r$
jQ                  «       }|
jS                  |dd¬«       
S c c}}w # t:        $ r t9        dˆfd„¬«       ‚ w xY w# 1 sw Y   ŒˆxY w)Nr(   )ÚPyCodeCachez"""z\"\"\"z&r"""
Compile-time auto-tuning block: 
z"""
zOutput code: 
%s)Úcoderê  r   rì  Úinductor_output_codec                 óH   •— ‰ t         j                  j                  ‰ «      dœS )N)ÚfilenameÚ	file_path)rô  rõ  Úabspath)rõ  s   €ry   r  z8GraphLowering._compile_to_module_lines.<locals>.<lambda>»
  s   ø€ Ø $Ü!#§¡§¡°Ó!6ñ€ r{   c                 ó   •— ‰ j                   S rt   r±  r×  s   €ry   r  z8GraphLowering._compile_to_module_lines.<locals>.<lambda>¿
  ó   ø€  <×#5Ñ#5€ r{   )Ú
payload_fnc                 ó   •— ‰ j                   S rt   r±  r×  s   €ry   r  z8GraphLowering._compile_to_module_lines.<locals>.<lambda>µ
  r  r{   zPyCodeCache.load_by_key_pathTrÒ  )ÚlinemapÚattrs)ÚtimesÚrepeat)*Ú	codecacherù  r)   r  r  r=  Úkernel_autotune_defsÚgetvalueÚreplaceÚkernel_autotune_callsr7  rý   râ  ro   rÚ  rS   Úinductor_meta_from_configrT   Úbegin_compileÚline_mapr  Úwriterc   ró  r  rô  rõ  rö  r   r‹  r   Úload_by_key_pathr.  r1  r2  r_  r`  ra  Úbenchmark_harnessÚprofile_bandwidth_outputÚget_argsÚbenchmark_compiled_module)rv  r=  rù  r	  Útuning_codeÚinductor_metaÚline_nor¨   r  rô  r÷  rw   rõ  s    `          @ry   rí  z&GraphLowering._compile_to_module_linesŽ
  s�  ù€ õ 	+ä�=‰=×1Ò1à#'×#4Ñ#4×#IÑ#I×#RÑ#RÓ#TÐ Ø#7×#?Ñ#?ÀÀ{Ó#SÐ ð7à&ñ'ð ×#Ñ#×9Ñ9×BÑBÓDñEð ñ	ð ð "-¨|×/AÑ/AÑ!AˆLÔÜ×)Ñ)Ð5Ü×*Ñ*¨<×+=Ñ+=Ô>Ü×ÑÐ1°<×3EÑ3EÔFä&×@Ñ@ÓBˆÜ×*Ñ*¨=¸|×?QÑ?QÕRð	ð &2×%:Ñ%:÷á!�G˜Tð ˜$×*Ñ*Ò+ðˆGñ ð $×)Ñ)¨,×*<Ñ*<Ó=‰IˆC�Ü×!Ñ!Ð">ÀÔEä�G‰G×Ñ Ô%Ü�G‰G�L‰LœŸ™×)Ñ)¨$Ó/°Ñ2°XÑ=Ô>ô Ø&óó 6õô Ð8ÐPTÔUñ 
	Ø×.Ñ.ØØØðØ—n‘nðà×.Ñ.ðð ×4Ñ4ðð	 /ó 	ˆC÷
	ð ˆŒØˆŒØ$ˆÔä×#Ò#¬×(GÒ(Gà—<‘<“>ˆDØ×)Ñ)¨$°aÀÐ)ÔBàˆ
ùó[øô ò 	ÜØ&ã5õð
 ð	ú÷ 
	ð 
	ús+   ÄJ" Ä.JÅBJ" Ç?:K ÊJ" Ê"J=Ë K	c                óº  — g }t        j                  d«      }t        j                  d«      }|D ]©  }t        |t        j                  «      r*|j                  | j                  › dt        |«      › �«       ŒGt        |t        j                  «      r*|j                  | j                  › dt        |«      › �«       Œ‹|j                  |j                  «       «       Œ« |S )Nr   Ú_noneÚ_shape)
rp  rq  r~   r*   ÚNoneAsConstantBufferr¸   rL  rS  rB   rÄ  )rv  rÿ   ÚnamesÚshape_counterÚnone_counterr¨   s         ry   Ú_get_output_nameszGraphLowering._get_output_names×
  s­   € ØˆÜ!Ÿ™¨Ó*ˆÜ —‘ qÓ)ˆØ!ò 	.ˆDÜ˜$¤× 7Ñ 7Ô8Ø—‘ §	¡	˜{¨%´°\Ó0BÐ/CÐDÕEÜ˜D¤"×":Ñ":Ô;Ø—‘ §	¡	˜{¨&´°mÓ1DÐ0EÐFÕGà—‘˜TŸ]™]›_Õ-ð	.ð ˆr{   c                ó8   — | j                  | j                  «      S rt   )r   rÿ   r~  s    ry   Úget_output_nameszGraphLowering.get_output_namesä
  s   € Ø×%Ñ% d×&8Ñ&8Ó9Ð9r{   c                ó  — || j                   v xrh | j                   |   j                  «       dk(  xrF t        | j                   |   j                  «       «      dk(  xr t	        | j                   |   «      dk(  xs || j
                  v S )Nr(   r   r«   )r  r¨  rö   r›  r=   r"  rë  s     ry   Úis_unspec_argzGraphLowering.is_unspec_argç
  s•   € ð �D×%Ñ%Ð%ò BØ×!Ñ! $Ñ'×1Ñ1Ó3°qÑ8òBä�D×%Ñ% dÑ+×4Ñ4Ó6Ó7¸1Ñ<òBô   × 1Ñ 1°$Ñ 7Ó8¸EÑAò	3ð
 �T×2Ñ2Ð2ð	3r{   )NNNFFNNFFFNNNNNNFN)(rw  útorch.fx.GraphModuler
  zSequence[object] | Nonerx  zShapeEnv | NonerR  ú
int | NonerM  rÒ  rQ  rÒ  r  zbool | Noner@  z1Callable[[list[ir.ExternKernelNode]], Any] | Noner  rÒ  r  rÒ  r  rÒ  r,  zdict[str, int] | Noner  ú
str | Noner  r'  r  zGraphLowering | NonerL  r'  r  zSequence[int] | NonerN  rÒ  r	  z3Callable[..., dict[Any, Callable[..., Any]]] | NonerÉ   r<  )rÉ   r<  )r�  útorch.TensorrÉ   z1tuple[Sequence[int | Expr], Sequence[int | Expr]])r�  r(  rÉ   z7tuple[Sequence[int | Expr], Sequence[int | Expr], Expr])r�  r(  rÉ   z)tuple[list[sympy.Expr], list[sympy.Expr]])r¨   zLir.TensorBox | ir.StorageBox | ir.Buffer | WorkspaceArg | ir.TorchBindObjectrÉ   zSequence[Expr])r¨   z-ir.Buffer | WorkspaceArg | ir.TorchBindObjectrÉ   r	   )r
   z)torch._inductor.ir.IRNode | device | Noner¢  r,   rÉ   rÒ  )T)r¬  rm   r­  rÒ  rÉ   rf  )rÉ   útorch.device)r
   r)  rÉ   úIterator[None]r,  )rw  rj   r  rÒ  rÉ   rÒ  )rL  r@  rÉ   r@  )rw  r%  r
  zlist[torch.Tensor]rð  r@  rÉ   rï  )rÉ   zOrderedSet[Node])rL  r@  rÉ   r<  )r
   r)  rÉ   r<  )rÉ   z,torch._subclasses.fake_tensor.FakeTensorMode)rÉ   rÒ  )r  r@  rÉ   z4ir.TensorBox | ir.Buffer | ir.TorchBindObject | None)r  ú
sympy.ExprrÉ   r<  )r  r@  rÉ   z-ir.TensorBox | ir.Buffer | ir.TorchBindObject)r  r@  rÉ   ztorch.dtype)r  r@  rÉ   z
int | Expr)rw   r   rÉ   r   )r�   zir.OperationrÉ   r@  )r-  z	ir.Bufferr)  rÒ  rÉ   r@  )r1  ú	list[str]rÉ   r@  )r=  r;  rÉ   r<  )rL  r@  rÉ   r(  )rL  r'  r™  r   rÉ   r@  rt   )r™  r   rL  r'  rÉ   rD   )rL  r@  ra  ztorch.device | NonerÉ   r@  )r”   r@  rw   ztuple[object]rx   údict[str, object]rÉ   zExpr | TensorBox | None)r”   rd   rw   r   rx   údict[str, Any]rÉ   r   ©r±   r(  rÉ   rÒ  )r”   r@  rw   z	tuple[()]rx   r-  rÉ   zLConstant | TensorBox | ShapeAsConstantBuffer | ir.Subgraph | TorchBindObject)r”   r   rw   r   rx   r   rÉ   r   )r”   ztorch.fx.node.Targetrw   z"tuple[torch.fx.node.Argument, ...]rx   r-  rÉ   r<  )r¨   rÈ   )rÉ   r*  )rÌ  rÈ   r”  ú
tuple[Any]r•  r.  rî  r0  rï  r.  rÉ   r<  )rÁ  rÈ   rÉ   r&  )rÁ  rÈ   rÉ   r<  )rÁ  rÈ   rÉ   Úobject)rÁ  rÈ   re  zOrderedSet[sympy.Symbol]rÉ   r<  ©FNNN©
rŠ  rÒ  rð  r'  r‹  zPythonWrapperCodegen | NonerŒ  zGraphPartitionSignature | NonerÉ   r<  )r
  rÀ  rÉ   r<  )rÉ   z)tuple[ValueWithLineMap, ValueWithLineMap])rÙ  rý   rÉ   r<  )rÉ   zVtuple[int, list[tuple[BaseSchedulerNode, int]], list[tuple[BaseSchedulerNode, float]]])rÉ   ÚCompiledModule)r=  ra   rÉ   r4  )rÿ   rþ   rÉ   r,  )rÉ   r,  )rL  r@  rÉ   rÒ  )MÚ__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r  r}  r…  r€  r—  rœ  r   r£  r°  r³  Ú
contextlibr   rµ  rº  Ústaticmethodr  rì  rñ  r[  rü  rÿ  Úpropertyr  r  r  r  r  r  r¨  r#  r'  r.  r2  r>  rB  rE  rR  rV  rO  re  Útyping_extensionsÚoverriderÂ   r�  r§  r¬  r¯  r›   rÈ  rÕ  rØ  rŠ  r÷  rþ  r4  rX  r…  r�  r¦  rÍ  rÐ  rÂ  rÚ  r­  râ  rÃ  rè  rí  r   r"  r$  Ú__classcell__©r{  s   @ry   rý   rý   j  sd  ø… ÙIà"Ó"ð
 37Ø%)Ø#Ø!ØØ"&àØ"Ø!Ø$Ø48Ø)-Ø(,Ø-1ØØ04Ø ØMQð+]Cà ð]Cð 0ð]Cð #ð	]Cð
 ð]Cð ð]Cð ð]Cð  ð]Cð!ð]Cð ð]Cð ð]Cð ð]Cð 2ð]Cð 'ð]Cð  &ð!]Cð" +ð#]Cð$ ð%]Cð& .ð']Cð( ð)]Cð* Kð+]Cð, 
õ-]Có~1ðØðà	:óð)2Øð)2à	@ó)2ðVØðà	2óð#ðð#ð 
ó#ð*EØAðEà	óEðMà9ðMð  ðMð 
ó	Mô<ó:4ð ×Ñò(ó ð(óð ò^ó ð^ó@ð
à ð
ð +ð
ð ð	
ð
 
ó
ó6>ó@Aó
Dð òó ðð ò	?ó ð	?ðØðà	=óó$FðQØðQà	6óQó8ó,
8õ&óð FKõ ó(ó
	óó
ó ô:
ó&&ðRiàðið ðið "ð	ið
 
!õiðV ×Ñô_8ó  ð_8ðB ò5ó ð5ð97àð97ð ð97ð "ð	97ð
 
Vó97óvóð ×Ñðj
à$ðj
ð 1ðj
ð "ð	j
ð
 
ôj
ó  ðj
óX ð ò$ó ð$ð ò$ó ð$ðI:àðI:ð ðI:ð #ð	I:ð
 ðI:ð #ðI:ð 
óI:ðV ò6ó ð6ó#õ$RðhU;ØðU;Ø3KðU;à	óU;ónQð "Ø$(Ø;?Ø?Cð#Wàð#Wð "ð#Wð 9ð	#Wð
 =ð#Wð 
ó#WðJ]0Ø>ð]0à	ó]0ð~I"à	2óI"óV	8óó&%ð*7ð
ó7ð" 6:ÐÐ2Ó9ó-óð>GØ,ðGà	óGóRó:÷3r{   rý   c                  óL   ‡ — e Zd ZdZdˆ fd„Z	 	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )rï  zŽ
    Mostly a helper class for the subgraph lowering. The main goal is to call
    init_wrapper_code with the subgraph related arguments.
    c                ó2   •— || _         t        ‰| �  |i |¤Ž y rt   )rî  r  r  )rv  rî  rw   rx   r{  s       €ry   r  zSubgraphLowering.__init__ø
  s   ø€ ØˆŒÜ‰Ñ˜$Ð) &Ó)r{   c                óf   •— t         ‰| �  d| j                  | j                  j                  ¬«       y )NT)rŠ  rð  r‹  )r  r�  rL  rî  r=  )rv  rŠ  rð  r‹  rŒ  r{  s        €ry   r�  z"SubgraphLowering.init_wrapper_codeü
  s.   ø€ ô 	‰Ñ!ØØŸ)™)Ø $§¡× 8Ñ 8ð 	"õ 	
r{   )rî  rý   rw   r   rx   r   rÉ   r<  r2  r3  )r5  r6  r7  r8  r  r�  r?  r@  s   @ry   rï  rï  ò
  sU   ø„ ñõ
*ð "Ø$(Ø;?Ø?Cð
àð
ð "ð
ð 9ð	
ð
 =ð
ð 
÷
ñ 
r{   rï  )rw   r   rx   r   rÉ   r<  )r‰   r+  rÉ   ztorch.dtype | None)r“   rj   r”   r@  rÉ   z,Tensor | torch._C.ScriptObject | GraphModule)r£   rk   rÉ   údict[Node, tuple[int, ...]]r/  )r¹   rD  rÉ   zdict[Node, object])r£   rk   rç   rD  rÉ   r<  )r¨   r#   rÉ   rÒ  )¹Ú
__future__r   r:  rô   rp  Úloggingr€  rô  r  rƒ  rJ  r=  Úcollectionsr   r   Útypingr   r   r   r   r	   r„   Útorch._loggingÚtorch.fxr
   r   Útorch._decompr   Útorch._dynamo.utilsr   r   Ú"torch._library.fake_class_registryr   Útorch._library.opaque_objectr   r   r   Útorch._library.utilsr   r   r   Útorch._prims_commonr   r   Útorch._subclasses.fake_tensorr   Útorch._utils_internalr   Ú%torch.fx.experimental._backward_stater   Ú%torch.fx.experimental.symbolic_shapesr   r   r   r   r   r    r!   r"   Útorch.fx.noder#   Útorch.fx.passes.reinplacer$   Útorch.utils._mode_utilsr%   Útorch.utils._ordered_setr&   Útorch.utils._sympy.numbersr'   r  r)   r*   r+   Úcodegen.commonr,   r-   r.   r/   r0   r1   r2   r3   Úexcr4   r5   r6   r7   Úfx_utilsr8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r¥  rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   ÚruntimerS   Úruntime.autotune_cacherT   r  rU   r]  rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   Úvirtualizedrb   rc   Úcollections.abcrd   re   rf   rg   Útypesrh   Útorch._higher_order_ops.effectsri   rj   Útorch.fx.graphrk   Úcodegen.wrapperrl   Údependenciesrm   rV  rn   r4  Útorch._inductor.codecachero   Ú	getLoggerr5  rÙ  Ú_loggingÚgetArtifactLoggerrú  ró   rË   rq  rT  r?  Ú)torch._inductor.fb.triton_kernel_metadatarq   Útorch._inductor.fb.utilsrr   rŠ   r™   r©   r²   r¿   rî   rû   r¢   r–  rý   rï  ru   r{   ry   ú<module>rl     s$  ðÝ "ã Û Û Û Û Û 	Û 	Û 
Û Û Ý #Ý %ß /Ñ /ã Ý ã Û Û ß  Ý ,ß 4Ý ?÷ñ õ
 ;ß 7÷õ 5Ý :Ý ?÷	÷ 	ó 	õ Ý 1Ý /Ý /Ý -ç !Ñ !÷	÷ 	ó 	÷ó õ %÷÷ ÷ õ ÷÷ ÷ õ õ $Ý 8Ý &÷÷ ÷ ó ÷ (ñ ßFÓFÝ å;Ý$Ý$å5Ý!Ý,àÐ"7Ñ7€Nå 5ð €g×Ò˜Ó!€Ø—’×0Ò0°¸<ÓH€à‡y‚y‡~‚~€à*˜9Ÿ?š?Ó,Ð à€6×ÒÔõö 9óóóð(Ø	ðØ!ðà1óóó$RðØ5ðàóð0_3Øð_3Ø+Fð_3à	ó_3óDô*E&3�E—H’H×(Ò(ô E&3ôPL
�}õ 
r{   