Ë
    g^(hÿn ã                  ó¨  — 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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% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? ddl@mAZAmBZBmCZC ddlDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZNmOZOmPZP ddlBmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[ ddl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZg ddlhmiZi ddljmkZk ddllmmZm ddlnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZx ddlymzZzm{Z{ er.d d l|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�j                  eŽ«      Z�e�j                   �j#                  eŽd(«      Z’e�j&                  �j(                  Z” e�j*                  «       Z– eA�j.                  «       rd d)l˜m™Z™ nd4d*„Z™d5d+„Zšd6d,„Z›	 	 	 	 	 	 d7d-„Zœd8d.„Z�	 	 	 	 	 	 d9d/„Zž G d0„ d1e�j>                  �j@                  «      Z¡ G d2„ d3e¡«      Z¢y):é    )ÚannotationsN)Údefaultdict)Úcontextmanager)ÚAnyÚCallableÚNoReturnÚOptionalÚTYPE_CHECKINGÚUnion)ÚExpr)ÚdeviceÚTensor)Úget_decompositions)ÚdefakeÚdynamo_timed)ÚFakeScriptObject)Ú
LazyStringÚtrace_structured)Úcompute_required_storage_lengthÚmake_channels_last_strides_for)Ú
FakeTensor)ÚBackwardState)Úmagic_methodsÚmethod_to_operator)Úfree_unbacked_symbolsÚhas_free_symbolsÚresolve_unbacked_bindingsÚRuntimeAssertÚShapeEnvÚSympyBooleanÚSymTypes)ÚNode)Úno_dispatch)Ú
OrderedSet)Úint_ooé   )ÚconfigÚirÚmetrics)ÚBackendFeatureÚDeviceOpOverridesÚget_backend_featuresÚget_device_op_overridesÚget_wrapper_codegen_for_deviceÚinit_backend_registrationÚWorkspaceArg)ÚCppWrapperCodegenErrorÚLoweringExceptionÚMissingOperatorWithDecompÚMissingOperatorWithoutDecomp)ÚConstantÚDonatedBufferÚFixedLayoutÚget_device_typeÚGraphPartitionSignatureÚInputBufferÚ	PointwiseÚ	ReductionÚ
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Úunsupported_output_tensor)Úautotune_cache)ÚAutotuneCacheBundler)ÚSizeVarAllocator)
Úconvert_shape_to_inductorÚgather_originsÚ get_cloned_parameter_buffer_nameÚget_donated_idxsÚget_sympy_Expr_dtypeÚis_same_tensorÚ#maybe_get_suppress_shape_guards_ctxÚnormalize_nameÚshould_assume_input_alignedÚValueWithLineMap)ÚNullHandlerÚV)ÚIterableÚIteratorÚSequence)Ú
ModuleType)Ú_EffectType)ÚGraphModule)ÚGraph)ÚPythonWrapperCodegen)ÚBaseSchedulerNode)Úoutput_code_logÚ
perf_hints)Úlog_module_codec                  ó   — y ©N© )ÚargsÚkwargss     úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/graph.pyre   re   …   s   € Øó    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Úint64rR   Ú
is_integerÚis_floatÚfloat32)Úconstant_buffers    rk   Úmay_get_constant_buffer_dtyperz   ‰   s«   € ÜØœ%Ÿ,™,¬¯
©
´E·J±J×4FÑ4F×4NÑ4NÐOôð ð 	róð ô
 �/¤5§:¡:×#5Ñ#5×#=Ñ#=Ô>Ü�{‰{Ðä�/¤5§:¡:Ô.Ü# OÓ4Ð4à×!Ò!Ü�{‰{ÐØ	×	!Ò	!Ü�}‰}Ðàrl   c                ó6   — t        d„ t        D «       «      }| |v S )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrg   )r   )Ú.0Úms     rk   ú	<genexpr>z"is_magic_method.<locals>.<genexpr>ž   s   è ø€ ÒH°QÔ-¨a×0ÑHùs   ‚)r$   r   )ÚopÚ	magic_opss     rk   Úis_magic_methodr‚   �   s   € ÜÑH¼-ÔHÓH€IØ�ˆ?Ðrl   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         rk   Úgetattr_recursiver‘   ¢   sv   € ð —<‘< Ó$€LØ€HÜ˜\Ó*ò +‰ˆˆ4Ü�x Ô&ÜØ5°c·h±h¸|ÈBÈQÐ?OÓ6PÐ5QÐRóð ô ˜8 TÓ*‰ð+ð €Orl   c                óâ   — i }| j                  d¬«      d   }d|j                  vr|S t        |j                  d   «      D ],  \  }}||j                  d   v sŒ|j                  d   |   ||<   Œ. |S )NÚoutput©r€   r   Úuser_visible_output_idxsÚoriginal_output_strides)Ú
find_nodesÚmetar†   ri   )ÚgÚretÚoutput_nodeÚidxÚnodes        rk   Úget_user_visible_output_stridesrž   °   s‰   € Ø')€CØ—,‘, (�,Ó+¨AÑ.€Kà!¨×)9Ñ)9Ñ9Øˆ
ä˜{×/Ñ/°Ñ2Ó3ò I‰	ˆˆTØ�+×"Ñ"Ð#=Ñ>Ò>Ø#×(Ñ(Ð)BÑCÀCÑHˆC�ŠIðIð €Jrl   c                ó  — t         j                  sy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+        |j,                  t.        j0                  j2                  j4                  «      rd|j6                  d<   ŒK ||«      }|sŒV||v rd|j6                  d<   |j6                  j9                  dd«      r0|j:                  D ]!  } ||«      }|sŒ||vsŒd|j6                  d<   Œ# t         j<                  rŒÆ||v sŒËd|j6                  d<   ŒÛ y)aŠ  
    Nodes like convolution/convolution_backward want its input to be dense.
    If we pad their inputs, we result in extra calls to copy kernels!  On the other hand, padding usually helps reduction.

    The pass finds nodes that dislike padding. These are nodes that can be reached
    from a convolution/convolution_backward in the backward direction without
    going thru a reduction.
    Nc                óØ   — | j                   dk(  rZt        | j                  t        j                  j
                  «      r,t        | j                  d«      r| j                  j                  S d S )NÚcall_functionÚ_overloadpacket)r€   rn   rŒ   rt   Ú_opsÚ
OpOverloadr‡   r¢   )r�   s    rk   Ú_get_overload_packetz8mark_nodes_dislike_padding.<locals>._get_overload_packetã   sU   € ð
 �w‰w˜/Ò)ä˜4Ÿ;™;¬¯
©
×(=Ñ(=Ô>Ü˜Ÿ™Ð%6Ô7ð	 �K‰K×'Ñ'ð	
ð ð	
rl   TÚdislike_paddingF)r�   útorch.fx.NodeÚreturnz%Optional[torch._ops.OpOverloadPacket])r'   Úcomprehensive_paddingr$   ÚatenÚconvolutionÚconvolution_backwardÚ
_scaled_mmÚvar_meanÚsumÚmeanÚprodÚanyÚaminÚamaxÚminÚmaxÚargminÚargmaxÚscatter_reduceÚreversedÚnodesrn   rŒ   rt   Ú_higher_order_opsÚtriton_kernel_wrapÚTritonKernelWrapperMutationr˜   ÚgetÚall_input_nodesÚpad_outputs)	r™   Úuser_visible_output_stridesÚops_dislike_paddingÚops_like_paddingr¥   Úcurr€   ÚpriorÚprior_ops	            rk   Úmark_nodes_dislike_paddingrÈ   ½   s¢  € ô ×'Ò'ØÜ$ä×ÑÜ×%Ñ%Ü�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Ð&Ñ'Øá! #Ó&ˆÙØØÐ$Ñ$Ø*.ˆC�H‰HÐ&Ñ'à�8‰8�<‰<Ð)¨5Ô1à×,Ñ,ò 9�Ù/°Ó6�ÙØØÐ#3Ò3Ø48�E—J‘JÐ0Ò1ð9ô ×!Ó! cÐ-HÒ&HØ*.ˆC�H‰HÐ&Ò'ñ1/rl   c                  ó–  ‡ — e Zd ZU ded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d?	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d@ˆ fd„ZdAd„Z	 	 	 	 dBd„Z	 	 	 	 dCd„Z	 	 	 	 dDd	„Z	 	 	 	 dEd
„Z		 	 	 	 	 	 dFd„Z
dGd„Zej                  dHd„«       ZdId„ZedJd„«       ZdKd„Z	 	 	 	 	 	 	 	 dLd„ZdMd„ZdNd„ZdOd„ZedPd„«       Z	 	 	 	 dQd„ZdRd„Z	 	 	 	 dSd„ZdTd„ZdUd„ZdVˆ fd„ZdWd„ZddœdXd„Z dYd„Z!	 	 	 	 dZd „Z"dNd!„Z#d[d"„Z$	 	 	 	 	 	 d\d#„Z%	 d]	 	 	 	 	 d^d$„Z&d_d%„Z'	 	 	 	 	 	 	 	 d`ˆ fd&„Z(daˆ fd'„Z)edbd(„«       Z*	 	 	 	 	 	 	 	 dcd)„Z+ddd*„Z,ddd+„Z-	 	 	 	 	 	 	 	 deˆ fd,„Z.dAd-„Z/edfd.„«       Z0edgd/„«       Z1	 	 	 	 	 	 	 	 	 	 	 	 dhd0„Z2diˆ fd1„Z3dAd2„Z4	 	 	 	 dj	 	 	 	 	 	 	 	 	 dkd3„Z5	 	 dld4„Z6dAd5„Z7dld6„Z8dmd7„Z9	 	 dnd8„Z:dZ;d9ed:<   dod;„Z<dod<„Z=dpd=„Z>dqd>„Z?ˆ xZ@S )rÚGraphLoweringzlist[ir.IRNode]Úgraph_outputsNFc                óÀ	  •— t         ‰| �  |«       || _        |�|n| j                  ||	¬«      | _        d| _        |	| _        |
| _        || _        || _	        || _
        || _        || _        d| _        |€t        «       }d| _        nd| _        || _        |j"                  j%                  «       | _        t)        t*        j,                     «       | _        t1        |«      | _        g | _        i | _        i | _        t)        t:           «       | _        |r|j>                  n	t)        «       | _        |r|j@                  n	t)        «       | _         d| _!        i | _"        g | _#        g | _$        |r|ni | _%        |rt)        |jM                  «       «      n	t)        «       | _'        |r|jP                  ni | _(        i | _)        i | _*        i | _+        t)        t:           «       | _,        t)        t:           «       | _-        t)        t:           «       | _.        t)        t:           «       | _/        t)        t:           «       | _0        t)        t:           «       | _1        d | _2        d | _3        g | _4        ddl5m6} to        jp                  «       r|r|n|| _9        d | _:        i | _;        t)        t:           «       | _<        g | _=        i | _>        t        t€        «      | _A        i | _B        t‡        j†                  «       | _D        || _E        || _F        || _G        i | _H        || _I        || _J        t—        t˜        «      | _M        d | _N        d | _O        | j                  r| j¡                  «       n	t)        «       | _Q        t)        dg«      | _R        t§        |j¨                  «      | _U        t­        |j¨                  | jª                  «       d| _W        d| _X        g | _Y        d | _Z        i | _[        |j¹                  «       | _]        | j¼                  j¾                  jÁ                  d	i «      | _a        |�|jÄ                  ni | _b        tÇ        «         tÉ        jÊ                  d «      tÌ        «      | _f        i | _g        t)        «       | _h        t)        t:           «       | _i        t)        «       | _j        t)        «       | _k        t)        t:           «       | _l        tÛ        jÜ                  «       | _o        d
