§
    ž²Åj2h ã            	       ó
  — 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 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZ d dl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(m)Z) d dl*m+Z+ d dl,m-Z- d dl m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE ddlFmGZGmHZHmIZI ddlJmKZKmLZLmMZMmNZNmOZOmPZP ddlQmRZR ddlSmTZTmUZUmVZVmWZW ddlHmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa ddlbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZl ddlmmnZn ddlompZp ddlqmrZr dd lsmtZt dd!lumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~ dd"lm€Z€m�Z� erd d#l‚mƒZƒ d d$l„m…Z…  ej†        e‡¦  «        Zˆej‰         Š                    e‡d%¦  «        Z‹ejŒ        j�        Z� ejŽ        ¦   «         Z� eGj�        ¦   «         rd d&l‘m’Z’ n
d'ed(ed)dfd*„Z’d+ej“        d,e”d)e•fd-„Z–d.ej        d)eej“                 fd/„Z—d0ed)e•fd1„Z˜d2e.d3e”d)ee"ej™        jš        e.f         fd4„Z›d5e=d)ee?eeœd6f         f         fd7„Z�d5e=d8ee?eeœd6f         f         d)dfd9„Zž G d:„ d;ejŸ        j         ¦  «        Z¡ G d<„ d=e¡¦  «        Z¢dS )>é    N)Údefaultdict)Úcontextmanager)Ú
ModuleType)ÚAnyÚCallableÚDefaultDictÚDictÚIterableÚIteratorÚListÚNoReturnÚOptionalÚSequenceÚTupleÚTYPE_CHECKINGÚUnion)ÚExpr)ÚdeviceÚTensor)Úget_decompositions)ÚdefakeÚdynamo_timed)Ú
LazyStringÚtrace_structured)Úmake_channels_last_strides_for)Ú
FakeTensor)ÚGraphModule)ÚBackwardState)Úmagic_methodsÚmethod_to_operator)Úfree_unbacked_symbolsÚhas_free_symbolsÚresolve_unbacked_bindingsÚRuntimeAssertÚShapeEnvÚSympyBooleanÚSymTypes)ÚGraph)Ú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)ÚPythonWrapperCodegen)ÚCppWrapperCodegenErrorÚLoweringExceptionÚMissingOperatorWithDecompÚMissingOperatorWithoutDecomp)
ÚConstantÚDonatedBufferÚFixedLayoutÚget_device_typeÚInputBufferÚ	PointwiseÚ	ReductionÚ
StorageBoxÚ	TensorBoxÚTorchBindObject)
Ú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)ÚBaseSchedulerNode)Ú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)ÚNullHandlerÚV)Ú_EffectType)Úoutput_code_logÚ
perf_hints)Úlog_module_codeÚargsÚkwargsÚreturnc                  ó   — d S ©N© )rc   rd   s     úFC:\Projects\Historical\venv\Lib\site-packages\torch/_inductor/graph.pyrb   rb   †   s   € Øˆó    ÚdtypeÚdevice_typec                 ó0  — t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j	        t           j
        t           j        t           j        t           j        h}|dk    r||                     t           j        ¦  «         |                     t           j        ¦  «         |                     t           j        ¦  «         |                     t           j        ¦  «         | |v S )NÚcuda)ÚtorchÚfloat32Úfloat64Úint64Úint32Úint16Úint8Úuint8ÚboolÚbfloat16Ú	complex32Ú	complex64Ú
complex128Úfloat16ÚaddÚfloat8_e4m3fnÚfloat8_e5m2Úfloat8_e4m3fnuzÚfloat8_e5m2fnuz)rk   rl   Úsupported_dtypes      ri   Úsupported_dtype_of_cpp_wrapperrƒ   Š   s¿   € åŒÝŒÝŒÝŒÝŒÝŒ
ÝŒÝŒ
ÝŒÝŒÝŒÝÔÝŒð€Oð �fÒÐØ×Ò�EÔ/Ñ0Ô0Ð0Ø×Ò�EÔ-Ñ.Ô.Ð.Ø×Ò�EÔ1Ñ2Ô2Ð2Ø×Ò�EÔ1Ñ2Ô2Ð2à�OÐ#Ð#rj   Úconstant_bufferc                 óŽ  — 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 d S )Nzgget_constant_buffer_dtype only supports input of sympy.Symbol, sympy.Expr or sympy.core.numbers.Integer)Ú
isinstanceÚsympyÚSymbolr   ÚcoreÚnumbersÚIntegerro   rr   rX   Ú
is_integerÚis_floatrp   )r„   s    ri   Úmay_get_constant_buffer_dtyperŽ   £   s¸   € ÝØ�%œ,­¬
µE´JÔ4FÔ4NÐOñô ð qð qàpñqô qð õ �/¥5¤:Ô#5Ô#=Ñ>Ô>ð ÝŒ{Ðå�/¥5¤:Ñ.Ô.ð 5Ý# OÑ4Ô4Ð4àÔ!ð ÝŒ{ÐØ	Ô	!ð ÝŒ}Ðàˆtrj   Úopc                 ó,   — d„ t           D ¦   «         }| |v S )Nc                 ó,   — h | ]}t          |¦  «        ’ŒS rh   )r    )Ú.0Úms     ri   ú	<setcomp>z"is_magic_method.<locals>.<setcomp>¶   s!   € Ð>Ð>Ð>¨1Õ# AÑ&Ô&Ð>Ð>Ð>rj   )r   )r�   Ú	magic_opss     ri   Úis_magic_methodr–   µ   s   € Ø>Ð>µÐ>Ñ>Ô>€IØ�ˆ?Ðrj   ÚobjÚtargetc           	      óø   — |                      d¦  «        }| }t          |¦  «        D ]R\  }}t          ||¦  «        s-t          dd                     |d |…         ¦  «        › �¦  «        ‚t          ||¦  «        }ŒS|S )Nú.z#Node referenced nonexistent target )ÚsplitÚ	enumerateÚhasattrÚRuntimeErrorÚjoinÚgetattr)r—   r˜   Útarget_atomsÚattr_itrÚiÚatoms         ri   Úgetattr_recursiver¥   º   s‘   € ð —<’< Ñ$Ô$€LØ€HÝ˜\Ñ*Ô*ð +ð +‰ˆˆ4Ý�x Ñ&Ô&ð 	ÝØR°c·h²h¸|ÈBÈQÈBÔ?OÑ6PÔ6PÐRÐRñô ð õ ˜8 TÑ*Ô*ˆˆØ€Orj   Úg.c                 óâ   — i }|                       d¬¦  «        d         }d|j        vr|S t          |j        d         ¦  «        D ]*\  }}||j        d         v r|j        d         |         ||<   Œ+|S )NÚoutput©r�   r   Úuser_visible_output_idxsÚoriginal_output_strides)Ú
find_nodesÚmetarœ   rc   )r¦   ÚretÚoutput_nodeÚidxÚnodes        ri   Úget_user_visible_output_stridesr²   È   sˆ   € Ø')€CØ—,’, (�,Ñ+Ô+¨AÔ.€Kà!¨Ô)9Ð9Ð9Øˆ
å˜{Ô/°Ô2Ñ3Ô3ð Ið I‰	ˆˆTØ�+Ô"Ð#=Ô>Ð>Ð>Ø#Ô(Ð)BÔCÀCÔHˆC�‰IøØ€Jrj   Úuser_visible_output_stridesc                 ó*  — t           j        sdS t          j        t          j        t          j        h}t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        t          j        t          j        h}dt$          j        j        dt*          t$          j        j                 fd„}|                      d¬¦  «        d         }t3          | j        ¦  «        D ]y} ||¦  «        }|sŒ||v r
d|j        d	<   |j                             d	d
¦  «        r&|j        D ]} ||¦  «        }	|	sŒ|	|vr
d|j        d	<   Œt           j        s||v r
d|j        d	<   ŒzdS )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.
    Nr±   re   c                 ó¦   — | j         dk    rEt          | j        t          j        j        ¦  «        r!t          | j        d¦  «        r| j        j        nd S )NÚcall_functionÚ_overloadpacket)r�   r†   r˜   ro   Ú_opsÚ
OpOverloadr�   r·   )r±   s    ri   Ú_get_overload_packetz8mark_nodes_dislike_padding.<locals>._get_overload_packet÷   sX   € ð
 Œw˜/Ò)Ð)å˜4œ;­¬
Ô(=Ñ>Ô>ð *õ ˜œÐ%6Ñ7Ô7ð *ð ŒKÔ'Ð'ð
 ð	
rj   r¨   r©   r   TÚdislike_paddingF)r.   Úcomprehensive_paddingÚatenÚconvolutionÚconvolution_backwardÚ
_scaled_mmÚvar_meanÚsumÚmeanÚprodÚanyÚaminÚamaxÚminÚmaxÚargminÚargmaxÚscatter_reducero   Úfxr)   r   r¸   ÚOpOverloadPacketr¬   ÚreversedÚnodesr­   ÚgetÚall_input_nodesÚpad_outputs)
r¦   r³   Úops_dislike_paddingÚops_like_paddingrº   r¯   Úcurr�   ÚpriorÚprior_ops
             ri   Úmark_nodes_dislike_paddingrÙ   Õ   s›  € õ Ô'ð ØˆåÔÝÔ!ÝŒðÐõ 	ŒÝŒÝŒ	ÝŒ	ÝŒÝŒ	ÝŒ	ÝŒÝŒÝŒÝŒÝÔðÐð

ÝŒhŒmð

å	•%”*Ô-Ô	.ð

ð 

ð 

ð 

ð —,’, (�,Ñ+Ô+¨AÔ.€Kå˜œÑ Ô ð /ð /ˆØ!Ð! #Ñ&Ô&ˆØð 	ØØÐ$Ð$Ð$Ø*.ˆCŒHÐ&Ñ'àŒ8�<Š<Ð)¨5Ñ1Ô1ð 	9àÔ,ð 9ð 9�Ø/Ð/°Ñ6Ô6�Øð ØØÐ#3Ð3Ð3Ø48�E”JÐ0Ñ1øåÔ!ð 	/ cÐ-HÐ&HÐ&HØ*.ˆCŒHÐ&Ñ'øð#/ð /rj   c            #       ó
  ‡ — e Zd ZU eej                 ed<   dej        de	e
eeef                  e
eeef                  f         fd„Zdej        de	eej                 eej                 f         fd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dkdej        j        d	ee
e                  d
ee         dee         dededee         deeeej                 gef                  dedededeeeef                  dee         ded          dee         dee
e                  ddf"ˆ fd„Zdeej        j        j        edf         dedefd„Z dej        fd„Z!e"j#        dej        de$d         fd„¦   «         Z%defd„Z&e'dededefd„¦   «         Z(dedefd „Z)dej        j        d	eej                 d!edd"fd#„Z*de+e,         fd$„Z-deddfd%„Z.dej        ddfd&„Z/e0dej1        j2        j3        fd'„¦   «         Z4d(edeeej5        ej6        f                  fd)„Z7d*ej        ddfd+„Z8d(edeej5        ej6        f         fd,„Z9d(edej:        fd-„Z;d(edeeef         fd.„Z<d/edefˆ fd0„Z=d1ej>        defd2„Z?dd3œd4ej6        d5edefd6„Z@d7ee         defd8„ZAd9eeBej                 ej        f         ddfd:„ZCdeddfd;„ZDdedej        fd<„ZEdee         d=ee         defd>„ZF	 dld=edee         de5fd?„ZGded@eej                 defdA„ZHdBed/e	e         dCeeef         deee5df         fˆ fdD„ZIdBed/edCeeef         defˆ fdE„ZJe'dFej        defdG„¦   «         ZKdBed/e	dH         dCeeef         deeLe5ejM        eNf         fdI„ZOdBed/edCedePfdJ„ZQdBed/edCedePfdK„ZRdBed/e	e         dCeeef         ddfˆ fdL„ZSdmdM„ZTe#dNej        j,        fdO„¦   «         ZUdPeej5        ejV        f         dQe	eeejW        f         dRf         deej5        ejV        f         fdS„ZXdTej        j,        dUe	e         dVeeef         dWe	e         dXeeef         ddfdY„ZYdZej        j,        defˆ fd[„ZZdmd\„Z[	 	 	 dnd]ed!ee         d^ee\         ddfd_„Z]de	eee	ee,f                  f         fd`„Z^de	eee	ee,f                  f         fda„Z_dodc„Z`de	eee	eaef                  ee	eaebf                  f         fdd„Zce'deeddfdf„¦   «         Zddeefdg„Zfdeefdh„Zgdee         fdi„Zhdedefdj„Ziˆ xZjS )pÚGraphLoweringÚgraph_outputsÚexre   c                 ó`  — | j         rBt          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        fS ddlm}  |dt          | j        j        ¦  «        › �¦  «        }| j         	                    ||¦  «        \  }}}d„ |D ¦   «         }d„ |D ¦   «         }||fS )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_c                 ó^   — g | ]*}t          |t          j        ¦  «        r|j        j        n|‘Œ+S rh   ©r†   ro   ÚSymIntr±   Úexpr©r’   r£   s     ri   ú
<listcomp>z8GraphLowering.symbolic_sizes_strides.<locals>.<listcomp>=  s1   € ÐRÐRÐRÈ¥¨A­u¬|Ñ!<Ô!<ÐC�!”&”+�+À!ÐRÐRÐRrj   c                 ó^   — g | ]*}t          |t          j        ¦  «        r|j        j        n|‘Œ+S rh   râ   rå   s     ri   ræ   z8GraphLowering.symbolic_sizes_strides.<locals>.<listcomp>>  s1   € ÐVÐVÐVÈ!¥:¨aµ´Ñ#>Ô#>ÐE�A”F”K�KÀAÐVÐVÐVrj   )
Úreuse_shape_envrT   ÚsizeÚstrideÚtorch._dynamo.sourcerß   ÚlenÚ
_shape_envÚ
var_to_valÚ,create_symbolic_sizes_strides_storage_offset)	ÚselfrÝ   rß   Úsourceré   rê   Ú_Úr_sizeÚr_strides	            ri   Úsymbolic_sizes_stridesz$GraphLowering.symbolic_sizes_strides  sâ   € ð Ôð 	Ý,¨R¯WªW©Y¬YÑ7Ô7Õ9RØ—	’	‘”ñ:ô :ð ð ð <Ð;Ð;Ð;Ð;Ð;ð $�^ØN­S°´Ô1KÑ-LÔ-LÐNÐNñô ˆFð ”×LÒLØØñô ñ	ØØØð SÐRÈTÐRÑRÔRˆØVÐVÈvÐVÑVÔVˆØ�xÐÐrj   c                 ó‚   — d„ |                      ¦   «         D ¦   «         }d„ |                     ¦   «         D ¦   «         }||fS )z+
        Primarily used to weights
        c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS rh   ©r‡   r‹   rå   s     ri   ræ   z6GraphLowering.static_sizes_strides.<locals>.<listcomp>G  s"   € Ð4Ð4Ð4 Q•”˜aÑ Ô Ð4Ð4Ð4rj   c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS rh   rø   rå   s     ri   ræ   z6GraphLowering.static_sizes_strides.<locals>.<listcomp>H  s"   € Ð8Ð8Ð8 q•%”- Ñ"Ô"Ð8Ð8Ð8rj   )ré   rê   )rð   rÝ   ré   rê   s       ri   Ústatic_sizes_stridesz"GraphLowering.static_sizes_stridesA  sD   € ð 5Ð4¨"¯'ª'©)¬)Ð4Ñ4Ô4ˆØ8Ð8¨B¯IªI©K¬KÐ8Ñ8Ô8ˆØ�Vˆ|Ðrj   NFÚgmÚexample_inputsÚ	shape_envÚgraph_idÚcpp_wrapperÚaot_modeÚ
