Ë
    L²jñÊ ã                  óJ  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dl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l2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZG ddlHmIZImJZJmKZK ddlLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZT ddlUmVZVmWZWmXZXmYZY ddlZm[Z[ ddlJm\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZh ddlimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZv dd lwmxZx dd!lymzZz dd"l{m|Z| dd#l}m~Z~m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”eOz  Z d d-l¡m¢Z¢  e�jF                  e¤«      Z¥e�jL                  �jO                  e¤d.«      Z¨e�jR                  �jT                  Zª e�jV                  «       Z¬ eI�jZ                  «       rd d/l®m¯Z¯ d d0l°m±Z± nd>d1„Z±d>d2„Z¯d?d3„Z²d@d4„Z³	 	 	 	 	 	 dAd5„Z´dBd6„Zµ	 	 	 	 dCd7„Z¶	 	 	 	 	 	 dDd8„Z·dEd9„Z¸ G d:„ d;e�jr                  �jt                  «      Z» G d<„ d=e»«      Z¼y)Fé    )Ú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)Úmagic_methodsÚmethod_to_operator)Ú_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)Úconvert_shape_to_inductorÚ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     úT/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_inductor/graph.pyru   ru   ž   ó   € Øó    c                  ó   — y rw   rx   ry   s     r|   rt   rt   ¡   r}   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Úint64r\   Ú
is_integerÚis_floatÚfloat32)Úconstant_buffers    r|   Úmay_get_constant_buffer_dtyper�   ¥   s«   € ÜØœ%Ÿ,™,¬¯
©
´E·J±J×4FÑ4F×4NÑ4NÐOôð ð 	róð ô
 �/¤5§:¡:×#5Ñ#5×#=Ñ#=Ô>Ü�{‰{Ðä�/¤5§:¡:Ô.Ü# OÓ4Ð4à×!Ò!Ü�{‰{ÐØ	×	!Ò	!Ü�}‰}Ðàr~   c                ó6   — t        d„ t        D «       «      }| |v S )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrw   )r   )Ú.0Úms     r|   ú	<genexpr>z"is_magic_method.<locals>.<genexpr>º   s   è ø€ ÒH°QÔ-¨a×0ÑHùs   ‚)r(   r   )ÚopÚ	magic_opss     r|   Úis_magic_methodr•   ¹   s   € ÜÑH¼-ÔHÓH€IØ�ˆ?Ð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         r|   Ú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©r“   r   Úuser_visible_output_idxsÚoriginal_output_strides)Ú
find_nodesÚmetar�   rz   r‡   Úfxr%   r™   )ÚgÚretÚoutput_nodeÚoutput_node_argsÚidxÚnodes         r|   Ú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                ó¨  — 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Ÿ   rz   r�   r‡   r¬   r%   Ú
setdefaultÚaddÚappend)Úuser_visible_outputsÚresultÚqueueÚvisitedÚcurrentÚbases         r|   Ú"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                  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 �]T  }t-        |j.                  t0        j2                  j4                  j6                  «      rd|j8                  d<   ŒLt-        |j.                  t0        j:                  j<                  «      rJt?        |j.                  «      t0        j@                  jB                  jD                  k(  rd|j8                  d<   ŒÄ ||«      }|sŒÏ||v rd|j8                  d<   |j8                  jG                  dd«      r0|jH                  D ]!  } ||«      }	|	sŒ|	|vsŒd|j8                  d<   Œ# t         jJ                  r�Œ@||v s�ŒFd|j8                  d<   �ŒW 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    r|   Ú_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Ú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
             r|   Ú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Ü×Ñð	
óÐð"

Øð

à	+ó

ô ˜Ÿ™Ó ó  /ˆÜØ�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Ø*.ˆC�H‰HÐ&Ó'ñA /r~   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Úlenrz   rš   rò   Úfnsrñ   ÚdefaultÚbinaryÚ_convolution_pointwise_)r²   rŸ   s     r|   Úis_mkldnn_convrû   O  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                  ó  ‡ — e Zd ZU ded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGˆ fd„ZdHd„Z	 	 	 	 dId„Z	 	 	 	 dJd„Z	 	 	 	 dKd	„Z	 	 	 	 dLd
„Z		 	 	 	 	 	 dMd„Z
dNdOd„ZdPd„Zej                  dQd„«       ZdRd„ZedSd„«       ZdTd„Z	 	 	 	 	 	 	 	 dUd„ZdVd„ZdWd„ZdXd„ZedYd„«       Z	 	 	 	 dZd„Zd[d„Z	 	 	 	 d\d„Zd]d„Zd^d„Zd_ˆ fd„Zd`d„Z ddœdad„Z!dbd „Z"dcd!„Z#dWd"„Z$ddd#„Z%ded$„Z&dfdgd%„Z'dhd&„Z(	 	 	 	 	 	 	 	 diˆ fd'„Z)e*jV                  djˆ fd(„«       Z,edkd)„«       Z-	 	 	 	 	 	 	 	 dld*„Z.dmd+„Z/dmd,„Z0e*jV                  	 	 	 	 	 	 	 	 dnˆ fd-„«       Z1dHd.„Z2edod/„«       Z3edpd0„«       Z4	 	 	 	 	 	 	 	 	 	 	 	 dqd1„Z5edrd2„«       Z6dsd3„Z7dtˆ fd4„Z8	 	 	 	 	 	 dud5„Z9dHd6„Z:	 	 	 	 dv	 	 	 	 	 	 	 	 	 dwd7„Z;	 	 	 	 dxd8„Z<	 	 dyd9„Z=dHd:„Z>dyd;„Z?dzd<„Z@	 	 d{d=„ZAdZBd>ed?<   d|d@„ZCd|dA„ZD	 	 	 	 d}dB„ZEd~dC„ZFddD„ZGd€dE„ZHˆ xZIS )�ÚGraphLoweringúlist[ir.IRNode]Úgraph_outputsNFc                óz  •— t         ‰| �  |«       || _        || _        |�|n| j	                  ||	¬«      | _        d| _        |	| _        |
| _        || _	        || _
        || _        || _        || _        d| _        d| _        |€t!        «       }d| _        nd| _        || _        |j&                  j)                  «       | _        t-        t.        j0                     «       | _        t5        |«      | _        g | _        i | _        i | _        d | _        t-        «       | _         |r|jB                  n	t-        «       | _!        |r|jD                  n	t-        «       | _"        d| _#        tI        t,        «      | _%        tI        t,        «      | _&        i | _'        g | _(        g | _)        |r|ni | _*        |rt-        |jW                  «       «      n	t-        «       | _,        |r|jZ                  ni | _-        |r|j\                  ni | _.        |j^                  ja                  dt-        «       «      | _1        |r|jd                  ni | _2        i | _3        i | _4        i | _5        i | _6        t-        «       | _7        t-        «       | _8        t-        «       | _9        t-        «       | _:        i | _;        t-        «       | _<        t-        «       | _=        d | _>        d | _?        ddl@mA} t…        j†                  «       r|r|n|| _D        d | _E        i | _F        t-        «       | _G        g | _H        i | _I        tI        t”        «      | _K        i | _L        t›        jš                  «       | _N        || _O        || _P        || _Q        || _R        i | _S        || _T        || _U        t­        t®        «      | _X        d | _Y        d | _Z        d | _[        d | _\        d | _]        | j
                  r| j½                  «       n	t-        «       | __        t-        dg«      | _`        tÃ        |jÄ                  «      | _c        tÉ        |jÄ                  | jÆ                  «       d	| _e        d	| _f        g | _g        d | _h        i | _i        |jÕ                  «       | _k        | jÖ                  j]                  «       D ]  \  }}|| j\                  |<   Œ | jÖ                  je                  «       D ]  \  }}|| jd                  |<   Œ | jØ                  j^                  ja                  d