| _p        tã        «       | _r        y )N)Úis_inferencer   FTÚcpu)Úextern_node_json_serializerzaten.convolution_backwardÚ Ú dynamo_flat_name_to_original_fqnéÿÿÿÿ)sÚsuperÚ__init__Ú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Úextra_tracebackr   Úreuse_shape_envÚ
_shape_envÚdeferred_runtime_assertsÚcopyÚras_by_symbolr$   ro   rp   Úbound_unbacked_symbolsrM   ÚsizevarsÚgraph_input_namesÚgraph_inputsÚgraph_inputs_originalÚstrÚzero_dim_cpu_tensor_listÚdevice_typesÚdevice_idxsÚdevice_typeÚbuffer_to_padded_sizeÚbuffersÚ
operationsÚconst_output_indexÚkeysÚfolded_constantsÚ	constantsÚtorchbind_constantsÚseen_subgraphsÚconstant_reprsÚremoved_operationsÚremoved_buffersÚremoved_inplace_buffersÚmutated_buffersÚnever_reuse_buffersÚinplaced_to_removeÚ
device_opsÚwrapper_codeÚextern_kernel_nodesÚ&torch._inductor.extern_node_serializerrÏ   r'   Ú	is_fbcodeÚextern_node_serializerÚcurrent_nodeÚlistsÚmutated_inputsÚmutated_input_idxsÚname_to_bufferr   ÚlistÚname_to_usersÚ
name_to_opÚtimeÚcreation_timeÚnameÚcpp_wrapperÚrecord_multi_kernel_choiceÚmulti_kernel_to_choiceÚaot_modeÚgraph_idÚnextÚ_post_grad_graph_counterÚpost_grad_graph_idÚ	schedulerÚ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˜   r¿   rÑ   Úallocated_constant_namer/   Ú	functoolsÚ	lru_cacher,   Úeffectful_opsÚaligned_inputsÚno_fuse_buffer_namesÚlow_precision_codegen_opsÚinvoke_quant_opsÚall_codegen_kernel_namesÚ	itertoolsÚcountÚworkspace_idÚplaceholder_idxrQ   Úbw_donated_idxs)ÚselfÚgmrÕ   Ú	shape_envr  r  r  r×   r  rÍ   rÙ   rÚ   rò   rÛ   rÜ   rÝ   r  rÞ   rÏ   Ú	__class__s                      €rk   rÔ   zGraphLowering.__init__  sf  ø€ ô, 	‰Ñ˜ÔØ,ˆÔð Ð%ñ à×'Ñ'¨¸Ð'ÓFð 	Œð
 '(ˆÔ#Ø(ˆÔØ&ˆÔØ,ˆÔØ"4ˆÔØ!2ˆÔØ(ˆÔØ.ˆÔà$ˆÔØÐÜ ›
ˆIØ#(ˆDÕ à#'ˆDÔ Ø#ˆŒð ×.Ñ.×3Ñ3Ó5ð 	Ôô '1´·±Ñ&>Ó&@ˆÔ#Ü(¨Ó3ˆŒØ,.ˆÔØVXˆÔØ=?ˆÔ"Ü(2´3©Ó(9ˆÔ%á)5ˆL×%Ò%¼:»<ð 	Ôñ )5ˆL×$Ò$¼*»,ð 	Ôð !ˆÔð <>ˆÔ"à(*ˆŒØ.0ˆŒá"4Ñ¸"ð 	Ôñ
 "ô Ð)×.Ñ.Ó0Ô1ä“ð 	Ôñ '3ˆL×"Ò"¸ð 	Œð FHˆÔ Ø68ˆÔØ.0ˆÔÜ",¬S¡/Ó"3ˆÔÜ)¬#™Ó0ˆÔÜ'1´#¡Ó'8ˆÔ$Ü)¬#™Ó0ˆÔÜ#-¬c¡?Ó#4ˆÔ Ü",¬S¡/Ó"3ˆÔØ-1ˆŒØ26ˆÔà>@ˆÔ åVô ×ÑÔ!Ñ&<ñ #à,ð 	Ô#ð ,0ˆÔØ+-ˆŒ
Ü(¬™oÓ/ˆÔØ-/ˆÔØ46ˆÔÜ@KÌDÓ@QˆÔØ35ˆŒÜ!ŸY™Y›[ˆÔØˆŒ	Ø&ˆÔð
 +6ˆÔ'Ø68ˆÔ#à ˆŒØ ˆŒÜ"&Ô'?Ó"@ˆÔØ>BˆŒð 7;ˆÔð 7;·o²oˆD×0Ñ0Ô2Ì:Ë<ð 	Ô'ô !+Ð,GÐ+HÓ IˆÔÜ+JÈ2Ï8É8Ó+TˆÔ(Ü" 2§8¡8¨T×-MÑ-MÔNØ ˆŒØ!ˆŒð ð 	Ôð 9=ˆÔ&ð GIˆÔ Ø-/¯[©[«]ˆŒØ04·±×0@Ñ0@×0DÑ0DØ.°ó1
ˆÔ-ð 5AÐ4LˆL×0Ò0ÐRTð 	Ô$ô 	"Ô#Ø$=¤I×$7Ñ$7¸Ó$=Ô>RÓ$SˆÔ!à;=ˆÔÜ/9«|ˆÔÜ$.¬s¡OÓ$5ˆÔ!ä:D»,ˆÔ&ä1;³ˆÔô )3´3©Ó(9ˆÔ%ô &ŸO™OÓ-ˆÔð  "ˆÔä/Ó1ˆÕrl   c                ó8   — | j                   j                  «        y rg   )rá   Úfreeze_runtime_asserts©r4  s    rk   r9  z$GraphLowering.freeze_runtime_assertsº  s   € Ø�‰×.Ñ.Õ0rl   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à   rN   ÚsizeÚstrideÚtorch._dynamo.sourcer<  Úlenrá   Ú
var_to_valÚ,create_symbolic_sizes_strides_storage_offsetrn   rt   ÚSymIntr�   Úexpr)
r4  Úexr<  Úsourcer>  r?  Ú_r�   Úr_sizeÚr_strides
             rk   Úsymbolic_sizes_stridesz$GraphLowering.symbolic_sizes_strides½  sû   € ð ×ÒÜ,¨R¯W©W«YÓ7Ô9RØ—	‘	“ó:ð ð õ <ñ $Ø,¬S°·±×1KÑ1KÓ-LÐ,MÐNóˆ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>  ro   rs   r?  )r4  rF  r�   r>  r?  s        rk   Ústatic_sizes_stridesz"GraphLowering.static_sizes_stridesâ  sZ   € ð +-¯'©'«)Ö4 Q”—‘˜aÕ Ð4ˆÐ4Ø,.¯I©I«KÖ8 q”%—-‘- Õ"Ð8ˆÐ8Ø�Vˆ|Ðùò 5ùÚ8s   “A%ÁA*c                óP  — t        |t        j                  «      r|j                  }t        |t        j                  «      r|j                  }t        |t        j
                  «      r1|j                  | j                  v r| j                  |j                     S |j                  «       S rg   )	rn   r(   r>   Údatar=   ÚComputedBufferr  rï   Úget_size)r4  r�   s     rk   Úget_allocation_sizez!GraphLowering.get_allocation_sizeì  su   € ô �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à—=‘=“?Ð"rl   c                óŽ   — |j                  «       }| j                  |«      }|j                  }|j                  }t	        |||«      S rg   )Ú
get_layoutrR  r?  Úoffsetr   )r4  r�   Úlayoutr>  r?  rU  s         rk   Úget_allocation_storage_sizez)GraphLowering.get_allocation_storage_sizeþ  sA   € ð —‘Ó"ˆØ×'Ñ'¨Ó-ˆØ—‘ˆØ—‘ˆÜ.¨t°V¸VÓDÐDrl   c                óh   — t        |t        «      sJ |«       ‚|| j                  t        |«      «      v S rg   )rn   r*   r,   r8   )r4  r   Úfeatures      rk   Úhas_featurezGraphLowering.has_feature  s4   € ô
 ˜'¤>Ô2Ð;°GÓ;Ð2Ø˜$×3Ñ3´OÀFÓ4KÓLÐLÐLrl   c                ó8   — | j                   x}r|S t        d«      ‚)NzNo current device)r  rˆ   ©r4  r   s     rk   Úget_current_device_or_throwz)GraphLowering.get_current_device_or_throw  s$   € Ø×(Ñ(Ð(ˆ6Ð(ØˆMäÐ2Ó3Ð3rl   c              #  ób   K  — | j                   }|| _         	 d –— || _         y # || _         w xY w­wrg   )r  )r4  r   rÆ   s      rk   Ú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    rk   Úget_training_phasez GraphLowering.get_training_phase  s   € Ø×ÒØØ×ÒØØrl   c               ó   — t         j                  syt         j                  ry| j                  j                  D �cg c]@  }|j
                  t        j                  j                  j                  j                  k(  sŒ?|‘ŒB }}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„}|�rBddlm} t/        t0        «      }	|D ]Ä  }
t        j2                  j4                  j7                  |
«      \  }}}|r~ |d¬«      5 }t8        j:                  5   |
j
                  |i |¤Ž ddd«       ddd«       j=                  «       } ||
«      rd}n ||
«      rd}n ||
«      rd}nd}|	|xx   |z  cc<   Œ°t$        j'                  d«       ŒÆ d}d}d}d}t?        |	jA                  «       «      }|	d   |z  |	d   |z  z   |	d   |z  z   |	d   |z  z   }||k  }|st$        j'                  d||«       |S t)        tC        ||«      «      rt$        j'                  d«       yt)        tC        ||«      «      rt$        j'                  d«       yt!        tC        ||«      «      rt$        j'                  d«       yyc c}w # 1 sw Y   �ŒUxY w# 1 sw Y   �ŒZxY w)zl
        Decide if we should enable layout optimization for this graph based on
        heuristics.
        FTr   c              3  ó¢   K  — | ]G  }d D ]@  }|j                   |   j                  d   j                  t        j                  d«      k(  –— ŒB ŒI y­w)©r   r&   ÚvalrÎ   N)ri   r˜   r   rt   ©r}   Únrœ   s      rk   r   z2GraphLowering.decide_layout_opt.<locals>.<genexpr>=  sT   è ø€ ò àØ!òð ð —‘�s‘× Ñ  Ñ'×.Ñ.´%·,±,¸uÓ2EÕEðØEñù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)rg  rh  N)r   ri   r˜   ri  s      rk   r   z2GraphLowering.decide_layout_opt.<locals>.<genexpr>L  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&   rh  rÒ   )ri   r˜   rn   rt   r   r>  )rj  Úmeta_vals     rk   Ú
is_groupedz3GraphLowering.decide_layout_opt.<locals>.is_groupedV  sQ   € Ø—v‘v˜a‘y—~‘~ eÑ,ˆHÜ˜h¬¯©Ô5Ð5Ð5Ø—6‘6˜"‘: ‘>Ò: h§m¡m°AÓ&6¸Ñ&:Ð:rl   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&   rh  r   é   ©ri   r˜   r>  ©rj  s    rk   Ú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ðrl   c                ó¾   — | j                   d   j                  d   j                  d«      dk  xr. | j                   d   j                  d   j                  d«      dk  S )Nr&   rh  r   é@   rq  rr  s    rk   Úis_small_channelz9GraphLowering.decide_layout_opt.<locals>.is_small_channela  sT   € à—‘�q‘	—‘˜uÑ%×*Ñ*¨1Ó-°Ñ3ò 8Ø—F‘F˜1‘I—N‘N 5Ñ)×.Ñ.¨qÓ1°RÑ7ðrl   )ÚFlopCounterMode)ÚdisplayNÚgroupedÚsmallÚin_outÚdefaultz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)rj  r   r¨   Úbool)rj  r§   r¨   r}  )"r'   Úlayout_optimizationÚforce_layout_optimizationr  r»   rŒ   rt   Úopsrª   r«   r|  rA  ÚbackendsÚmkldnnÚenabledÚis_availableÚallr
  ÚlogÚdebugr²   Útorch.utils.flop_counterrw  r   ÚfloatÚ	_inductorÚfx_utilsÚget_fake_args_kwargsrY   Ú	fake_modeÚget_total_flopsr¯   ÚvaluesÚmap)r5  rÍ   rj  Ú