layout_optÚextern_node_serializerÚis_inferenceÚis_backwardÚis_const_graphÚconst_output_indexÚ
const_codeÚconst_moduleÚnameÚinputs_to_checkc                 ó’	  •— t          ¦   «                              |¦  «         || _        |�|n|                      ||	¬¦  «        | _        d| _        |	| _        |
| _        || _        || _	        || _
        || _        d| _        |€t          ¦   «         }d| _        n|| _        d| _        || _        |                     ¦   «          |j                             ¦   «         | _        t)          ¦   «         | _        t-          |¦  «        | _        g | _        i | _        i | _        t)          ¦   «         | _        |r|j        nt)          ¦   «         | _        |r|j        nt)          ¦   «         | _        d| _        g | _        g | _         |r|ni | _!        |r!t)          | "                    ¦   «         ¦  «        nt)          ¦   «         | _#        |r|j$        ni | _$        i | _%        i | _&        i | _'        t)          ¦   «         | _(        t)          ¦   «         | _)        t)          ¦   «         | _*        t)          ¦   «         | _+        t)          ¦   «         | _,        t)          ¦   «         | _-        d | _.        d | _/        g | _0        ddl1m2} tg          j4        ¦   «         r|r|n|| _5        d | _6        i | _7        t)          ¦   «         | _8        g | _9        i | _:        tw          tx          ¦  «        | _=        i | _>        t          j?        ¦   «         | _@        || _A        || _B        || _C        i | _D        || _E        || _F        t�          t�          ¦  «        | _I        d | _J        d | _K        | j        r|  L                    ¦   «         nt)          ¦   «         | _M        dh| _N        tŸ          |jP        ¦  «        | _Q        t¥          |jP        | jQ        ¦  «         d| _S        d| _T        g | _U        d | _V        i | _W        | X                    ¦   «         | _Y        | jZ        j[         \                    d	i ¦  «        | _]        |�|j^        ni | _^        t¿          ¦   «           tÁ          ja        d ¦  «        tÄ          ¦  «        | _b        i | _c        t)          ¦   «         | _d        t)          ¦   «         | _e        t)          ¦   «         | _f        tÏ          jh        ¦   «         | _i        d
| _j        t×          ¦   «         | _l        d S )N)r  r   FTÚcpu)Úextern_node_json_serializerzaten.convolution_backwardÚ Ú dynamo_flat_name_to_original_fqnéÿÿÿÿ)mÚsuperÚ__init__rü   Údecide_layout_optr  Únum_channels_last_convr  r  r  r  r  r
  Úextra_tracebackr%   rè   rí   Úfreeze_runtime_assertsÚdeferred_runtime_assertsÚcopyÚras_by_symbolr+   Úbound_unbacked_symbolsrS   ÚsizevarsÚgraph_input_namesÚgraph_inputsÚgraph_inputs_originalÚzero_dim_cpu_tensor_listÚdevice_typesÚdevice_idxsrl   ÚbuffersÚ
operationsr  Ú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_fbcoder  Úcurrent_nodeÚlistsÚmutated_inputsÚmutated_input_idxsÚname_to_bufferr   ÚlistÚname_to_usersÚ
name_to_opÚtimeÚcreation_timer	  rÿ   Úrecord_multi_kernel_choiceÚmulti_kernel_to_choicer   rþ   Ú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_namer6   Ú	functoolsÚ	lru_cacher3   Úeffectful_opsÚaligned_inputsÚno_fuse_buffer_namesÚall_codegen_kernel_namesÚ	itertoolsÚcountÚworkspace_idÚplaceholder_idxrW   Úbw_donated_idxs)rð   rû   rü   rý   rþ   rÿ   r   r  r  r  r  r  r  r  r  r	  r
  r  Ú	__class__s                     €ri   r  zGraphLowering.__init__K  s«  ø€ õ* 	‰Œ×Ò˜ÑÔÐØ,ˆÔð Ð%ð ˆJà×'Ò'¨¸Ð'ÑFÔFð 	Œð
 '(ˆÔ#Ø(ˆÔØ&ˆÔØ,ˆÔØ$ˆŒØ(ˆÔØ.ˆÔà$ˆÔØÐÝ ™
œ
ˆIØ#(ˆDÔ Ð à'ˆDŒOØ#'ˆDÔ Ø#ˆŒð 	×(Ò(Ñ*Ô*Ð*ð Ô.×3Ò3Ñ5Ô5ð 	Ôõ AKÁÄˆÔ#Ý(¨Ñ3Ô3ˆŒØ,.ˆÔØ24ˆÔØ=?ˆÔ"Ý9C¹¼ˆÔ%à)5ÐGˆLÔ%Ð%½:¹<¼<ð 	Ôð )5ÐFˆLÔ$Ð$½*¹,¼,ð 	Ôð !ˆÔØ(*ˆŒØ.0ˆŒà"4Ð<ÐÐ¸"ð 	Ôð
 "ð�JÐ)×.Ò.Ñ0Ô0Ñ1Ô1Ð1å‘”ð 	Ôð '3Ð:ˆLÔ"Ð"¸ð 	Œð FHˆÔ Ø68ˆÔØ.0ˆÔÝ3=±<´<ˆÔÝ0:±´ˆÔÝ8B¹¼ˆÔ$Ý0:±´ˆÔÝ4>±L´LˆÔ Ý3=±<´<ˆÔØ-1ˆŒØ26ˆÔà>@ˆÔ àVÐVÐVÐVÐVÐVõ ÔÑ!Ô!ð-Ø&<ð-Ð"Ð"à,ð 	Ô#ð ,0ˆÔØ+-ˆŒ
Ý/9©|¬|ˆÔØ-/ˆÔØ46ˆÔÝ@KÍDÑ@QÔ@QˆÔØ35ˆŒÝ!œY™[œ[ˆÔØˆŒ	Ø&ˆÔð
 +6ˆÔ'Ø68ˆÔ#à ˆŒØ ˆŒÝ"&Õ'?Ñ"@Ô"@ˆÔØ>BˆŒð 7;ˆÔð 7;´oÐWˆD×0Ò0Ñ2Ô2Ð2Í:É<Ì<ð 	Ô'ð "=Ð =ˆÔÝ+JÈ2Ì8Ñ+TÔ+TˆÔ(Ý" 2¤8¨TÔ-MÑNÔNÐNØ ˆŒØ!ˆŒð ð 	Ôð 9=ˆÔ&ð GIˆÔ Ø-/¯[ª[©]¬]ˆŒØ04´Ô0@×0DÒ0DØ.°ñ1
ô 1
ˆÔ-ð 5AÐ4LˆLÔ0Ð0ÐRTð 	Ô$õ 	"Ñ#Ô#Ð#Ø$=¥IÔ$7¸Ñ$=Ô$=Õ>RÑ$SÔ$SˆÔ!à;=ˆÔÝ/9©|¬|ˆÔÝ5?±\´\ˆÔ!õ :D¹¼ˆÔ%õ &œOÑ-Ô-ˆÔð  "ˆÔå/Ñ1Ô1ˆÔÐÐrj   r   Úfeaturec                 óˆ   — t          |t          ¦  «        s
J |¦   «         ‚||                      t          |¦  «        ¦  «        v S rg   )r†   r1   r3   r?   )rð   r   r_  s      ri   Úhas_featurezGraphLowering.has_featureó  sC   € õ
 ˜'¥>Ñ2Ô2Ð;Ð;°GÑ;Ô;Ð2Ø˜$×3Ò3µOÀFÑ4KÔ4KÑLÔLÐLÐLrj   c                 ó6   — | j         x}r|S t          d¦  «        ‚)NzNo current device)rE  rž   ©rð   r   s     ri   Úget_current_device_or_throwz)GraphLowering.get_current_device_or_throwû  s&   € ØÔ(Ð(ˆ6ð 	4ØˆMåÐ2Ñ3Ô3Ð3rj   c              #   óV   K  — | j         }|| _         	 d V — || _         d S # || _         w xY wrg   )rE  )rð   r   r×   s      ri   Úset_current_devicez GraphLowering.set_current_device  sF   è è € àÔ#ˆØ$ˆÔð	(ØˆEˆEˆEà"'ˆDÔÐÐø %ˆDÔÐ'Ð'Ð'Ð's   ’ Ÿ	(c                 ó*   — | j         rdS | j        rdS dS )NÚ	inferenceÚbackwardÚforward)r  r  ©rð   s    ri   Úget_training_phasez GraphLowering.get_training_phase
  s'   € ØÔð 	Ø�;ØÔð 	Ø�:Øˆyrj   c                ó:  — t           j        sdS t           j        rdS d„ | j        j        D ¦   «         }t          |¦  «        }|dk    rdS t          j        j        j	        r>t          j        j         
                    ¦   «         rt          d„ |D ¦   «         ¦  «        rdS t          t          | j        j        ¦  «        ¦  «        d|z  k    rt                               d¦  «         dS t          d„ |D ¦   «         ¦  «        rt                               d	¦  «         dS d
t           dt"          fd„}d
t          j        j        dt"          fd„}d
t          j        j        dt"          fd„}|�r‡ddlm} t-          t.          ¦  «        }|D ]ì}	t          j        j                             |	¦  «        \  }
}}|
r¦ |d¬¦  «        5 }t6          j        5   |	j        |i |¤Ž ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |                     ¦   «         } ||	¦  «        rd}n ||	¦  «        rd}n ||	¦  «        rd}nd}||xx         |z  cc<   ŒÒt                               d¦  «         Œíd}d}d}d}t?          |                      ¦   «         ¦  «        }|d         |z  |d         |z  z   |d         |z  z   |d         |z  z   }||k    }|st                               d||¦  «         |S t          tC          ||¦  «        ¦  «        rt                               d¦  «         dS t          tC          ||¦  «        ¦  «        rt                               d¦  «         dS t          tC          ||¦  «        ¦  «        rt                               d¦  «         dS dS )zl
        Decide if we should enable layout optimization for this graph based on
        heuristics.
        FTc                 óZ   — g | ](}|j         t          j        j        j        j        k    ¯&|‘Œ)S rh   )r˜   ro   Úopsr½   r¾   Údefault)r’   Úns     ri   ræ   z3GraphLowering.decide_layout_opt.<locals>.<listcomp>  s5   € ð 
ð 
ð 
Ø¨¬µU´Y´^Ô5OÔ5WÒ)WÐ)WˆAÐ)WÐ)WÐ)Wrj   r   c              3   ó†   K  — | ]<}d D ]7}|j         |         j        d         j        t          j        d¦  «        k    V — Œ8Œ=dS )©r   r-   Úvalr  N)rc   r­   r   ro   ©r’   rq  r°   s      ri   ú	<genexpr>z2GraphLowering.decide_layout_opt.<locals>.<genexpr>)  sm   è è € ð ð àØ!ðð ð ð ”�s”Ô  Ô'Ô.µ%´,¸uÑ2EÔ2EÒEðð ð ð ð ð ð rj   i,  z*Skipped layout opt because only a few convc              3   ój   K  — | ].}d D ])}t          |j        |         j        d         ¦  «        V — Œ*Œ/dS )rs  rt  N)r"   rc   r­   ru  s      ri   rv  z2GraphLowering.decide_layout_opt.<locals>.<genexpr>8  sc   è è € ð 
ð 
àØð
ð 
ð õ ˜QœV Cœ[Ô-¨eÔ4Ñ5Ô5ð
ð 
ð 
ð 
ð 
ð 
ð 
rj   zeSee perf regression with dynamic shape. Follow up in https://github.com/pytorch/pytorch/issues/102670rq  re   c                 ó¾   — | j         d         j        d         }t          |t          j        ¦  «        sJ ‚| j         d         dk    o|                     d¦  «        dk    S )Nr-   rt  r  )rc   r­   r†   ro   r   ré   )rq  Úmeta_vals     ri   Ú
is_groupedz3GraphLowering.decide_layout_opt.<locals>.is_groupedB  sR   € Ø”v˜a”y”~ eÔ,ˆHÝ˜h­¬Ñ5Ô5Ð5Ð5Ð5Ø”6˜"”: ’>Ð: h§m¢m°AÑ&6Ô&6¸Ò&:Ð:rj   c                 ó  — | j         d         j        d                              d¦  «        dz  | j         d         j        d                              d¦  «        k    o.| j         d         j        d                              d¦  «        dk    S )Nr-   rt  r   é   ©rc   r­   ré   ©rq  s    ri   Úis_in_out_channelz:GraphLowering.decide_layout_opt.<locals>.is_in_out_channelG  ss   € à”�q”	”˜uÔ%×*Ò*¨1Ñ-Ô-°Ñ1°Q´V¸A´Y´^ÀEÔ5J×5OÒ5OÐPQÑ5RÔ5RÒRð 6Ø”F˜1”I”N 5Ô)×.Ò.¨qÑ1Ô1°AÒ5ðrj   c                 ó¾   — | j         d         j        d                              d¦  «        dk    o.| j         d         j        d                              d¦  «        dk    S )Nr-   rt  r   é@   r}  r~  s    ri   Úis_small_channelz9GraphLowering.decide_layout_opt.<locals>.is_small_channelM  sR   € à”�q”	”˜uÔ%×*Ò*¨1Ñ-Ô-°Ò3ð 8Ø”F˜1”I”N 5Ô)×.Ò.¨qÑ1Ô1°RÒ7ðrj   )ÚFlopCounterMode)ÚdisplayNÚgroupedÚsmallÚin_outrp  zConv inputs meta not foundgî|?5^ºõ?g¼t“Vê?g333333ç?gu“Vé?zhSkipped layout opt in inference because weighted flops indicate slowdown, default: %d, channels last: %dzFSkip layout opt because found grouped convolution with >1 in_channels!zBSkip layout opt because some convolutions have smaller out_channelz>Skip layout opt because all convolution channels are too small)"r.   Úlayout_optimizationÚforce_layout_optimizationrI  rÐ   rì   ro   ÚbackendsÚmkldnnÚenabledÚis_availableÚallr:  ÚlogÚdebugrÅ   r   rw   rÍ   r)   Útorch.utils.flop_counterrƒ  r   ÚfloatÚ	_inductorÚfx_utilsÚget_fake_args_kwargsr^   Ú	fake_moder˜   Úget_total_flopsrÂ   ÚvaluesÚmap)rû   r  Ú
conv_nodesÚnconvrz  r  r‚  rƒ  Úflop_countsr±   Úsuccessrc   rd   Úflop_counter_modeÚcounted_flopsÚ	node_typeÚGROUPED_MULTIPLIERÚDEFAULT_MULTIPLIERÚIN_OUT_MULTIPLIERÚSMALL_MULTIPLIERÚtotal_flopsÚweighted_flopsÚdo_layout_opts                          ri   r  zGraphLowering.decide_layout_opt  s	  € õ Ô)ð 	Ø�5åÔ+ð 	Ø�4ð
ð 
Ø”x”~ð
ñ 
ô 
ˆ
õ �J‘”ˆà�AŠ:ˆ:Ø�5õ ŒNÔ!Ô)ð		å”Ô%×2Ò2Ñ4Ô4ð		õ ð ð à#ðñ ô ñ ô ð		ð �4õ
 �t�B”H”NÑ#Ô#Ñ$Ô$¨¨e©Ò3Ð3Ý�IŠIÐBÑCÔCÐCØ�5åð 
ð 
àð
ñ 
ô 
ñ 
ô 
ð 	õ
 �IŠIØwñô ð ð �5ð	;�#ð 	;¥$ð 	;ð 	;ð 	;ð 	;ð
	¥¤¤ð 	µ4ð 	ð 	ð 	ð 	ð	¥¤¤ð 	µ$ð 	ð 	ð 	ð 	ð ñ 3	!Ø@Ð@Ð@Ð@Ð@Ð@å,7½Ñ,>Ô,>ˆKØ"ð <ð <�Ý(-¬Ô(@×(UÒ(UØñ)ô )Ñ%�˜˜vð ð <Ø(˜°Ð7Ñ7Ô7ð 9Ð;LÝœ[ð 9ð 9Ø'˜DœK¨Ð8°Ð8Ð8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð %6×$EÒ$EÑ$GÔ$G�MØ!�z $Ñ'Ô'ð .Ø$-˜	˜	Ø)Ð)¨$Ñ/Ô/ð .Ø$+˜	˜	Ø*Ð*¨4Ñ0Ô0ð .Ø$,˜	˜	à$-˜	à 	Ð*Ð*Ô*¨mÑ;Ð*Ð*Ñ*Ð*å—I’IÐ:Ñ;Ô;Ð;Ð;ð
 "'ÐØ!&ÐØ %ÐØ$Ðå˜k×0Ò0Ñ2Ô2Ñ3Ô3ˆKð ˜IÔ&Ð);Ñ;Ø˜gÔ&Ð)9Ñ9ñ:à˜hÔ'Ð*;Ñ;ñ<ð ˜iÔ(Ð+=Ñ=ñ>ð ð +¨kÒ9ˆMØ ð Ý—	’	Ø~ØØ"ñô ð ð
 !Ð õ& �s�:˜zÑ*Ô*Ñ+Ô+ð 	Ý�IŠIØXñô ð ð �5õ �sÐ$ jÑ1Ô1Ñ2Ô2ð 	Ý�IŠIØTñô ð ð �5õ �sÐ# ZÑ0Ô0Ñ1Ô1ð 	Ý�IŠIÐVÑWÔWÐWØ�5àˆts6   Æ=G;Ç