i «      | _m        |�|jÜ                  ni | _n        tß        «         tá        jâ                  d «      tä        «      | _r        i | _s        t-        «       | _t        t-        «       | _u        i | _v        t-        «       | _w        t-        «       | _x        t-        «       | _y        tõ        jö                  «       | _|        d| _}        tý        «       | _        i | _€        y )N)Úis_inferencer   FTÚcpuÚ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_symbolsrW   ÚsizevarsÚgraph_input_namesÚgraph_inputsÚgraph_inputs_originalÚpartition_mapsÚzero_dim_cpu_tensor_listÚdevice_typesÚdevice_idxsÚdevice_typer   Úadditional_buffer_depsÚadditional_star_depsÚ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Ú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_namer4   rô   Ú	lru_cacher1   Ú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_idxr[   Úbw_donated_idxsÚdep_size_hint_cache)ÚselfÚgmr  Ú	shape_envrP  rK  rO  r  r?  r  r  r  r+  r  r  r  rJ  r  rL  r
  r  ÚkÚvÚ	__class__s                          €r|   r	  zGraphLowering.__init__g  se  ø€ ô. 	‰Ñ˜ÔØ*ˆÔØ,ˆÔð Ð%ñ à×'Ñ'¨¸Ð'ÓFð 	Œð
 '(ˆÔ#Ø(ˆÔØ&ˆÔØ,ˆÔØ"4ˆÔØ!2ˆÔØ(ˆÔØ.ˆÔØ',ˆÔ$à$ˆÔØÐÜ ›
ˆIØ#(ˆDÕ à#'ˆDÔ Ø#ˆŒð ×.Ñ.×3Ñ3Ó5ð 	Ôô '1´·±Ñ&>Ó&@ˆÔ#ä(¨Ó3ˆŒØ,.ˆÔØQSˆÔØ=?ˆÔ"Ø>BˆÔÜ9C»ˆÔ%á)5ˆL×%Ò%¼:»<ð 	Ôñ )5ˆL×$Ò$¼*»,ð 	Ôð !ˆÔÜBMÜóC
ˆÔ#ô ALÌJÓ@WˆÔ!ð <>ˆÔ"à(*ˆŒØ.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 rw   )r  Úfreeze_runtime_asserts©rt  s    r|   r{  z$GraphLowering.freeze_runtime_asserts=  s   € Ø�‰×.Ñ.Õ0r~   c                ó2  — | j                   r2t        |j                  «       «      t        |j                  «       «      fS ddlm}  |dt        | j                  j                  «      › �«      }| j                  j                  ||«      \  }}}|D �cg c]4  }t        |t        j                  «      r|j                  j                  n|‘Œ6 }}|D �cg c]4  }t        |t        j                  «      r|j                  j                  n|‘Œ6 }	}||	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  rX   ÚsizeÚstrideÚtorch._dynamo.sourcer~  rö   r  Úbacked_var_to_valÚ,create_symbolic_sizes_strides_storage_offsetr�   r‡   ÚSymIntr²   Úexpr)
rt  Úexr~  Úsourcer€  r�  Ú_r¢   Úr_sizeÚr_strides
             r|   Úsymbolic_sizes_stridesz$GraphLowering.symbolic_sizes_strides@  sû   € ð ×ÒÜ,¨R¯W©W«YÓ7Ô9RØ—	‘	“ó:ð ð õ <ñ $Ø,¬S°·±×1RÑ1RÓ-SÐ,TÐUóˆFð —‘×LÑLØØóñ	ØØØð NRÖRÈ¤¨A¬u¯|©|Ô!<�!—&‘&—+’+À!ÑCÐRˆÐRØOUÖVÈ!¤:¨a´·±Ô#>�A—F‘F—K’KÀAÑEÐVˆÐVØ�xÐÐùò SùÚVs   Â9DÃ9D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�  )rt  r‡  r¢   r€  r�  s        r|   Ústatic_sizes_stridesz"GraphLowering.static_sizes_stridese  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 rw   )	r�   r,   rF   ÚdatarE   ÚComputedBufferrJ  r(  Úget_size)rt  r²   s     r|   Úget_allocation_sizez!GraphLowering.get_allocation_sizeo  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 rw   )Ú
get_layoutr“  r�  Úoffsetr   )rt  r²   Úlayoutr€  r�  r–  s         r|   Ú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 rw   )r�   r.   r1   r?   )rt  r
   Úfeatures      r|   Ú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   )rs  r  rä   rJ  r�   r,   ÚNonTensorObjÚhas_unbacked_symbolsr  Úall_unbacked_explicitly_hintedÚ	get_numelÚnumbytes_hintÚ
numel_hintÚKeyError)rt  ÚdepÚcount_bytesÚresÚinps        r|   Ú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)rX  r›   ©rt  r
   s     r|   Ú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rw   )rX  )rt  r
   rì   s      r|   Ú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    r|   Ú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)rz   r«   r
   Útyperc   ©r�   Únr±   s      r|   r’   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   rz   r«   r¸  s      r|   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  )rz   r«   r�   r‡   r   r€  )r¹  Úmeta_vals     r|   Ú
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   é   ©rz   r«   r€  ©r¹  s    r|   Ú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    r|   Ú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ÚallrE  ÚlogÚdebugrÔ   r   Úfloatr:   rÑ   ÚvaluesÚmap)ru  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                      r|   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‰  )rJ  ©rt  rJ  s     r|   Úqualify_namezGraphLowering.qualify_namei  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.
        )
Úparentru  r  rv  rK  rO  r?  r  r  rJ  )ÚSubgraphLoweringr  rK  rO  r?  r  r  rã  )rt  ru  r  Úsubgraph_names       r|   Úmake_subgraphzGraphLowering.make_subgrapho  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 )aC  
        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 convert it to channels last layout which results in the second copy.
        With rule 2, we makes sure all the tensors in the chain uses channels last layout. So both copies
        can be saved.
        N)r‡   ró   rÌ   Úbmmrø   r(   r%   rÜ   rd  r\  rÝ   rŸ   rÍ   r¸   rû   Úusers)rt  Ú	last_convÚnodes_cannot_propagateÚ