conv_nodesÚnconvrn  rs  rv  rw  Úflop_countsr�   Úsuccessri   rj   Úflop_counter_modeÚcounted_flopsÚ	node_typeÚGROUPED_MULTIPLIERÚDEFAULT_MULTIPLIERÚIN_OUT_MULTIPLIERÚSMALL_MULTIPLIERÚtotal_flopsÚweighted_flopsÚdo_layout_opts                           rk   rÖ   zGraphLowering.decide_layout_opt%  s5  € ô ×)Ò)Øä×+Ò+Øð —x‘x—~‘~ö
Ø¨¯©´U·Y±Y·^±^×5OÑ5O×5WÑ5WÓ)WŠ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Ø"ò <�Ü(-¯©×(@Ñ(@×(UÑ(UØó)Ñ%�˜˜vñ Ù(°Ô7ð 9Ð;LÜŸ[™[ñ 9Ø'˜DŸK™K¨Ð8°Ò8÷9÷9ð %6×$EÑ$EÓ$G�MÙ! $Ô'Ø$-™	Ù)¨$Ô/Ø$+™	Ù*¨4Ô0Ø$,™	à$-˜	à 	Ó*¨mÑ;Ô*ä—I‘IÐ:Õ;ð-<ð6 "'ÐØ!&ÐØ %ÐØ$Ðä˜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Øàùòm
÷D9ñ 9ú÷9ñ 9ús0   »A L1Á<L1Æ?MÇL6Ç#MÌ6M Ì;MÍM	c                ó@   — | j                   �| j                   › d|› �S |S )z2Prepend the given name with the graph name if any.rH  )r  ©r4  r  s     rk   Úqualify_namezGraphLowering.qualify_nameÉ  s&   € à�9‰9Ð Ø—i‘i�[  $ Ð(Ð(Øˆrl   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.
        )
Úparentr5  rÕ   r6  r  r  r  rÍ   rÙ   r  )ÚSubgraphLoweringrá   r  r  r  rÍ   rÙ   r¡  )r4  r5  rÕ   Úsubgraph_names       rk   Úmake_subgraphzGraphLowering.make_subgraphÏ  sZ   € ô  ØØØ)Ø—o‘oØ×(Ñ(Ø—]‘]Ø#'×#>Ñ#>Ø×*Ñ*Ø×(Ñ(Ø×"Ñ" =Ó1ô
ð 	
rl   c                óø  — t        t           «       }t        | j                  j                  j
                  «      D ]w  }|j                  t        j                  j                  j                  j                  k(  r|j                  |«       ŒP|j                  D ]  }||v sŒ|j                  |«        Œw Œy | j                  j                  j
                  D ]"  }||v sŒ|j                  |j                  «       Œ$ |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.
        )r$   r"   rº   r%  r  r»   rŒ   rt   r€  rª   r«   r|  ÚaddÚusersÚupdate)r4  Ú
output_setrj  Úusers       rk   r  z-GraphLowering.find_nodes_prefer_channels_lastê  sÐ   € ô&  ¤Ñ%Ó'ˆ
Ü˜$Ÿ+™+×+Ñ+×1Ñ1Ó2ò 	ˆAØ�x‰xœ5Ÿ9™9Ÿ>™>×5Ñ5×=Ñ=Ò=Ø—‘˜qÔ!ØàŸ™ò �Ø˜:Ò%Ø—N‘N 1Ô%Ùñð	ð0 —‘×"Ñ"×(Ñ(ò 	+ˆAØ�JŠØ×!Ñ! !§'¡'Õ*ð	+ð Ðrl   c                ó„   — || j                   vr2| j                   j                  |«       t        j                  d|«       y y )NzUsing FallbackKernel: %s)r  r¨  Úperf_hint_logÚinfor   s     rk   Úwarn_fallbackzGraphLowering.warn_fallback  s:   € Ø�t×,Ñ,Ñ,Ø×!Ñ!×%Ñ% dÔ+Ü×ÑÐ9¸4Õ@ð -rl   c                óR  — | j                   j                  |j                  «       |j                  �%| j                  j                  |j                  «       t
        j                  j                  r7|| j                  vr(t
        j                  j                  | j                  |<   y y y rg   )	rì   r¨  ÚtypeÚindexrí   rY   r  r  r"  r\  s     rk   Ú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Ðrl   c                ó"   — t         j                  S rg   )rY   r�  r:  s    rk   r�  zGraphLowering.fake_mode(  s   € ä�{‰{Ðrl   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©r  rV  )r	  rè   rõ   rY   r  r(   ÚConstantBufferr7   r   ÚdtyperM  )r4  Úbuffer_namerO  s      rk   Útry_get_bufferzGraphLowering.try_get_buffer,  s­   € ð ˜$×-Ñ-Ñ-Ø×&Ñ& {Ñ3Ð3Ø˜$×+Ñ+Ñ+Ø×$Ñ$ [Ñ1Ð1Ø˜$Ÿ.™.Ñ(Ü—7‘7×$Ñ$ [Ñ1ˆDÜ×$Ñ$Ø Ü—~‘~Ø—K‘K §¡ðÜ./¯g©g×.JÑ.JÈ4Ó.Pòôð ð rl   c                ó   — t        d«      ‚)Nz'Should not be called for the main graph)rˆ   )r4  Úsymbols     rk   Úadd_symbol_graph_inputz$GraphLowering.add_symbol_graph_input>  s   € ÜÐDÓEÐErl   c                óH   — | j                  |«      }|�|S t        d|› �«      ‚)Nz$Failed to find buffer matching name )r¼  rˆ   ©r4  r»  Úbufs      rk   Ú
get_bufferzGraphLowering.get_bufferA  s1   € ð ×!Ñ! +Ó.ˆØˆ?ØˆJÜÐAÀ+ÀÐOÓPÐPrl   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‡   r  rÅ  r	  Ú	get_dtyperè   ÚreÚmatchÚgroupÚKeyError)r4  r»  Úmutated_bufr~   s       rk   rÇ  zGraphLowering.get_dtypeI  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Ð7rl   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õ   Únumelr	  Úhas_tensor_outputÚ	get_numelrè   rË  rÁ  s      rk   rÐ  zGraphLowering.get_numel_  s™   € Ø˜$Ÿ.™.Ñ(Ø—>‘> +Ñ.×4Ñ4Ó6Ð6Ø˜$×-Ñ-Ñ-Ø×%Ñ% kÑ2ˆCØ×(Ñ(Ô*ØØ—=‘=“?Ð"Ø˜$×+Ñ+Ñ+Ø×$Ñ$ [Ñ1×;Ñ;Ó=Ð=Ü˜¨¨Ð6Ó7Ð7rl   c                ó^   •— t        d«      5  t        ‰| �  |Ž cd d d «       S # 1 sw Y   y xY w)NzGraphLowering.run)r   rÓ   Úrun)r4  ri   r7  s     €rk   rÒ  zGraphLowering.runk  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_namern   r(   Ú	Operationr¡  rA  rñ   Úappendr  )r4  r€   r  s      rk   Úregister_operationz GraphLowering.register_operationo  sƒ   € Ø× Ñ Ð(ÐMÐ,HÈÈÐ*MÓMÐ(Ü˜"œbŸl™lÔ+Ð+Ð+Ø× Ñ  2¤c¨$¯/©/Ó&:Ð%;Ð!<Ó=ˆØ�‰×Ñ˜rÔ"Ø "ˆ�‰˜ÑØ ˆÔØˆrl   ©Ú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¡  rA  rð   rÖ  r	  Ú
get_devicern   r(   rP  Úis_zero_elementsrt   r   r´  r  )r4  ÚbufferrÙ  r  r   s        rk   Úregister_bufferzGraphLowering.register_bufferx  s§   € Ø× Ñ  3¤s¨4¯<©<Ó'8Ð&9Ð!:Ó;ˆØ�‰×Ñ˜FÔ#Ø$*ˆ×Ñ˜DÑ!Ø×"Ñ"Ó$ˆð Ðä˜6¤2×#4Ñ#4Ô5Ø×+Ñ+Ô-ØœeŸl™l¨5Ó1Ò1ð × Ñ  Ô(áØˆFŒKØˆrl   c                ój   — | j                  ddj                  |«      z   «      }|| j                  |<   |S )NÚlist_rH  )r¡  r‰   r  )r4  Úoperation_namesr  s      rk   Úregister_operation_listz%GraphLowering.register_operation_listŒ  s3   € Ø× Ñ  ¨3¯8©8°OÓ+DÑ!DÓEˆØ*ˆ�
‰
�4ÑØˆrl   c                ó&   ‡ ‡— dˆˆ fd„Š ‰|«       y )Nc                óì   •— t        | t        t        f«      r| D ]
  } ‰|«       Œ t        | t        j                  «      r4| j                  «       D ]   }‰j                  |   j                  | «       Œ" y y rg   )rn   r
  Útupler(   r>   Úget_read_namesr  rÖ  )ÚvalueÚxÚ	read_nameÚregisterr4  s      €€rk   rê  z1GraphLowering.register_users_of.<locals>.register”  sm   ø€ Ü˜%¤$¬ Ô/Øò  �AÙ˜Q•Kð ä˜%¤§¡Ô.Ø!&×!5Ñ!5Ó!7ò @�IØ×&Ñ& yÑ1×8Ñ8¸Õ?ñ@ð /rl   )rç  ú%Union[Iterable[ir.IRNode], ir.IRNode]r¨   ÚNonerh   )r4  Únode_outputrê  s   ` @rk   Úregister_users_ofzGraphLowering.register_users_of‘  s   ù€ ö	@ñ 	�Õrl   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)rn   rê   rü   r¨  r  Úrealize)r4  r  r¬  s      rk   Úmark_buffer_mutatedz!GraphLowering.mark_buffer_mutatedž  s\   € ô
 ˜$¤Ô$Ð$Ð$Ø×Ñ× Ñ  Ô&à�t×)Ñ)Ñ)Øà×&Ñ& tÑ,ò 	ˆDØ�L‰L�Nñ	rl   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 )r&  rõ   rP   r%  r˜   )r4  r  Ú	orig_names      rk   Úget_original_value_of_constantz,GraphLowering.get_original_value_of_constant¬  sŠ   € ð �t×3Ñ3Ñ3¸ÀÇÁÑ8Nð 	
Ø2°TÑ9ó	
ÐNô 5°T×5QÑ5QÐRVÑ5WÓXˆ	ð ˜DŸK™K×,Ñ,Ñ,ð �K‰K×Ñ˜YÑ'ð	
ð —‘ Ñ%ð	
rl   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_rH  r&   ú rè  )r'   Úaot_inductorÚuse_runtime_constant_foldingrõ   ÚitemsrS   rA  Úisdigitr¡  rU   r   rº  rå  r>  r?  Úhashrø   r&  )r4  r  rO  Úconstant_namerç  ró  ÚprefixÚcnts           rk   Úallocate_non_dup_const_namez)GraphLowering.allocate_non_dup_const_name¼  sZ  € ô ×"Ñ"×?Ò?Ø(,¯©×(<Ñ(<Ó(>ò )Ñ$�˜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Ñ*Øˆrl   c                óÖ   — | j                  ||«      }t        j                  t        j                  |t        |j                  |j                  g| j                  |«      ¢­Ž ¬«      «      S r·  )	r  r>   Úcreater(   r¹  r7   r   rº  rM  )r4  rO  r  Únew_names       rk   Úadd_tensor_constantz!GraphLowering.add_tensor_constantÛ  sb   € ð ×3Ñ3°D¸$Ó?ˆÜ×ÑÜ×ÑØÜ"Ø—K‘K §¡ðØ.2×.GÑ.GÈÓ.Mòôó
ð 	
rl   c                óX  — | j                   |   j                  |k(  s|€|S t        j                  j                  j                  «       5  | j                  |› d|j                  › |j                  xs d› �| 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.
        NrH  r   )
rõ   r   rt   ÚutilsÚ_python_dispatchÚ_disable_current_modesr  r²  r³  Úto)r4  r  Údevice_overrides      rk   rþ  zGraphLowering.constant_nameè  sœ   € ð �>‰>˜$Ñ×&Ñ&¨/Ò9¸_Ð=TØˆKÜ�[‰[×)Ñ)×@Ñ@ÓBñ 	ð ×3Ñ3Ø�&˜˜/×.Ñ.Ð/°×0EÑ0EÒ0JÈÐ/KÐLØ—‘˜tÑ$×'Ñ'¨Ó8ó÷	÷ 	ò 	ús   Á	AB Â B)c                óˆ  •— | xj                   dz  c_         t        ‰| �	  |||«      }| j                  |«      }t	        |t
        «      rB|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&        j(                  «      rãt+        t,        j.                  j0                  j2                  «      dk(  rdt5        t7        t,        j.                  j0                  j2                  «      «      j8                  t&        j:                  j<                  j>                  u sJ ‚tA        jB                  ||jD                  ¬«      }|| j                  |<   | j                  j                  |«       |S t	        |t&        jF                  «      sJ |«       ‚|jH                  s| jK                  |«      \  }}	n| jM                  |«      \  }}	| jN                  re| jP                  rY| j                   | jP                  v rAtS        jT                  tW        |tY        |jD                  |jZ                  ||	«      ¬«      «      }
n@tS        jT                  t]        |tY        |jD                  |jZ                  ||	«      ¬«      «      }
|
| j                  |<   | j                  j                  |«       |
j^                  j^                  | j`                  |<   | j0                  j2                  r| jc                  |jD                  «       te        «       5  tg        |«      r| jh                  jk                  |«       d d d «       |
S # 1 sw Y   |
S xY w)Nr&   ©r  rç  )r  r   r¸  )6r2  rÓ   Úplaceholderr¡  rn   r!   r�   rE  rè   rç   rÖ  Úintr}  r‰  ro   Úsympifyr   r?   r   rt   Ú	GeneratorrA  rY   r  r  r©  r  ÚiterrŒ   Ú_primsÚ	rng_primsÚgraphsafe_run_with_rng_stater(   ÚGeneratorStater   r   Ú_has_symbolic_sizes_stridesrM  rK  rÙ   r3  r>   r  r6   r7   rº  r:   rO  ré   r´  rT   rV   r*  r¨  )r4  rŒ   ri   rj   ÚexamplerE  r‹   ÚgenÚsizesÚstridesÚtensorr7  s              €rk   r  zGraphLowering.placeholderø  sp  ø€ ð 	×Ò Ñ!ÕÜ‘'Ñ% f¨d°FÓ;ˆØ×"Ñ" 6Ó*ˆÜ�gœxÔ(Ø—<‘<×$Ñ$ˆDØ(,ˆ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ä”A—G‘G×(Ñ(×.Ñ.Ó/°1Ò4ÜœœaŸg™g×2Ñ2×8Ñ8Ó9Ó:×AÑAÜ—<‘<×)Ñ)×FÑFñGððGô ×#Ñ#¨¸¿¹ÔGˆCØ(+ˆD×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆJä˜'¤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ñ 	0Ü*¨7Ô3Ø×#Ñ#×'Ñ'¨Ô/÷	0ð ˆ÷	0ð ˆús   Ð'P7Ð7Qc                ó‚  •— |t         j                  u r/t        |d   t        t        t
        f«      rt        ‰| �  |||«      S t        |t        j                  j                  «      st        |d«      r ||i |¤ŽS |t        v�r“t        |t        j                  j                  «      s