G$ÇG;Ç$G(Ç(G;Ç+G(Ç,G;Ç;G?	ÈG?	c                 ó,   — | j         �| j         › d|› �S |S )z2Prepend the given name with the graph name if any.Nrò   ©r	  ©rð   r	  s     ri   Úqualify_namezGraphLowering.qualify_nameµ  s%   € àŒ9Ð Ø”iÐ(Ð( $Ð(Ð(Ð(Øˆrj   Úsubgraph_nameÚSubgraphLoweringc                 ó–   — t          | ||| 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.
        )
Úparentrû   rü   rý   rÿ   r   r  r  r  r	  )r­  rí   rÿ   r   r  r  r  r«  )rð   rû   rü   r¬  s       ri   Úmake_subgraphzGraphLowering.make_subgraph»  sW   € õ  ØØØ)Ø”oØÔ(Ø”]Ø#'Ô#>ØÔ*ØÔ(Ø×"Ò" =Ñ1Ô1ð
ñ 
ô 
ð 	
rj   c                 ó†  — t          ¦   «         }t          | j        j        j        ¦  «        D ]a}|j        t          j        j        j	        j
        k    r|                     |¦  «         Œ<|j        D ]}||v r|                     |¦  «          nŒŒb| j        j        j        D ] }||v r|                     |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Ï   rQ  rI  rÐ   r˜   ro   ro  r½   r¾   rp  r}   ÚusersÚupdate)rð   Ú