output_setr¹  Úusers         r|   rY  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     r|   Ú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 rw   )	r#  r¸   r·  Úindexr$  rf   r\  r@  ra  rª  s     r|   Ú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 rw   )rf   Ú	fake_moder|  s    r|   rø  zGraphLowering.fake_modeÖ  s   € ä�{‰{Ð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©rJ  r—  )rD  r  r-  rf   r\  r,   ÚConstantBufferr>   r
   ÚdtyperŽ  )rt  Úbuffer_namer�  s      r|   Ú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›   )rt  Úsymbols     r|   Ú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›   ©rt  rþ  Úbufs      r|   Ú
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š   rT  r  rD  Ú	get_dtyper  ÚreÚmatchÚgroupr£  )rt  rþ  Úmutated_bufr‘   s       r|   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-  ÚnumelrD  Úhas_tensor_outputr   r  r£  r  s      r|   r   zGraphLowering.get_numel  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)rt  rz   ry  s     €r|   r  zGraphLowering.run  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¹   rG  )rt  r“   rJ  s      r|   Úregister_operationz GraphLowering.register_operation  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¹   rD  Ú
get_devicer�   r,   r‘  Úis_zero_elementsr‡   r
   rö  rJ  )rt  Úbufferr  rJ  r
   s        r|   Úregister_bufferzGraphLowering.register_buffer&  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œ   rA  )rt  Úoperation_namesrJ  s      r|   Úregister_operation_listz%GraphLowering.register_operation_list:  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 rw   )r�   rE  Útupler,   rF   Úget_read_namesrF  r¹   )ÚvalueÚxÚ	read_nameÚregisterrt  s      €€r|   r*  z1GraphLowering.register_users_of.<locals>.register@  sm   ø€ Ü˜%¤$¬ Ô/Øò  �AÙ˜Q•Kð ä˜%¤§¡Ô.Ø!&×!5Ñ!5Ó!7ò @�IØ×&Ñ& yÑ1×8Ñ8¸Õ?ñ@ð /r~   )r'  úIterable[ir.IRNode] | ir.IRNoderÊ   ÚNonerx   )rt  Únode_outputr*  s   ` @r|   Úregister_users_ofzGraphLowering.register_users_of?  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�   Ústrr7  r¸   rF  Úrealize)rt  rJ  rï  s      r|   Úmark_buffer_mutatedz!GraphLowering.mark_buffer_mutatedJ  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 )re  r-  rZ   rd  r«   )rt  rJ  Ú	orig_names      r|   Úget_original_value_of_constantz,GraphLowering.get_original_value_of_constantX  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*   ú r(  )r+   Úaot_inductorÚuse_runtime_constant_foldingr-  Úitemsr^   rö   Úisdigitrã  r`   r
   rý  r%  r€  r�  Úhashr3  re  )rt  rJ  r�  Úconstant_namer'  r4  ÚprefixÚcnts           r|   Úallocate_non_dup_const_namez)GraphLowering.allocate_non_dup_const_nameh  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                  |«      ¢­Ž ¬«      «      S rú  )	rB  rF   Úcreater,   rü  r>   r
   rý  rŽ  )rt  r�  rJ  Únew_names       r|   Úadd_tensor_constantz!GraphLowering.add_tensor_constant…  s`   € Ø×3Ñ3°D¸$Ó?ˆÜ×ÑÜ×ÑØÜ"Ø—K‘K §¡ðØ.2×.GÑ.GÈÓ.Mòôó
ð 	
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rw   ©r`   )r�   rþ  rJ  s     €r|   r’   z.GraphLowering.constant_name.<locals>.<genexpr>¦  s#   øè ø€ ò àð œ {Ó3Õ3ñùó   ƒc              3  ó:   •K  — | ]  }‰t        |«      k(  –— Œ y ­wrw   rI  )r�   Ú
param_namerJ  s     €r|   r’   z.GraphLowering.constant_name.<locals>.<genexpr>®  s#   øè ø€ ò àð œ zÓ2Õ2ñùrJ  )r-  r
   r‡   ÚutilsÚ_python_dispatchÚ_disable_current_modesrB  r·  rõ  ÚtorÔ   r.  r/  )rt  rJ  Údevice_overrideÚnon_dup_const_names    `  r|   r?  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                  «      �rt3        t        j                  j4                  j6                  «      dk(  rˆt9        t;        t        j                  j4                  j6                  «      «      j<                  t.        j>                  j@                  jB                  t.        jD                  jF                  jH                  fv sJ ‚tK        jL                  ||jN                  ¬«      }|| j                  |<   | j                  j                  |«       |S tQ        tS        |«      «      rCtK        jT                  ||¬«      }|| j                  |<   | j                  j                  |«       |S t	        |t.        jV                  «      sJ |«       ‚|jX                  s| j[                  |«      \  }	}
n| j]                  |«      \  }	}
| j                  re| j^                  rY| j                   | j^                  v rAta        jb                  te        |tg        |jN                  |jh                  |	|
«      ¬«      «      }n@ta        jb                  tk        |tg        |jN                  |jh                  |	|
«      ¬«      «      }|| j                  |<   | j                  j                  |«       |jl                  jl                  | jn                  |<   | j4                  j6                  r| jq                  |jN                  «       ts        «       5  tu        |«      s| jv                  jy                  |«       d d d «       |S # 1 sw Y   |S xY w)Nr*   ©rJ  r'  )rJ  r
   rû  )=rq  r  Úplaceholderrã  r�   r$   rf   r\  r  r   r²   r†  r  r  r¹   ÚintrÉ  rÒ  r‚   Úsympifyr   rG   r   r‡   Ú	Generatorrö   r@  rë  rQ  ÚiterrŸ   Ú_primsÚ	rng_primsÚgraphsafe_run_with_rng_stateró   Úhigher_orderÚinvoke_subgraphr,   ÚGeneratorStater
   r   r·  ÚOpaqueObjectStater   Ú_has_symbolic_sizes_stridesrŽ  rŒ  rr  rF   rD  r=   r>   rý  rA   r�  r   rö  r_   ra   rh  r¸   )rt  rŸ   rz   r{   Úexampler†  rž   ÚgenÚ
opaque_objÚsizesÚstridesÚtensorry  s               €r|   rU  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Ü”q—w‘w×+Ñ+×1Ñ1Ó2°aÒ7¼DÜ”Q—W‘W×)Ñ)×/Ñ/Ó0ó=ç‰fÜ—‘×&Ñ&×CÑCÜ—	‘	×&Ñ&×6Ñ6ðñ=ð ð ô ×#Ñ#¨¸¿¹Ô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à!×8Ñ8¸ÓA‰NˆE�7ð ×ÒØ×$Ò$Ø×$Ñ$¨×(<Ñ(<Ñ<ä×%Ñ%ÜØÜ& w§~¡~°w·}±}ÀeÈWÓUôó‰Fô ×%Ñ%ÜØÜ& w§~¡~°w·}±}ÀeÈWÓUôóˆFð %+ˆ×Ñ˜&Ñ!Ø×Ñ×%Ñ% fÔ-Ø-3¯[©[×-=Ñ-=ˆ×"Ñ" 6Ñ*Ø×Ñ×"Ò"Ø× Ñ  §¡Ô0ô 1Ó2ñ 	3Ü.¨wÔ7Ø×&Ñ&×*Ñ*¨6Ô2÷	3ð ˆ÷	3ð ˆús   Ò2'S#Ó#S-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�rct        ‰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|j5                  ‰||«      «       t7        ‰d¬	«      }|€<t        j8                  j:                  j=                  ‰«      r| j>                  rt@        }nt7        ‰d¬	«      }tC        |«      }t#        ‰|| j$                  ¬
«       n&t+        ‰g«      rt-        ‰||«      ‚t/        ‰||«      ‚	 t0        jE                  dt        ‰   «       | jF                  }	tI        ‰«      }
|
r�||}}|
tJ        u r‚d|	jL                  v rƒ|	jL                  d   \  }}t        ‰t        j                  j                  «      sJ ‚dˆfd„} |||«      \  }} |||«      \  }} |||«      \  }}tK        ||||«      \  }}n |
|	g|¢­i |¤Ž\  }}d|	jL                  v r tO        ‰d¬«      |i |¤Ž}n•d }‰tP        v r_‰tR        jT                  vrMtR        jT                  jW                  ‰«       	 tQ        ‰   |i |¤Ž}tR        jT                  jY                  ‰«       |€*‰t        v rt        ‰   |i |¤Ž}n tO        ‰d¬«      |i |¤Ž}|
r| j[                  |	||«       |S # tR        jT                  jY                  ‰«       w xY w# t\        $ r›}d }t        | d«      r^| jF                  �Rt        | jF                  d«      r<| jF                  jL                  �&| jF                  jL                  j_                  dd «      }ta        |‰|||¬«      jc                  |jd                  «      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)rz   r{   r»   rŸ   s      €r|   Ú	normalizez.GraphLowering.call_function.<locals>.normalize„  sE   ø€ Ü%*§X¡X×%>Ñ%>×%QÑ%QØ &¨¨fó&˜Fð $*Ð#5Ð5Ð#5Ø#)¨!¡9¨f°Q©iÐ#7Ð7r~   Úshould_fallback©Úadd_to_fallback_setr@  r«   Ústack_trace)rv  )rz   r   r{   r   rÊ   ztuple[Any, Any])3ÚoperatorÚgetitemr�   rE  r%  Údictr  rÃ   r‡   rÅ   ÚOpOverloadPacketrš   rM   rÆ   rJ  r˜   rJ   rN   r
  r+   Úimplicit_fallbacksr   r8   r9   rÐ  rò  Úoperator_strr   Ú_libraryrM  Ú
is_builtinr  rQ   rR   rÑ  r@  rO   rH   r«   rK   rT   rf   Úactive_user_lowering_opsr¸   ÚdiscardÚpropagate_mutationÚ	Exceptionrä   r7   Úwith_tracebackÚ__traceback__)rt  rŸ   rz   r{   Ú	base_nameÚerrorÚtagÚdecided_constraintÚdefault_tagr¹  Úlayout_constraintsÚold_argsÚ
old_kwargsÚ	fake_argsÚfake_kwargsrr  ÚoutÚerv  ry  s    `                 €r|   rÃ   zGraphLowering.call_function&  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Ø×&Ñ& v¨t°VÓ<ôô
 ,EØ¨ô,�ð �KÜŸ™×,Ñ,×7Ñ7¸Ô?Ø×(Ò(ô +ñ 'ô 1JØ¨Tô1�Kô *BÀ+Ó)NÐ&äØØ&8Ø"&×"4Ñ"4öô $ V HÔ-ô 0°¸¸fÓEÐEä2°6¸4ÀÓHÐHðS	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Ñ*ØIÔ& 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   Ç)D0N0 ÌN Ì(A#N0 Î!N-Î-N0 Î0	QÎ9BQÑQ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ö   Úshape)Úts    r|   Úcan_inline_constantz!GraphLowering.can_inline_constantÆ  s(   € ô
 �1—7‘7‹|˜qÑ Ò4 Q§W¡W¨Q¡Z°1¡_Ð4r~   c                ó.  — 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?                  |«      rRt@        jC                  d|«       ddl"m#}  ||jI                  «       |j:                  |j<                  ¬	«      cd d d «       S 	 d d d «       | j1                  ||«      S # 1 sw Y   ŒxY w)
N)rJ  Úgraph_moduler  rT  rx   )r'  rý  r
   zInlining constant: %s r*   )rg  )rý  r
   )%r¤   rd  r�   r‡   r¬   rm   r2  r,   ÚSubgraphrá   ÚScriptObjectr0  r3  rG   r   r   r·  r   r+   r:  r;  Úalways_keep_tensor_constantsrS   r  rF  r'   r“  r<   Úitemrý  r
   r•  rÐ  rÑ  Úloweringrg  Útolist)rt  rŸ   rz   r{   r'  r�  rg  s          r|   Ú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Ó:Ð:ä‹]ñ 
	VØ�{‰{˜bÒ ÜØŸ*™*›,¨e¯k©kÀ%Ç,Á,ô÷
	Vñ 
	Vð
 ×'Ñ'¨Ô.Ü—	‘	Ð2°FÔ;å,á˜eŸl™l›n°E·K±KÈÏÉÔU÷
	Vñ 
	Vð
 /÷
	Vð ×'Ñ'¨¨vÓ6Ð6÷
	Vð 
	Vús   Ç?JÈAJÊJc                ó   — t         ‚rw   ©ÚAssertionError©rt  rŸ   rz   r{   s       r|   Úcall_modulezGraphLowering.call_module  ó   € ÜÐr~   c                ó   — t         ‚rw   r   r¢  s       r|   Úcall_methodzGraphLowering.call_method  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©r'  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rw   )r�   rF   r,   r<   r·  rü  r‚   r	   ÚlogicÚboolalgÚBooleanrV  ÚEffectfulKernelrD   rG   ÚOpaqueMultiOutputÚOpaqueValueTypeConstantr`  )r�   r(  s     r|   r’   z'GraphLowering.output.<locals>.<genexpr>  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�   r%  rE  r·  r   r,   r¯  rÏ  rf   r\  r@  rz   ÚExternKernelÚrealize_inputrö   ÚziprF   ÚBaseViewr¹   Úget_output_specÚCommBufferLayoutÚ
copy_inputr‡   Ú	_inductorÚis_storage_and_layoutr«   r�  r…  r²   r†  Útry_match_insignificant_stridesrÿ   r  r<  rG   r‚   ÚBasicr_  r`  r1  r�  rE   rA   Úget_nameÚMutationLayoutSHOULDREMOVEÚrealize_intor   rõ  Ú
ValueErrorÚfinalizerÐ  rÑ  r  rP  )rt  rŸ   rz   r{   r»   r(  Úfx_node_argsÚresult_correct_stridesÚrÚfx_nodeÚsÚmeta_stridesrJ  r'  Úvalue_storage_boxÚindry  s                   €r|   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 rw   )r)  Údecide_layout)rt  r  s     r|   r¿  zGraphLowering.finalizew  s!   € Ø—<‘<ò 	 ˆCØ×ÑÕñ	 r~   c              #  ób   K  — | j                   }	 || _         d –— || _         y # || _         w xY w­wrw   )r@  )rt  r²   Úolds      r|   Úset_current_nodezGraphLowering.set_current_node{  s1   è ø€ à×Ñˆð	$Ø $ˆDÔÛà #ˆDÕø ˆDÕüs   ‚/�# ›/£	,¬/c              #  óT   K  — | j                   }	 d –— || _         y # || _         w xY w­wrw   ©r<  )rt  rË  s     r|   Ú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.
        r{   Ú
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 rw   )Ú
alias_infoÚis_writer�   r,   ÚIRNoder²  rÃ   r‡   ró   rÌ   Úcopy_rø   )Ú
schema_argÚold_argÚnew_argÚold_arg_itemÚnew_arg_itemrt  s        €r|   Ú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ó   r]  Útriton_kernel_wrapper_mutationr{   r�   ry  rÞ   rß   Úget_mutated_tensorsr<  r¬   r%   r«   rÃ   rÌ   rØ  rø   rÅ   rÆ   Ú_schemar™   r²  Ú	argumentsrJ  )rt  rÃ  r‹  rŒ  Únew_argsÚ
new_kwargsr{   rw  rx  ÚmutatedrJ  rÚ  rÛ  rÞ  Úschemar±   rÙ  ÚargÚschema_kwargsÚkeys   `                   r|   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.ÚcustomÚstream)r«   rä   rÁ  s    r|   Ú_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,   rF   r1  )rt  r¹  Únode_streamÚ
input_nodeÚinput_streamÚir_values         r|   Ú$_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  ‰j                  dk(  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 ¤Ž}	�nB‰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                  ‰|
|||«       nÊtS        dtB        jD                  › �«      ‚tU        ‰j"                  «      r‚ |d«       t%        ‰jF                  d   t&        jV                  t&        jX                  t&        jZ                  f«      r$‰jF                  d   j\                  j^                  }	n't`        ‰(‰ �Å  ‰«      }	n |d«       t`        ‰(‰ �Å  ‰«      }	t&        j<                  jd                  jf                  jh                  t&        j<                  jd                  jj                  jh                  t&        j<                  jd                  jl                  jh                  t&        j<                  jd                  jn                  jh                  t&        j<                  jd                  jp                  jh                  gŠ#ts        d„ ‰jt                  D «       «      }‰‰ jv                  v Š&ts        ˆ#fd„‰jt                  D «       «      Š%‰jF                  jI                  dd
«      r­t%        |	tx        «      r�|	j{                  «        ‰jF                  d   j}                  «       }t'        j~                  j.                  j€                  |Ž }|	jƒ                  «       |k7  r7|s5t        j„                  |«      }t        j†                  j‰                  |	|«      }	|rDt%        |	tx        «      r4t%        |	jŠ                  t        jŒ                  «      r|	j{                  «        |s‰%�rt%        ‰jF                  jI                  d«      t&        jŽ                  «      �rê‰&r‰ jv                  jI                  ‰«      }n‰jF                  d   j}                  «       }|��¬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        j†                  j‰                  |	t        j„                  |«      |¬«      }	nNt        |	j™                  «       «      dk(  rt        |«      dkD  rg }t        j†                  j¥                  |	||¬«      }	t        t        ‰jt                  «      «      }|dkD  �r)t%        |	tx        «      �r‰jt                  D �]  }|j"                  t¦        v �rn|	j©                  «        t&        j<                  jd                  jª                  jh                  t&        j<                  jd                  j¬                  jh                  t&        j<                  jd                  j®                  jh                  g}g }‰ j°                  s=|j³                  t&        j<                  jd                  j´                  jh                  «       t&        j¶                  j¸                  �rŸ|t&        j<                  jº                  j¼                  jh                  t&        j<                  jº                  j¼                  j¾                  t&        j<                  jd                  jÀ                  jh                  t&        j<                  jÂ                  jÄ                  jh                  t&        j<                  jÂ                  jÄ                  jÆ                  t&        j<                  jÂ                  jÄ                  j¾                  t&        j<                  jÂ                  jÄ                  jÈ                  gz  }|t&        j<                  jº                  jÊ                  jh                  t&        j<                  jº                  jÊ                  j¾                  t&        j<                  jº                  jÌ                  j¾                  t&        j<                  jº                  jÎ                  jh                  t&        j<                  jÂ                  jÐ                  jh                  t&        j<                  jÂ                  jÒ                  j¾                  gz  }t&        j¶                  jÔ                  r2|t&        j<                  jÖ                  jØ                  jh                  gz  }|j"                  |v rPt        j†                  j‰                  |	t        j„                  ‰jF                  d   j}                  «       «      d¬«      }	|j"                  |v rd‰|jÚ                  d   u rSt        j†                  j‰                  |	t        j„                  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�Œ|	j{                  «        �Œ |	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        ‰jt                  «      «      r	 ||	‰«      }	|	jñ                  t        ‰jt                  «      «       t%        |	tx        «      r)|	jó                  «       r ||	‰«      }	|	j©                  «        t%        |	tx        «      rbt%        |	jŠ                  tê        «      rH|	jŠ                  jŠ                  }t%        |tà        «      r"|jé                  d¬«      r|	j{                  «        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    €r|   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’  rZ  r,   r°  Úrequire_stride_orderÚget_stride_orderr   r“  )r»   r¹  Údenserf  Úunbacked_symbols_in_stridesÚis_input_for_as_stridedÚis_user_visiblert  s        €€€r|   Ú&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Ã   ÚinductorrM   c                 ó   •— t        ‰ «      S rw   )ÚreprrÁ  s   €r|   ú<lambda>z(GraphLowering.run_node.<locals>.<lambda>*  s   ø€ ¼¸a»€ r~   rK   Frt  Úflexible_layoutÚ-user_defined_triton_kernel_layout_constraintsÚneeds_fixed_stride_orderrn  r*   z1Unknown triton_kernel_default_layout_constraint: r•   r¶  r  c              3  ó:   K  — | ]  }|j                   d k(  –— Œ y­w)r¦   Nr§   )r�   rï  s     r|   r’   z)GraphLowering.run_node.<locals>.<genexpr>~  s   è ø€ ÒD°D˜DŸG™G xÕ/ÑDùs   ‚c              3  ó:   •K  — | ]  }|j                   ‰v –— Œ y ­wrw   )rŸ   )r�   rï  Úas_strided_opss     €r|   r’   z)GraphLowering.run_node.<locals>.<genexpr>€  s   øè ø€ ò *Ø26�—‘˜~Ô-ñ*ùrJ  Úinductor_realize_to_stridesNrû  )Úallow_paddingTr¦   éd   )Ú	thresholdrU  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     r|   r’   zBGraphLowering.run_node.<locals>.format_new_defs.<locals>.<genexpr>O  s2   è ø€ ò àð (¨×(CÑ(CÓ(EÐ'FÀfÈRÈDÐPRÔSñùs   ‚!#z***
)r)  r  Úextendr*  rœ   )r  rÂ  Úbuffer_watermarkÚoperation_watermarkrt  s     €€€r|   Úformat_new_defsz/GraphLowering.run_node.<locals>.format_new_defsJ  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rw   )rf   rø  rv  Úunbacked_renamingsrä   )r�   rÄ  s     r|   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ù  r0  rÊ   r,  )r»   rß  r¹  rÉ   rÊ   rß  ©rÊ   r0  )ˆÚ!torch._inductor.compiler_bisectorr  rö   r)  r*  r(   r“   Úfetch_args_kwargs_from_envrY   rõ  r,   r×  Úcurrent_originsÚcurrent_stream_idxrî  rÌ  rf   rŸ   r�   r‡   rÅ   rÆ   r}  rM  r~  rL   Údisable_subsystemrK   ÚHigherOrderOperatorrb   ró   r]  rà  r+   Ú'triton_kernel_default_layout_constraintr«   rä   rH   rI   rÃ   r�  r›   r•   r…  ÚSymFloatÚSymBoolr²   r†  r  Úrun_noderÌ   Ú
as_stridedrø   Úas_strided_Úas_strided_scatterÚresizeÚ	resize_asrÔ   rë  rç   rF   r1  r�  r·  Úany_is_symbolicÚmaybe_get_striderÿ  r°  rþ  r�  r³  r   ræ   rü  rý  r   r’  rZ  ÚFlexibleLayoutÚ stride_ordered_for_memory_formatÚchannels_lastÚ_is_viewÚrequire_exact_stridesrP   Úrealize_hintrÎ   ÚmmÚ_int_mmr  r¹   rÍ   rá   Ú_has_mkldnnrð   Ú_linear_pointwiserù   Úmkldnn_rnn_layerÚonednnÚqlinear_pointwiserg  Úbinary_tensorrñ   rú   Ú _convolution_transpose_pointwiseÚqconv_pointwiseÚqconv2d_pointwiseÚhas_mklÚmklÚ_mkl_linearrz   r   r“  rB   rC   Údelay_realize_cheap_outputsÚ	num_readsÚhas_large_inner_fnrE   Ú
MutableBoxÚshould_realize_on_reuseÚ
mark_reuseÚhas_exceeded_max_readsr;   r.  r‚   rƒ   r  r\  r  rv  Úis_unbacked_symintr¸   r  r    rø  Úcreate_deferred_runtime_asserts))rt  r¹  rÑ  r  r  ÚoriginsÚis_call_functionrz   r{   r»   r‹  rŒ  rn  Úinp_argsÚ
inp_kwargsÚ	is_outputrf  Úsym_stridesÚstride_orderr  r   r  Ú	num_usersrï  Úneed_fixed_layoutÚneed_fixed_channels_last_layoutÚ_dataÚcurrÚnew_unbacked_defsr  r“   rv  r  r  Úrenamed_unbacked_bindingsr  r  r  r  r  ry  s)   ``                                 @@@@@€r|   r,  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Ó.ñY	)ä�I‰I×(Ñ(¨×)>Ñ)>¸qÓ)AÓBñY	)ð ×!Ñ! !Ó$ñY	)ô ×Ñ˜qÓ!ñ	Y	)ð —‘˜Ò'à—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{Ð|óð ô ! §¡Ô*ñ Ð'Ô(ÜØ—F‘F˜5‘M¤E§L¡L´%·.±.Ä%Ç-Á-Ð#Pôð ŸV™V E™]×/Ñ/×4Ñ4‘Fä"™WÑ-¨aÓ0‘Fá�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Ô.à×.Ñ.¸Ð.Ô=ØŸ™Ô(÷sY	)÷ Y	)÷ Y	)÷ Y	)ôv 	˜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Øˆ÷aY	)ñ Y	)ú÷ Y	)ñ Y	)ú÷ Y	)ñ Y	)ú÷ Y	)ñ Y	)ús�   Â=/AFÃ,AE9Ã>AE,Äp9AE	õ*AE	õ;C(AE	ù$DAE	ý0AE,ý8AE9þ AFÁEAE)ÁE$AE,ÁE,AE6ÁE1AE9ÁE9AF	ÁE>AFÁFAF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_oprt  s      €r|   Ú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)   rV  Ú	TypeError)rÄ  s    r|   Úis_convertiblezEGraphLowering.create_deferred_runtime_asserts.<locals>.is_convertibleÍ  s5   € Ø¤¬&¨Ð 1Ñ1Ø#(ð)Ü œFØ#'øÜ(ò )Ù#(ð)ús   ’ ž	*©*r!  z <= )rê  )r†  r#   rù  r0  rÊ   r,  )rÄ  r	   rÊ   rÉ  )r+   Údo_not_emit_runtime_assertionsr   rŸ   r‡   ró   rÌ   Ú_assert_scalarrø   rO  r$  r  rf   r\  r  rv  r  r¶   Úvar_to_rangeÚ _default_unspecified_value_rangeÚissubsetÚlowerÚupperr   r†  r×   r0  r·   r¹   )rt  r¹  r]  rc  Ú	node_argsr‰  rv  Úi0ÚrasÚvrrf  ÚraÚfvsÚmissingÚi1s   `              r|   rP  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_codegenr6   ÚsysÚplatformr|  s    r|   Ú!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%  rK  r}  r2   r;  r3   rL  rD  r<  r  Ú_names_iter)rt  Úis_subgraphrç  Úparent_wrapper_codeÚpartition_signaturesr#  Úonly_cpuÚwrapper_code_gen_clss           r|   Ú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Ã   Úgridr{   rÑ  rÒ  r¶  rÓ  )rz   r¦   FT)"r  Údeepcopyrc  r\  rÝ   r“   rŸ   r‡   ró   r]  rà  r¹   r{   r�   r¬   r%   rö   rÞ   rß   rá  r<  r«   Úinserting_beforerÃ   ÚclonerJ  r%  rz   Ú	recompileÚInterpreterr  rW  rU  rV  )rt  r  r  Ú	cloned_gmÚtriton_nodesr²   Úgrid_inputsÚvisited_gridsÚtriton_inputsÚkwargs_inputsÚvisited_kwargsr‰  r¶  r{   rw  rx  ræ  rå  Únew_nodeÚnew_outputsÚrunnerÚreturned_outputsÚgrid_outputsÚdynamic_gridÚ	new_gridsÚnew_grids                             r|   Úextract_autotune_inputsz%GraphLowering.extract_autotune_inputs	  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                ó¸  ‡ — t        ˆ fd„dD «       «      �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+                  «        ‰ j.                  j+                  «        t0        j2                  j4                  j6                  j+                  «        t0        j2                  j4                  j8                  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)	zQ
        For GPU, Triton kernels are autotuned and stored as cubin files
        c              3  ó:   •K  — | ]  }|‰j                   v –— Œ y ­wrw   )r#  )r�   r
   rt  s     €r|   r’   z9GraphLowering.codegen_with_cpp_wrapper.<locals>.<genexpr>u	  s   øè ø€ ÒI¨vˆv˜×*Ñ*Ô*ÑIùrJ  )ÚcudaÚxpuc                 óŽ  •— 	 	 	 	 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…  r*  r²   Úhintr   r   r   r0  r·  )r(  s    r|   ÚmaterializezXGraphLowering.codegen_with_cpp_wrapper.<locals>.extract_real_inputs.<locals>.materializex	  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)r(  z,torch.SymInt | torch.SymFloat | torch.TensorrÊ   zint | float | torch.Tensor)r‡   Ú_guardsÚTracingContextÚtry_getr�   rf   Úreal_inputsre   Úoutput_stridesÚclearÚparams_flatrn  Úchainr  rB  Ú