J |› d�«       ‚|j                  «       j                  d«      d   }|t         v rt#        |dd¬«       �n+t$        j&                  rõt)        |g«      rt*        nt,        }t.        j1                  d|j3                  |||«      «       t        j4                  j6                  j8                  |j:                  v rt<        }nqt        j4                  j6                  j>                  |j:                  v rd }n>t        j@                  jB                  jE                  |«      r| jF                  rtH        }nd }t#        ||¬	«       n&t)        |g«      rt+        |||«      ‚t-        |||«      ‚	 t.        jK                  d
t        |   «       | jL                  }tO        |«      }|r||}
}	 ||g|¢­i |¤Ž\  }}t        |   |i |¤Ž}|r| jQ                  |	
||«       |S # tR        $ r-}tU        ||||«      jW                  |jX                  «      d ‚d }~ww xY w)Nr   Ú_inductor_lowering_functionz is not an OpOverloadr„   FT)ÚwarnÚoverride_decompz"Creating implicit fallback for:
%s)Úlayout_constraintz  via %s)-ÚoperatorÚgetitemrn   r
  rå  ÚdictrÓ   r¡   rt   r£   ÚOpOverloadPacketr‡   rE   r¤   r  r…   rB   rF   r'   Úimplicit_fallbacksr   r3   r4   r†  r¯  Úoperator_strÚ_CÚTagÚneeds_fixed_stride_orderÚtagsrA   Úflexible_layoutÚ_libraryr  Ú
is_builtinrÙ   rI   r‡  r  rG   Úpropagate_mutationÚ	Exceptionr2   Úwith_tracebackÚ__traceback__)r4  rŒ   ri   rj   Ú	base_nameÚerrorÚdecided_constraintrj  Úlayout_constraintsÚold_argsÚ
old_kwargsÚoutÚer7  s                €rk   r¡   zGraphLowering.call_functionZ  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ØÔ/Ñ/Ü˜f¨5À$×GÜ×*Ò*ô *¨6¨(Ô3õ .ä5ð ô
 —‘Ø9Ø×&Ñ& v¨t°VÓ<ôô —8‘8—<‘<×8Ñ8¸F¿K¹KÑGÜ)@Ñ&Ü—X‘X—\‘\×1Ñ1°V·[±[Ñ@Ø)-Ñ&ô —~‘~×+Ñ+×6Ñ6°vÔ>À4×CSÒCSÜ-?Ñ*ð .2Ð*ô ˜fÐ8JÖKä# V HÔ-ô 0°¸¸fÓEÐEä2°6¸4ÀÓHÐHð	Ü�I‰I�j¤)¨FÑ"3Ô4à×!Ñ!ˆAÜ!9¸&Ó!AÐÙ!Ø'+¨V˜*�Ù1°!ÐE°dÒE¸fÑE‘��fä˜FÑ# TÐ4¨VÑ4ˆCá!ð ×'Ñ'¨¨8°ZÀÀvÔNàˆJøÜò 	Ü# A v¨t°VÓ<×KÑKØ—‘óàðûð	ús   ÈA/J Ê	J>Ê(J9Ê9J>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   é   )rA  Úshape)Úts    rk   Úcan_inline_constantz!GraphLowering.can_inline_constant²  s(   € ô
 �1—7‘7‹|˜qÑ Ò4 Q§W¡W¨Q¡Z°1¡_Ð4rl   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                  | j                  |<   d| j                  |<   t        ||j                  ¬«      S t        |t        j                   «      sJ ‚t"        j$                  j&                  st"        j(                  st+        |«      r| j-                  ||«      S t/        «       5  |j0                  dk(  r9t3        |j5                  «       |j6                  |j8                  ¬«      cd d d «       S | j;                  |«      r[t<        j?                  dtA        |«      «       ddl!m"}  ||jG                  «       |j6                  |j8                  ¬	«      cd d d «       S 	 d d d «       | j-                  ||«      S # 1 sw Y   ŒxY w)
N)r  Úgraph_modulerÐ   r  rh   )rç  rº  r   zInlining constant: %s r&   )r  )rº  r   )$r‘   r%  rn   rt   Úfxr_   r÷   r(   ÚSubgraphr(  ÚScriptObjectrö   rø   r?   r   Úreal_objr   r'   rù  rú  Úalways_keep_tensor_constantsrJ   r  r#   r=  r5   Úitemrº  r   r?  r†  r‡  rê   Úloweringr  Útolist)r4  rŒ   ri   rj   rç  r9  r  s          rk   Ú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·n±nÔEÐEä˜%¤§¡Ô.Ð.Ð.ä×Ñ×<Ò<Ü×2Ò2Ü(¨Ô/à×+Ñ+¨E°6Ó:Ð:ä‹]ñ 
	VØ�{‰{˜bÒ ÜØŸ*™*›,¨e¯k©kÀ%Ç,Á,ô÷
	Vñ 
	Vð
 ×'Ñ'¨Ô.Ü—	‘	Ð2´C¸³KÔ@å,á˜eŸl™l›n°E·K±KÈÏÉÔU÷
	Vñ 
	Vð
 /÷
	Vð ×'Ñ'¨¨vÓ6Ð6÷
	Vð 
	Vús   Æ?IÇA"IÉI$c                ó   — t         ‚rg   ©ÚAssertionError©r4  rŒ   ri   rj   s       rk   Úcall_modulezGraphLowering.call_moduleê  ó   € ÜÐrl   c                ó   — t         ‚rg   rL  rN  s       rk   Úcall_methodzGraphLowering.call_methodí  rP  rl   c                ód  •— t         ‰| �  |||«      }t        |t        t        f«      s|f}t        |t        t        f«      sJ t        |«      «       ‚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+                  |«      «       Œšt,        j.                  j                  j1                  |«      sJ ‚|	j2                  d   j5                  «       D �
cg c]4  }
t        |
t,        j6                  «      r|
j8                  j:                  n|
‘Œ6 }}
|j%                  t        j<                  ||«      «       �ŒF || _        | j@                  jC                  «       D �]_  \  }}t        |tD        «      rŒt        |t         tF        jH                  t,        j.                  j                  jJ                  f«      sJ dt        |«      › �«       ‚t        |t         «      sŒ|jM                  «        t        |t         «      sJ ‚|jN                  }t        |t        jP                  «      sJ ‚|}|jN                  }t        |tR        «      r|jU                  «       |k7  sŒût        jV                  jY                  || jZ                  |   «       	 | j>                  j]                  |«      }| jZ                  |   | j>                  |<   �Œb | ja                  «        tb        je                  d| jf                  | jh                  �| jh                  «       y d«       y c c}w c c}
w # t^        $ r Y �ŒÈw xY w)Nc              3  ó8  K  — | ]’  }t        |t        t        j                  t	        d «      t        j
                  t        j                  t        j                  j                  j                  t        t        j                  t        j                  f	«      –— Œ” y ­wrg   )rn   r>   r(   r5   r²  r¹  ro   r   ÚlogicÚboolalgÚBooleanr  ÚEffectfulKernelÚShapeAsConstantBuffer)r}   rè  s     rk   r   z'GraphLowering.output.<locals>.<genexpr>û  sp   è ø€ ò 