output_setrq  Úusers       ri   rF  z-GraphLowering.find_nodes_prefer_channels_lastÖ  sÐ   € õ& (2¡|¤|ˆ
Ý˜$œ+Ô+Ô1Ñ2Ô2ð 	ð 	ˆAØŒx�5œ9œ>Ô5Ô=Ò=Ð=Ø—’˜qÑ!Ô!Ð!Øàœð ð �Ø˜:Ð%Ð%Ø—N’N 1Ñ%Ô%Ð%Ø�Eð &øð$ ”Ô"Ô(ð 	+ð 	+ˆAØ�JˆˆØ×!Ò! !¤'Ñ*Ô*Ð*øàÐrj   c                 ó†   — || j         vr7| j                              |¦  «         t                               d|¦  «         d S d S )NzUsing FallbackKernel: %s)rH  r}   Úperf_hint_logÚinforª  s     ri   Úwarn_fallbackzGraphLowering.warn_fallback  sL   € Ø�tÔ,Ð,Ð,ØÔ!×%Ò% dÑ+Ô+Ð+Ý×ÒÐ9¸4Ñ@Ô@Ð@Ð@Ð@ð -Ð,rj   c                 óþ   — | j                              |j        ¦  «         |j        �| j                             |j        ¦  «         t
          j        j        r$|| j        vrt
          j        j        | j        |<   d S d S d S rg   )	r   r}   ÚtypeÚindexr!  r^   rI  r5  rN  rc  s     ri   Úadd_device_infozGraphLowering.add_device_info  s�   € ØÔ×Ò˜fœkÑ*Ô*Ð*ØŒ<Ð#ØÔ× Ò  ¤Ñ.Ô.Ð.ÝŒ7Ôð 	D F°$Ô2JÐ$JÐ$JÝ/0¬wÔ/CˆDÔ$ VÑ,Ð,Ð,ð	Dð 	DÐ$JÐ$Jrj   c                 ó   — t           j        S rg   )r^   r–  rk  s    ri   r–  zGraphLowering.fake_mode  s
   € åŒ{Ðrj   Úbuffer_namec           	      ó:  — || j         v r| j         |         S || j        v r| j        |         S || j        v ret          j        j        |         }t          j        |t          j        |j        |j	        gt          j         
                    |¦  «        ¢R Ž ¬¦  «        S d S ©N©r	  Úlayout)r9  r  r&  r^   rI  r/   ÚConstantBufferr>   r   rk   rú   )rð   r¿  Údatas      ri   Útry_get_bufferzGraphLowering.try_get_buffer  s±   € ð ˜$Ô-Ð-Ð-ØÔ& {Ô3Ð3Ø˜$Ô+Ð+Ð+ØÔ$ [Ô1Ð1Ø˜$œ.Ð(Ð(Ý”7Ô$ [Ô1ˆDÝÔ$Ø Ý”~Ø”K ¤ðÝ./¬g×.JÒ.JÈ4Ñ.PÔ.Pðð ð ðñ ô ð ð ˆtrj   Úsymbolc                 ó    — t          d¦  «        ‚)Nz'Should not be called for the main graph)rž   )rð   rÇ  s     ri   Úadd_symbol_graph_inputz$GraphLowering.add_symbol_graph_input*  s   € ÝÐDÑEÔEÐErj   c                 óX   — |                       |¦  «        }|�|S t          d|› �¦  «        ‚)Nz$Failed to find buffer matching name )rÆ  rž   ©rð   r¿  Úbufs      ri   Ú
get_bufferzGraphLowering.get_buffer-  s6   € Ø×!Ò! +Ñ.Ô.ˆØˆ?ØˆJÝÐOÀ+ÐOÐOÑPÔPÐPrj   c                 ó„  — || j         v r| j         |         j        S t          | j        d¦  «        rp|| j        j        v rb| j        j        |         }|| j        v r| j        |                              ¦   «         S || j        v r| j        |                              ¦   «         S || j        v r| j        |                              ¦   «         S || j        v r| j        |                              ¦   «         S t          j	        d|¦  «        }|r(|                      | 
                    d¦  «        ¦  «        S t          d|› �¦  «        ‚)NÚmutation_real_namez1(as_strided|reinterpret_tensor)\(([a-zA-Z0-9_]+),r-   úcould not find )r&  rk   r�   rD  rÏ  r9  Ú	get_dtyper  ÚreÚmatchÚgroupÚKeyError)rð   r¿  Úmutated_bufr“   s       ri   rÑ  zGraphLowering.get_dtype3  sC  € Ø˜$œ.Ð(Ð(Ø”> +Ô.Ô4Ð4õ �D”NÐ$8Ñ9Ô9ð	Bà˜tœ~Ô@Ð@Ð@àœ.Ô;¸KÔHˆKØ˜dÔ1Ð1Ð1ØÔ*¨;Ô7×AÒAÑCÔCÐCØ˜dÔ/Ð/Ð/ØÔ(¨Ô5×?Ò?ÑAÔAÐAØ˜$Ô-Ð-Ð-ØÔ& {Ô3×=Ò=Ñ?Ô?Ð?Ø˜$Ô+Ð+Ð+ØÔ$ [Ô1×;Ò;Ñ=Ô=Ð=ÝŒHÐIÈ;ÑWÔWˆØð 	.Ø—>’> !§'¢'¨!¡*¤*Ñ-Ô-Ð-ÝÐ6¨Ð6Ð6Ñ7Ô7Ð7rj   c                 óF  — || j         v r| j         |                              ¦   «         S || j        v r7| j        |         }|                     ¦   «         sdS |                     ¦   «         S || j        v r| j        |                              ¦   «         S t          d|› �¦  «        ‚)Nr-   rÐ  )r&  Únumelr9  Úhas_tensor_outputÚ	get_numelr  rÕ  rË  s      ri   rÚ  zGraphLowering.get_numelI  s©   € Ø˜$œ.Ð(Ð(Ø”> +Ô.×4Ò4Ñ6Ô6Ð6Ø˜$Ô-Ð-Ð-ØÔ% kÔ2ˆCØ×(Ò(Ñ*Ô*ð Ø�qØ—=’=‘?”?Ð"Ø˜$Ô+Ð+Ð+ØÔ$ [Ô1×;Ò;Ñ=Ô=Ð=ÝÐ6¨Ð6Ð6Ñ7Ô7Ð7rj   rc   c                 ó‚   •— t          d¦  «        5   t          ¦   «         j        |Ž cd d d ¦  «         S # 1 swxY w Y   d S )NzGraphLowering.run)r   r  Úrun)rð   rc   r^  s     €ri   rÜ  zGraphLowering.runU  s†   ø€ ÝÐ-Ñ.Ô.ð 	&ð 	&Ø•5‘7”7”; Ð%ð	&ð 	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&ð 	&ð 	&s   ‘4´8»8r�   c                 ó  — |j         �J d|› �¦   «         ‚t          |t          j        ¦  «        sJ ‚|                      dt          | j        ¦  «        › �¦  «        }| j                             |¦  «         || j        |<   ||_         |S )NzOperation registered twice: r�   )	Úoperation_namer†   r/   Ú	Operationr«  rì   r#  Úappendr<  )rð   r�   r	  s      ri   Úregister_operationz GraphLowering.register_operationY  s�   € ØÔ Ð(Ð(Ð*MÈÐ*MÐ*MÑ(Ô(Ð(Ý˜"�bœlÑ+Ô+Ð+Ð+Ð+Ø× Ò Ð!<¥c¨$¬/Ñ&:Ô&:Ð!<Ð!<Ñ=Ô=ˆØŒ×Ò˜rÑ"Ô"Ð"Ø "ˆŒ˜ÑØ ˆÔØˆrj   ©Úset_nameÚbufferrã  c                ó–  — |                       dt          | j        ¦  «        › �¦  «        }| j                             |¦  «         || j        |<   |                     ¦   «         }|�[t          |t          j        ¦  «        r,| 	                    ¦   «         r|t          j        d¦  «        k    s|                      |¦  «         |r||_        |S )NrÌ  r  )r«  rì   r"  rà  r9  Ú
get_devicer†   r/   ÚComputedBufferÚis_zero_elementsro   r   r½  r	  )rð   rä  rã  r	  r   s        ri   Úregister_bufferzGraphLowering.register_bufferb  sÐ   € Ø× Ò Ð!:¥s¨4¬<Ñ'8Ô'8Ð!:Ð!:Ñ;Ô;ˆØŒ×Ò˜FÑ#Ô#Ð#Ø$*ˆÔ˜DÑ!Ø×"Ò"Ñ$Ô$ˆð Ðå˜6¥2Ô#4Ñ5Ô5ð ð ×+Ò+Ñ-Ô-ð ð �eœl¨5Ñ1Ô1Ò1Ð1ð × Ò  Ñ(Ô(Ð(àð 	ØˆFŒKØˆrj   Úoperation_namesc                 óp   — |                       dd                     |¦  «        z   ¦  «        }|| j        |<   |S )NÚlist_rò   )r«  rŸ   r6  )rð   rê  r	  s      ri   Úregister_operation_listz%GraphLowering.register_operation_listv  s7   € Ø× Ò  ¨3¯8ª8°OÑ+DÔ+DÑ!DÑEÔEˆØ*ˆŒ
�4ÑØˆrj   Únode_outputc                 óŽ   ‡ ‡— dt           t          t          j                 t          j        f         dd fˆˆ fd„Š ‰|¦  «         d S )NÚvaluere   c                 ó  •— t          | t          t          f¦  «        r| D ]} ‰|¦  «         Œt          | t          j        ¦  «        r7|                      ¦   «         D ]$}‰j        |                              | ¦  «         Œ#d S d S rg   )r†   r:  Útupler/   rD   Úget_read_namesr;  rà  )rð  ÚxÚ	read_nameÚregisterrð   s      €€ri   rö  z1GraphLowering.register_users_of.<locals>.register~  s    ø€ Ý˜%¥$­ Ñ/Ô/ð  Øð  ð  �AØ�H˜Q‘K”K�K�KÝ˜%¥¤Ñ.Ô.ð @Ø!&×!5Ò!5Ñ!7Ô!7ð @ð @�IØÔ& yÔ1×8Ò8¸Ñ?Ô?Ð?Ð?ð@ð @ð@ð @rj   )r   r
   r/   ÚIRNode)rð   rî  rö  s   ` @ri   Úregister_users_ofzGraphLowering.register_users_of{  si   øø€ ð	@�E¥(­2¬9Ô"5µr´yÐ"@ÔAð 	@Àdð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	ˆ�ÑÔÐÐÐrj   c                 óÆ   — t          |t          ¦  «        sJ ‚| j                             |¦  «         || j        vrdS | j        |         D ]}|                     ¦   «          ŒdS )z’
        When a buffer is mutated we need to make sure all the reads to
        the old version are realized before the mutation happens.
        N)r†   Ústrr-  r}   r;  Úrealize)rð   r	  rµ  s      ri   Úmark_buffer_mutatedz!GraphLowering.mark_buffer_mutatedˆ  st   € õ
 ˜$¥Ñ$Ô$Ð$Ð$Ð$ØÔ× Ò  Ñ&Ô&Ð&à�tÔ)Ð)Ð)ØˆFàÔ& tÔ,ð 	ð 	ˆDØ�LŠL‰NŒNˆNˆNð	ð 	rj   c                 óÎ   — || j         v r	|| j        v sJ d|z   ¦   «         ‚t          | j         |         ¦  «        }|| j        j        v r| j        j        |         n| 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 )rR  r&  rV   rQ  r­   )rð   r	  Ú	orig_names      ri   Úget_original_value_of_constantz,GraphLowering.get_original_value_of_constant–  s€   € ð �tÔ3Ð3Ð3¸ÀÄÐ8NÐ8NÐ8NØ2°TÑ9ñ 9OÔ8NÐNõ 5°TÔ5QÐRVÔ5WÑXÔXˆ	ð ˜DœKÔ,Ð,Ð,ð ŒKÔ˜YÔ'Ð'à” Ô%ð	
rj   rÅ  c                 ó’  — t           j        j        s3| j                             ¦   «         D ]\  }}t          ||¦  «        r|c S Œ|€dt          | j        ¦  «        › �}|}|d                              ¦   «         rd|› �}|                      |¦  «        }t          |¦  «        }|}d}|| j        v r|› d|› �}|dz  }|| j        v °|| j        |<   |j
        ›d|j        ›dt          |                     ¦   «         ¦  «        ›dt          |                     ¦   «         ¦  «        ›dt          |¦  «        d›�	| j        |<   || j        |<   |S )NÚconstantr   Ú	constant_rò   r-   ú rô  )r.   Úaot_inductorÚuse_runtime_constant_foldingr&  ÚitemsrY   rì   Úisdigitr«  r[   r   rk   rò  ré   rê   Úhashr)  rR  )rð   r	  rÅ  Úconstant_namerð  rþ  ÚprefixÚcnts           ri   Úallocate_non_dup_const_namez)GraphLowering.allocate_non_dup_const_name¦  s�  € õ Ô"Ô?ð 	)Ø(,¬×(<Ò(<Ñ(>Ô(>ð )ð )Ñ$�˜uÝ! $¨Ñ.Ô.ð )Ø(Ð(Ð(Ð(ð)ð ˆ<Ø3�c $¤.Ñ1Ô1Ð3Ð3ˆDØˆ	Ø�Œ7�?Š?ÑÔð 	&Ø%˜tÐ%Ð%ˆDØ× Ò  Ñ&Ô&ˆõ   Ñ%Ô%ˆØˆØˆØ�d”nÐ$Ð$ØÐ$Ð$˜sÐ$Ð$ˆDØ�1‰HˆCð �d”nÐ$Ð$ð  $ˆŒ�tÑàŒ{ð ð ˜tœzð ð Ý�T—Y’Y‘[”[Ñ!Ô!ðð Ý&+¨D¯KªK©M¬MÑ&:Ô&:ðð å�D‰zŒzÐðð ð 	Ô˜DÑ!ð
 .7ˆÔ$ TÑ*Øˆrj   c                 óÐ   — |                       ||¦  «        }t          j        t          j        |t          |j        |j        g|                      |¦  «        ¢R Ž ¬¦  «        ¦  «        S rÁ  )	r  rD   Úcreater/   rÄ  r>   r   rk   rú   )rð   rÅ  r	  Únew_names       ri   Úadd_tensor_constantz!GraphLowering.add_tensor_constantÅ  sw   € ð ×3Ò3°D¸$Ñ?Ô?ˆÝÔÝÔØÝ"Ø”K ¤ðØ.2×.GÒ.GÈÑ.MÔ.Mðð ð ðñ ô ñ
ô 
ð 	
rj   Údevice_overridec                 ó>  — | j         |         j        |k    s|€|S t          j        j                             ¦   «         5  |                      |› d|j        › |j        pd› �| j         |          	                    |¦  «        ¦  «        cddd¦  «         S # 1 swxY w Y   dS )z¼
        We AOT copy constants to the devices they are needed on.
        If device_override doesn't match the constant's device, then
        copy it and return a different name.
        Nrò   r   )
r&  r   ro   ÚutilsÚ_python_dispatchÚ_disable_current_modesr  r»  r¼  Úto)rð   r	  r  s      ri   r	  zGraphLowering.constant_nameÒ  sì   € ð Œ>˜$ÔÔ&¨/Ò9Ð9¸_Ð=TØˆKÝŒ[Ô)×@Ò@ÑBÔBð 	ð 	ð ×3Ò3ØÐLÐL˜/Ô.ÐL°Ô0EÐ0JÈÐLÐLØ”˜tÔ$×'Ò'¨Ñ8Ô8ñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¾ABÂBÂBr˜   rd   c                 ó¼  •— | xj         dz  c_         t          ¦   «                              |||¦  «        }|                      |¦  «        }t	          |t
          ¦  «        r2|j        j        }|| j        |<   | j	         
                    |¦  «         |S t	          |t          t          t          f¦  «        r:t          j        |¦  «        }|| j        |<   | j	         
                    |¦  «         |S |€| j	         
                    |¦  «         d S t	          |t           ¦  «        r| j	         
                    |¦  «         d S t	          |t"          j        ¦  «        s
J |¦   «         ‚|j        s|                      |¦  «        \  }}n|                      |¦  «        \  }}| j        rS| j        rL| j         | j        v r>t1          j        t5          |t7          |j        |j        ||¦  «        ¬¦  «        ¦  «        }n=t1          j        t=          |t7          |j        |j        ||¦  «        ¬¦  «        ¦  «        }|| j        |<   | j	         
                    |¦  «         |j        j        | j         |<   | j!        j"        r|  #                    |j        ¦  «         tI          ¦   «         5  tK          |¦  «        r| j&         '                    |¦  «         d d d ¦  «         n# 1 swxY w Y   |S )Nr-   rÂ  )(r\  r  Úplaceholderr«  r†   r'   r±   rä   r  r  rà  Úintrw   r’  r‡   Úsympifyr   ro   r   Ú_has_symbolic_sizes_stridesrú   rõ   r  r]  rD   r  r=   r>   r   rk   r@   rÅ  r  r5  r²  r½  rZ   r\   rV  r}   )
rð   r˜   rc   rd   Úexamplerä   ÚsizesÚstridesÚtensorr^  s
            €ri   r  zGraphLowering.placeholderâ  s   ø€ ð 	ÐÔ Ñ!ÐÔÝ‘'”'×%Ò% f¨d°FÑ;Ô;ˆØ×"Ò" 6Ñ*Ô*ˆÝ�g�xÑ(Ô(ð 	Ø”<Ô$ˆDØ(,ˆDÔ˜fÑ%ØÔ"×)Ò)¨&Ñ1Ô1Ð1ØˆKÝ˜¥#¥t­UÐ!3Ñ4Ô4ð 	Ý”= Ñ)Ô)ˆDØ(,ˆDÔ˜fÑ%ØÔ"×)Ò)¨&Ñ1Ô1Ð1ØˆKØˆ_ØÔ"×)Ò)¨&Ñ1Ô1Ð1Ø�4Ý�g�}Ñ-Ô-ð 	ð Ô"×)Ò)¨&Ñ1Ô1Ð1Ø�4Ý˜'¥5¤<Ñ0Ô0Ð9Ð9°'Ñ9Ô9Ð0ð
 Ô2ð 	Bà!×6Ò6°wÑ?Ô?‰NˆE�7�7à!×8Ò8¸ÑAÔA‰NˆE�7ð Ôð	àÔ$ð	ð Ô$¨Ô(<Ð<Ð<åÔ%ÝØÝ& w¤~°w´}ÀeÈWÑUÔUðñ ô ñô ˆFˆFõ Ô%ÝØÝ& w¤~°w´}ÀeÈWÑUÔUðñ ô ñô ˆFð %+ˆÔ˜&Ñ!ØÔ×%Ò% fÑ-Ô-Ð-Ø-3¬[Ô-=ˆÔ" 6Ñ*ØÔÔ"ð 	1Ø× Ò  ¤Ñ0Ô0Ð0õ 1Ñ2Ô2ð 	0ð 	0Ý*¨7Ñ3Ô3ð 0ØÔ#×'Ò'¨Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð ˆs   Ê*KËKËKc                 óp  •— |t           j        u rKt          |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�¦   «         ‚|                     ¦   «                              d¦  «        d         }|t           v rt#          |dd¬¦  «         nét$          j        r«t)          |g¦  «        rt*          nt,          }t.                               d|                     |||¦  «        ¦  «         t4          }t          j        j        j        |j        v rt>          }nt          j        j        j         |j        v rd }t#          ||¬	¦  «         n2t)          |g¦  «        rt+          |||¦  «        ‚t-          |||¦  «        ‚	 t.           !                    d
t          |         ¦  «         | j"        }tG          |¦  «        }|r||}
}	 ||g|¢R i |¤Ž\  }}t          |         |i |¤Ž}|r|  $                    ||	|
||¦  «         |S # tJ          $ r0}tM          ||||¦  «         '                    |j(        ¦  «        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Úgetitemr†   r:  rò  Údictr  r¶   ro   r¸   rÎ   r�   rJ   r¹   r	  r›   rG   rK   r.   Úimplicit_fallbacksr   r:   r;   r�  r¸  Úoperator_strrN   Ú_CÚTagÚneeds_fixed_stride_orderÚtagsrF   Úflexible_layoutr�  r5  rL   Úpropagate_mutationÚ	Exceptionr9   Úwith_tracebackÚ__traceback__)rð   r˜   rc   rd   Ú	base_nameÚerrorÚdecided_constraintrq  Úlayout_constraintsÚold_argsÚ
old_kwargsÚoutÚer^  s                €ri   r¶   zGraphLowering.call_function0  s  ø€ Ø•XÔ%Ð%Ð%­*°T¸!´W½tÅUÍDÐ>QÑ*RÔ*RÐ%Ý‘7”7×(Ò(¨°°vÑ>Ô>Ð>õ ˜&¥%¤*Ô"=Ñ>Ô>ð 	+Å7ØÐ1ñD
ô D
ð 	+ð �6˜4Ð* 6Ð*Ð*Ð*à�Ð"Ñ"ÝØ�œ
Ô-ñô ð 0ð 0àÐ/Ð/Ð/ñ0ô 0ð ð Ÿš™œ×+Ò+¨CÑ0Ô0°Ô3ˆIØÕ/Ð/Ð/Ý˜f¨5À$ÐGÑGÔGÐGÐGÝÔ*ð  Iõ *¨6¨(Ñ3Ô3ð6Õ-Ð-å5ð õ
 —’Ø9Ø×&Ò& v¨t°VÑ<Ô<ñô ð õ
 &8Ð"õ ”8”<Ô8¸F¼KÐGÐGÝ)@Ð&Ð&Ý”X”\Ô1°V´[Ð@Ð@Ø)-Ð&õ ˜fÐ8JÐKÑKÔKÐKÐKå# V HÑ-Ô-ð Iõ 0°¸¸fÑEÔEÐEå2°6¸4ÀÑHÔHÐHð	Ý�IŠI�j¥)¨FÔ"3Ñ4Ô4Ð4àÔ!ˆAÝ!9¸&Ñ!AÔ!AÐØ!ð FØ'+¨V˜*�Ø1Ð1°!ÐE°dÐEÐEÐE¸fÐEÐE‘��få˜FÔ# TÐ4¨VÐ4Ð4ˆCà!ð Oð ×'Ò'¨¨8°ZÀÀvÑNÔNÐNàˆJøÝð 	ð 	ð 	Ý# A v¨t°VÑ<Ô<×KÒKØ”ñô àðøøøøð	øøøs   Ç;A?I; É;
J5Ê+J0Ê0J5Útc                 óT   — t          | j        ¦  «        dk    o| j        d         dk    S )zM
        True if this is a small constant attr that will be inlined.
        r-   r   é   )rì   Úshape)r;  s    ri   Úcan_inline_constantz!GraphLowering.can_inline_constant{  s&   € õ
 �1”7‰|Œ|˜qÒ Ð4 Q¤W¨Q¤Z°1¢_Ð4rj   rh   c                 ó  — t          | j        |¦  «        }t          |t          j        j        ¦  «        r8|| j        v r| j        |         S t          j        ||¬¦  «        }|| j        |<   |S t          |t          j	        j
        ¦  «        r%|| j        |<   d| j        |<   t          ||¬¦  «        S t          |t          j        ¦  «        sJ ‚t          j        j        st          j        st'          |¦  «        r|                      ||¦  «        S t+          ¦   «         5  |j        dk    r:t/          |                     ¦   «         |j        |j        ¬¦  «        cd d d ¦  «         S |                      |¦  «        rdt8                               dt=          |¦  «        ¦  «         ddlm }  || !                    ¦   «         |j        |j        ¬	¦  «        cd d d ¦  «         S 	 d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «        S )
N)r	  Úgraph_moduler  )r	  rð  rh   )rð  rk   r   zInlining constant: %s r-   )r  )rk   r   )"r¥   rQ  r†   ro   rÍ   r   r(  r/   ÚSubgraphr*  ÚScriptObjectr'  r)  rE   r   r.   r  r  Úalways_keep_tensor_constantsrO   r  r*   r>  r<   Úitemrk   r   r?  r�  r�  rú  Úloweringr  Útolist)rð   r˜   rc   rd   rð  r9  r  s          ri   Úget_attrzGraphLowering.get_attr‚  s“  € õ " $¤+¨vÑ6Ô6ˆå�e�UœXÔ1Ñ2Ô2ð 	à˜Ô,Ð,Ð,ØÔ*¨6Ô2Ð2å”+ 6¸Ð>Ñ>Ô>ˆCØ*-ˆDÔ Ñ'ØˆJå�e�UœXÔ2Ñ3Ô3ð 	=Ø/4ˆDÔ$ VÑ,Ø*,ˆDÔ Ñ'Ý"¨°eÐ<Ñ<Ô<Ð<å˜%¥¤Ñ.Ô.Ð.Ð.Ð.åÔÔ<ð	;åÔ2ð	;õ )¨Ñ/Ô/ð	;ð
 ×+Ò+¨E°6Ñ:Ô:Ð:å‰]Œ]ð 
	Vð 
	VØŒ{˜bÒ Ð ÝØŸ*š*™,œ,¨e¬kÀ%Ä,ðñ ô ð
	Vð 
	Vð 
	Vð 
	Vñ 
	Vô 
	Vð 
	Vð 
	Vð
 ×'Ò'¨Ñ.Ô.ð VÝ—	’	Ð2µC¸±K´KÑ@Ô@Ð@à,Ð,Ð,Ð,Ð,Ð,à�v˜eŸlšl™nœn°E´KÈÌÐUÑUÔUð
	Vð 
	Vð 
	Vð 
	Vñ 
	Vô 
	Vð 
	Vð 
	Vð
Vð
	Vð 
	Vð 
	Vñ 
	Vô 
	Vð 
	Vð 
	Vð 
	Vð 
	Vð 
	Vð 
	Vøøøð 
	Vð 
	Vð 
	Vð 
	Vð ×'Ò'¨¨vÑ6Ô6Ð6s   Ä9G)Å#A,G)Ç)G-Ç0G-c                 ó   — t           ‚rg   ©ÚAssertionError©rð   r˜   rc   rd   s       ri   Úcall_modulezGraphLowering.call_module¬  ó   € ÝÐrj   c                 ó   — t           ‚rg   rJ  rL  s       ri   Úcall_methodzGraphLowering.call_method¯  rN  rj   c                 óX  •— 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„ |D ¦   «         }g }t          |¦  «        t          |¦  «        k    sJ ‚t          ||¦  «        D ]æ\  }}t          |t          j        t          j        f¦  «        s|                     |¦  «         ŒAt          |                     ¦   «         t          j        ¦  «        r3|                     t          j                             |¦  «        ¦  «         Œ |                     |                      ||j        d                              ¦   «         ¦  «        ¦  «         Œç|| _        | j                             ¦   «         D �]I\  }	}
t          |
t          t6          j        f¦  «        sJ dt          |
¦  «        › �¦   «         ‚t          |
t          ¦  «        sŒW|
                     ¦   «          t          |
t          ¦  «        sJ ‚|
j        }
t          |
t          j        ¦  «        sJ ‚|
}|
j        }
t          |
t@          ¦  «        r|
 !                    ¦   «         |	k    rnt          j"         #                    |
| j$        |	         ¦  «         	 | j         %                    |¦  «        }| j$        |	         | j        |<   �Œ8# tL          $ r Y �ŒEw xY w�ŒK|  '                    ¦   «          tP           )                    d| j*        | j+        �| j+        nd¦  «         d S )Nc              3   óì   K  — | ]o}t          |t          t          j        t	          d ¦  «        t          j        t          j        t          j        j	        j
        t          t          j        f¦  «        V — Œpd S rg   )r†   rD   r/   r<   r»  rÄ  r‡   r   ÚlogicÚboolalgÚBooleanr  ÚEffectfulKernel©r’   rô  s     ri   rv  z'GraphLowering.output.<locals>.<genexpr>º  sz   è è € ð 
ð 
ð õ ØåÝ”KÝ˜‘J”JÝÔ%Ý”JÝ”KÔ'Ô/ÝÝÔ&ð	ñô ð
ð 
ð 
ð 
ð 
ð 
rj   r   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S rh   )r/   ÚExternKernelÚrealize_inputrW  s     ri   ræ   z(GraphLowering.output.<locals>.<listcomp>Ï  s(   € ÐCÐCÐC°q•"”/×/Ò/°Ñ2Ô2ÐCÐCÐCrj   rt  z'Unsupported inductor graph input type: zGForce channels last inputs for %d conv for the current graph with id %dr  ),r  r¨   r†   rò  r:  r»  rŽ  r^   rI  r5  rc   rì   Úzipr/   rD   ÚBaseViewrà  Úget_output_specÚCommBufferLayoutrY  Ú
copy_inputÚtry_match_insignificant_stridesr­   rê   rÜ   r  r  r‡   r   rû  rÅ  rC   r@   Úget_nameÚMutationLayoutSHOULDREMOVEÚrealize_intor  r¼  Ú
ValueErrorÚfinalizer�  r�  r  rþ   )rð   r˜   rc   rd   ÚresultÚfx_node_argsÚresult_correct_stridesÚrÚfx_noder	  rð  Úvalue_storage_boxÚindr^  s                €ri   r¨   zGraphLowering.output²  sÁ  ø€ õ ‘”—’ ¨¨fÑ5Ô5ˆÝ˜&¥5­$ -Ñ0Ô0ð 	à�YˆFÝ˜&¥5­$ -Ñ0Ô0Ð>Ð>µ$°v±,´,Ñ>Ô>Ð0Ýð 
ð 
ð ð
ñ 
ô 
ñ 
ô 
ð 	ð 	ð ñ	ô 	ð 
õ" ”wÔ+Ô0°Ô3ˆÝ˜,­µ¨Ñ6Ô6ð 	+à(˜?ˆLØCÐC¸FÐCÑCÔCˆØ!#Ðå�<Ñ Ô ¥C¨¡K¤KÒ/Ð/Ð/Ð/Ý˜f lÑ3Ô3ð 	ð 	‰JˆAˆwÝ˜a¥"¤,µ´Ð!<Ñ=Ô=ð Ø&×-Ò-¨aÑ0Ô0Ð0Ð0Ý˜A×-Ò-Ñ/Ô/µÔ1DÑEÔEð ð '×-Ò-­b¬o×.HÒ.HÈÑ.KÔ.KÑLÔLÐLÐLð '×-Ò-Ø×8Ò8Ø˜7œ<¨Ô.×5Ò5Ñ7Ô7ñô ñô ð ð ð 4ˆÔàÔ,×2Ò2Ñ4Ô4ð 	ñ 	‰KˆD�%ÝØ�	¥5¤:Ð.ñô ð Gð GàF½¸e¹¼ÐFÐFñGô Gð õ ˜e¥YÑ/Ô/ð ØØ�MŠM‰OŒOˆOÝ˜e¥YÑ/Ô/Ð/Ð/Ð/Ø”JˆEÝ˜e¥R¤]Ñ3Ô3Ð3Ð3Ð3Ø %ÐØ”JˆEÝ˜e¥[Ñ1Ô1ð 
°U·^²^Ñ5EÔ5EÈÒ5MÐ5MåÔ-×:Ò:Ø˜4Ô5°dÔ;ñô ð ðØÔ,×2Ò2Ð3DÑEÔE�CØ.2Ô.HÈÔ.N�DÔ& sÑ+Ñ+øÝ!ð ð ð Ø‘Dðøøøñ 6Nð 	�Š‰ŒˆÝ�	Š	ØUØÔ'Ø!œ]Ð6ˆDŒMˆM¸Bñ	
ô 	
ð 	
ð 	
ð 	
s   Ì#/MÍ
M"Í!M"c                 óB   — | j         D ]}|                     ¦   «          Œd S rg   )r"  Údecide_layout)rð   rÌ  s     ri   re  zGraphLowering.finalize  s2   € Ø”<ð 	 ð 	 ˆCØ×ÒÑÔÐÐð	 ð 	 rj   r±   c              #   óV   K  — | j         }	 || _         d V — || _         d S # || _         w xY wrg   )r5  )rð   r±   Úolds      ri   Úset_current_nodezGraphLowering.set_current_node  sF   è è € àÔˆð	$Ø $ˆDÔØˆEˆEˆEà #ˆDÔÐÐø ˆDÔÐ#Ð#Ð#Ð#s   ‹ Ÿ	(r  Úmeta_strides_inp.c           	      ó  ‡ — t           j        j                             |¦  «        sJ ‚d„ |D ¦   «         }t	          ˆ fd„t          ||                     ¦   «         ¦  «        D ¦   «         ¦  «        r|S dt          t          t          t          f                  dt          t          t          t          f                  dt          t          t          t          f                  dt          fˆ fd„} ||                     ¦   «         ||                     ¦   «         ¦  «        s|S t           j        j                             |¦  «        \  }}g |j        ¢}t          |                     ¦   «         ¦  «        D ]+\  }}	‰ j                             |	d¦  «        r||         ||<   Œ,t           j        j                             |j        |j        |j        ||j        ¦  «        }
t          j        t           j        j                             ||
¬	¦  «        ¦  «        S )
a  
        Tries to match the strides of the tensor to those in the meta_strides. Strides of insignificant
        dimensions - size 0 or 1 - will be updated.

        If there are real stride differences (NHWC vs NCHW) then the input will be returned.
        c                 ó^   — g | ]*}t          |t          j        ¦  «        r|j        j        n|‘Œ+S rh   râ   ©r’   Úss     ri   ræ   zAGraphLowering.try_match_insignificant_strides.<locals>.<listcomp>   s>   € ð 
ð 
ð 
ØBC�: a­¬Ñ6Ô6Ð=ˆAŒFŒKˆK¸Að
ð 
ð 
rj   c              3   óT   •K  — | ]"\  }}‰j                              ||¦  «        V — Œ#d S rg   )r  Ústatically_known_equals)r’   Ús1Ús2rð   s      €ri   rv  z@GraphLowering.try_match_insignificant_strides.<locals>.<genexpr>$  sM   øè è € ð 
ð 
á��Bð ŒM×1Ò1°"°bÑ9Ô9ð
ð 
ð 
ð 
ð 
ð 
rj   r>  Úmeta_stridesÚtensor_stridesre   c                 ó¬   •— t          | ||¦  «        D ]@\  }}}‰j                             |d¦  «        rŒ"‰j                             ||¦  «        s dS ŒAdS )Nr-   FT)r[  r  Ústatically_known_leqrx  )r>  r{  r|  Údimry  rz  rð   s         €ri   Úsignificant_strides_equalzPGraphLowering.try_match_insignificant_strides.<locals>.significant_strides_equal*  sp   ø€ õ
  # 5¨,¸ÑGÔGð !ð !‘��R˜Ø”=×5Ò5°c¸1Ñ=Ô=ð Øà”}×<Ò<¸RÀÑDÔDð !Ø ˜5˜5ð!ð �4rj   r-   )rÅ  rÃ  )ro   r“  r/   Úis_storage_and_layoutrŽ  r[  Ú
get_strider   r   r   r  rw   Úget_sizeÚas_storage_and_layoutrê   rœ   r  r~  r>   r   rk   ré   ÚoffsetrD   ÚReinterpretView)rð   r  rr  r{  r€  ÚstorageÚ
old_layoutÚ
new_strider£   rv  Ú
new_layouts   `          ri   r`  z-GraphLowering.try_match_insignificant_strides  s  ø€ õ ŒÔ!×7Ò7¸Ñ?Ô?Ð?Ð?Ð?ð
ð 
ØGWð
ñ 
ô 
ˆõ ð 
ð 
ð 
ð 
å˜l¨F×,=Ò,=Ñ,?Ô,?Ñ@Ô@ð
ñ 
ô 
ñ 
ô 
ð 	ð ˆMð	Ý�E¥$­ )Ô,Ô-ð	å"¥5­­s¨Ô#3Ô4ð	õ %¥U­4µ¨9Ô%5Ô6ð	õ ð		ð 	ð 	ð 	ð 	ð 	ð )Ð(Ø�OŠOÑÔ˜|¨V×->Ò->Ñ-@Ô-@ñ
ô 
ð 	ð ˆMå#œoÔ0×FÒFÀvÑNÔNÑˆ�Ø)�zÔ(Ð)ˆ
Ý˜fŸošoÑ/Ô/Ñ0Ô0ð 	0ð 	0‰DˆAˆqØŒ}×1Ò1°!°QÑ7Ô7ð 0Ø ,¨Q¤�
˜1‘øå”_Ô'×3Ò3ØÔØÔØŒOØØÔñ
ô 
ˆ
õ Œ|ÝŒOÔ×.Ò.°GÀJÐ.ÑOÔOñ
ô 
ð 	
rj   rj  r7  r8  Únew_argsÚ
new_kwargsc                 óB  ‡ — 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
                             |d         |d         d„ |                     ¦   «         D ¦   «         ¦  «        }|D ]U}|d         |         }	|d         |         }
|	|u rŒ#‰                      t          j        j        j        j        |	|
fi ¦  «         ŒVdS t          |j        t          j        j        ¦  «        sJ ‚dt          j        j        dt*          j        dt*          j        d	dfˆ fd
„}|j        j        }t1          t3          ||¦  «        ¦  «        D ]"\  }\  }	}
|j        |         } |||	|
¦  «         Œ#d„ |j        D ¦   «         }|                     ¦   «         D ]'}||         }	||         }
||         } |||	|
¦  «         Œ(dS )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.
        rd   Ú
kernel_idxÚconstant_args_idxc                 ór   — i | ]4\  }}|t          |t          j        j        ¦  «        r|j        d          n|“Œ5S )rt  )r†   ro   rÍ   r)   r­   )r’   ÚkÚvs      ri   ú
<dictcomp>z4GraphLowering.propagate_mutation.<locals>.<dictcomp>g  sK   € ð ð ð á˜˜1ð ­
°1µe´h´mÑ(DÔ(DÐK�q”v˜e”}�}È!ðð ð rj   NÚ
schema_argÚold_argÚnew_argre   c                 ó  •— ||u rd S | j         �y| j         j        rot          |t          j        ¦  «        r|f}|f}t          ||¦  «        D ]@\  }}||u rŒ
‰                     t          j        j	        j
        j        ||fi ¦  «         Œ=d S d S d S rg   )Ú
alias_infoÚis_writer†   r/   r÷  r[  r¶   ro   ro  r½   Úcopy_rp  )r”  r•  r–  Úold_arg_itemÚnew_arg_itemrð   s        €ri   Úmaybe_propagatez9GraphLowering.propagate_mutation.<locals>.maybe_propagatev  sÅ   ø€ ð ˜'Ð!Ð!Ø�ØÔ$Ð0°ZÔ5JÔ5SÐ0õ ˜g¥r¤yÑ1Ô1ð )Ø&˜j�GØ&˜j�Gå25°g¸wÑ2GÔ2Gð ð Ñ.�L ,Ø# |Ð3Ð3Ø Ø×&Ò&Ýœ	œÔ,Ô4°|À\Ð6RÐTVñô ð ð ð 1Ð0Ð0Ð0ðð rj   c                 ó   — i | ]
}|j         |“ŒS rh   r©  )r’   Úargs     ri   r“  z4GraphLowering.propagate_mutation.<locals>.<dictcomp>�  s   € ÐCÐCÐC¨3˜œ 3ÐCÐCÐCrj   )rì   r˜   ro   ro  Úhigher_orderÚtriton_kernel_wrapper_mutationrd   r†   r'  Ú_higher_order_opsÚtriton_kernel_wrapÚget_mutated_tensorsr  r¶   r½   rš  rp  r¸   r¹   r*  ÚArgumentr/   r÷  Ú_schemarœ   r[  Ú	argumentsr$  )rð   rj  r7  r8  r‹  rŒ  rd   Úmutatedr	  r•  r–  r�  Úschemar°   r”  Úschema_kwargsÚkeys   `                ri   r/  z GraphLowering.propagate_mutationN  s`  ø€ õ  �8‰}Œ}¥ H¡¤Ò-Ð-Ð-Ð-Ý�:‰Œ¥# j¡/¤/Ò1Ð1Ð1Ð1àŒ>�UœYÔ3ÔRÐRÐRØ”^ HÔ-ˆFÝ˜f¥dÑ+Ô+Ð+Ð+Ð+ÝÔ-Ô@×TÒTØ˜<Ô(ØÐ.Ô/ðð à &§¢¡¤ðñ ô ñô ˆGð  ð Yð Y�Ø$ XÔ.¨tÔ4�Ø$ XÔ.¨tÔ4�Ø˜hÐ&Ð&ØØ×"Ò"¥5¤9¤>Ô#7Ô#?À'È7ÐASÐUWÑXÔXÐXÐXØˆFå˜'œ.­%¬*Ô*?Ñ@Ô@Ð@Ð@Ð@ð	ÝœÔ)ð	Ý46´Ið	ÝHJÌ	ð	àð	ð 	ð 	ð 	ð 	ð 	ð( ”Ô'ˆÝ'0µ°X¸xÑ1HÔ1HÑ'IÔ'Ið 	:ð 	:Ñ#ˆCÑ#�'˜7ØÔ)¨#Ô.ˆJØˆO˜J¨°Ñ9Ô9Ð9Ð9àCÐC°&Ô2BÐCÑCÔCˆà—?’?Ñ$Ô$ð 	:ð 	:ˆCØ  ”oˆGØ  ”oˆGØ& sÔ+ˆJØˆO˜J¨°Ñ9Ô9Ð9Ð9ð		:ð 	:rj   rq  c                 ó˜  •‡ ‡‡)‡*‡+— dt           dd fˆfd„}ddlm} t          ‰ j        ¦  «        Š*t          ‰ j        ¦  «        Š+‰h}‰j        dk    }|r+‰                      ‰¦  «        \  }}|t          ||¦  «        z  }t          j
                             |¦  «        5  ‰                      ‰¦  «        5  t          j        ‰¦  «        5  ‰j        dk    re‰j        t          j        urRt#          ‰¦  «        s|                     ddˆfd	„¦  «        r) |d
¦  «          t'          ‰j        d¬¦  «        |i |¤Ž}�n}‰j        dk    r±‰j        t(          j        j        j        u r”t0          j        dk    r„ |d¦  «         t0          j        dk    rM|}	|}
t5          ‰g|¢R i |¤Ž\  }}‰                      ‰j        ||¦  «        }‰                      ‰|	|
||¦  «         nÝt;          dt0          j        › �¦  «        ‚t=          ‰j        ¦  «        r� |d¦  «         t?          ‰j         d         t(          j!        t(          j"        t(          j#        f¦  «        r‰j         d         j$        j%        }nNtM          ¦   «          '                    ‰¦  «        }n, |d¦  «         tM          ¦   «          '                    ‰¦  «        }t(          j        j(        j)        j*        t(          j        j(        j+        j*        t(          j        j(        j,        j*        t(          j        j(        j-        j*        t(          j        j(        j.        j*        gŠ)t_          d„ ‰j0        D ¦   «         ¦  «        }‰‰ j1        v }t_          ˆ)fd„‰j0        D ¦   «         ¦  «        }‰j          2                    dd¦  «        r®t?          |tf          ¦  «        r™| 4                    ¦   «          ‰j         d          5                    ¦   «         }t)          j6        j7        j8        |Ž }| 9                    ¦   «         |k    r6|s4t          j:        |¦  «        }t          j;         <                    ||¦  «        }|rHt?          |tf          ¦  «        r3t?          |j=        t          j>        ¦  «        r| 4                    ¦   «          |s|�rùt?          ‰j         d         t(          j?        ¦  «        �rÓ|r‰ j1         2                    ‰¦  «        }n‰j         d          5                    ¦   «         }|��”t          |¦  «        dk    �r€t0          j@        p| o| }t(          jA         B                    ‰j         d         ¦  «        }t          t‡          |¦  «        ¦  «        dk    }|sp|rnt          | D                    ¦   «         ¦  «        dk    rI‰‰ jE        v r@|s>|s<t          jF         G                    | D                    ¦   «         t(          jH        ¦  «        }|s°t          |¦  «        r¡‰j         d          I                    ¦   «         st?          |j=        t          j>        ¦  «        r5t          j;         <                    |t          j:        |¦  «        |¬¦  «        }n.d„ |D ¦   «         }t          j;         J                    |||¬¦  «        }t          t—          ‰j0        ¦  «        ¦  «        }|dk    �r—t?          |tf          ¦  «        �r�‰j0        D �]Q}|j        t˜          v �rú| M                    ¦   «          t(          j        j(        jN        j*        t(          j        j(        jO        j*        t(          j        j(        jP        j*        g}g }‰ jQ        s.| R                    t(          j        j(        jS        j*        ¦  «         t(          jT        jU        �rŒ|t(          j        jV        jW        j*        t(          j        jV        jW        jX        t(          j        j(        jY        j*        t(          j        jZ        j[        j*        t(          j        jZ        j[        j\        t(          j        jZ        j[        jX        t(          j        jZ        j[        j]        gz  }|t(          j        jV        j^        j*        t(          j        jV        j^        jX        t(          j        jV        j_        jX        t(          j        jV        j`        j*        t(          j        jZ        ja        j*        t(          j        jZ        ja        jX        gz  }t(          jT        jb        r|t(          j        jc        jd        j*        gz  }|j        |v rQt          j;         <                    |t          j:        ‰j         d          5                    ¦   «         ¦  «        d¬¦  «        }|j        |v r^‰|je        d         u rOt          j;         <                    |t          j:        tÍ          ‰j         d         jg        ¦  «        ¦  «        ¦  «        }|j        dk    r:t?          |j=        j=        tÐ          tÒ          f¦  «        r| 4                    ¦   «          �ŒS| j                    t          ‰j0        ¦  «        ¦  «         t?          |tf          ¦  «        r(| k                    ¦   «         r| M                    ¦   «          t?          |tf          ¦  «        ret?          |j=        tØ          ¦  «        rK|j=        j=        }t?          |tÐ          ¦  «        r*| m                    d¬¦  «        r| 4                    ¦   «          d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   t?          |tf          ¦  «        �r­t?          |j=        t          jl        ¦  «        �r�t?          |j=        j=        t          jn        ¦  «        r"|j=        j=         o                    d‰¦  «         �nGt?          |j=        j=        t          jp        ¦  «        �r"|j=        j=         o                    d‰¦  «         t?          |j=        j=        t          jq        ¦  «        rOt?          |j=        j=        j=        t          jn        ¦  «        r&|j=        j=        j=         o                    d‰¦  «         n�t?          |j=        j=        t          jr        ¦  «        rk|j=        j=        js        sZt?          |j=        j=        jt        d         t          jp        ¦  «        r+|j=        j=        jt        d          o                    d‰¦  «         ‰  u                    |¦  «         t—          ¦   «         }‰ j        ‰*d …         D ]}|| v                    ¦   «         z  }Œ‰ j        ‰+d …         D ]}|| v                    ¦   «         z  }Œdt           fˆ*ˆ+ˆ fd „}‰j        d!k    �r)t          jw        jx        jy        }d"tô          dt           dd fˆ fd#„}|D �]F}‰ j{         |                    |g ¦  «        } |j}        |         }!| ~                    ¦   «                              |!¦  «        srd$�t           d�t          fd%„}" |"|!j‚        ¦  «        r |||!j‚        k    |› d&|!j‚        › �¦  «          |"|!jƒ        ¦  «        r |||!jƒ        k    |› d'|!jƒ        › �¦  «         | D ]}#t‡          |#j%        ¦  «        }$|$‰ j„        z
  }%|%rF�t          |%t           ¬(¦  «        }&‰ j{         †                    |&g ¦  «         R                    |#¦  «         Œh ||#j%        |#j%        › ¦  «         Œ€�ŒH‰ xj„        |z  c_„        �t          t          jw        jx        jy        ‰j          2                    d)i ¦  «        ¦  «        }'|'€J ‚t—          d*„ |' ˆ                    ¦   «         D ¦   «         ¦  «        }(||(k    s0J d+|› d&|(› d,‰ ‰                    ¦   «         › d- |¦   «         › �¦   «         ‚|S ).NÚmsgre   c                 ód   •— t                                dt          ‰j        ¦  «        | ¦  «         d S )Nzlowering %s %s)r�  r�  r   Úformat_node)r­  rq  s    €ri   r�  z%GraphLowering.run_node.<locals>.debug˜  s*   ø€ Ý�IŠIÐ&­
°1´=Ñ(AÔ(AÀ3ÑGÔGÐGÐGÐGrj   r   )ÚCompilerBisectorr¶   ÚinductorrJ   c                  ó"   •— t          ‰ ¦  «        S rg   )Úreprr~  s   €ri   ú<lambda>z(GraphLowering.run_node.<locals>.<lambda>°  s   ø€ ½¸a¹¼€ rj   rH   F)Úadd_to_fallback_setr.  Ú-user_defined_triton_kernel_layout_constraintsr,  z1Unknown triton_kernel_default_layout_constraint: r–   rt  r  c              3   ó,   K  — | ]}|j         d k    V — ŒdS )r¨   Nr©   )r’   rµ  s     ri   rv  z)GraphLowering.run_node.<locals>.<genexpr>è  s)   è è € ÐDÐD°D˜DœG xÒ/ÐDÐDÐDÐDÐDÐDrj   c              3   ó*   •K  — | ]}|j         ‰v V — Œd S rg   )r˜   )r’   rµ  Úas_strided_opss     €ri   rv  z)GraphLowering.run_node.<locals>.<genexpr>ê  s;   øè è € ð *ð *Ø26�”˜~Ð-ð*ð *ð *ð *ð *ð *rj   Úinductor_realize_to_stridesé   )Úallow_paddingc                 ó^   — g | ]*}t          |t          j        ¦  «        r|j        j        n|‘Œ+S rh   râ   ru  s     ri   ræ   z*GraphLowering.run_node.<locals>.<listcomp>)  sB   € ð 'ð 'ð 'à$%õ 0:¸!½U¼\Ñ/JÔ/JÐ Q ¤¤ ÐPQð'ð 'ð 'rj   r-   Tr¨   éd   )Ú	thresholdÚorigin_nodec                  ó¸   •— d„ ‰j         ‰d …         D ¦   «         } |                      d„ ‰j        ‰d …         D ¦   «         ¦  «         d                     | ¦  «        S )Nc                 óD   — g | ]}d |                      ¦   «         › d|› d�‘ŒS )úunbacked_symbol_defs=ú in:
ú
©Úget_unbacked_symbol_defs)r’   rÌ  s     ri   ræ   zCGraphLowering.run_node.<locals>.format_new_defs.<locals>.<listcomp>§  sH   € ð ð ð àð V¨×(DÒ(DÑ(FÔ(FÐUÐUÈcÐUÐUÐUðð ð rj   c              3   óL   K  — | ]}d |                      ¦   «         › d|› d�V — Œ dS )rÃ  rÄ  rÅ  NrÆ  )r’   r�   s     ri   rv  zBGraphLowering.run_node.<locals>.format_new_defs.<locals>.<genexpr>«  sV   è è € ð ð àð T¨×(CÒ(CÑ(EÔ(EÐSÐSÈRÐSÐSÐSðð ð ð ð ð rj   z***
)r"  Úextendr#  rŸ   )ri  Úbuffer_watermarkÚoperation_watermarkrð   s    €€€ri   Úformat_new_defsz/GraphLowering.run_node.<locals>.format_new_defs¦  sƒ   ø€ ðð àœ<Ð(8Ð(9Ð(9Ô:ðñ ô ˆAð �HŠHð ð àœ/Ð*=Ð*>Ð*>Ô?ðñ ô ñ ô ð ð —<’< ‘?”?Ð"rj   r  rä   c                 óŠ   •— t          j        | |¦  «        }‰                     |d¬¦  «         ‰                     |¦  «         d S )NTrâ  )r/   ÚAssertScalarré  rá  )rä   r­  Ú	assert_oprð   s      €ri   Úmake_assertz+GraphLowering.run_node.<locals>.make_assertÈ  sG   ø€ ÝœO¨D°#Ñ6Ô6�	Ø×$Ò$ Y¸Ð$Ñ>Ô>Ð>Ø×'Ò'¨	Ñ2Ô2Ð2Ð2Ð2rj   rv  c                 ón   — | t           t            fv rdS 	 t          | ¦  «         dS # t          $ r Y dS w xY w)NFT)r,   r  Ú	TypeError)rv  s    ri   Úis_convertiblez.GraphLowering.run_node.<locals>.is_convertibleÓ  sP   € Ø¥­&¨Ð 1Ð1Ð1Ø#( 5ð)Ý ™FœF˜FØ#' 4øÝ(ð )ð )ð )Ø#( 5 5ð)øøøs   •& ¦
4³4z >= z <= )r«  Úunbacked_bindingsc              3   ój   K  — | ].}t           j        j        j                             ||¦  «        V — Œ/d S rg   )r^   r–  rý   Úunbacked_renamingsrÑ   ru  s     ri   rv  z)GraphLowering.run_node.<locals>.<genexpr>þ  sN   è è € ð 3ð 3àõ ”Ô%Ô8×<Ò<¸QÀÑBÔBð3ð 3ð 3ð 3ð 3ð 3rj   zfailed z (inductor >= fx)
fx node is: z
new operations are:

)Šrú  Ú!torch._inductor.compiler_bisectorr°  rì   r"  r#  r�   Úfetch_args_kwargs_from_envrU   r/   r÷  Úcurrent_originsrq  r^   r˜   r%  r&  rI   Údisable_subsystemrH   ro   ro  r   r¡  r.   Ú'triton_kernel_default_layout_constraintrF   r¶   r/  rž   r–   r†   r­   rã   ÚSymFloatÚSymBoolr±   rä   r  Úrun_noder½   Ú
as_stridedrp  Úas_strided_Úas_strided_scatterÚresizeÚ	resize_asrÅ   r²  r³   rÑ   rD   rû  rê   r“  r  Úany_is_symbolicÚmaybe_get_strideÚget_stride_orderrY  Úrequire_stride_orderrÅ  r\  r   rÓ   Ú_prims_commonÚis_non_overlapping_and_denser!   rƒ  rG  ÚFlexibleLayoutÚ stride_ordered_for_memory_formatÚchannels_lastÚ_is_viewÚrequire_exact_stridesr+   rM   Ú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_linearrc   r   r>  rA   rB   Ú
mark_reuseÚhas_exceeded_max_readsrC   Úhas_large_inner_fnÚLoopsÚ_post_init_setattrÚBufferrç  ÚMultiOutputÚindicesÚinputsrø  rÇ  rI  r  rý   r&   r  ÚpopÚvar_to_rangeÚ _default_unspecified_value_rangeÚissubsetr   rw   ÚlowerÚupperr  rÈ   Ú
setdefaultr#   r$  r¯  )-rð   rq  r�  r°  ÚoriginsÚis_call_functionrc   rd   rf  r7  r8  Ú	is_outputÚis_user_visibleÚis_input_for_as_stridedr  Úsym_stridesÚstride_orderr¼  ÚdenseÚunbacked_symbols_in_stridesÚ	num_usersrµ  Úneed_fixed_layoutÚneed_fixed_channels_last_layoutÚcurrÚnew_unbacked_defsrÌ  r�   rÌ  rý   rÐ  Úi0ÚrasÚvrrÓ  ÚraÚfvsÚmissingÚi1rÔ  Úrenamed_unbacked_bindingsr¹  rÊ  rË  r^  s-   ``                                       @@@€ri   rÞ  zGraphLowering.run_node—  s‹  øøøøøø€ ð	H•sð 	H˜tð 	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	GÐFÐFÐFÐFÐFå˜tœ|Ñ,Ô,ÐÝ! $¤/Ñ2Ô2Ðà�#ˆØœ4 ?Ò2ÐØð 	4Ø×:Ò:¸1Ñ=Ô=‰LˆD�&Ø•~ d¨FÑ3Ô3Ñ3ˆGÝŒY×&Ò& wÑ/Ô/ð ^	)ð ^	)°×1FÒ1FØñ2
ô 2
ð ^	)ð ^	)åÔØñ
ô 
ð^	)ð ^	)ð ”˜Ò'Ð'Ø”H¥HÔ$4Ð4Ð4å9¸!Ñ<Ô<ð 5ð (×9Ò9Ø" K°°°°ñô ð 5ð �Ð(Ñ)Ô)Ð)ØNÕ)¨!¬(ÈÐNÑNÔNØðØ#ðð �‘ð ”˜Ò'Ð'Ø”H¥¤	Ô 6Ô UÐUÐUÝÔBÐFWÒWÐWà�ÐEÑFÔFÐFåÔBØ1ò2ð 2ð  $�HØ!'�JÝ#:¸1Ð#N¸tÐ#NÐ#NÐ#NÀvÐ#NÐ#N‘L�D˜&Ø!×/Ò/°´¸$ÀÑGÔG�FØ×+Ò+¨A¨x¸ÀTÈ6ÑRÔRÐRÐRå&Ø|ÍFÔLzÐ|Ð|ñô ð õ ! ¤Ñ*Ô*ð -ð �Ð'Ñ(Ô(Ð(ÝØ”F˜5”M¥E¤Lµ%´.Å%Ä-Ð#Pñô ð 1ð œV Eœ]Ô/Ô4�F�Få"™WœW×-Ò-¨aÑ0Ô0�F�Fà��b‘	”	�	Ý™œ×)Ò)¨!Ñ,Ô,�õ ”	”Ô)Ô1Ý”	”Ô*Ô2Ý”	”Ô1Ô9Ý”	”Ô%Ô-Ý”	”Ô(Ô0ðˆNõ ÐDÐD¸A¼GÐDÑDÔDÑDÔDˆIØ 4Ô#CÐCˆOÝ&)ð *ð *ð *ð *Ø:;¼'ð*ñ *ô *ñ 'ô 'Ð#ð Œv�zŠzÐ7¸Ñ?Ô?ð XÅJØ�	ñEô Eð Xð —’Ñ Ô Ð Øœ& œ-×.Ò.Ñ0Ô0�Ý#œoÔ3ÔCÀWÐM�Ø×*Ò*Ñ,Ô,°Ò7Ð7ÀÐ7Ý#%Ô#6°wÑ#?Ô#?�LÝœ_×AÒAÀ&È,ÑWÔW�Fàð!å˜v¥yÑ1Ô1ð!õ ˜vœ{­B¬KÑ8Ô8ð!ð —’Ñ Ô Ð àð 0Ð4ñ 0½*Ø”�u”�uœ|ñ;ô ;ñ 0ð #ð 5Ø"Ô>×BÒBÀ1ÑEÔE�G�Gàœf Uœm×2Ò2Ñ4Ô4�GàÑ&­3¨w©<¬<¸!Ò+;Ñ+;åÔ*ÐA°/Ð.Að%6à5Ð5ð "õ "Ô/×LÒLØœ˜uœñô �Eõ Õ1°'Ñ:Ô:Ñ;Ô;¸aÒ?ð 0ð 8ð
à!ð
õ   §¢Ñ 1Ô 1Ñ2Ô2°aÒ7Ð7Ø Ô!@Ð@Ð@Ø /ð Aà 7ð Aõ #%Ô"3×"TÒ"TØ"ŸOšOÑ-Ô-­uÔ/Bñ#ô #˜ð 7ð ½3¸w¹<¼<ð ð œ6 %œ=×1Ò1Ñ3Ô3ð µzØ"œK­¬ñ8ô 8ð õ &(¤_×%IÒ%IØ &Ý "Ô 3°GÑ <Ô <Ø.;ð &Jñ &ô &˜F˜Fð'ð 'à)0ð'ñ 'ô '˜Gõ &(¤_×%JÒ%JØ &¨¸}ð &Kñ &ô &˜Fõ �J q¤wÑ/Ô/Ñ0Ô0ˆIØ˜1Š}‰}¥¨FµIÑ!>Ô!>‰}ØœGð ;-ñ ;-�DØ”{Õ&;Ð;Ñ;Ø×+Ò+Ñ-Ô-Ð-õ "œIœNÔ?ÔGÝ!œIœNÔ-Ô5Ý!œIœNÔ2Ô:ð-Ð)ð
 ;=Ð7Ø#œð YØ-×4Ò4µU´Y´^Ô5OÔ5WÑXÔXÐXÝ œ8Ô/ñ YØ-Ý %¤	Ô 0Ô BÔ JÝ %¤	Ô 0Ô BÔ IÝ %¤	¤Ô ?Ô GÝ %¤	Ô 0Ô BÔ JÝ %¤	Ô 0Ô BÔ IÝ %¤	Ô 0Ô BÔ IÝ %¤	Ô 0Ô BÔ Pð2ñ Ð-ð <Ý %¤	Ô 0Ô GÔ OÝ %¤	Ô 0Ô GÔ NÝ %¤	Ô 0Ô HÔ OÝ %¤	Ô 0Ô QÔ YÝ %¤	Ô 0Ô BÔ JÝ %¤	Ô 0Ô BÔ Ið@ñ Ð;õ  %œxÔ/ð YØ 1µe´i´mÔ6OÔ6WÐ5XÑ XÐ 1Øœ;Ð*;Ð;Ð;Ý%'¤_×%IÒ%IØ &Ý "Ô 3°A´F¸5´M×4HÒ4HÑ4JÔ4JÑ KÔ KØ.2ð &Jñ &ô &˜Fð !œKÐ+JÐJÐJØ ! T¤Y¨q¤\Ð 1Ð 1å%'¤_×%IÒ%IØ &Ý "Ô 3Ý$BÀ1Ä6È%Ä=ÔCVÑ$WÔ$Wñ!"ô !"ñ&ô &˜Fð ”w (Ò*Ð*Ý% f¤kÔ&6½ÅIÐ8NÑOÔOð -Ø"ŸNšNÑ,Ô,Ð,ùð ×!Ò!¥# a¤g¡,¤,Ñ/Ô/Ð/õ ˜&¥)Ñ,Ô,ð &°×1NÒ1NÑ1PÔ1Pð &ð ×#Ò#Ñ%Ô%Ð%õ ˜&¥)Ñ,Ô,ð )µ¸F¼KÍÑ1TÔ1Tð )Ø”{Ô'�Ý˜d¥IÑ.Ô.ð )à×.Ò.¸Ð.Ñ=Ô=ð )ØŸšÑ(Ô(Ð(ð}^	)ð ^	)ð ^	)ñ ^	)ô ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)øøøð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ñ ^	)ô ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)øøøð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ñ ^	)ô ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)ð ^	)øøøð ^	)ð ^	)ð ^	)ð ^	)õP �f�iÑ(Ô(ñ 	X­Z¸¼ÅRÄ]Ñ-SÔ-Sñ 	XÝ˜&œ+Ô*­B¬HÑ5Ô5ð XØ”Ô ×3Ò3°MÀ1ÑEÔEÐEÑEÝ˜FœKÔ,­b¬iÑ8Ô8ñ XØ”Ô ×3Ò3°MÀ1ÑEÔEÐEÝ˜fœkÔ.µÔ0AÑBÔBð 
XÅzØ”KÔ$Ô)­2¬8ñHô Hð 
Xð ”KÔ$Ô)×<Ò<¸]ÈAÑNÔNÐNÐNõ ˜vœ{Ô/µ´Ñ@Ô@ðXà"œKÔ,Ô4ðXõ " &¤+Ô"2Ô"9¸!Ô"<½b¼iÑHÔHð XØœÔ(Ô/°Ô2×EÒEÀmÐUVÑWÔWÐWà×Ò˜vÑ&Ô&Ð&å6@±l´lÐØ”<Ð 0Ð 1Ð 1Ô2ð 	@ð 	@ˆCØ ×!=Ò!=Ñ!?Ô!?Ñ?ÐÐØ”/Ð"5Ð"6Ð"6Ô7ð 	?ð 	?ˆBØ ×!<Ò!<Ñ!>Ô!>Ñ>ÐÐð		#¥ð 		#ð 		#ð 		#ð 		#ð 		#ð 		#ð 		#ð 		#ð Œ4�=Ò Ñ õ* œÔ(Ô2ˆIð3¥,ð 3µSð 3¸Tð 3ð 3ð 3ð 3ð 3ð 3ð
 (ð ;ñ ;�ØÔ(×,Ò,¨R°Ñ4Ô4�àÔ+¨BÔ/�Ø ×AÒAÑCÔC×LÒLÈRÑPÔPð Kð)®$ð )¶4ð )ð )ð )ð )ð &�~ b¤hÑ/Ô/ð KØ#˜ B¨"¬(¢N°rÐ4IÐ4I¸r¼xÐ4IÐ4IÑJÔJÐJØ%�~ b¤hÑ/Ô/ð KØ#˜ B¨"¬(¢N°rÐ4IÐ4I¸r¼xÐ4IÐ4IÑJÔJÐJàð ;ð ;�BÝ/°´Ñ8Ô8�CØ! DÔ$?Ñ?�GØð ;Þ  ­cÐ2Ñ2Ô2˜ØÔ*×5Ò5°b¸"Ñ=Ô=×DÒDÀRÑHÔHÐHÐHà#˜ B¤G°´¨\Ñ:Ô:Ð:Ð:ñ;ð Ð'Ô'Ð+<Ñ<Ð'Ô'æ 9Ý”Ô Ô*¨A¬F¯JªJÐ7JÈBÑ,OÔ,Oñ!ô !Ðð %Ð0Ð0Ð0õ )3ð 3ð 3à*×/Ò/Ñ1Ô1ð3ñ 3ô 3ñ )ô )Ð%ð %Ð(AÒAÐAÐAð>Ð+ð >ð >Ð1Jð >ð >Ø Ÿ}š}™œð>ð >à*9¨/Ñ*;Ô*;ð>ð >ñ BÔAÐAð ˆs[   ÂmÂ4l,Ã	i lì	l,ìlìl,ìlìl,ì mì,l0	ì0mì3l0	ì4mímí