compile_fxr§  r™   r  r   )r¦  Útracing_contextÚparamr®  r(  r«  r§  r±   rJ  rC  Úmutated_inprt  s              €r|   Úextract_real_inputszCGraphLowering.codegen_with_cpp_wrapper.<locals>.extract_real_inputsw	  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+   ÚtritonÚautotune_at_compile_timeÚautotune_with_sample_inputsr*  r�   r,   ÚUserDefinedTritonKernelrž  rt   ÚcodegenrO  rK  Úcompile_to_moduleÚcallr‡   rM  rN  rO  r5  r­  r4  r:  rf   r\  r  Úprecomputed_replacementsÚinv_precomputed_replacementsr-   ÚresetÚpatch)rt  r´  Úuser_defined_kernelsr“   r«  Úcompileds   `     r|   Úcodegen_with_cpp_wrapperz&GraphLowering.codegen_with_cpp_wrappero	  sÎ  ø€ ô ÓI¸ÔIÕIõ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   Ä#	IÈIÉIÉI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)rT  rÅ  r+   rÀ  r*  )rt  rÅ  s     r|   Ú_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Æ  rf   rÑ  Údraw_orig_fx_graphrc  rT  rÝ   r<  Úpush_codegened_graphrº  rÐ  r\  rm  Úgenerater  Úpop_codegened_graph)rt  r»   s     r|   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;  rK  r#  r$  r%  rÆ  rT  rº  )rt  Úparent_graphs     r|   Ú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û  )rT  rÝ   Úget_read_write_buffers_sizesr¹   Úget_estimated_runtime)rt  Útotal_bytesÚnode_countsÚnode_runtimesr²   Ú	num_bytess         r|   r¥  zGraphLowering.count_bytes
  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    r|   r»  zGraphLowering.compile_to_module.
  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)rK  rÃ  rº  r�   rd   Ú_compile_to_module_linesr0   ÚNotImplementedErrorr·  Ú__file__ru   rÐ  rÑ  rr   rò  r+   Úbenchmark_kernelÚprintr{  Ústderrrf   Úoutput_coder  ÚosÚpathÚsplitext)rt  r<  r‰  Úmods       r|   rÞ  z GraphLowering._compile_to_module7
  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   €r|   r	  z8GraphLowering._compile_to_module_lines.<locals>.<lambda>ƒ
  s   ø€ Ø $Ü!#§¡§¡°Ó!6ñ€ r~   c                 ó   •— ‰ j                   S rw   r¨  rÎ  s   €r|   r	  z8GraphLowering._compile_to_module_lines.<locals>.<lambda>‡
  ó   ø€  <×#5Ñ#5€ r~   )Ú
payload_fnc                 ó   •— ‰ j                   S rw   r¨  rÎ  s   €r|   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_callsr'  rý   rØ  rr   rÑ  rU   Úinductor_meta_from_configrV   Úbegin_compileÚline_maprv  Úwriterf   ré  r  rê  rë  rì  r   r‚  r   Úload_by_key_pathr-  r0  r1  r]  r^  r_  Úbenchmark_harnessÚprofile_bandwidth_outputÚget_argsÚbenchmark_compiled_module)rt  r<  rï  rÿ  Útuning_codeÚinductor_metaÚline_nor²   rú  rê  rí  rz   rë  s    `          @r|   rã  z&GraphLowering._compile_to_module_linesV
  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)