ð ô ØäÜ—K‘KÜ˜“JÜ×%Ñ%Ü—J‘JÜ—K‘K×'Ñ'×/Ñ/ÜÜ×&Ñ&Ü×,Ñ,ð
÷ñ
ùs   ‚BBr   rh  z'Unsupported inductor graph input type: zGForce channels last inputs for %d conv for the current graph with id %drÒ   )5rÓ   r“   rn   rå  r
  r²  r…  rY   r  r  ri   r(   ÚExternKernelÚrealize_inputrA  Úzipr>   ÚBaseViewrÖ  Úget_output_specÚCommBufferLayoutÚ
copy_inputrt   rŠ  Úis_storage_and_layoutr˜   r?  rD  r�   rE  Útry_match_insignificant_stridesrË   rè   rû  r?   ro   r   r  rð  rO  r=   r:   Úget_nameÚMutationLayoutSHOULDREMOVEÚrealize_intoré   r³  Ú
ValueErrorÚfinalizer†  r‡  rØ   r  )r4  rŒ   ri   rj   ÚresultÚfx_node_argsrè  Úresult_correct_stridesÚrÚfx_nodeÚsÚmeta_stridesr  rç  Úvalue_storage_boxÚindr7  s                   €rk   r“   zGraphLowering.outputð  s‹  ø€ ô ‘‘ ¨¨fÓ5ˆÜ˜&¤5¬$ -Ô0à�YˆFÜ˜&¤5¬$ -Ô0Ð>´$°v³,Ó>Ð0Üñ 
ð ô
ô 
ð 	ð  ó!	ð 
ô$ —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�%Ü˜%¤Ô1ØÜØœ	¤5§:¡:¬u¯©×/AÑ/A×/PÑ/PÐQôð Gà8¼¸e»¸ÐFóGð ô ˜e¤YÔ/ØØ�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Ó+ð-	ð4 	�‰ŒÜ�	‰	ØUØ×'Ñ'Ø!Ÿ]™]Ð6ˆD�M‰Mõ	
ð =?õ	
ùòm Dùò" øôB "ò Úðús   Â/&PÇ"9PÎ7P"Ð"	P/Ð.P/c                óF   — | j                   D ]  }|j                  «        Œ y rg   )rð   Údecide_layout)r4  rÂ  s     rk   rg  zGraphLowering.finalizeM  s!   € Ø—<‘<ò 	 ˆCØ×ÑÕñ	 rl   c              #  ób   K  — | j                   }	 || _         d –— || _         y # || _         w xY w­wrg   )r  )r4  r�   Úolds      rk   Úset_current_nodezGraphLowering.set_current_nodeQ  s1   è ø€ à×Ñˆð	$Ø $ˆDÔÛà #ˆDÕø ˆDÕüs   ‚/�# ›/£	,¬/c              #  óT   K  — | j                   }	 d –— || _         y # || _         w xY w­wrg   ©r   )r4  rt  s     rk   Úset_current_wrapper_codez&GraphLowering.set_current_wrapper_codeZ  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 ]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                  |“Œ }}|j7                  «       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.
        rj   Ú
kernel_idxÚconstant_args_idxrh  Nc                ó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 rg   )Ú
alias_infoÚis_writern   r(   ÚIRNoder\  r¡   rt   r€  rª   Úcopy_r|  )Ú
schema_argÚold_argÚnew_argÚold_arg_itemÚnew_arg_itemr4  s        €rk   Ú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Ð0rl   )r�  ztorch._C.Argumentr‚  ú	ir.IRNoderƒ  r‡  r¨   rì  )rA  rŒ   rt   r€  Úhigher_orderÚtriton_kernel_wrapper_mutationrj   rn   r$  r¼   r½   Úget_mutated_tensorsrû  rB  r"   r˜   r¡   rª   r€  r|  r£   r¤   Ú_schemar†   r\  Ú	argumentsr  ró   )r4  rl  r7  r8  Únew_argsÚ
new_kwargsrj   ÚkÚvÚmutatedr  r‚  rƒ  r†  Úschemarœ   r�  ÚargÚschema_kwargsÚkeys   `                   rk   r/  z GraphLowering.propagate_mutationb  sJ  ø€ ô  �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óóˆ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ñ		:ùóWùòR Ds   ÃA I
ÈIc                óÞ$  •‡ ‡‡-‡.‡/— d*ˆfd„}ddl m} t        ‰ j                  «      Š.t        ‰ j                  «      Š/t        ‰g«      }‰j                  dk(  }|r#‰ j                  ‰«      \  }}|t        ||«      z  }t        j                  j                  |«      5  ‰ j                  ‰«      5  t        j                  ‰«      5  ‰j                  dk(  rd‰j                  t        j                   urHt#        ‰«      s|j%                  ddˆfd„«      r' |d«        t'        ‰j                  d	¬
«      i ¤Ž}�n¹‰j                  dk(  rü‰j                  t(        j*                  j,                  j.                  u rÌt0        j2                  dk7  r¹ |d«       t0        j2                  dk(  r‚}	}
‰j4                  j7                  d«      x}r|d   }|d   }t9        ||||«      \  }}nt;        ‰g|¢­i |¤Ž\  }}‰ j=                  ‰j                  ||«      }‰ j?                  ‰|	|
||«       nÊtA        dt0        j2                  › �«      ‚tC        ‰j                  «      r‚ |d«       tE        ‰j4                  d   t(        jF                  t(        jH                  t(        jJ                  f«      r$‰j4                  d   jL                  jN                  }n'tP        ‰0‰ �¥  ‰«      }n |d«       tP        ‰0‰ �¥  ‰«      }t(        j*                  jT                  jV                  jX                  t(        j*                  jT                  jZ                  jX                  t(        j*                  jT                  j\                  jX                  t(        j*                  jT                  j^                  jX                  t(        j*                  jT                  j`                  jX                  gŠ-tc        d„ ‰jd                  D «       «      }‰‰ jf                  v }tc        ˆ-fd„‰jd                  D «       «      }‰j4                  j7                  dd	«      r­tE        |th        «      r�|jk                  «        ‰j4                  d   jm                  «       }t)        jn                  jp                  jr                  |Ž }|ju                  «       |k7  r7|s5t        jv                  |«      }t        jx                  j{                  ||«      }|rDtE        |th        «      r4tE        |j|                  t        j~                  «      r|jk                  «        |s|�r%tE        ‰j4                  d   t(        j€                  «      �rý|r‰ jf                  j7                  ‰«      }n‰j4                  d   jm                  «       }|��¿t        |«      dkD  �r°t0        j‚                  xs | xr | }t(        j„                  j‡                  ‰j4                  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Ø‰j4                  d   j•                  «       s$tE        |j|                  t        j~                  «      r6t        jx                  j{                  |t        jv                  |«      |¬«      }na|D �cg c]4  }tE        |t(        jF                  «      r|jL                  jN                  n|‘Œ6 }}t        jx                  j—                  |||¬«      }t        t        ‰jd                  «      «      }|dkD  �rtE        |th        «      �r‰jd                  D �]Ñ  }|j                  t˜        v �rn|j›                  «        t(        j*                  jT                  jœ                  jX                  t(        j*                  jT                  jž                  jX                  t(        j*                  jT                  j                   jX                  g}g }‰ j¢                  s=|j¥                  t(        j*                  jT                  j¦                  jX                  «       t(        j¨                  jª                  �rŸ|t(        j*                  j¬                  j®                  jX                  t(        j*                  j¬                  j®                  j°                  t(        j*                  jT                  j²                  jX                  t(        j*                  j´                  j¶                  jX                  t(        j*                  j´                  j¶                  j¸                  t(        j*                  j´                  j¶                  j°                  t(        j*                  j´                  j¶                  jº                  gz  }|t(        j*                  j¬                  j¼                  jX                  t(        j*                  j¬                  j¼                  j°                  t(        j*                  j¬                  j¾                  j°                  t(        j*                  j¬                  jÀ                  jX                  t(        j*                  j´                  jÂ                  jX                  t(        j*                  j´                  jÂ                  j°                  gz  }t(        j¨                  jÄ                  r2|t(        j*                  jÆ                  jÈ                  jX                  gz  }|j                  |v rPt        jx                  j{                  |t        jv                  ‰j4                  d   jm                  «       «      d¬«      }|j                  |v rd‰|jÊ                  d   u rSt        jx                  j{                  |t        jv                  tÍ        ‰j4                  d   jÎ                  «      «      «      }|j                  dk(  s�Œ–tE        |j|                  j|                  tÐ        tÒ        f«      s�ŒÂ|jk                  «        �ŒÔ |jÕ                  t        ‰jd                  «      «       tE        |th        «      r |j×                  «       r|j›                  «        tE        |th        «      rbtE        |j|                  tØ        «      rH|j|                  j|                  }tE        |tÐ        «      r"|jÛ                  d¬«      r|jk                  «        d d d «       d d d «       d d d «       tE        th        «      �r#tE        |j|                  t        jØ                  «      �rþtE        |j|                  j|                  t        jÜ                  «      r(|j|                  j|                  jß                  d‰«       �n¨tE        |j|                  j|                  t        jà                  «      �ry|j|                  j|                  jß                  d‰«       tE        |j|                  j|                  t        jâ                  «      ritE        |j|                  j|                  j|                  t        jÜ                  «      r1|j|                  j|                  j|                  jß                  d‰«       n¼tE        |j|                  j|                  t        jä                  «      rŽ|j|                  j|                  jæ                  sntE        |j|                  j|                  jè                  d   t        jà                  «      r3|j|                  j|                  jè                  d   jß                  d‰«       ‰ jë                  |«       t        tì        jî                     «       }‰ j                  ‰.d  D ]  }||jñ                  «       z  }Œ ‰ j                  ‰/d  D ]  }||jñ                  «       z  }Œ d+ˆ.ˆ/ˆ fd„} ‰j                  dk7  �r2t        jò                  jô                  jö                  }!d,ˆ fd „}"|D �]R  }#‰ jø                  jû                  |#g «      }$|!jü                  |#   }%|!jÿ                  «       �j                  |%«      sxd-d!„}& |&|%�j                  «      r' |"|#|%�j                  k\  |#› d"|%�j                  › �«        |&|%�j                  «      r' |"|#|%�j                  k  |#› d#|%�j                  › �«       |$D ]‡  }'t‰        |'jN                  «      }(|(‰ �j                  z
  })|)r@�t	        |)�t
        ¬$«      }*‰ jø                  �j                  |*g «      j¥                  |'«       Œj |"|'jN                  |'jN                  › «       Œ‰ �ŒU ‰ x�j                  |z  c_ƒ        �t        t        jò                  jô                  jö                  ‰j4                  j7                  d%i «      «      }+|+€J ‚t        d&„ |+�j                  «       D «       «      },||,k\  s'J d'|› d"|,› d(‰�j                  «       › d) | «       › �«       ‚|S c c}w # 1 sw Y   �ŒxY w# 1 sw Y   �ŒxY w# 1 sw Y   �Œ#xY w).Nc                óZ   •— t         j                  dt        ‰j                  «      | «       y )Nzlowering %s %s)r†  r‡  r   Úformat_node)Úmsgrj  s    €rk   r‡  z%GraphLowering.run_node.<locals>.debug­  s   ø€ Ü�I‰IÐ&¬
°1·=±=Ó(AÀ3ÕGrl   r   )ÚCompilerBisectorr¡   ÚinductorrE   c                 ó   •— t        ‰ «      S rg   )Úreprrr  s   €rk   ú<lambda>z(GraphLowering.run_node.<locals>.<lambda>Æ  s   ø€ ¼¸a»€ rl   rC   F)Úadd_to_fallback_setr,  Ú-user_defined_triton_kernel_layout_constraintsr*  Úarg_kwarg_valsr&   z1Unknown triton_kernel_default_layout_constraint: r‚   rh  rÐ   c              3  ó:   K  — | ]  }|j                   d k(  –— Œ y­w)r“   Nr”   )r}   r¬  s     rk   r   z)GraphLowering.run_node.<locals>.<genexpr>  s   è ø€ ÒD°D˜DŸG™G xÕ/ÑDùs   ‚c              3  ó:   •K  — | ]  }|j                   ‰v –— Œ y ­wrg   )rŒ   )r}   r¬  Úas_strided_opss     €rk   r   z)GraphLowering.run_node.<locals>.<genexpr>	  s   øè ø€ ò *Ø26�—‘˜~Ô-ñ*ùó   ƒÚinductor_realize_to_stridesé   )Úallow_paddingTr“   éd   )Ú	thresholdÚorigin_nodec                 óÜ   •— ‰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     rk   r   zBGraphLowering.run_node.<locals>.format_new_defs.<locals>.<genexpr>Ê  s2   è ø€ ò àð (¨×(CÑ(CÓ(EÐ'FÀfÈRÈDÐPRÔSñùs   ‚!#z***
)rð   r±  Úextendrñ   r‰   )rÂ  rk  Úbuffer_watermarkÚoperation_watermarkr4  s     €€€rk   Úformat_new_defsz/GraphLowering.run_node.<locals>.format_new_defsÅ  s†   ø€ ð  Ÿ<™<Ð(8Ð(9Ð:öàð (¨×(DÑ(DÓ(FÐ'GÀvÈcÈUÐRTÒUðˆAð ð �H‰Hñ àŸ/™/Ð*=Ð*>Ð?ôô ð —<‘< “?Ð"ùòs   “A)r  c                óz   •— t        j                  | |«      }‰j                  |d¬«       ‰j                  |«       y )NTrØ  )r(   ÚAssertScalarrÞ  r×  )rE  r™  Ú	assert_opr4  s      €rk   Úmake_assertz+GraphLowering.run_node.<locals>.make_assertç  s4   ø€ ÜŸO™O¨D°#Ó6�	Ø×$Ñ$ Y¸Ð$Ô>Ø×'Ñ'¨	Õ2rl   c                óZ   — | t         t          fv ry	 t        | «       y# t        $ r Y yw xY w)NFT)r%   r  Ú	TypeError)rm  s    rk   Úis_convertiblez.GraphLowering.run_node.<locals>.is_convertibleò  s5   € Ø¤¬&¨Ð 1Ñ1Ø#(ð)Ü œFØ#'øÜ(ò )Ù#(ð)ús   ’ ž	*©*z >= z <= )r•  Úunbacked_bindingsc              3  ó„   K  — | ]8  }t         j                  j                  j                  j	                  ||«      –— Œ: y ­wrg   )rY   r�  r6  Úunbacked_renamingsr¿   )r}   rm  s     rk   r   z)GraphLowering.run_node.<locals>.<genexpr>  s5   è ø€ ò 3àô —‘×%Ñ%×8Ñ8×<Ñ<¸QÀ×Bñ3ùs   ‚>A zfailed z (inductor >= fx)
fx node is: z
new operations are:

)r™  rê   r¨   rì  ©r¨   rê   )rE  r    r™  rê   r¨   rì  )rm  r   r¨   r}  )ŠÚ!torch._inductor.compiler_bisectorrš  rA  rð   rñ   r$   r€   Úfetch_args_kwargs_from_envrO   r(   r  Úcurrent_originsru  rY   rŒ   r"  r#  rD   Údisable_subsystemrC   rt   r€  rˆ  r‰  r'   Ú'triton_kernel_default_layout_constraintr˜   r¿   r@   rA   r¡   r/  rˆ   r‚   rn   rD  ÚSymFloatÚSymBoolr�   rE  rÓ   Úrun_noderª   Ú
as_stridedr|  Úas_strided_Úas_strided_scatterÚresizeÚ	resize_asr²   r©  rÂ   r>   rð  r?  rŠ  r  Úany_is_symbolicÚmaybe_get_strideÚget_stride_orderrZ  Úrequire_stride_orderrO  r]  r   rÁ   Ú_prims_commonÚis_non_overlapping_and_denser   rQ  r  ÚFlexibleLayoutÚ stride_ordered_for_memory_formatÚchannels_lastÚ_is_viewÚrequire_exact_stridesrH   Úrealize_hintr¬   ÚmmÚ_int_mmr×   rÖ  r«   r(  Ú_has_mkldnnr‚  Ú_linear_pointwiseÚbinaryÚmkldnn_rnn_layerÚonednnÚqlinear_pointwiser  Úbinary_tensorÚ_convolution_pointwiseÚ_convolution_pointwise_Ú _convolution_transpose_pointwiseÚqconv2d_pointwiseÚhas_mklÚmklÚ_mkl_linearri   r   r=  r;   r<   Ú
mark_reuseÚhas_exceeded_max_readsr=   Úhas_large_inner_fnÚLoopsÚ_post_init_setattrÚBufferrP  ÚMultiOutputÚindicesÚinputsrî  ro   rp   r±  r  ræ   r6  rä   ÚpopÚvar_to_rangeÚ _default_unspecified_value_rangeÚissubsetÚlowerÚupperrå   rµ   rê   Ú
setdefaultr   ró   r˜  )1r4  rj  r‡  rš  ÚoriginsÚis_call_functionri   rj   rh  r7  r8  r¡  Úinp_argsÚ
inp_kwargsÚ	is_outputÚis_user_visibleÚis_input_for_as_stridedr  Úsym_stridesÚstride_orderr¨  ÚdenseÚunbacked_symbols_in_stridesrm  Ú	num_usersr¬  Úneed_fixed_layoutÚneed_fixed_channels_last_layoutÚcurrÚnew_unbacked_defsrÂ  r€   rµ  r6  r¹  Úi0ÚrasÚvrr¼  ÚraÚfvsÚmissingÚi1r½  Úrenamed_unbacked_bindingsr¤  r³  r´  r7  s1   ``                                           @@@€rk   rÈ  zGraphLowering.run_node¬  s  ý€ õ	Hõ 	Gä˜tŸ|™|Ó,ÐÜ! $§/¡/Ó2Ðô $.¨q¨c£?ˆØŸ4™4 ?Ñ2ÐÙØ×:Ñ:¸1Ó=‰LˆD�&Ø”~ d¨FÓ3Ñ3ˆGä�I‰I×%Ñ% gÓ.ñg	)à×!Ñ! !Ó$ñg	)ô ×Ñ˜qÓ!ñg	)ð —‘˜Ò'Ø—H‘H¤H×$4Ñ$4Ñ4ä9¸!Ô<Ø'×9Ñ9Ø" K³ôñ
 Ð(Ô)ØNÔ)¨!¯(©(ÈÔNØðàñ’ð
 —‘˜Ò'Ø—H‘H¤§	¡	× 6Ñ 6× UÑ UÑUÜ×BÑBÐFWÒWáÐEÔFä×BÑBØ1ò2ð  $�HØ!'�Jà)*¯©¯©Ð4DÓ)EÐE�~ÐEØ#1°!Ñ#4˜Ø%3°AÑ%6˜