mc                 ó  — t           j        rt          d¦  «        ‚t          j        dvrt          dt          j        › �¦  «        ‚| j                             ¦   «         D ]Ÿ}d }t          |t          ¦  «        r| 	                    ¦   «         }nJt          |t          j        t          j        t          j        j        j        f¦  «        rt!          |¦  «        }t#          || j        ¦  «        st          d|› �¦  «        ‚Œ d S )NzC++ codegen is disabled)ÚlinuxÚdarwinÚwin32zUnsupported platform zUnsupported input dtype )r.   Údisable_cpp_codegenr8   ÚsysÚplatformr  r˜  r†   rD   rÑ  r‡   rˆ   r   r‰   rŠ   r‹   rŽ   rƒ   rl   )rð   rð  rk   s      ri   Ú!validate_can_generate_cpp_wrapperz/GraphLowering.validate_can_generate_cpp_wrapper
  s  € ÝÔ%ð 	DÝ(Ð)BÑCÔCÐCåŒ<Ð;Ð;Ð;Ý(Ð)OÅÄÐ)OÐ)OÑPÔPÐPàÔ&×-Ò-Ñ/Ô/ð 
	Qð 
	QˆEØˆEÝ˜%¥Ñ+Ô+ð =ØŸšÑ)Ô)��ÝØ�œ¥e¤jµ%´*Ô2DÔ2LÐMñô ð =õ 6°eÑ<Ô<�å1°%¸Ô9IÑJÔJð QÝ,Ð-OÈÐ-OÐ-OÑPÔPÐPðQð
	Qð 
	Qrj   Úis_subgraphÚparent_wrapper_codec                 óî  — | j                              ¦   «         }|                     d¦  «         |                     d¦  «         t          |¦  «        dk    s0J d                     d                     |¦  «        ¦  «        ¦   «         ‚t          |¦  «        dk    }|rdn|                     ¦   «         | _        | j        r|  	                    ¦   «          t          | j        ¦  «        | _        t          | j        | j        ¦  «        }|€J d| j        › d�¦   «         ‚|                     |||¦  «        | _        | j        r8| j        j        j        | j        _        | j        j        j        | j        _        d S d S )	Nr  r­   r-   zDoes not support mixing {}ú+r   zDevice z not supported)r   r  Údiscardrì   ÚformatrŸ   r	  rl   rÿ   r-  r4   r0  r5   r  r1  r  Ú_names_iterÚsrc_to_kernel)rð   r.  r¬  r/  r   Úonly_cpuÚwrapper_code_gen_clss          ri   Úinit_wrapper_codezGraphLowering.init_wrapper_code  s�  € ð Ô(×-Ò-Ñ/Ô/ˆØ×Ò˜UÑ#Ô#Ð#Ø×Ò˜VÑ$Ô$Ð$å�<Ñ Ô  AÒ%Ð%Ð%Ð'C×'JÒ'JØ�HŠH�\Ñ"Ô"ñ(
ô (
Ñ%Ô%Ð%õ �|Ñ$Ô$¨Ò)ˆØ$,ÐD˜5˜5°,×2BÒ2BÑ2DÔ2DˆÔàÔð 	5Ø×2Ò2Ñ4Ô4Ð4å1°$Ô2BÑCÔCˆŒÝ=ØÔ˜dÔ.ñ 
ô  
Ðð !Ð,Ð,Ø5�TÔ%Ð5Ð5Ð5ñ -Ô,Ð,à0×7Ò7Ø˜Ð(;ñ
ô 
ˆÔð Ôð 	ð -1Ô,=Ô,JÔ,VˆDÔÔ)àÔ!Ô.Ô<ð ÔÔ+Ð+Ð+ð		ð 	rj   c                 ó¨  ‡ ‡‡	— t          ˆ fd„dD ¦   «         ¦  «        �r t          j        j        r‰                      ¦   «         S d‰ _        ‰                      ¦   «         j        }dt          t          j
        t          j        t          j        f         dt          t          t          t          j        f         fd„Št          j        j                             ¦   «         }|�|t%          t&          j        t*          ¦  «        s]|j        r|j                             ¦   «          d„ |j        D ¦   «         }ˆfd	„t3          j        |t&          j        ¦  «        D ¦   «         Š	n>ˆfd