rn  ro  r�   r,   ÚNoneAsConstantBufferr¹   rJ  rQ  rD   r»  )rt  rÿ   ÚnamesÚshape_counterÚnone_counterr²   s         r|   Ú_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 rw   )r  rÿ   r|  s    r|   Ú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     r|   Ú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)(ru  útorch.fx.GraphModuler  zSequence[object] | Nonerv  zShapeEnv | NonerP  ú
int | NonerK  rÉ  rO  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 | NonerJ  r  r  zSequence[int] | NonerL  rÉ  r
  z3Callable[..., dict[Any, Callable[..., Any]]] | NonerÊ   r,  )rÊ   r,  )r‡  útorch.TensorrÊ   z1tuple[Sequence[int | Expr], Sequence[int | 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¤  rp   r¥  rÉ  rÊ   rV  )rÊ   útorch.device)r
   r  rÊ   úIterator[None]r"  )ru  rm   r  rÉ  rÊ   rÉ  )rJ  r0  rÊ   r0  )ru  r  r  zlist[torch.Tensor]rç  r0  rÊ   ræ  )rÊ   zOrderedSet[Node])rJ  r0  rÊ   r,  )r
   r  rÊ   r,  )rÊ   z,torch._subclasses.fake_tensor.FakeTensorMode)rþ  r0  rÊ   z4ir.TensorBox | ir.Buffer | ir.TorchBindObject | None)r  ú