Ü'@Ø  &¨(°Jó(™˜™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¼*Ø—‘�u‘œuŸ|™|õ;ñ #Ø"×>Ñ>×BÑBÀ1ÓE‘GàŸf™f U™m×2Ñ2Ó4�GàÑ&¬3¨w«<¸!Ó+;ä×*Ñ*ÒA°/Ð.Aò%6à5Ð5ð "ô "×/Ñ/×LÑLØŸ™˜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¬¯©ô8ô &(§_¡_×%IÑ%IØ &Ü "× 3Ñ 3°GÓ <Ø.;ð &Jó &™Fð *1ö'à$%ô 0:¸!¼U¿\¹\Ô/J §¡§¢ÐPQÑ Qð'˜Gð 'ô &(§_¡_×%JÑ%JØ &¨¸}ð &Kó &˜Fô œJ q§w¡wÓ/Ó0ˆIØ˜1‹}¤¨F´IÕ!>ØŸG™Gó ;-�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× BÑ B× JÑ JÜ %§	¡	× 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Ø"ŸN™NÖ,ðw;-ð| ×!Ñ!¤# a§g¡g£,Ô/ô ˜&¤)Ô,°×1NÑ1NÔ1Pð ×#Ñ#Ô%ô ˜&¤)Ô,´¸F¿K¹KÌÔ1TØ—{‘{×'Ñ'�Ü˜d¤IÔ.à×.Ñ.¸Ð.Ô=ØŸ™Ô(÷Og	)÷ g	)÷ g	)ôb �fœiÕ(¬Z¸¿¹ÄRÇ]Á]Õ-SÜ˜&Ÿ+™+×*Ñ*¬B¯H©HÔ5Ø—‘× Ñ ×3Ñ3°MÀ1ÖEÜ˜FŸK™K×,Ñ,¬b¯i©iÕ8Ø—‘× Ñ ×3Ñ3°MÀ1ÔEÜ˜fŸk™k×.Ñ.´×0AÑ0AÔBÄzØ—K‘K×$Ñ$×)Ñ)¬2¯8©8ôHð —K‘K×$Ñ$×)Ñ)×<Ñ<¸]ÈAÕNô ˜vŸ{™{×/Ñ/´·±Ô@Ø"ŸK™K×,Ñ,×4Ò4ä! &§+¡+×"2Ñ"2×"9Ñ"9¸!Ñ"<¼b¿i¹iÔHØŸ™×(Ñ(×/Ñ/°Ñ2×EÑEÀmÐUVÔWà×Ñ˜vÔ&ä&¤u§|¡|Ñ4Ó6ÐØ—<‘<Ð 0Ð 1Ð2ò 	@ˆCØ ×!=Ñ!=Ó!?Ñ?Ñð	@à—/‘/Ð"5Ð"6Ð7ò 	?ˆBØ ×!<Ñ!<Ó!>Ñ>Ñð	?÷		#ð �4‰4�=Ó ô* Ÿ™×(Ñ(×2Ñ2ˆIõ3ð
 (ó ;�Ø×(Ñ(×,Ñ,¨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Õ:ò;ð);ð: ×'Ó'Ð+<Ñ<Õ'å 9Ü—‘× Ñ ×*Ñ*¨A¯F©F¯J©JÐ7JÈBÓ,Oó!Ðð %Ð0Ð0Ð0ô )3ñ 3à*×/Ò/Ó1ô3ó )Ð%ð %Ð(AÒAð ØÐ+Ð,¨DÐ1JÐ0Kð LØ Ÿ}š}›Ð/ð 0*Ù*9Ó*;Ð)<ð>óÐAð ˆùò'÷[g	)ñ g	)ú÷ g	)ñ g	)ú÷ g	)ñ g	)úsr   ÂAI"Â.AIÃX4AIÛ89AI