„t%          t&          j        t*          ¦  «        r‰ j        nt&          j        D ¦   «         Š	‰ j        r_ddlm} ˆ	ˆ fd„t?          ‰ j         ¦  «        D ¦   «         }|D ]5}‰	|         }t%          |t          j        ¦  «        sJ ‚ ||¦  «        ‰	|<   ~Œ6t          j!        j"         #                    ¦   «         5   |‰	¦  «         ddd¦  «         n# 1 swxY w Y   ‹	d‰ _        ‰ j$                             ¦   «          ‰ j%                             ¦   «          ‰ j&                             ¦   «          t&          j'        j(        j)                             ¦   «          t&          j'        j(        j*                             ¦   «          tW          j,        ¦   «          t          j-        ddi¦  «        5  ‰                      ¦   «         cddd¦  «         S # 1 swxY w Y   dS ‰                      ¦   «         S )zQ
        For GPU, Triton kernels are autotuned and stored as cubin files
        c              3   ó*   •K  — | ]}|‰j         v V — Œd S rg   )r   )r’   r   rð   s     €ri   rv  z9GraphLowering.codegen_with_cpp_wrapper.<locals>.<genexpr>G  s+   øè è € ÐIÐI¨vˆv˜Ô*Ð*ÐIÐIÐIÐIÐIÐIrj   )rn   ÚxpuFrô  re   c                 ó<  — | €d S t          | t          j        t          j        f¦  «        r| j        j        S t          | t          ¦  «        rt          | ¦  «        S t          | t          j        ¦  «        s'J dt          t          | ¦  «        ¦  «        z   ¦   «         ‚| S )Nz&Unknown type when creating real inputs)r†   ro   rã   rÜ  r±   Úhintr   r   r   rú  r»  )rô  s    ri   Úmaterializez;GraphLowering.codegen_with_cpp_wrapper.<locals>.materializeQ  s�   € ð �yØ#˜tÝ# A­¬µe´nÐ'EÑFÔFð 	!à œvœ{Ð*Ý# A¥zÑ2Ô2ð !Ý% a™yœyÐ(å)Ø�uœ|ñ ô  ð Sð SàCÅcÍ$ÈqÉ'Ì'ÁlÄlÑRñSô Sð  ð  !˜rj   Nc                 ó   — g | ]}|®|‘ŒS rg   rh   )r’   Úparams     ri   ræ   z:GraphLowering.codegen_with_cpp_wrapper.<locals>.<listcomp>h  s(   € ð #ð #ð #à!Ø Ð,ð à,Ð,Ð,rj   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS rh   rh   ©r’   rô  r>  s     €ri   ræ   z:GraphLowering.codegen_with_cpp_wrapper.<locals>.<listcomp>m  s1   ø€ ð #ð #ð #àð $˜ A™œð#ð #ð #rj   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS rh   rh   rB  s     €ri   ræ   z:GraphLowering.codegen_with_cpp_wrapper.<locals>.<listcomp>u  s1   ø€ ð #ð #ð #àð $˜ A™œð#ð #ð #rj   r-   )Úclone_preserve_stridesc                 ól   •— g | ]0\  }}|‰j         v ¯t          ‰|         t          j        ¦  «        ¯.|‘Œ1S rh   )r7  r†   ro   r   )r’   r°   r	  Úreal_inputsrð   s      €€ri   ræ   z:GraphLowering.codegen_with_cpp_wrapper.<locals>.<listcomp>�  sN   ø€ ð *ð *ð *á%˜C Ø 4Ô#6Ð6Ð6Ý& {°3Ô'7½¼ÑFÔFð 7ð à6Ð6Ð6rj   Tztriton.autotune_at_compile_time).rÅ   r.   ÚtritonÚautotune_at_compile_timeÚcodegenrÿ   Úcompile_to_moduleÚcallr   ro   rã   rÜ  r   r  r’  Ú_guardsÚTracingContextÚtry_getr†   r^   rF  r]   Úoutput_stridesÚclearÚparams_flatrY  Úchainrü   r7  Ú
compile_fxrD  rœ   r  r  r  r  r+  r*  r/  rI  r  Úprecomputed_replacementsÚinv_precomputed_replacementsr0   ÚresetÚpatch)
rð   ÚcompiledÚtracing_contextrQ  rD  r8  r°   Úmutated_inpr>  rF  s
   `       @@ri   Úcodegen_with_cpp_wrapperz&GraphLowering.codegen_with_cpp_wrapperC  sç  øøø€ õ ÐIÐIÐIÐI¸ÐIÑIÔIÑIÔIñ ]	"ÝŒ}Ô5ð Y*ð —|’|‘~”~Ð%ð $)�Ô Ø×1Ò1Ñ3Ô3Ô8�ð!Ý�Uœ\­5¬>½5¼<ÐGÔHð!å�3¥¥u¤|Ð3Ô4ð!ð !ð !ð !õ  #(¤-Ô">×"FÒ"FÑ"HÔ"H�Ø"Ð.µzÝ”M¥;ñ8ô 8Ð.ð 'Ô5ð ?Ø'Ô6×<Ò<Ñ>Ô>Ð>ð#ð #à%4Ô%@ð#ñ #ô #�Kð
#ð #ð #ð #å!*¤°½a¼mÑ!LÔ!Lð#ñ #ô #�K�Kð#ð #ð #ð #õ  *­!¬-½ÑEÔEð/˜DÔ/Ð/å!"¤ð#ñ #ô #�Kð Ô&ð (ØBÐBÐBÐBÐBÐBð*ð *ð *ð *ð *å)2°4Ô3DÑ)EÔ)Eð*ñ *ô *Ð&ð  2ð (ð (˜ð '2°#Ô&6˜Ý)¨+µu´|ÑDÔDÐDÐDÐDØ+AÐ+AÀ+Ñ+NÔ+N˜ CÑ(Ø'˜Kå”[Ô1×HÒHÑJÔJð *ð *Ø�H˜[Ñ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àð $(�Ô ØÔ$×*Ò*Ñ,Ô,Ð,ØÔ'×-Ò-Ñ/Ô/Ð/ØÔ'×-Ò-Ñ/Ô/Ð/Ý”Ô Ô9×?Ò?ÑAÔAÐAÝ”Ô Ô=×CÒCÑEÔEÐEÝ”‘”�Ý”\Ð#DÀeÐ"LÑMÔMð *ð *ØŸ<š<™>œ>ð*ð *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *ð —<’<‘>”>Ð!s$   È#H;È;H?ÉH?ÌL3Ì3L7Ì:L7c                 óB  — t          dd¬¦  «        5  ddlm} |                      ¦   «           || j        ¦  «        | _        t
          j                             | j        | j        j	        ¦  «         | j
                             | ¦  «         | j                             ¦   «          t                               dt
          j        j        ¦  «         | j
                             | j        ¦  «        }| j
                             ¦   «          |cd d d ¦  «         S # 1 swxY w Y   d S )NzGraphLowering.codegenT©Úlog_pt2_compile_eventr-   ©Ú	SchedulerzFFinished codegen for all nodes. The list of kernel names available: %s)r   rD  r`  r8  r#  r^   r�  Údraw_orig_fx_graphrP  rÐ   r1  Úpush_codegened_graphrI  r�  rI  rX  Úgenerater  Úpop_codegened_graph)rð   r`  rf  s      ri   rI  zGraphLowering.codegen¦  sO  € ÝÐ1ÈÐNÑNÔNð 	ð 	Ø,Ð,Ð,Ð,Ð,Ð,à×"Ò"Ñ$Ô$Ð$à&˜Y t¤Ñ7Ô7ˆDŒNÝŒG×&Ò& t¤|°T´^Ô5IÑJÔJÐJàÔ×2Ò2°4Ñ8Ô8Ð8ØŒN×"Ò"Ñ$Ô$Ð$å�IŠIØXÝ”Ô0ñô ð ð
 Ô&×/Ò/°Ô0AÑBÔBˆFØÔ×1Ò1Ñ3Ô3Ð3Øð%	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ’C5DÄDÄDÚparent_graphc                 ó
  — t          dd¬¦  «        5  ddlm} |j        | _        |j        | _        |j        | _         || j        ¦  «        | _        | j                             ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )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_subgraphTr]  r-   r_  N)r   rD  r`  r1  r0  rÿ   r#  rI  )rð   re  r`  s      ri   Úcodegen_subgraphzGraphLowering.codegen_subgraph»  sÖ   € õ Ð:ÐRVÐWÑWÔWð 	%ð 	%Ø,Ð,Ð,Ð,Ð,Ð,à ,Ô 9ˆDÔØ*Ô5ˆDŒOØ+Ô7ˆDÔà&˜Y t¤Ñ7Ô7ˆDŒNØŒN×"Ò"Ñ$Ô$Ð$ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%s   ’AA8Á8A<Á?A<c                 óî   — d}g }g }| j         j        D ]^}|                     ¦   «         }||z  }|                     ||dz  f¦  «         |                     ||                     ¦   «         f¦  «         Œ_|||fS )Nr   r»  )rD  rÐ   Úget_read_write_buffers_sizesrà  Úget_estimated_runtime)rð   Útotal_bytesÚnode_countsÚnode_runtimesr±   Ú	num_bytess         ri   Úcount_byteszGraphLowering.count_bytesÏ  s–   € ð
 ˆØˆØˆØ”NÔ(ð 	Gð 	GˆDØ×9Ò9Ñ;Ô;ˆIØ˜9Ñ$ˆKØ×Ò  i°1¡nÐ5Ñ6Ô6Ð6Ø× Ò  $¨×(BÒ(BÑ(DÔ(DÐ!EÑFÔFÐFÐFà˜K¨Ð6Ð6rj   Úcodec                 ó   — d S rg   rh   ©rp  s    ri   Úsave_output_codezGraphLowering.save_output_codeß  s	   € ð 	ˆrj   c                 ó„   — t          dddd¬¦  «        5  |                      ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )NzGraphLowering.compile_to_moduleÚcode_genTÚ,inductor_code_gen_cumulative_compile_time_us)Ú
phase_namer^  Údynamo_compile_column_us)r   Ú_compile_to_modulerk  s    ri   rJ  zGraphLowering.compile_to_moduleä  s˜   € ÝØ-Ø!Ø"&Ø%Sð	
ñ 
ô 
ð 	-ð 	-ð ×*Ò*Ñ,Ô,ð	-ð 	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s   ”5µ9¼9c                 óÀ  ‡‡— ddl m} | j        r|                      ¦   «         n|                      ¦   «         \  Š}t
          j        j        rHd| j        j	         
                    ¦   «         z   | j        j         
                    ¦   «         z   dz   }|‰z   Št                               ‰¦  «         t          j        d‰¦  «         t!          j        ¦   «         }t%          j        |‰¬¦  «         	 d„ |D ¦   «         }|                     ‰¦  «        \  }Št          j        d‰¦  «         t+          d	ˆfd