sympy.ExprrÊ   r,  )rþ  r0  rÊ   z-ir.TensorBox | ir.Buffer | ir.TorchBindObject)rþ  r0  rÊ   ztorch.dtype)rþ  r0  rÊ   z
int | Expr)rz   r   rÊ   r   )r“   zir.OperationrÊ   r0  )r  z	ir.Bufferr  rÉ  rÊ   r0  )r!  ú	list[str]rÊ   r0  )r-  r+  rÊ   r,  )rJ  r0  rÊ   r  )rJ  r  r�  r   rÊ   r0  rw   )r�  r   rJ  r  rÊ   rF   )rJ  r0  rQ  ztorch.device | NonerÊ   r0  )rŸ   r0  rz   ztuple[object]r{   údict[str, object]rÊ   zExpr | TensorBox | None)rŸ   rg   rz   r   r{   údict[str, Any]rÊ   r   )r”  r  rÊ   rÉ  )rŸ   r0  rz   z	tuple[()]r{   r#  rÊ   zLConstant | TensorBox | ShapeAsConstantBuffer | ir.Subgraph | TorchBindObject)rŸ   r   rz   r   r{   r   rÊ   r   )rŸ   ztorch.fx.node.Targetrz   z"tuple[torch.fx.node.Argument, ...]r{   r#  rÊ   r,  )r²   rÉ   )rÊ   r   )rÃ  rÉ   r‹  ú
tuple[Any]rŒ  r$  rä  r%  rå  r$  rÊ   r,  )r¹  rÉ   rÊ   r  )r¹  rÉ   rÊ   r,  )r¹  rÉ   rÊ   Úobject)r¹  rÉ   r]  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<  rd   rÊ   r)  )rÿ   rþ   rÊ   r"  )rÊ   r"  )rJ  r0  rÊ   rÉ  )JÚ__name__Ú
__module__Ú__qualname__Ú__annotations__r	  r{  rŒ  rŽ  r“  r˜  r›  r¨  r«  Ú
contextlibr   r­  r²  Ústaticmethodr  rã  rè  rY  ró  rö  Úpropertyrø  rÿ  r  r  r
  r   r  r  r  r"  r.  r2  r5  rB  rF  r?  rU  Útyping_extensionsÚoverriderÃ   r•  rž  r£  r¦  r¦   r¿  rÌ  rÏ  r�  rî  rõ  r,  rP  r}  r‡  rž  rÃ  rÆ  rº  rÐ  r¥  rØ  r»  rÞ  rã  r  r  r  Ú__classcell__©ry  s   @r|   rý   rý   d  s8  ø… Ø"Ó"ð
 37Ø%)Ø#Ø!ØØ"&àØ"Ø!Ø$Ø48Ø)-Ø(,Ø-1ØØ04Ø ØMQð+TCà ðTCð 0ðTCð #ð	TCð
 ðTCð ðTCð ðTCð  ðTCð!ðTCð ðTCð ðTCð ðTCð 2ðTCð 'ðTCð  &ð!TCð" +ð#TCð$ ð%TCð& .ð'TCð( ð)TCð* Kð+TCð, 