Ü1S9AIð,*AIñCAIô1AIô9AI"ÁIAIÁIAIÁIAIÁIAI	ÁIAI"ÁI"AI,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_codegenr1   ÚsysÚplatformr:  s    rk   Ú!validate_can_generate_cpp_wrapperz/GraphLowering.validate_can_generate_cpp_wrapper)  s@   € Ü×%Ò%Ü(Ð)BÓCÐCä�<‰<Ð;Ñ;Ü(Ð+@ÄÇÁÀÐ)OÓPÐPð <rl   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 d| j                  › d�«       ‚|j                  ||||«      | _        | j                  r_| j                  j                  j                   | j                  _        | j                  j                  j"                  | j                  _        y y )	NrÎ   r˜   r&   zDoes not support mixing {}ú+r   zDevice z not supported)rì   rã   ÚdiscardrA  Úformatr‰   ró  rî   r  r  r-   rÿ   r.   r  r   rÝ   Ú_names_iterÚsrc_to_kernel)r4  Úis_subgraphr¥  Úparent_wrapper_codeÚpartition_signaturesrì   Úonly_cpuÚwrapper_code_gen_clss           rk   Úinit_wrapper_codezGraphLowering.init_wrapper_code0  so  € ð ×(Ñ(×-Ñ-Ó/ˆØ×Ñ˜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ØØØØ ó	
ˆÔð ×Òð -1×,=Ñ,=×,JÑ,J×,VÑ,VˆD×ÑÔ)à×!Ñ!×.Ñ.×<Ñ<ð ×ÑÕ+ð	 rl   c                ó  ‡ — t        ˆ fd„dD «       «      �r1t        j                  j                  r‰ j	                  «       S d‰ _        ‰ j                  «       j                  }	 	 	 	 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} t3        ‰ j4                  «      D �	�
cg c]2  \  }	}
|
‰ j,                  v rt        ||	   t        j6                  «      r|	‘Œ4 }}	}
|D ]/  }	||	   }t        |t        j6                  «      sJ ‚ ||«      ||	<   ~Œ1 t        j8                  j:                  j=                  «       5   ||«       ddd«       ~d‰ _        ‰ j>                  j#                  «        ‰ j@                  j#                  «        ‰ jB                  j#                  «        t        jD                  jF                  jH                  j#                  «        t        jD                  jF                  jJ                  j#                  «        tM        jN                  «        t        jP                  d	di«      5  ‰ j	                  «       cddd«       S ‰ j	                  «       S c c}w c c}w c c}w c c}
}	w # 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rg   )rì   )r}   r   r4  s     €rk   r   z9GraphLowering.codegen_with_cpp_wrapper.<locals>.<genexpr>`  s   øè ø€ ÒI¨vˆv˜×*Ñ*Ô*ÑIùr¥  )ÚcudaÚxpuFc                ó.  — | €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)rn   rt   rD  rÆ  r�   Úhintr   r   r   rê   r²  )rè  s    rk   Úmaterializez;GraphLowering.codegen_with_cpp_wrapper.<locals>.materializej  sx   € ð �yØ#Ü# A¬¯©´e·n±nÐ'EÔFà Ÿv™vŸ{™{Ð*Ü# A¤zÔ2Ü% a›yÐ(ä)¨!¬U¯\©\Ô:ð ØDÄsÌ4ÐPQË7Ã|ÑSóÐ:ð  !˜rl   Nr&   )Úclone_preserve_stridesTztriton.autotune_at_compile_time)rè  z1Union[torch.SymInt, torch.SymFloat, torch.Tensor]r¨   zUnion[int, float, torch.Tensor]))r²   r'   ÚtritonÚautotune_at_compile_timeÚcodegenr  Úcompile_to_moduleÚcallrt   Ú_guardsÚTracingContextÚtry_getrn   rY   Úreal_inputsrX   Úoutput_stridesÚclearÚparams_flatr/  ÚchainrÕ   r  Ú
compile_fxr-  r†   rè   r   r  r  r	  rú   rù   rþ   r  ræ   Úprecomputed_replacementsÚinv_precomputed_replacementsr)   ÚresetÚpatch)r4  Úcompiledr,  Útracing_contextÚparamr9  rè  r6  r-  rœ   r  r  Úmutated_inps   `            rk   Úcodegen_with_cpp_wrapperz&GraphLowering.codegen_with_cpp_wrapperZ  sý  ø€ ô ÓI¸ÔIÕIÜ�}‰}×5Ò5ð —|‘|“~Ð%ð $)�Ô Ø×1Ñ1Ó3×8Ñ8�ð!ØHð!à4ó!ô  #(§-¡-×">Ñ">×"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Ñ(Ù'ð(ô —[‘[×1Ñ1×HÑHÓJñ *Ù˜[Ô)÷*àð $(�Ô Ø×$Ñ$×*Ñ*Ô,Ø×'Ñ'×-Ñ-Ô/Ø×'Ñ'×-Ñ-Ô/Ü—‘× Ñ ×9Ñ9×?Ñ?ÔAÜ—‘× Ñ ×=Ñ=×CÑCÔEÜ—‘”Ü—\‘\Ð#DÀeÐ"LÓMñ *ØŸ<™<›>÷*ñ *ð —<‘<“>Ð!ùòy#ùò
#ùò#ùó*÷&*ñ *ú÷*ð *ús0   Ã&MÄMÅ'M"Æ"7M'È8	M-Ì.M:Í-M7Í:N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)r  rF  r'   r?  rñ   )r4  rF  s     rk   Ú_update_schedulerzGraphLowering._update_scheduler¿  s;   € õ 	)ä�\‰\Ð.°Ó6ñ 	8Ù& t§¡Ó7ˆDŒN÷	8÷ 	8ñ 	8ús	   �>¾Ac                óâ  ‡‡— t        dd¬«      5  | j                  «        | j                  «        t        j                  j                  | j                  | j                  j                  «       | j                  j                  | «       | j                  j                  «        t        j	                  dt        j                  j                  «       t        j                  j                  «       }|r)|\  ŠŠt!        dd„ ˆfd„¬«       t!        dd	„ ˆfd
„¬«       | 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Úartifactc                 ó   — dddœS )NÚ)inductor_triton_kernel_to_post_grad_nodesÚjson©r  Úencodingrh   rh   rl   rk   rž  z'GraphLowering.codegen.<locals>.<lambda>ä  s   € Ø KØ$*ñ)€ rl   c                 ó.   •— t        j                  ‰ «      S rg   ©rN  Údumps)Ú
debug_infos   €rk   rž  z'GraphLowering.codegen.<locals>.<lambda>è  s   ø€ ¤t§z¡z°*Ó'=€ rl   )Úmetadata_fnÚ
payload_fnc                 ó   — dddœS )NÚ*inductor_provenance_tracking_node_mappingsrN  rO  rh   rh   rl   rk   rž  z'GraphLowering.codegen.<locals>.<lambda>ì  s   € Ø LØ$*ñ)€ rl   c                 ó.   •— t        j                  ‰ «      S rg   rR  )Únode_mappingss   €rk   rž  z'GraphLowering.codegen.<locals>.<lambda>ð  s   ø€ ¤t§z¡z°-Ó'@€ rl   )r   r%  rG  rY   r‡  Údraw_orig_fx_graphr$  r  r»   r   Úpush_codegened_graphr0  r†  r  r.  Ú1log_inductor_triton_kernel_to_post_grad_node_infor   ÚgeneraterÍ   Úpop_codegened_graph)r4  Úprovenance_inforh  rT  rZ  s      @@rk   r0  zGraphLowering.codegenÊ  s*  ù€ ÜÐ1ÈÔNñ *	Ø×"Ñ"Ô$à×"Ñ"Ô$Ü�G‰G×&Ñ& t§|¡|°T·^±^×5IÑ5IÔJà×Ñ×2Ñ2°4Ô8Ø�N‰N×"Ñ"Ô$ä�I‰IØXÜ—‘×0Ñ0ôô —‘×IÑIÓKð ñ ð $ñØØ!ä Øñ!ó  >õô !Øñ!ó  Aõð ×&Ñ&×/Ñ/°×0AÑ0AÓBˆFØ×Ñ×1Ñ1Ô3Ø÷U*	÷ *	ò *	ús   �EE%Å%E.c                ó  — t        dd¬«      5  |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
        kerenls). The wrapper code is not finalized (via `.generate()`
        call), as this will be done in the parent graph's `codegen()`.
        zGraphLowering.codegen_subgraphTrI  N)r   r   rÿ   r  rG  r  r0  )r4  Úparent_graphs     rk   Úcodegen_subgraphzGraphLowering.codegen_subgraph÷  sj   € ô Ð:ÐRVÔWñ 	%Ø ,× 9Ñ 9ˆDÔØ*×5Ñ5ˆDŒOØ+×7Ñ7ˆDÔà×"Ñ"Ô$Ø�N‰N×"Ñ"Ô$÷	%÷ 	%ñ 	%ús   ŽAA5Á5A>c                óæ   — d}g }g }| j                   j                  D ]N  }|j                  «       }||z  }|j                  ||dz  f«       |j                  ||j	                  «       f«       ŒP |||fS )Nr   r§  )r  r»   Úget_read_write_buffers_sizesrÖ  Úget_estimated_runtime)r4  Útotal_bytesÚnode_countsÚnode_runtimesr�   Ú	num_bytess         rk   Úcount_bytesz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Ð6rl   zOptional[Callable[[str], 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_namerJ  Údynamo_compile_column_us)r   Ú_compile_to_moduler:  s    rk   r1  zGraphLowering.compile_to_module  s9   € ÜØ-Ø!Ø"&Ø%Sô	
ñ 	-ð ×*Ñ*Ó,÷	-÷ 	-ò 	-ús   �*ª3c                óô  ‡
‡— ddl m} | j                  r| j                  «       n| j	                  «       \  Š}t
        j                  j                  rcd| j                  j                  j                  «       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‰
«       t1        dˆ
fd	„ˆfd
„¬«       t5        dd¬«      5  |j7                  |‰
|i | j8                  ¥| j:                  ¥¬«      }	d d d «       || _        ‰
| _        || _         t
        jB                  r#t
        jD                  r	jG                  dd¬«       	jH                  €J ‚tK        |	jH                  «       tL        j!                  d|	jH                  «       t        jN                  d|	jH                  «       t
        jP                  r(tS        d|	jH                  › �tT        jV                  ¬«       tX        j                   j[                  |	jH                  «       tX        j                   j]                  t^        j`                  jc                  |	jH                  «      d   dz   «       |	S c c}}w # t2        $ r t1        dˆfd„¬«       ‚ w xY w# 1 sw Y   �ŒˆxY w)Nr&   )ÚPyCodeCachez%"""