„ˆfd„¬¦  «         n## t,          $ r t+          d	ˆfd„¬¦  «         ‚ w xY wt/          dd¬¦  «        5  |                     |‰|i | j        ¥| j        ¥¬¦  «        }d d d ¦  «         n# 1 swxY w Y   || _        ‰| _        || _        t
          j        r|                     dd¬¦  «         |j         €J ‚tC          |j         ¦  «         tD                               d|j         ¦  «         t          j#        d|j         ¦  «         t
          j$        r#tK          d|j         › �tL          j'        ¬¦  «         tP          j         )                    |j         ¦  «         tP          j         *                    tV          j,         -                    |j         ¦  «        d         dz   ¦  «         |S )Nr-   )ÚPyCodeCachez%"""
Compile-time auto-tuning block: 
z"""
zOutput code: 
%srr  c                 ó&   — g | ]\  }}||j         f‘ŒS rh   )Ústack_trace)r’   Úline_nor±   s      ri   ræ   z4GraphLowering._compile_to_module.<locals>.<listcomp>  s$   € ÐPÐPÐP±}°wÀ˜ Ô!1Ð2ÐPÐPÐPrj   zOutput code written to: %sÚinductor_output_codec                  ó   •— d‰ iS )NÚfilenamerh   )Úpaths   €ri   r´  z2GraphLowering._compile_to_module.<locals>.<lambda>  s   ø€ ˜ TÐ*€ rj   c                  ó   •— ‰ S rg   rh   rr  s   €ri   r´  z2GraphLowering._compile_to_module.<locals>.<lambda>  ó   ø€  4€ rj   )Ú
payload_fnc                  ó   •— ‰ S rg   rh   rr  s   €ri   r´  z2GraphLowering._compile_to_module.<locals>.<lambda>
  r„  rj   zPyCodeCache.load_by_key_pathTr]  )ÚlinemapÚattrs)ÚtimesÚrepeatzCompiled module path: )Úfiler   z.debug).Ú	codecacher{  rÿ   r[  rI  r.   rG  rH  r1  Úkernel_autotune_defsÚgetvalueÚkernel_autotune_callsrÛ   rs  r`   r�  rP   Úinductor_meta_from_configrQ   Úbegin_compileÚwriter   r0  r   Úload_by_key_pathr&  r'  rJ  rK  rL  Úprofile_bandwidth_outputÚbenchmark_compiled_moduleÚ__file__rb   r�  r¸  Úbenchmark_kernelÚprintr+  Ústderrr^   Úoutput_coder  Úosr‚  Úsplitext)	rð   r{  r‡  Útuning_codeÚinductor_metar«  Úmodrp  r‚  s	          @@ri   ry  z GraphLowering._compile_to_moduleí  sY  øø€ Ø*Ð*Ð*Ð*Ð*Ð*ð 04Ô/?ÐSˆD×)Ò)Ñ+Ô+Ð+ÀTÇ\Â\Á^Ä^ñ 	ˆˆgõ Œ=Ô1ð 	&ð7àÔ#Ô8×AÒAÑCÔCñDð Ô#Ô9×BÒBÑDÔDñEð ñ	ð ð  Ñ%ˆDÝ×&Ò& tÑ,Ô,Ð,ÝÔÐ1°4Ñ8Ô8Ð8å&Ô@ÑBÔBˆÝÔ*¨=¸tÐDÑDÔDÐDð	ØPÐPÈÐPÑPÔPˆGØ#×)Ò)¨$Ñ/Ô/‰IˆC�ÝÔ!Ð">ÀÑEÔEÐEõ Ø&Ø*Ð*Ð*Ð*Ø'˜<˜<˜<ðñ ô ð ð øõ ð 	ð 	ð 	ÝØ&à'˜<˜<˜<ðñ ô ð ð
 ð	øøøõ Ð8ÐPTÐUÑUÔUð 	ð 	Ø×.Ò.ØØØØD˜œÐD¨4Ô+CÐDð	 /ñ ô ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˆŒØˆŒØ$ˆÔåÔ*ð 	=à×)Ò)°¸!Ð)Ñ<Ô<Ð<ð Œ|Ð'Ð'Ð'å˜œÑ%Ô%Ð%Ý�	Š	Ð.°´Ñ=Ô=Ð=ÝÔÐ9¸3¼<ÑHÔHÐHÝÔ"ð 	LÝÐ9¨3¬<Ð9Ð9ÅÄ
ÐKÑKÔKÐKÝ	Œ×Ò˜CœLÑ)Ô)Ð)Ý	Œ�Š•R”W×%Ò% c¤lÑ3Ô3°AÔ6¸ÑAÑBÔBÐBØˆ
s   Ã-9D? Ä? EÅ3(F'Æ'F+Æ.F+c                 ó$   — d„ | j         D ¦   «         S )Nc                 óž   — g | ]J}t          |t          j        ¦  «        °t          |t          j        ¦  «        °6|                     ¦   «         ‘ŒKS rh   )r†   r/   ÚNoneAsConstantBufferÚShapeAsConstantBufferra  )r’   r±   s     ri   ræ   z2GraphLowering.get_output_names.<locals>.<listcomp>/  sZ   € ð 
ð 
ð 
àÝ˜d¥BÔ$;Ñ<Ô<ð
õ ˜t¥RÔ%=Ñ>Ô>ð	
Ø�MŠM‰OŒOð
ð 
ð 
rj   )rÜ   rk  s    ri   Úget_output_nameszGraphLowering.get_output_names.  s&   € ð
ð 
àÔ*ð
ñ 
ô 
ð 	
rj   c                 ó,  — || j                              ¦   «         v op| j         |                              ¦   «         dk    oMt          | j         |                              ¦   «         ¦  «        dk    ot          | j         |         ¦  «        dk    p|| j        v S )Nr-   r   r  )r  r$  rÚ  rì   rƒ  r?   r  rª  s     ri   Úis_unspec_argzGraphLowering.is_unspec_arg6  sž   € ð �DÔ%×*Ò*Ñ,Ô,Ð,ð BØÔ! $Ô'×1Ò1Ñ3Ô3°qÒ8ðBå�DÔ% dÔ+×4Ò4Ñ6Ô6Ñ7Ô7¸1Ò<ðBõ   Ô 1°$Ô 7Ñ8Ô8¸EÒAð	3ð
 �TÔ2Ð2ð	3rj   )NNNFFNNFFFNNNNNrg   )re   N©FNN)re  rÛ   re   N)kÚ__name__Ú
__module__Ú__qualname__r   r/   r÷  Ú__annotations__ro   r   r   r   r   r  r   rõ   r‡   rú   rÍ   r   r   Úobjectr%   rw   r   ÚExternKernelNoder   r	   rú  r  r“  r   r1   ra  rd  Ú
contextlibr   r   rf  rl  Ústaticmethodr  r«  r°  r+   r)   rF  r¹  r½  ÚpropertyÚ_subclassesÚfake_tensorÚFakeTensorModer–  rD   r  rÆ  rÉ  rÍ  rk   rÑ  rÚ  rÜ  rß  rá  ré  rí  r
   rø  rü  rÿ  r  r  r	  r  r¶   r?  r<   rB  rE   rH  r   rM  rP  r¨   re  rq  r\  rã   r`  r/  rÞ  r-  r7   r8  r[  rI  rg  rR   r’  ro  rs  r   rJ  ry  r¤  r¦  Ú__classcell__©r^  s   @ri   rÛ   rÛ     sþ  ø€ € € € € € Ø˜œ	”?Ð"Ð"Ñ"ð# Ø”,ð# à	ˆx˜˜c 4˜iÔ(Ô)¨8°E¸#¸t¸)Ô4DÔ+EÐEÔ	Fð# ð # ð # ð # ðJØ”,ðà	ˆt�E”JÔ  e¤jÔ!1Ð1Ô	2ðð ð ð ð 6:Ø(,Ø"&Ø!ØØ%)ð Ø"Ø!Ø$Ø7;Ø$(Ø26Ø"Ø37ð'f2ð f2àŒHÔ ðf2ð ! ¨&Ô!1Ô2ðf2ð ˜HÔ%ð	f2ð
 ˜3”-ðf2ð ðf2ð ðf2ð ˜T”Nðf2ð !)Ø�d˜2Ô.Ô/Ð0°#Ð5Ô6ô!
ðf2ð ðf2ð ðf2ð ðf2ð % T¨#¨s¨(¤^Ô4ðf2ð  ˜S”Mð!f2ð" ˜Ô/ð#f2ð$ �sŒmð%f2ð& " (¨3¤-Ô0ð'f2ð( 
ð)f2ð f2ð f2ð f2ð f2ð f2ðPMà�e”oÔ(Ô/°¸Ð=Ô>ðMð  ðMð 
ð	Mð Mð Mð Mð4¨U¬\ð 4ð 4ð 4ð 4ð Ôð(¨¬ð (¸(À4¼.ð (ð (ð (ñ Ôð(ð Cð ð ð ð ð ða˜kð a¸Dð aÀTð að að añ „\ðaðF ð ¨ð ð ð ð ð
àŒHÔ ð
ð ˜Uœ\Ô*ð
ð ð	
ð
 
ð
ð 
ð 
ð 
ð60°¸DÔ1Að 0ð 0ð 0ð 0ðdA #ð A¨$ð Að Að Að Að
D e¤lð D°tð Dð Dð Dð Dð ð˜5Ô,Ô8ÔGð ð ð ñ „XððØðà	�%˜œ b¤iÐ/Ô0Ô	1ðð ð ð ð$F¨U¬Zð F¸Dð Fð Fð Fð FðQ cð Q¨e°B´LÀ"Ä)Ð4KÔ.Lð Qð Qð Qð Qð8 Sð 8¨U¬[ð 8ð 8ð 8ð 8ð,
8 Sð 
8¨U°3¸°9Ô-=ð 
8ð 
8ð 
8ð 
8ð&˜ð & ð &ð &ð &ð &ð &ð &ð R¤\ð °cð ð ð ð ð FKð ð ð  b¤ið ¸dð Èsð ð ð ð ð(°t¸C´yð ÀSð ð ð ð ð
Ø  ¨"¬)Ô!4°b´iÐ!?Ô@ðà	ðð ð ð ð¨ð °ð ð ð ð ð
°3ð 
¸5¼<ð 
ð 
ð 
ð 
ð Ø˜S”MðØ).¨v¬ðà	ðð ð ð ð@ 37ð
ð 
Øð
Ø"*¨3¤-ð
à	ð
ð 
ð 
ð 
ð #ð ¸ÀÄÔ8Nð ÐSVð ð ð ð ð LØðLØ!& v¤ðLØ8<¸SÀ&¸[Ô8IðLà	ˆt�Y Ð$Ô	%ðLð Lð Lð Lð Lð Lð\I Hð I°Cð IÀÀcÈ3ÀhÄð IÐTWð Ið Ið Ið Ið Ið IðV ð5˜uœ|ð 5°ð 5ð 5ð 5ñ „\ð5ð(7Øð(7Ø!& r¤ð(7Ø48¸¸f¸Ô4Eð(7à	ˆx˜ B¤K°Ð@Ô	Að(7ð (7ð (7ð (7ðT #ð ¨Sð ¸#ð À(ð ð ð ð ð #ð ¨Sð ¸#ð À(ð ð ð ð ðP
ØðP
Ø!& v¤ðP
Ø8<¸SÀ&¸[Ô8IðP
à	ðP
ð P
ð P
ð P
ð P
ð P
ðd ð  ð  ð  ð ð$ U¤X¤]ð $ð $ð $ñ „^ð$ð;
à�b”l B¤KÐ/Ô0ð;
ð    c¨5¬<Ð&7Ô 8¸#Ð =Ô>ð;
ð 
ˆrŒ|˜Rœ[Ð(Ô	)ð	;
ð ;
ð ;
ð ;
ðzG:à””ðG:ð ˜”*ðG:ð ˜˜c˜”Nð	G:ð
 ˜”*ðG:ð ˜˜c˜”NðG:ð 
ðG:ð G:ð G:ð G:ðRq˜%œ(œ-ð q¨Fð qð qð qð qð qð qðfQð Qð Qð Qð* "Ø'+Ø>Bð	$ð $àð$ð   ”}ð$ð &Ð&:Ô;ð	$ð
 
ð$ð $ð $ð $ðLa"¨%°°T¸%ÀÀTÀ	Ô:JÔ5KÐ0KÔ*Lð a"ð a"ð a"ð a"ðF˜˜s D¨¨s°D¨yÔ)9Ô$:Ð:Ô;ð ð ð ð ð*%ð %ð %ð %ð(7à	ØˆT�%Ð)¨3Ð.Ô/Ô0°$°uÐ=NÐPUÐ=UÔ7VÔ2WÐWô
ð7ð 7ð 7ð 7ð  ð˜sð  tð ð ð ñ „\ðð- :ð -ð -ð -ð -ð? Jð ?ð ?ð ?ð ?ðB
 $ s¤)ð 
ð 
ð 
ð 
ð3 #ð 3¨$ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3rj   rÛ   c            	       óp   ‡ — e Zd ZdZdedededdfˆ fd„Z	 	 	 dd	ed
ee	         dee
         ddfˆ 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.
    r¯  rc   rd   re   Nc                 óH   •— || _          t          ¦   «         j        |i |¤Ž d S rg   )r¯  r  r  )rð   r¯  rc   rd   r^  s       €ri   r  zSubgraphLowering.__init__G  s,   ø€ ØˆŒØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)rj   Fr.  r¬  r/  c                 ón   •— t          ¦   «                              d| j        | j        j        ¬¦  «         d S )NT)r.  r¬  r/  )r  r8  r	  r¯  r1  )rð   r.  r¬  r/  r^  s       €ri   r8  z"SubgraphLowering.init_wrapper_codeK  s@   ø€ õ 	‰Œ×!Ò!ØØœ)Ø $¤Ô 8ð 	"ñ 	
ô 	
ð 	
ð 	
ð 	
rj   r§  )r¨  r©  rª  Ú__doc__rÛ   r   r  rw   r   rú  r7   r8  r´  rµ  s   @ri   r­  r­  A  sÁ   ø€ € € € € ðð ð
*˜}ð *°Sð *ÀCð *ÈDð *ð *ð *ð *ð *ð *ð "Ø'+Ø>Bð	

ð 

àð

ð   ”}ð

ð &Ð&:Ô;ð	

ð
 
ð

ð 

ð 

ð 

ð 

ð 

ð 

ð 

ð 

ð 

rj   r­  )£r®  rS  rY  Úloggingr%  r›  rÒ  r+  r=  Úcollectionsr   r   Útypesr   Útypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r‡   r   ro   Útorch._loggingÚtorch.fxr   r   Útorch._decompr   Útorch._dynamo.utilsr   r   r   r   Útorch._prims_commonr   Útorch._subclasses.fake_tensorr   r   Ú%torch.fx.experimental._backward_stater   Útorch.fx.experimental.sym_noder   r    Ú%torch.fx.experimental.symbolic_shapesr!   r"   r#   r$   r%   r&   r'   Útorch.fx.graphr(   Útorch.fx.noder)   Útorch.utils._mode_utilsr*   Útorch.utils._ordered_setr+   Útorch.utils._sympy.numbersr,   r  r.   r/   r0   Úcodegen.commonr1   r2   r3   r4   r5   r6   Úcodegen.wrapperr7   Úexcr8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF  rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   ÚruntimerP   Úruntime.autotune_cacherQ   rD  rR   r  rS   r  rT   rU   rV   rW   rX   rY   rZ   r[   r\   Úvirtualizedr]   r^   Útorch._higher_order_ops.effectsr_   Útorch._inductor.codecacher`   Ú	getLoggerr¨  r�  Ú_loggingÚgetArtifactLoggerr·  ro  r½   rZ  rB  r4  Útorch._inductor.fb.utilsrb   rk   rú  rw   rƒ   rŽ   r–   r*  rC  r¥   r  r²   rÙ   rÍ   ÚInterpreterrÛ   r­  rh   rj   ri   ú<module>rÙ     s´  ðØ Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  €€€Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø >Ð >Ð >Ð >Ð >Ð >Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø  Ð  Ð  Ð  Ð  Ð  Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð !Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ø /Ð /Ð /Ð /Ð /Ð /Ø -Ð -Ð -Ð -Ð -Ð -à !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 2Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø (Ð (Ð (Ð (Ð (Ð (Ø &Ð &Ð &Ð &Ð &Ð &ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ð <Ø;Ð;Ð;Ð;Ð;Ð;à 5Ð 5Ð 5Ð 5Ð 5Ð 5ð €gÔ˜Ñ!Ô!€Ø”×0Ò0°¸<ÑHÔH€à„y„~€à*˜9œ?Ñ,Ô,Ð à€6ÔÑÔð Ø8Ð8Ð8Ð8Ð8Ð8Ð8ð˜sð ¨cð °dð ð ð ð ð$¨%¬+ð $ÀCð $ÈDð $ð $ð $ð $ð2°5´:ð À(È5Ì;ÔBWð ð ð ð ð$˜ð  ð ð ð ð ð
Ø	ðØ!ðà
ˆ6�5”8Ô(¨+Ð5Ô6ðð ð ð ð
 uð 
°°d¸EÀ#ÀsÀ(¼OÐ6KÔ1Lð 
ð 
ð 
ð 
ðA/ØðA/Ø+/°°e¸CÀ¸H´oÐ0EÔ+FðA/à	ðA/ð A/ð A/ð A/ðHe3ð e3ð e3ð e3ð e3�E”HÔ(ñ e3ô e3ð e3ðP9
ð 
ð 
ð 
ð 
�}ñ 
ô 
ð 
ð 
ð 
rj   