õ-TCól1ð# Øð# à	:ó# ðJØðà	2óð#ðð#ð 
ó#ð*EØAðEà	óEðMà9ðMð  ðMð 
ó	Mô<ó:4ð ×Ñò(ó ð(óð ò^ó ð^ó@ð
à ð
ð +ð
ð ð	
ð
 
ó
ó6>ó@Aó
Dð òó ððØðà	=óó$FðQØðQà	6óQó8ó,
8õ&óð FKõ ó(ó
	óó
ó ô:	
ó&&ðRkàðkð ðkð "ð	kð
 
!õkðZ ×Ñô]8ó  ð]8ð~ ò5ó ð5ð47àð47ð ð47ð "ð	47ð
 
Vó47ólóð ×Ñðj
à$ðj
ð 1ðj
ð "ð	j
ð
 
ôj
ó  ðj
óX ð ò$ó ð$ð ò$ó ð$ðI:àðI:ð ðI:ð #ð	I:ð
 ðI:ð #ðI:ð 
óI:ðV ò6ó ð6ó#õ$]ð~U;ØðU;Ø3KðU;à	óU;ónQð "Ø$(Ø;?Ø?Cð#Wàð#Wð "ð#Wð 9ð	#Wð
 =ð#Wð 
ó#WðJ]0Ø>ð]0à	ó]0ð~w"à	2ów"ór	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 rw   )rå  r  r	  )rt  rå  rz   r{   ry  s       €r|   r	  zSubgraphLowering.__init__À
  s   ø€ ØˆŒÜ‰Ñ˜$Ð) &Ó)r~   c                óf   •— t         ‰| �  d| j                  | j                  j                  ¬«       y )NT)r‚  rç  rƒ  )r  r‡  rJ  rå  r<  )rt  r‚  rç  rƒ  r„  ry  s        €r|   r‡  z"SubgraphLowering.init_wrapper_codeÄ
  s.   ø€ ô 	‰Ñ!ØØŸ)™)Ø $§¡× 8Ñ 8ð 	"õ 	