Compile-time auto-tuning block: 
z"""
zOutput code: 
%s)ÚcodezOutput code written to: %sÚinductor_output_codec                 ó   •— d‰ iS )NÚfilenamerh   )Úpaths   €rk   rž  z2GraphLowering._compile_to_module.<locals>.<lambda>N  s   ø€ ˜ TÐ*€ rl   c                 ó   •— ‰ j                   S rg   ©rç  rw  s   €rk   rž  z2GraphLowering._compile_to_module.<locals>.<lambda>O  ó   ø€  <×#5Ñ#5€ rl   )rV  c                 ó   •— ‰ j                   S rg   r{  rw  s   €rk   rž  z2GraphLowering._compile_to_module.<locals>.<lambda>H  r|  rl   zPyCodeCache.load_by_key_pathTrI  )ÚlinemapÚattrs)ÚtimesÚrepeatzCompiled module path: )Úfiler   z.debug)2Ú	codecachert  r  rD  r0  r'   r.  r/  r   Úkernel_autotune_defsÚgetvalueÚkernel_autotune_callsrç  rÊ   rl  rc   r‡  rK   Úinductor_meta_from_configrL   Úbegin_compileÚline_mapÚstack_traceÚwriter   r0  r   Úload_by_key_pathrõ   rö   r  r  r   Úbenchmark_harnessÚprofile_bandwidth_outputÚbenchmark_compiled_moduleÚ__file__re   r†  r¯  Úbenchmark_kernelÚprintr  ÚstderrrY   Úoutput_coderã   Úosry  Úsplitext)r4  rt  rH  Útuning_codeÚinductor_metaÚline_nor�   r~  r•  Úmodry  r   s             @@rk   rr  z GraphLowering._compile_to_module%  sæ  ù€ Ý*ð
 04×/?Ò/?ˆD×)Ñ)Ô+ÀTÇ\Á\Ã^ñ 	ˆ�aô �=‰=×1Ò1ð7à×#Ñ#×8Ñ8×AÑAÓCñDð ×#Ñ#×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ô Ø&Û*Û5õô
 Ð8ÐPTÔUñ 	Ø×.Ñ.ØØØØD˜Ÿ™ÐD¨4×+CÑ+CÐDð	 /ó ˆC÷	ð ˆŒØˆŒØ$ˆÔä×#Ò#¬×(GÒ(Gà×)Ñ)°¸!Ð)Ô<ð �|‰|Ð'Ð'Ð'ä˜Ÿ™Ô%Ü�	‰	Ð.°·±Ô=Ü×ÑÐ9¸3¿<¹<ÔHÜ×"Ò"ÜÐ*¨3¯<©<¨.Ð9ÄÇ
Á
ÕKÜ	�‰×Ñ˜CŸL™LÔ)Ü	�‰�‰”R—W‘W×%Ñ% c§l¡lÓ3°AÑ6¸ÑAÔBØˆ
ùóYøô ò 	ÜØ&ã5õð
 ð	ú÷	ñ 	ús*   Ä:M Å	M	Å!7M Æ9.M-Í	M ÍM*Í-M7c                óÎ  — g }t        j                  d«      }t        j                  d«      }| j                  D ]©  }t        |t        j
                  «      r*|j                  | j                  › dt        |«      › �«       ŒGt        |t        j                  «      r*|j                  | j                  › dt        |«      › �«       Œ‹|j                  |j                  «       «       Œ« |S )Nr   Ú_noneÚ_shape)r/  r0  rË   rn   r(   ÚNoneAsConstantBufferrÖ  r  r  rY  rc  )r4  ÚnamesÚshape_counterÚnone_counterr�   s        rk   Úget_output_nameszGraphLowering.get_output_namesl  s³   € ØˆÜ!Ÿ™¨Ó*ˆÜ —‘ qÓ)ˆØ×&Ñ&ò 	.ˆDÜ˜$¤× 7Ñ 7Ô8Ø—‘ §	¡	˜{¨%´°\Ó0BÐ/CÐDÕEÜ˜D¤"×":Ñ":Ô;Ø—‘ §	¡	˜{¨&´°mÓ1DÐ0EÐFÕGà—‘˜TŸ]™]›_Õ-ð	.ð ˆrl   c                ó.  — || j                   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Ð  rA  rQ  r8   rë   r   s     rk   Úis_unspec_argzGraphLowering.is_unspec_argy  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ð	3rl   )NNNFFNNFFFNNNNNN)$r5  útorch.fx.GraphModulerÕ   zOptional[Sequence[object]]r6  zOptional[ShapeEnv]r  zOptional[int]r  r}  r  r}  r×   zOptional[bool]r  z4Optional[Callable[[list[ir.ExternKernelNode]], Any]]rÍ   r}  rÙ   r}  rÚ   r}  rò   zOptional[dict[str, int]]rÛ   úOptional[str]rÜ   r¦  rÝ   zOptional[GraphLowering]r  r¦  rÞ   zOptional[Sequence[int]]r¨   rì  )r¨   rì  )rF  útorch.Tensorr¨   z=tuple[Sequence[Union[int, Expr]], Sequence[Union[int, Expr]]])rF  r§  r¨   z)tuple[list[sympy.Expr], list[sympy.Expr]])r�   zOUnion[ir.TensorBox, ir.StorageBox, ir.Buffer, WorkspaceArg, ir.TorchBindObject]r¨   zSequence[Expr])r�   z2Union[ir.Buffer, WorkspaceArg, ir.TorchBindObject]r¨   r   )r   z.Union[torch._inductor.ir.IRNode, device, None]rY  r*   r¨   r}  )r¨   útorch.device)r   r¨  r¨   úIterator[None]rÀ  )r5  r_   rÍ   r}  r¨   r}  )r  rê   r¨   rê   )r5  r¥  rÕ   zlist[torch.Tensor]r¥  rê   r¨   r¤  )r¨   zOrderedSet[Node])r  rê   r¨   rì  )r   r¨  r¨   rì  )r¨   z,torch._subclasses.fake_tensor.FakeTensorMode)r»  rê   r¨   z<Optional[Union[ir.TensorBox, ir.Buffer, ir.TorchBindObject]])r¾  ú
sympy.Exprr¨   rì  )r»  rê   r¨   z2Union[ir.TensorBox, ir.Buffer, ir.TorchBindObject])r»  rê   r¨   ztorch.dtype)r»  rê   r¨   zUnion[int, Expr])ri   r   r¨   r   )r€   zir.Operationr¨   rê   )rÝ  z	ir.BufferrÙ  r}  r¨   rê   )rá  ú	list[str]r¨   rê   )rí  rë  r¨   rì  )r  rê   r¨   r§  )r  r¦  rO  zUnion[Tensor]r¨   rê   rg   )rO  r   r  r¦  r¨   r>   )r  rê   r  zOptional[torch.device]r¨   rê   )rŒ   rê   ri   útuple[object]rj   údict[str, object]r¨   zUnion[Expr, TensorBox, None])rŒ   r   ri   r   rj   údict[str, Any]r¨   r   )r>  r§  r¨   r}  )rŒ   rê   ri   z	tuple[()]rj   r­  r¨   z8Union[Constant, TensorBox, ir.Subgraph, TorchBindObject])rŒ   r   ri   r   rj   r   r¨   r   )rŒ   rê   ri   r¬  rj   r­  r¨   rì  )r�   r§   )r¨   r©  )rl  r§   r7  ú
tuple[Any]r8  r®  r�  r¯  rŽ  r®  r¨   rì  )rj  r§   r¨   Úobject©FNNN©
r   r}  r¥  r¦  r!  zOptional[PythonWrapperCodegen]r"  z!Optional[GraphPartitionSignature]r¨   rì  )r¨   z)tuple[ValueWithLineMap, ValueWithLineMap])rb  rÊ   r¨   rì  )r¨   zVtuple[int, list[tuple[BaseSchedulerNode, int]], list[tuple[BaseSchedulerNode, float]]])r¨   r]   )r¨   r«  )r  rê   r¨   r}  )AÚ__name__Ú
__module__Ú__qualname__Ú__annotations__rÔ   r9  rK  rM  rR  rW  rZ  r]  Ú
contextlibr   r_  rd  ÚstaticmethodrÖ   r¡  r¦  r  r°  r´  Úpropertyr�  r¼  r¿  rÃ  rÇ  rÐ  rÒ  r×  rÞ  râ  rî  rñ  rô  r  r  rþ  r  r¡   r?  rJ  rO  rR  r“   rg  ru  rx  r/  rÈ  r  r%  rD  rG  r0  rc  rk  rl  r1  rr  r¢  r¤  Ú__classcell__©r7  s   @rk   rÊ   rÊ   
  s¨  ø… Ø"Ó"ð
 6:Ø(,Ø"&Ø!ØØ%)ð Ø"Ø!Ø$Ø7;Ø,0Ø+/Ø04Ø"Ø37ð)k2à ðk2ð 3ðk2ð &ð	k2ð
  ðk2ð ðk2ð ðk2ð #ðk2ð!
ðk2ð ðk2ð ðk2ð ðk2ð 5ðk2ð  *ð!k2ð" )ð#k2ð$ .ð%k2ð& ð'k2ð( 1ð)k2ð* 
õ+k2óZ1ð# Øð# à	Fó# ðJØðà	2óð#ð
ð#ð
 
ó#ð$EØFðEà	óEðMà>ðMð  ðMð 
ó	Mó4ð ×Ñò(ó ð(óð òaó ðaóFð
à ð
ð +ð
ð ð	
ð
 
ó
ó60ódAó
Dð òó ððØðà	Eóó$FðQØðQà	;óQó8ó,
8õ&óð FKõ ó(ð
Ø@ðà	óóó
ð Ø!ðØ)6ðà	óð@ 37ð
Øð
Ø"/ð
à	ó
óð `àð`ð ð`ð "ð	`ð
 
&õ`õDVðp ò5ó ð5ð/7àð/7ð ð/7ð "ð	/7ð
 
Bó/7óbóð[
àð[
ð ð[
ð "ð	[
ð
 
õ[
óz ð ò$ó ð$ð ò$ó ð$ðH:àðH:ð ðH:ð #ð	H:ð
 ðH:ð #ðH:ð 
óH:õT{ózQð "Ø'+Ø>BØBFð(àð(ð %ð(ð <ð	(ð
 @ð(ð 
ó(ðTc"à	2óc"óJ	8ó+óZ%ð$7ð
ó7ð" 9=ÐÐ5Ó<ó-óEóN÷3rl   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 rg   )r£  rÓ   rÔ   )r4  r£  ri   rj   r7  s       €rk   rÔ   zSubgraphLowering.__init__Š  s   ø€ ØˆŒÜ‰Ñ˜$Ð) &Ó)rl   c                óf   •— t         ‰| �  d| j                  | j                  j                  ¬«       y )NT)r   r¥  r!  )rÓ   r%  r  r£  r   )r4  r   r¥  r!  r"  r7  s        €rk   r%  z"SubgraphLowering.init_wrapper_codeŽ  s.   ø€ ô 	‰Ñ!ØØŸ)™)Ø $§¡× 8Ñ 8ð 	"õ 	
rl   )r£  rÊ   ri   r   rj   r   r¨   rì  r±  r²  )r³  r´  rµ  Ú__doc__rÔ   r%  rº  r»  s   @rk   r¤  r¤  „  sV   ø„ ñõ
*ð "Ø'+Ø>BØBFð
àð
ð %ð
ð <ð	
ð
 @ð
ð 
÷
ñ 
rl   r¤  )ri   r   rj   r   r¨   rì  )ry   rª  r¨   zOptional[torch.dtype])r€   r   r¨   r}  )r‹   r_   rŒ   rê   r¨   z1Union[Tensor, torch._C.ScriptObject, GraphModule])r™   r`   r¨   údict[Node, tuple[int, ...]])r™   r`   rÂ   rÀ  r¨   rì  )£Ú
__future__r   r·  r'  r/  rN  Úloggingr"  r•  rÈ  r  r  Úcollectionsr   r   Útypingr   r   r   r	   r
   r   ro   r   rt   Útorch._loggingÚtorch.fxr   r   Útorch._decompr   Útorch._dynamo.utilsr   r   Ú"torch._library.fake_class_registryr   r   r   Útorch._prims_commonr   r   Útorch._subclasses.fake_tensorr   Ú%torch.fx.experimental._backward_stater   Útorch.fx.experimental.sym_noder   r   Ú%torch.fx.experimental.symbolic_shapesr   r   r   r   r   r    r!   Útorch.fx.noder"   Útorch.utils._mode_utilsr#   Útorch.utils._ordered_setr$   Útorch.utils._sympy.numbersr%   rÐ   r'   r(   r)   Úcodegen.commonr*   r+   r,   r-   r.   r/   r0   Úexcr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rH  r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   ÚruntimerK   Úruntime.autotune_cacherL   ræ   rM   r  rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   ÚvirtualizedrX   rY   Úcollections.abcrZ   r[   r\   Útypesr]   Útorch._higher_order_ops.effectsr^   r_   Útorch.fx.graphr`   Úcodegen.wrapperra   r  rb   Útorch._inductor.codecacherc   Ú	getLoggerr³  r†  Ú_loggingÚgetArtifactLoggerr®  r€  rª   r0  r  r  Útorch._inductor.fb.utilsre   rz   r‚   r‘   rž   rÈ   rB  ÚInterpreterrÊ   r¤  rh   rl   rk   ú<module>rã     sÒ  ðÝ "ã Û Û Û Û Û Û 	Û 	Û 
Û Ý #Ý %ß J× Jã Ý ã Û Û ß  Ý ,ß 4Ý ?ß 7÷õ 5Ý ?ß L÷÷ ñ õ Ý /Ý /Ý -ç !Ñ !÷÷ ñ ÷ó ÷÷ ÷ ñ ÷÷ ÷ ñ õ $Ý 8Ý &÷÷ ÷ ÷ (ñ ß<Ñ<Ý å;Ý$Ý$Ý5Ý,å 5ð €g×Ò˜Ó!€Ø—’×0Ò0°¸<ÓH€à‡y‚y‡~‚~€à*˜9Ÿ?š?Ó,Ð à€6×ÒÔÞ8óóó(ð
Ø	ðØ!ðà6óó
ðJ/ØðJ/Ø+FðJ/à	óJ/ôZw3�E—H’H×(Ò(ô w3ôt;
�}õ 
rl   