r~   )rå  rý   rz   r   r{   r   rÊ   r,  r'  r(  )r*  r+  r,  Ú__doc__r	  r‡  r3  r4  s   @r|   ræ  ræ  º
  sU   ø„ ñõ
*ð "Ø$(Ø;?Ø?Cð
àð
ð "ð
ð 9ð	
ð
 =ð
ð 
÷
ñ 
r~   ræ  )rz   r   r{   r   rÊ   r,  )rŒ   r!  rÊ   ztorch.dtype | None)r“   r   rÊ   rÉ  )rž   rm   rŸ   r0  rÊ   z,Tensor | torch._C.ScriptObject | GraphModule)r­   rn   rÊ   údict[Node, tuple[int, ...]])rº   r9  rÊ   zdict[Node, object])r­   rn   rç   r9  rÊ   r,  )r²   r%   rÊ   rÉ  )½Ú
__future__r   r.  rô   rn  Úloggingrw  rê  r  r{  rH  r1  Ú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.sym_noder   r   Ú%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/   r0   r1   r2   r3   r4   r5   Úexcr6   r7   r8   r9   Úfx_utilsr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rœ  rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   ÚruntimerU   Úruntime.autotune_cacherV   r  rW   rM  rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   Úvirtualizedre   rf   Úcollections.abcrg   rh   ri   rj   Útypesrk   Útorch._higher_order_ops.effectsrl   rm   Útorch.fx.graphrn   Úcodegen.wrapperro   Údependenciesrp   rT  rq   r)  Útorch._inductor.codecacherr   Ú	getLoggerr*  rÐ  Ú_loggingÚgetArtifactLoggerrñ  ró   rÌ   ro  rR  r>  Ú)torch._inductor.fb.triton_kernel_metadatart   Útorch._inductor.fb.utilsru   r�   r•   r¤   r³   rÀ   rî   rû   r¬   rŽ  rý   ræ  rx   r~   r|   ú<module>rb     s&  ðÝ "ã Û Û Û Û Û 	Û 	Û 
Û Û Ý #Ý %ß /Ñ /ã Ý ã Û Û ß  Ý ,ß 4Ý ?÷ñ õ
 ;ß 7÷õ 5Ý :Ý ?ß L÷	÷ 	ó 	õ Ý 1Ý /Ý /Ý -ç !Ñ !÷	÷ 	ó 	÷ó õ %÷÷ ÷ õ ÷÷ ÷ õ õ $Ý 8Ý &÷÷ ÷ õ ÷ (ñ ßFÓFÝ å;Ý$Ý$å5Ý!Ý,àÐ"7Ñ7€Nå 5ð €g×Ò˜Ó!€Ø—’×0Ò0°¸<ÓH€à‡y‚y‡~‚~€à*˜9Ÿ?š?Ó,Ð à€6×ÒÔõö 9óóóó(ð
Ø	ðØ!ðà1óóð$Ø5ðàóð0V/ØðV/Ø+FðV/à	óV/órô*S%3�E—H’H×(Ò(ô S%3ôlJ
�}õ 
r~   