ó
    Eñil· ã                  óR  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKJr  S SKJr  S SKJrJrJrJrJr  S SKrS SKJr  S SKrS SKrS SKrS SKJrJr  S SKJr  S S	KJrJr  S S
K J!r!  S SK"J#r#  S SK$J%r%  S SKJ&r&J'r'  S SK(J)r)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0  S SK1J2r2J3r3  S SK4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<  S SK=J>r>  S SK?J@r@  S SKAJBrB  S SKCJDrD  S SKEJFrF  SSKGJHrHJIrIJJrJ  SSKKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrS  SSKTJUrUJVrVJWrWJXrX  SSKYJZrZ  SSKIJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrg  SSKhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrt  SS KuJvrv  SS!KwJxrx  SS"KyJzrz  SS#K{J|r|J}r}J~r~JrJ€r€J�r�J‚r‚JƒrƒJ„r„J…r…J†r†J‡r‡Jˆrˆ  SS$K‰JŠrŠJ‹r‹  \(       a=  S S%KŒJ�r�JŽrŽJ�r�J�r�  S S&K‘J’r’  S S'K“J”r”  S S(KJ•r•  S S)K–J—r—  SS*K˜J™r™  SS+KšJ›r›  SS,KœJ�r�  \\’\N4   ržS S-KŸJ r   \GRB                  " \¢5      r£\GRH                  GRK                  \¢S.5      r¦\GRN                  GRP                  r¨\GRR                  " 5       rª\HGRV                  " 5       (       a  S S/K¬J­r­  OS<S0 jr­S=S1 jr®S>S2 jr¯      S?S3 jr°S@S4 jr±    SAS5 jr²      SBS6 jr³SCS7 jr´ " S8 S9\GRj                  GRl                  5      r· " S: S;\·5      r¸g)Dé    )ÚannotationsN)Údefaultdict)Úcontextmanager)ÚAnyÚNoReturnÚOptionalÚTYPE_CHECKINGÚUnion)ÚExpr)ÚdeviceÚTensor)Úget_decompositions)ÚdefakeÚdynamo_timed)ÚFakeScriptObject)Úis_opaque_type)Úget_layout_constraint_tag)Ú
LazyStringÚtrace_structured)Úcompute_required_storage_lengthÚmake_channels_last_strides_for)Ú
FakeTensor)Úfull_aoti_runtime_assert)ÚBackwardState)Úmagic_methodsÚmethod_to_operator)Ú_get_placeholder_exprÚfree_unbacked_symbolsÚhas_free_symbolsÚresolve_unbacked_bindingsÚRuntimeAssertÚShapeEnvÚSympyBooleanÚSymTypes)ÚNode)Ú_is_view_op)Úno_dispatch)Ú
OrderedSet)Úint_ooé   )ÚconfigÚirÚmetrics)ÚBackendFeatureÚDeviceOpOverridesÚFileBackedGraphModuleÚget_backend_featuresÚget_device_op_overridesÚget_wrapper_codegen_for_deviceÚinit_backend_registrationÚWorkspaceArg)ÚCppWrapperCodegenErrorÚLoweringExceptionÚMissingOperatorWithDecompÚMissingOperatorWithoutDecomp)Úcount_flops_fx)Úassign_origin_nodeÚConstantÚDonatedBufferÚFixedLayoutÚget_device_typeÚGraphPartitionSignatureÚInputBufferÚ	PointwiseÚ	ReductionÚShapeAsConstantBufferÚ
StorageBoxÚ	TensorBoxÚTorchBindObject)Úconstrain_to_fake_tensorsÚconstrain_to_fx_stridesÚFALLBACK_ALLOW_LISTÚfallback_handlerÚ%fallback_node_due_to_unsupported_typeÚ	loweringsÚmake_fallbackÚmaybe_layout_constraintsÚneeds_realized_inputsÚrequire_contiguousÚtag_to_layout_constraintÚunsupported_output_tensor)Úautotune_cache)ÚAutotuneCacheBundler)ÚSizeVarAllocator)Úconvert_shape_to_inductorÚgather_originsÚ get_cloned_parameter_buffer_nameÚget_donated_idxsÚget_sympy_Expr_dtypeÚGraphPartitionMapÚis_same_tensorÚ#maybe_get_suppress_shape_guards_ctxÚnormalize_nameÚshould_assume_input_alignedÚshould_fallback_by_defaultÚSUPPORTED_MKLDNN_DEVICESÚValueWithLineMap)ÚNullHandlerÚV)ÚCallableÚIterableÚIteratorÚSequence)Ú
ModuleType)Ú_EffectType)ÚGraphModule)ÚGraph)ÚPythonWrapperCodegen)ÚDep)ÚBaseSchedulerNode)Úoutput_code_logÚ
perf_hints)Úlog_module_codec                 ó   • g ©N© )ÚargsÚkwargss     ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/graph.pyrs   rs   •   s   € Øó    c                ó  • [        U [        R                  [        R                  [        R                  R
                  R                  45      (       d   S5       e[        U [        R                  R
                  R                  5      (       a  [        R                  $ [        U [        R                  5      (       a  [        U 5      $ U R                  (       a  [        R                  $ U R                  (       a  [        R                  $ g )Nzgget_constant_buffer_dtype only supports input of sympy.Symbol, sympy.Expr or sympy.core.numbers.Integer)Ú
isinstanceÚsympyÚSymbolr   ÚcoreÚnumbersÚIntegerÚtorchÚint64r[   Ú
is_integerÚis_floatÚfloat32)Úconstant_buffers    ry   Úmay_get_constant_buffer_dtyperˆ   ™   s¶   € ÜØœ%Ÿ,™,¬¯
©
´E·J±J×4FÑ4F×4NÑ4NÐO÷ñ ð ð 	róð ô
 �/¤5§:¡:×#5Ñ#5×#=Ñ#=×>Ñ>Ü�{‰{Ðä�/¤5§:¡:×.Ñ.Ü# OÓ4Ð4à×!×!Ü�{‰{ÐØ	×	!×	!Ü�}‰}Ðàrz   c                ó6   • [        S [         5       5      nX;   $ )Nc              3  ó8   #   • U  H  n[        U5      v •  M     g 7fru   )r   )Ú.0Úms     ry   Ú	<genexpr>Ú"is_magic_method.<locals>.<genexpr>®   s   é € ÐHº-°QÔ-¨a×0Ð0º-ùs   ‚)r(   r   )ÚopÚ	magic_opss     ry   Úis_magic_methodr‘   ­   s   € ÜÑH½-ÓHÓH€IØ‰?Ðrz   c           	     óÊ   • UR                  S5      nU n[        U5       H@  u  pE[        X55      (       d   [        SSR	                  US U 5       35      e[        X55      nMB     U$ )NÚ.z#Node referenced nonexistent target )ÚsplitÚ	enumerateÚhasattrÚRuntimeErrorÚjoinÚgetattr)ÚobjÚtargetÚtarget_atomsÚattr_itrÚiÚatoms         ry   Úgetattr_recursiver    ²   sn   € ð —<‘< Ó$€LØ€HÜ˜\Ö*‰ˆÜ�x×&Ñ&ÜØ5°c·h±h¸|ÈBÈQÐ?OÓ6PÐ5QÐRóð ô ˜8Ó*Šñ +ð €Orz   c                ón  • 0 nU R                  SS9S   nSUR                  ;  a  U$ [        UR                  S   [        R
                  R                  5      (       d  UR                  S   nOUR                  n[        U5       H-  u  pEXBR                  S   ;   d  M  UR                  S   U   X'   M/     U$ )NÚoutput©r�   r   Úuser_visible_output_idxsÚoriginal_output_strides)Ú
find_nodesÚmetar|   rw   r‚   Úfxr%   r•   )ÚgÚretÚoutput_nodeÚoutput_node_argsÚidxÚnodes         ry   Úget_user_visible_output_stridesr¯   À   s¯   € Ø')€CØ—,‘, (�,Ð+¨AÑ.€Kà!¨×)9Ñ)9Ó9Øˆ
ä�k×&Ñ& qÑ)¬5¯8©8¯=©=×9Ñ9Ø&×+Ñ+¨AÑ.Ñà&×+Ñ+ÐäÐ/Ö0‰	ˆØ×"Ñ"Ð#=Ñ>Õ>Ø#×(Ñ(Ð)BÑCÀCÑHˆC‹Iñ 1ð €Jrz   c                óÞ  • 0 U En/ UR                  5       Qn[        / UQ5      nU(       aÂ  UR                  5       n[        UR                  5      (       a�  UR
                  (       a~  [        UR
                  S   [        R                  R                  5      (       aH  UR
                  S   nXS;  a4  UR                  US5        UR                  U5        UR                  U5        U(       a  MÂ  U$ )z[
Extend user_visible_output_strides to include view ops that lead to user-visible outputs.
r   N)Úkeysr(   Úpopr&   r›   rw   r|   r‚   r¨   r%   Ú
setdefaultÚaddÚappend)Úuser_visible_outputsÚresultÚqueueÚvisitedÚcurrentÚbases         ry   Ú"extend_user_visible_output_stridesr¼   Ò   s·   € ð ":Ð$8Ð!9€FØˆf�k‰k‹mÐ€EÜ˜˜5˜Ó"€GÞ
Ø—)‘)“+ˆä˜Ÿ™×'Ñ'Ø——Ü˜7Ÿ<™<¨™?¬E¯H©H¯M©M×:Ñ:à—<‘< ‘?ˆDØÓ"Ø×!Ñ! $¨Ô-Ø—‘˜DÔ!Ø—‘˜TÔ"÷ ˆ%ð €Mrz   c                óz  • [         R                  (       d  g[        U5      n[        [        R
                  [        R                  [        R                  /5      n[        [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                   [        R"                  [        R$                  [        R&                  /5      n    SS jn[)        U R*                  5       GH€  n[-        UR.                  [0        R2                  R4                  R6                  5      (       a  SUR8                  S'   MR  [-        UR.                  [0        R:                  R<                  5      (       aL  [?        UR.                  5      [0        R@                  RB                  RD                  :X  a  SUR8                  S'   MÑ  U" U5      nU(       d  Mâ  Xs;   a  SUR8                  S'   UR8                  RG                  SS5      (       a:  URH                   H*  nU" U5      n	U	(       d  M  X”;  d  M  SUR8                  S'   M,     [         RJ                  (       a  GMi  Xb;   d  GMq  SUR8                  S'   GMƒ     g)ar  
Nodes like convolution/convolution_backward want its input to be dense.
If we pad their inputs, we result in extra calls to copy kernels!  On the other hand, padding usually helps reduction.

The pass finds nodes that dislike padding. These are nodes that can be reached
from a convolution/convolution_backward in the backward direction without
going thru a reduction.
Nc                óî   • U R                   S:X  ad  [        U R                  [        R                  R
                  5      (       a1  [        U R                  S5      (       a  U R                  R                  $ S $ )NÚcall_functionÚ_overloadpacket)r�   r|   r›   r‚   Ú_opsÚ
OpOverloadr–   rÀ   )r®   s    ry   Ú_get_overload_packetÚ8mark_nodes_dislike_padding.<locals>._get_overload_packet  s[   € ð
 �w‰w˜/Ó)ä˜4Ÿ;™;¬¯
©
×(=Ñ(=×>Ñ>Ü˜Ÿ™Ð%6×7Ñ7ð	 �K‰K×'Ñ'ð	
ð ð	
rz   TÚdislike_paddingF)r®   útorch.fx.NodeÚreturnz%Optional[torch._ops.OpOverloadPacket])&r+   Úcomprehensive_paddingr¼   r(   ÚatenÚconvolutionÚconvolution_backwardÚ
_scaled_mmÚvar_meanÚsumÚmeanÚprodÚanyÚaminÚamaxÚminÚmaxÚargminÚargmaxÚscatter_reduceÚreversedÚnodesr|   r›   r‚   Ú_higher_order_opsÚtriton_kernel_wrapÚTritonKernelWrapperMutationr§   rÁ   rÂ   r   Ú_CÚTagÚneeds_exact_stridesÚgetÚall_input_nodesÚpad_outputs)
r©   Úuser_visible_output_stridesÚextended_user_visible_nodesÚops_dislike_paddingÚops_like_paddingrÃ   Úcurr�   ÚpriorÚprior_ops
             ry   Úmark_nodes_dislike_paddingrë   ê   sþ  € ô ×'×'Øä"DØ#ó#Ðô %ä×ÑÜ×%Ñ%Ü�O‰Oð	
óÐô "ä�M‰MÜ�H‰HÜ�I‰IÜ�I‰IÜ�H‰HÜ�I‰IÜ�I‰IÜ�H‰HÜ�H‰HÜ�K‰KÜ�K‰KÜ×Ñð	
óÐð"

Øð

à	.ô

ô ˜Ÿ™× ˆÜØ�J‰JÜ×#Ñ#×6Ñ6×RÑR÷
ñ 
ð +/ˆC�H‰HÐ&Ñ'Ùô �s—z‘z¤5§:¡:×#8Ñ#8×9Ñ9Ü)¨#¯*©*Ó5Ü�x‰x�|‰|×/Ñ/ó0ð +/ˆC�H‰HÐ&Ñ'Ùá! #Ó&ˆÞÙØÓ$Ø*.ˆC�H‰HÐ&Ñ'à�8‰8�<‰<Ð)¨5×1Ñ1à×,Ô,�Ù/°Ó6�ÞÙØÕ3Ø48�E—J‘JÐ0Ó1ñ -ô ×!×!Ò! cÖ&HØ*.ˆC�H‰HÐ&Ô'òA !rz   c                ó  • [        [        R                  SS 5      Gbb  [        [        R                  R                  SS 5      Gb;  [	        U R
                  [        R                  5      (       Ga  [        U R
                  R                  5      S:”  aî  [        U R
                  R                  S   S5      (       aÆ  U R
                  R                  S   R                   HŸ  nUR                  S   [        R                  R                  R                  R                  [        R                  R                  R                  R                  [        R                  R                  R                   R                  4;   d  MŸ    g   g)NÚmkldnnÚ_convolution_pointwiser   ÚtargetsTF)r™   r‚   Úopsrí   r|   r›   Ú	functoolsÚpartialÚlenrw   r–   rï   Úfnsrî   ÚdefaultÚbinaryÚ_convolution_pointwise_)r®   r›   s     ry   Úis_mkldnn_convrø   C  s  € ô 	”—	‘	˜8 TÓ*Ò6Ü”E—I‘I×$Ñ$Ð&>ÀÓEÒQÜ�t—{‘{¤I×$5Ñ$5×6Ò6Ü�—‘× Ñ Ó! AÓ%Ü�D—K‘K×$Ñ$ QÑ'¨×3Ñ3à—k‘k×&Ñ& qÑ)×1Ô1ˆFØ�z‰z˜!‰}Ü—	‘	× Ñ ×7Ñ7×?Ñ?Ü—	‘	× Ñ ×7Ñ7×>Ñ>Ü—	‘	× Ñ ×8Ñ8×?Ñ?ð!õ ñ
 ñ 2ð rz   c                  óx  ^ • \ rS rSr% S\S'                    SF                                     SGU 4S jjjrSHS jr    SIS jr    SJS	 jr    SKS
 jr	    SLS jr
      SMS jrSNSOS jjrSPS jr\R                  SQS j5       rSRS jr\SSS j5       rSTS jr        SUS jrSVS jrSWS jrSXS jr\SYS j5       r    SZS jrS[S jr    S\S jrS]S jrS^S jrS_U 4S jjr S`S jr!SS.SaS  jjr"SbS! jr#    ScS" jr$SWS# jr%SdS$ jr&      SeS% jr' Sf     SgS& jjr(ShS' jr)        SiU 4S( jjr*SjU 4S) jjr+\SkS* j5       r,        SlS+ jr-SmS, jr.SmS- jr/        SnU 4S. jjr0SHS/ jr1\SoS0 j5       r2\SpS1 j5       r3            SqS2 jr4SrU 4S3 jjr5      SsS4 jr6SHS5 jr7    St         SuS6 jjr8    SvS7 jr9  SwS8 jr:SHS9 jr;SwS: jr<SxS; jr=  SyS< jr>Sr?S=\S>'   SzS? jr@SzS@ jrA    S{SA jrBS|SB jrCS}SC jrDS~SD jrESErFU =rG$ )ÚGraphLoweringiX  úlist[ir.IRNode]Úgraph_outputsNFc                ó¬  >• [         TU ]  U5        X l        Ub  UOU R                  XS9U l        SU l        X�l        X l        X°l        XÐl	        Xàl
        Xðl        UU l        SU l        Uc  [        5       nSU l        OSU l        X0l        UR"                  R%                  5       U l        [(        [*        R,                     " 5       U l        [1        U5      U l        / U l        0 U l        0 U l        S U l        [)        5       U l        U(       a  UR>                  O	[)        5       U l        U(       a  UR@                  O	[)        5       U l         SU l!        [E        [(        5      U l#        [E        [(        5      U l$        0 U l%        / U l&        / U l'        U(       a  UO0 U l(        U(       a  [)        URS                  5       5      O	[)        5       U l*        U(       a  URV                  O0 U l+        U(       a  URX                  O0 U l,        URZ                  R]                  S[)        5       5      U l/        U(       a  UR`                  O0 U l0        0 U l1        0 U l2        0 U l3        0 U l4        [)        5       U l5        [)        5       U l6        [)        5       U l7        [)        5       U l8        [)        5       U l9        [)        5       U l:        S U l;        S U l<        SSK=J>n  [~        R€                  " 5       (       a	  U(       a  UOUU lA        S U lB        0 U lC        [)        5       U lD        / U lE        0 U lF        [E        [Ž        5      U lH        0 U lI        [”        R”                  " 5       U lK        UU lL        XPlM        UU lN        XPlO        0 U lP        X`lQ        X@lR        [§        [¨        5      U lU        S U lV        S U lW        S U lX        S U lY        S U lZ        U R                  (       a  U R·                  5       O	[)        5       U l\        [)        S/5      U l]        [½        UR¾                  5      U l`        [Ã        UR¾                  U RÀ                  5        S	U lb        S	U lc        / U ld        S U le        0 U lf        URÏ                  5       U lh        U RÐ                  RY                  5        H  u  nnUU RX                  U'   M     U RÐ                  Ra                  5        H  u  nnUU R`                  U'   M     U RÒ                  RZ                  R]                  S
0 5      U lj        Ub  URÖ                  O0 U lk        [Ù        5         [Ú        RÜ                  " S 5      " [Þ        5      U lo        0 U lp        [)        5       U lq        [)        5       U lr        0 U ls        [)        5       U lt        [)        5       U lu        [)        5       U lv        [î        Rð                  " 5       U ly        SU lz        [÷        5       U l|        0 U l}        g )N)Úis_inferencer   FTÚcpuÚmutated_named_buffers)Úextern_node_json_serializerzaten.convolution_backwardÚ Ú dynamo_flat_name_to_original_fqnéÿÿÿÿ)~ÚsuperÚ__init__Úexample_inputsÚdecide_layout_optÚ
layout_optÚnum_channels_last_convrþ   Úis_backwardÚis_const_graphÚconst_wrapper_codeÚconst_kernel_codeÚconst_moduleÚinputs_to_checkÚextra_tracebackr"   Úreuse_shape_envÚ
_shape_envÚdeferred_runtime_assertsÚcopyÚras_by_symbolr(   r}   r~   Úbound_unbacked_symbolsrV   ÚsizevarsÚgraph_input_namesÚgraph_inputsÚgraph_inputs_originalÚpartition_mapsÚzero_dim_cpu_tensor_listÚdevice_typesÚdevice_idxsÚdevice_typer   Úadditional_buffer_depsÚadditional_star_depsÚbuffer_to_padded_sizeÚbuffersÚ
operationsÚconst_output_indexr±   Úfolded_constantsÚ	constantsÚnamed_buffersr§   rá   r   Únamed_parametersÚtorchbind_constantsÚopaque_value_type_classesÚseen_subgraphsÚconstant_reprsÚremoved_operationsÚremoved_buffersÚremoved_inplace_buffersÚmutated_buffersÚnever_reuse_buffersÚinplaced_to_removeÚ
device_opsÚwrapper_codeÚ&torch._inductor.extern_node_serializerr  r+   Ú	is_fbcodeÚextern_node_serializerÚcurrent_nodeÚlistsÚmutated_inputsÚmutated_input_idxsÚname_to_bufferÚlistÚname_to_usersÚ
name_to_opÚtimeÚcreation_timeÚnameÚcpp_wrapperÚ
fx_wrapperÚrecord_multi_kernel_choiceÚmulti_kernel_to_choiceÚaot_modeÚgraph_idÚnextÚ_post_grad_graph_counterÚpost_grad_graph_idÚ	schedulerÚautotuning_inputsÚautotuning_mappingÚautotuning_gridsÚcurrent_deviceÚfind_nodes_prefer_channels_lastÚnodes_prefer_channels_lastÚ_warned_fallbackr¯   Úgraphrä   rë   Ú	cache_keyÚ
cache_pathÚcache_linemapÚdisable_cudagraphs_reasonÚdevice_node_mappingÚ__copy__Úorig_gmÚmoduler  Úallocated_constant_namer4   rñ   Ú	lru_cacher1   Úeffectful_opsÚunaligned_buffersÚno_fuse_buffer_namesÚbuffer_layout_constraintsÚlow_precision_codegen_opsÚinvoke_quant_opsÚall_codegen_kernel_namesÚ	itertoolsÚcountÚworkspace_idÚplaceholder_idxrZ   Úbw_donated_idxsÚdep_size_hint_cache)ÚselfÚgmr  Ú	shape_envrJ  rE  rI  r	  r9  rþ   r  r  r&  r  r  r  rD  r  rF  r  ÚkÚvÚ	__class__s                         €ry   r  ÚGraphLowering.__init__[  s+  ø€ ô. 	‰Ñ˜ÔØ,Ôð Ñ%ñ à×'Ñ'¨Ð'ÐFð 	Œð
 '(ˆÔ#Ø(ÔØ&ÔØ,ÔØ"4ÔØ!2ÔØ(ÔØ.ˆÔà$ˆÔØÑÜ ›
ˆIØ#(ˆDÕ à#'ˆDÔ Ø#Œð ×.Ñ.×3Ñ3Ó5ð 	Ôô '1´·±Ò&>Ó&@ˆÔ#ä(¨Ó3ˆŒØ,.ˆÔØVXˆÔØ=?ˆÔ"ØAEˆÔÜ9C»ˆÔ%æ)5ˆL×%Ò%¼:»<ð 	Ôö )5ˆL×$Ò$¼*»,ð 	Ôð !ˆÔÜBMÜóC
ˆÔ#ô ALÌJÓ@WˆÔ!ð <>ˆÔ"à(*ˆŒØ.0ˆŒæ"4Ñ¸"ð 	Ôö
 "ô Ð)×.Ñ.Ó0Ô1ä“ð 	Ôö '3ˆL×"Ò"¸ð 	Œö +7ˆL×&Ò&¸Bð 	Ôð @B¿w¹w¿{¹{Ø#¤Z£\ó@
ˆÔ"ö .:ˆL×)Ò)¸rð 	Ôð
 ð 	Ô ð ;=ˆÔ&Ø68ˆÔØ.0ˆÔÜ3=³<ˆÔÜ0:³ˆÔÜ8B»ˆÔ$Ü0:³ˆÔÜ4>³LˆÔ Ü3=³<ˆÔØ-1ˆŒØ26ˆÔåVô ×Ò×!Ñ!Ö&<ñ #à,ð 	Ô#ð ,0ˆÔØ+-ˆŒ
Ü/9«|ˆÔØ-/ˆÔØ46ˆÔÜ@KÌDÓ@QˆÔØ35ˆŒÜ!ŸYšY›[ˆÔØˆŒ	Ø&ÔØ$ˆŒð
 +6Ô'Ø68ˆÔ#à ŒØ ŒÜ"&Ô'?Ó"@ˆÔØ>BˆŒð @DˆÔØGKˆÔØ:>ˆÔð 7;ˆÔð 7;·o·oˆD×0Ñ0Ô2Ì:Ë<ð 	Ô'ô !+Ð,GÐ+HÓ IˆÔÜ+JÈ2Ï8É8Ó+TˆÔ(Ü" 2§8¡8¨T×-MÑ-MÔNØ ˆŒØ!ˆŒð ð 	Ôð 9=ˆÔ&ð GIˆÔ Ø-/¯[©[«]ˆŒØ—L‘L×.Ñ.Ö0‰DˆAˆqØ$%ˆD×Ñ˜qÓ!ñ 1à—L‘L×1Ñ1Ö3‰DˆAˆqØ'(ˆD×!Ñ! !Ó$ñ 4à04·±×0@Ñ0@×0DÑ0DØ.°ó1
ˆÔ-ð 5AÑ4LˆL×0Ò0ÐRTð 	Ô$ô 	"Ô#Ü$-×$7Ò$7¸Ô$=Ô>RÓ$SˆÔ!à;=ˆÔô 3=³,ˆÔÜ5?³\ˆÔ!ð EGˆÔ&ä:D»,ˆÔ&ä1;³ˆÔô :D»ˆÔ%ô &ŸOšOÓ-ˆÔð  "ˆÔä/Ó1ˆÔð ACˆÕ rz   c                ó8   • U R                   R                  5         g ru   )r  Úfreeze_runtime_asserts©rn  s    ry   rv  Ú$GraphLowering.freeze_runtime_asserts.  s   € Ø�‰×.Ñ.Õ0rz   c                óZ  • U R                   (       a2  [        UR                  5       5      [        UR                  5       5      4$ SSKJn  U" S[        U R                  R                  5       35      nU R                  R                  UU5      u  nnnU Vs/ s H:  n[        U[        R                  5      (       a  UR                  R                  OUPM<     nnU Vs/ s H:  n[        U[        R                  5      (       a  UR                  R                  OUPM<     n	nX‰4$ s  snf s  snf )zÁ
Support dynamic shapes and dynamic strides by assigning variables
to each dimension.  We duck-shape tensors, so if two tensors
have the same size they get assigned the same symbolic variable.
r   )ÚConstantSourceÚ__inductor_unknown_tensor_)r  rW   ÚsizeÚstrideÚtorch._dynamo.sourcerz  ró   r  Úbacked_var_to_valÚ,create_symbolic_sizes_strides_storage_offsetr|   r‚   ÚSymIntr®   Úexpr)
rn  Úexrz  Úsourcer|  r}  Ú_rž   Úr_sizeÚr_strides
             ry   Úsymbolic_sizes_stridesÚ$GraphLowering.symbolic_sizes_strides1  s  € ð ××Ü,¨R¯W©W«YÓ7Ô9RØ—	‘	“ó:ð ð õ <ñ $Ø,¬S°·±×1RÑ1RÓ-SÐ,TÐUóˆFð —‘×LÑLØØóñ	ØØØñ NRÓRÊTÈ¤¨A¬u¯|©|×!<Ñ!<�!—&‘&—+’+À!ÒCÉTˆÐRÙOUÓVÊvÈ!¤:¨a´·±×#>Ñ#>�A—F‘F—K’KÀAÒEÉvˆÐVØÐÐùò SùÚVs   ÂAD#ÃAD(c                óì   • UR                  5        Vs/ s H  n[        R                  " U5      PM     nnUR                  5        Vs/ s H  n[        R                  " U5      PM     nnX44$ s  snf s  snf )z
Primarily used to weights
)r|  r}   r�   r}  )rn  rƒ  rž   r|  r}  s        ry   Ústatic_sizes_stridesÚ"GraphLowering.static_sizes_stridesV  sZ   € ð +-¯'©'¬)Ó4ª) Q”—’˜aÖ ©)ˆÐ4Ø,.¯I©I¬KÓ8ªK q”%—-’- Ö"©KˆÐ8Øˆ|Ðùò 5ùÚ8s   “ A,Á A1c                ór  • [        U[        R                  5      (       a  UR                  n[        U[        R                  5      (       a  UR                  n[        U[        R
                  5      (       a3  UR                  U R                  ;   a  U R                  UR                     $ UR                  5       $ ru   )	r|   r,   rF   ÚdatarE   ÚComputedBufferrD  r#  Úget_size)rn  r®   s     ry   Úget_allocation_sizeÚ!GraphLowering.get_allocation_size`  s€   € ô �dœBŸL™L×)Ñ)Ø—9‘9ˆDÜ�dœBŸM™M×*Ñ*Ø—9‘9ˆDä�tœR×.Ñ.×/Ñ/Ø—	‘	˜T×7Ñ7Ó7ð ×-Ñ-¨d¯i©iÑ8Ð8à—=‘=“?Ð"rz   c                óŒ   • UR                  5       nU R                  U5      nUR                  nUR                  n[	        X4U5      $ ru   )Ú
get_layoutr‘  r}  Úoffsetr   )rn  r®   Úlayoutr|  r}  r•  s         ry   Úget_allocation_storage_sizeÚ)GraphLowering.get_allocation_storage_sizes  s?   € ð —‘Ó"ˆØ×'Ñ'¨Ó-ˆØ—‘ˆØ—‘ˆÜ.¨t¸VÓDÐDrz   c                ór   • [        U[        5      (       d   U5       eX R                  [        U5      5      ;   $ ru   )r|   r.   r1   r?   )rn  r   Úfeatures      ry   Úhas_featureÚGraphLowering.has_feature|  s5   € ô
 ˜'¤>×2Ñ2Ð;°GÓ;Ð2Ø×3Ñ3´OÀFÓ4KÓLÑLÐLrz   c                ó  • X4U R                   ;  aO  Sn UR                  5       (       d(  U(       a  UR                  5       nOUR                  5       nX0R                   X4'   U R                   X4   $ ! [         a     N+f = f)zS
Get the size hint for a dependency with caching to avoid expensive recomputation.
r   )rm  Úhas_unbacked_symbolsÚnumbytes_hintÚ
numel_hintÚKeyError)rn  ÚdepÚcount_bytesÚress       ry   Úget_dep_size_hintÚGraphLowering.get_dep_size_hint„  sˆ   € ð Ð T×%=Ñ%=Ó=ØˆCð
Ø×/Ñ/×1Ñ1Þ"Ø!×/Ñ/Ó1™à!Ÿn™nÓ.˜ð <?×$Ñ$ cÐ%7Ñ8Ø×'Ñ'¨Ð(:Ñ;Ð;øô ó ñ ð	ús   •,A1 ÁA1 Á1
A>Á=A>c                óB   • U R                   =n(       a  U$ [        S5      e)NzNo current device)rR  r—   ©rn  r   s     ry   Úget_current_device_or_throwÚ)GraphLowering.get_current_device_or_throw˜  s$   € Ø×(Ñ(Ð(ˆ6Õ(ØˆMäÐ2Ó3Ð3rz   c              #  ó\   #   • U R                   nXl          S v •  X l         g ! X l         f = f7fru   )rR  )rn  r   ré   s      ry   Úset_current_deviceÚ GraphLowering.set_current_devicež  s*   é € à×#Ñ#ˆØ$Ôð	(Ûà"'Õø %Õüs   ‚,–! š,¡)©,c                óL   • U R                   (       a  gU R                  (       a  gg)NÚ	inferenceÚbackwardÚforward)rþ   r  rw  s    ry   Úget_training_phaseÚ GraphLowering.get_training_phase§  s   € Ø××ØØ××ØØrz   c               óœ  • [         R                  (       d  g[         R                  (       a  gU R                  R                   Vs/ s HA  o"R
                  [        R                  R                  R                  R                  L d  M?  UPMC     nnU R                  R                   H&  n[        U5      (       d  M  UR                  U5        M(     [        U5      nUS:X  a  g[        R                  R                  R                   (       aE  [        R                  R                  R#                  5       (       a  [%        S U 5       5      (       a  g[        ['        U R                  R                  5      5      SU-  :¼  a  [(        R+                  S5        g[-        S U 5       5      (       a  [(        R+                  S5        gSS	 jnSS
 jnSS jnU(       aä  [/        [0        5      nU HQ  n	[3        U	5      n
U
c  M  U" U	5      (       a  SnO"U" U	5      (       a  SnOU" U	5      (       a  SnOSnX‹==   U
-  ss'   MS     [(        R+                  S5        SnSnSnSn[5        UR7                  5       5      nUS   U-  US   U-  -   US   U-  -   US   U-  -   nUU:*  nU(       d  [(        R+                  SUU5        U$ [-        [9        XS5      5      (       a  [(        R+                  S5        g[-        [9        Xc5      5      (       a  [(        R+                  S5        g[%        [9        Xs5      5      (       a  [(        R+                  S5        ggs  snf )zT
Decide if we should enable layout optimization for this graph based on
heuristics.
FTr   c              3  ó¤   #   • U  HF  nS   H<  nUR                   U   R                  S   R                  R                  [        ;   v •  M>     MH     g7f©)r   r*   ÚvalN)rw   r§   r   Útyperb   ©r‹   Únr­   s      ry   r�   Ú2GraphLowering.decide_layout_opt.<locals>.<genexpr>Ë  sJ   é € ð â#�AÜ!�Cð —‘�s‘× Ñ  Ñ'×.Ñ.×3Ñ3Ô7OÖOá!ñ PÚ#ùs   ‚AAi,  z*Skipped layout opt because only a few convc              3  ó€   #   • U  H4  nS   H*  n[        UR                  U   R                  S   5      v •  M,     M6     g7fr¶  )r   rw   r§   r¹  s      ry   r�   r»  Ú  s?   é € ð 
â�Ü�ô ˜QŸV™V C™[×-Ñ-¨eÑ4×5Ð5áñ 6Úùs   ‚<>zeSee perf regression with dynamic shape. Follow up in https://github.com/pytorch/pytorch/issues/102670c                óÖ   • U R                   S   R                  S   n[        U[        R                  5      (       d   eU R                   S   S:„  =(       a    UR                  S5      S:„  $ )Nr*   r·  r  )rw   r§   r|   r‚   r   r|  )rº  Úmeta_vals     ry   Ú
is_groupedÚ3GraphLowering.decide_layout_opt.<locals>.is_groupedä  sT   € Ø—v‘v˜a‘y—~‘~ eÑ,ˆHÜ˜h¬¯©×5Ñ5Ð5Ð5Ø—6‘6˜"‘: ‘>×: h§m¡m°AÓ&6¸Ñ&:Ð:rz   c                ó   • U R                   S   R                  S   R                  S5      S-  U R                   S   R                  S   R                  S5      :*  =(       a.    U R                   S   R                  S   R                  S5      S:„  $ )Nr*   r·  r   é   ©rw   r§   r|  ©rº  s    ry   Úis_in_out_channelÚ:GraphLowering.decide_layout_opt.<locals>.is_in_out_channelé  sv   € à—‘�q‘	—‘˜uÑ%×*Ñ*¨1Ó-°Ñ1°Q·V±V¸A±Y·^±^ÀEÑ5J×5OÑ5OÐPQÓ5RÑR÷ 6Ø—F‘F˜1‘I—N‘N 5Ñ)×.Ñ.¨qÓ1°AÑ5ðrz   c                óÈ   • U R                   S   R                  S   R                  S5      S:*  =(       a.    U R                   S   R                  S   R                  S5      S:*  $ )Nr*   r·  r   é@   rÃ  rÄ  s    ry   Úis_small_channelÚ9GraphLowering.decide_layout_opt.<locals>.is_small_channelï  sT   € à—‘�q‘	—‘˜uÑ%×*Ñ*¨1Ó-°Ñ3÷ 8Ø—F‘F˜1‘I—N‘N 5Ñ)×.Ñ.¨qÓ1°RÑ7ðrz   ÚgroupedÚsmallÚin_outrõ   zConv inputs meta not foundgî|?5^ºõ?g¼t“Vê?g333333ç?gu“Vé?zhSkipped layout opt in inference because weighted flops indicate slowdown, default: %d, channels last: %dzFSkip layout opt because found grouped convolution with >1 in_channels!zBSkip layout opt because some convolutions have smaller out_channelz>Skip layout opt because all convolution channels are too small)rº  r   rÇ   Úbool)rº  rÆ   rÇ   rÎ  )r+   Úlayout_optimizationÚforce_layout_optimizationrV  rÚ   r›   r‚   rð   rÉ   rÊ   rõ   rø   rµ   ró   Úbackendsrí   ÚenabledÚis_availableÚallr?  ÚlogÚdebugrÑ   r   Úfloatr:   rÎ   ÚvaluesÚmap)ro  rþ   rº  Ú
conv_nodesÚnconvr¿  rÅ  rÉ  Úflop_countsr®   Úcounted_flopsÚ	node_typeÚGROUPED_MULTIPLIERÚDEFAULT_MULTIPLIERÚIN_OUT_MULTIPLIERÚSMALL_MULTIPLIERÚtotal_flopsÚweighted_flopsÚdo_layout_opts                      ry   r  ÚGraphLowering.decide_layout_opt®  sý  € ô ×)×)Øä×+×+Øð —x‘x—~’~ó
Ú%�!¯©´U·Y±Y·^±^×5OÑ5O×5WÑ5WÐ)W�A‘~ð 	ð 
ð —‘—”ˆAÜ˜a× Ó Ø×!Ñ! !Ö$ñ  ô �J“ˆà�A‹:Øô �N‰N×!Ñ!×)×)Ü—‘×%Ñ%×2Ñ2×4Ñ4Üñ á#ó÷ ñ ð ô
 Œt�B—H‘H—N‘NÓ#Ó$¨¨e©Ó3Ü�I‰IÐBÔCØäñ 
áó
÷ 
ñ 
ô
 �I‰IØwôð ô	;ô
	ô	ö Ü,7¼Ó,>ˆKÛ"�Ü .¨tÓ 4�Ø Ñ(Ùá˜d×#Ñ#Ø )‘IÙ% d×+Ñ+Ø '‘IÙ& t×,Ñ,Ø (‘Ià )�IàÓ&¨-Ñ7Õ&ñ #ô  —	‘	Ð6Ô7ð
 "'ÐØ!&ÐØ %ÐØ$Ðä˜k×0Ñ0Ó2Ó3ˆKð ˜IÑ&Ð);Ñ;Ø˜gÑ&Ð)9Ñ9ñ:à˜hÑ'Ð*;Ñ;ñ<ð ˜iÑ(Ð+=Ñ=ñ>ð ð +¨kÑ9ˆMÞ Ü—	‘	Ø~ØØ"ôð
 !Ð ô& Œs�:Ó*×+Ñ+Ü�I‰IØXôð ô ŒsÐ$Ó1×2Ñ2Ü�I‰IØTôð ô ŒsÐ#Ó0×1Ñ1Ü�I‰IÐVÔWØàùòg
s   Á>M	ÂM	c                óB   • U R                   b  U R                    SU 3$ U$ )z2Prepend the given name with the graph name if any.r…  )rD  ©rn  rD  s     ry   Úqualify_nameÚGraphLowering.qualify_nameO  s&   € à�9‰9Ñ Ø—i‘i�[  $ Ð(Ð(Øˆrz   c                ó¼   • [        U UUU R                  U R                  U R                  U R                  U R
                  U R                  U R                  U5      S9
$ )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.
)
Úparentro  r  rp  rE  rI  r9  rþ   r  rD  )ÚSubgraphLoweringr  rE  rI  r9  rþ   r  ré  )rn  ro  r  Úsubgraph_names       ry   Úmake_subgraphÚGraphLowering.make_subgraphU  sZ   € ô  ØØØ)Ø—o‘oØ×(Ñ(Ø—]‘]Ø#'×#>Ñ#>Ø×*Ñ*Ø×(Ñ(Ø×"Ñ" =Ó1ñ
ð 	
rz   c                ó2  • Sn[         R                  R                  R                  R                  /n[
        [           " 5       n[        U R                  R                  R                  5       H·  nUR                  [         R                  R                  R                  R                  L a  UR                  U5        Uc  UnMV  UR                  U;   a  Mh  [        U5      (       a  UR                  U5        M‹  UR                   H  nXS;   d  M
  UR                  U5          Mµ     M¹     U R                  R                  R                   HK  nUb  XA:X  a    U$ XC;   d  M  UR                   H&  nUR                  U;   a  M  UR                  U5        M(     MM     U$ )aË  
The rule to decide if an node prefer channels last is simple.
1. if it's input/output of a convolution
2. if one of its user prefers channels last

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

Consider the scenario: conv -> batch-norm -> relu -> conv
Without rule 2, batch-norm output may use a contiguous layout. That will cause 2 extra copies:
1. the output of batch-norm should be channels last initially since its input is a conv's output.
   Forcing the batch-norm's output to be contiguous results in the first copy
2. The second conv's input is initially contiguous. This layout is propagated from the batch-norm's output.
   We need convert it to channels last layout which results in the second copy.
With rule 2, we makes sure all the tensors in the chain uses channels last layout. So both copies
can be saved.
N)r‚   rð   rÉ   Úbmmrõ   r(   r%   rÙ   r^  rV  rÚ   r›   rÊ   r´   rø   Úusers)rn  Ú	last_convÚnodes_cannot_propagateÚ
output_setrº  Úusers         ry   rS  Ú-GraphLowering.find_nodes_prefer_channels_lastp  sC  € ð& ˆ	Ü"'§)¡)§.¡.×"4Ñ"4×"<Ñ"<Ð!=ÐÜ¤Ò%Ó'ˆ
Ü˜$Ÿ+™+×+Ñ+×1Ñ1Ö2ˆAØ�x‰xœ5Ÿ9™9Ÿ>™>×5Ñ5×=Ñ=Ò=Ø—‘˜qÔ!ØÑ$Ø !�IÙØ�x‰xÐ1Ó1ÙÜ˜a× Ñ Ø—‘˜qÔ!ÙØŸœ�ØÕ%Ø—N‘N 1Ô%Úó  ñ 3ð< —‘×"Ñ"×(Ô(ˆAàÑ$¨«Øð Ðð �ØŸGœG�DØ—{‘{Ð&<Ó<Ù Ø—N‘N 4Ö(ó $ñ )ð Ðrz   c                ó†   • XR                   ;  a2  U R                   R                  U5        [        R                  SU5        g g )NzUsing FallbackKernel: %s)rU  r´   Úperf_hint_logÚinforè  s     ry   Úwarn_fallbackÚGraphLowering.warn_fallback°  s8   € Ø×,Ñ,Ó,Ø×!Ñ!×%Ñ% dÔ+Ü×ÑÐ9¸4Õ@ð -rz   c                ó`  • U R                   R                  UR                  5        UR                  b%  U R                  R                  UR                  5        [
        R                  R                  (       a8  XR                  ;  a(  [
        R                  R                  U R                  U'   g g g ru   )	r  r´   r¸  Úindexr  re   rV  r:  r[  r¨  s     ry   Úadd_device_infoÚGraphLowering.add_device_infoµ  sw   € Ø×Ñ×Ñ˜fŸk™kÔ*Ø�<‰<Ñ#Ø×Ñ× Ñ  §¡Ô.Ü�7‰7×× F×2JÑ2JÓ$JÜ/0¯w©w×/CÑ/CˆD×$Ñ$ VÒ,ð %KÐrz   c                ó"   • [         R                  $ ru   )re   Ú	fake_moderw  s    ry   r  ÚGraphLowering.fake_mode¼  s   € ä�{‰{Ðrz   c           	     óŒ  • XR                   ;   a  U R                   U   $ XR                  ;   a  U R                  U   $ XR                  ;   ay  [        R                  R                  U   n[
        R                  " U[
        R                  " UR                  UR                  /[        R                  R                  U5      Q76 S9$ g ©N©rD  r–  )r>  r  r(  re   rV  r,   ÚConstantBufferr>   r   Údtyper‹  )rn  Úbuffer_namerŽ  s      ry   Útry_get_bufferÚGraphLowering.try_get_bufferÀ  s§   € ð ×-Ñ-Ó-Ø×&Ñ& {Ñ3Ð3Ø×+Ñ+Ó+Ø×$Ñ$ [Ñ1Ð1ØŸ.™.Ó(Ü—7‘7×$Ñ$ [Ñ1ˆDÜ×$Ò$Ø Ü—~’~Ø—K‘K §¡ðÜ./¯g©g×.JÑ.JÈ4Ó.Pòñð ð rz   c                ó   • [        S5      e)Nz'Should not be called for the main graph)r—   )rn  Úsymbols     ry   Úadd_symbol_graph_inputÚ$GraphLowering.add_symbol_graph_inputÒ  s   € ÜÐDÓEÐErz   c                óJ   • U R                  U5      nUb  U$ [        SU 35      e)Nz$Failed to find buffer matching name )r  r—   ©rn  r
  Úbufs      ry   Ú
get_bufferÚGraphLowering.get_bufferÕ  s1   € ð ×!Ñ! +Ó.ˆØ‰?ØˆJÜÐAÀ+ÀÐOÓPÐPrz   c                óä  • XR                   ;   a  U R                   U   R                  $ [        U R                  S5      (       aŠ  XR                  R                  ;   aq  U R                  R                  U   nX R
                  ;   a  U R
                  U   R                  5       $ X R                  ;   a  U R                  U   R                  5       $ XR
                  ;   a  U R
                  U   R                  5       $ XR                  ;   a  U R                  U   R                  5       $ [        R                  " SU5      nU(       a   U R                  UR                  S5      5      $ [        SU 35      e)NÚmutation_real_namez1(as_strided|reinterpret_tensor)\(([a-zA-Z0-9_]+),r*   úcould not find )r(  r	  r–   rN  r  r>  Ú	get_dtyper  ÚreÚmatchÚgroupr¡  )rn  r
  Úmutated_bufrŒ   s       ry   r  ÚGraphLowering.get_dtypeÝ  s.  € ØŸ.™.Ó(Ø—>‘> +Ñ.×4Ñ4Ð4ô �D—N‘NÐ$8×9Ñ9ØŸ~™~×@Ñ@Ó@àŸ.™.×;Ñ;¸KÑHˆKØ×1Ñ1Ó1Ø×*Ñ*¨;Ñ7×AÑAÓCÐCØ×/Ñ/Ó/Ø×(Ñ(¨Ñ5×?Ñ?ÓAÐAØ×-Ñ-Ó-Ø×&Ñ& {Ñ3×=Ñ=Ó?Ð?Ø×+Ñ+Ó+Ø×$Ñ$ [Ñ1×;Ñ;Ó=Ð=Ü�HŠHÐIÈ;ÓWˆÞØ—>‘> !§'¡'¨!£*Ó-Ð-Ü˜¨¨Ð6Ó7Ð7rz   c                óV  • XR                   ;   a  U R                   U   R                  5       $ XR                  ;   a5  U R                  U   nUR                  5       (       d  gUR	                  5       $ XR
                  ;   a  U R
                  U   R	                  5       $ [        SU 35      e)Nr*   r  )r(  Únumelr>  Úhas_tensor_outputÚ	get_numelr  r¡  r  s      ry   r"  ÚGraphLowering.get_numeló  s–   € ØŸ.™.Ó(Ø—>‘> +Ñ.×4Ñ4Ó6Ð6Ø×-Ñ-Ó-Ø×%Ñ% kÑ2ˆCØ×(Ñ(×*Ñ*ØØ—=‘=“?Ð"Ø×+Ñ+Ó+Ø×$Ñ$ [Ñ1×;Ñ;Ó=Ð=Ü˜¨¨Ð6Ó7Ð7rz   c                ój   >• [        S5         [        TU ]  " U6 sS S S 5        $ ! , (       d  f       g = f)NzGraphLowering.run)r   r  Úrun)rn  rw   rs  s     €ry   r%  ÚGraphLowering.runÿ  s$   ø€ ÜÐ-Õ.Ü‘7’; Ð%÷ /×.×.ús   �$¤
2c                ó"  • UR                   b
   SU 35       e[        U[        R                  5      (       d   eU R	                  S[        U R                  5       35      nU R                  R                  U5        XR                  U'   X!l         U$ )NzOperation registered twice: r�   )	Úoperation_namer|   r,   Ú	Operationré  ró   r%  rµ   rA  )rn  r�   rD  s      ry   Úregister_operationÚ GraphLowering.register_operation  s‚   € Ø× Ñ Ñ(ÐMÐ,HÈÈÐ*MÓMÐ(Ü˜"œbŸl™l×+Ñ+Ð+Ð+Ø× Ñ  2¤c¨$¯/©/Ó&:Ð%;Ð!<Ó=ˆØ�‰×Ñ˜rÔ"Ø "�‰˜ÑØ ÔØˆrz   ©Úset_namec               ó¤  • U R                  S[        U R                  5       35      nU R                  R                  U5        XR                  U'   UR                  5       nUb_  [        U[        R                  5      (       a/  UR                  5       (       a  U[        R                  " S5      :X  d  U R                  U5        U(       a  X1l        U$ )Nr  rÿ   )ré  ró   r$  rµ   r>  Ú
get_devicer|   r,   r�  Úis_zero_elementsr‚   r   r   rD  )rn  Úbufferr-  rD  r   s        ry   Úregister_bufferÚGraphLowering.register_buffer  s©   € Ø× Ñ  3¤s¨4¯<©<Ó'8Ð&9Ð!:Ó;ˆØ�‰×Ñ˜FÔ#Ø$*×Ñ˜DÑ!Ø×"Ñ"Ó$ˆð Ñä˜6¤2×#4Ñ#4×5Ñ5Ø×+Ñ+×-Ñ-ØœeŸlšl¨5Ó1Ó1ð × Ñ  Ô(æØŒKØˆrz   c                óh   • U R                  SSR                  U5      -   5      nXR                  U'   U$ )NÚlist_r…  )ré  r˜   r;  )rn  Úoperation_namesrD  s      ry   Úregister_operation_listÚ%GraphLowering.register_operation_list   s1   € Ø× Ñ  ¨3¯8©8°OÓ+DÑ!DÓEˆØ*�
‰
�4ÑØˆrz   c                ó*   ^ ^• SUU 4S jjmT" U5        g )Nc                ó  >• [        U [        [        45      (       a  U  H  nT" U5        M     [        U [        R                  5      (       a6  U R                  5        H!  nTR                  U   R                  U 5        M#     g g ru   )r|   r?  Útupler,   rF   Úget_read_namesr@  rµ   )ÚvalueÚxÚ	read_nameÚregisterrn  s      €€ry   r@  Ú1GraphLowering.register_users_of.<locals>.register(  sg   ø€ Ü˜%¤$¬ ×/Ñ/Û�AÙ˜Q–Kñ ä˜%¤§¡×.Ñ.Ø!&×!5Ñ!5Ö!7�IØ×&Ñ& yÑ1×8Ñ8¸Ö?ò "8ð /rz   )r=  ú%Union[Iterable[ir.IRNode], ir.IRNode]rÇ   ÚNonerv   )rn  Únode_outputr@  s   ` @ry   Úregister_users_ofÚGraphLowering.register_users_of%  s   ù€ ÷	@ð 	@ñ 	�Õrz   c                óÔ   • [        U[        5      (       d   eU R                  R                  U5        XR                  ;  a  gU R                  U    H  nUR                  5         M     g)zz
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|   Ústrr2  r´   r@  Úrealize)rn  rD  r÷  s      ry   Úmark_buffer_mutatedÚ!GraphLowering.mark_buffer_mutated2  sX   € ô
 ˜$¤×$Ñ$Ð$Ð$Ø×Ñ× Ñ  Ô&à×)Ñ)Ó)Øà×&Ñ& tÔ,ˆDØ�L‰LŽNò -rz   c                ó  • XR                   ;   a  XR                  ;   d
   SU-   5       e[        U R                   U   5      nX R                  R                  ;   a  U R                  R                  U   $ U R                  U   $ )zÒ
In AOTI, module buffers may have been mutated during the tracing and compilation.
Thus we need to read from previously stored original buffers, to make sure the
generated model.so uses correct initial values.
z$Can not find the original value for )r_  r(  rY   r^  r§   )rn  rD  Ú	orig_names      ry   Úget_original_value_of_constantÚ,GraphLowering.get_original_value_of_constant@  s„   € ð ×3Ñ3Ó3¸ÇÁÓ8Nð 	
Ø2°TÑ9ó	
ÐNô 5°T×5QÑ5QÐRVÑ5WÓXˆ	ð ŸK™K×,Ñ,Ó,ð �K‰K×Ñ˜YÑ'ð	
ð —‘ Ñ%ð	
rz   c                óÐ  • [         R                  R                  (       d7  U R                  R	                  5        H  u  p4[        X$5      (       d  M  Us  $    Uc  S[        U R                  5       3nUnUS   R                  5       (       a  SU 3nU R                  U5      n[        U5      nUnSnXR                  ;   a  U SU 3nUS-  nXR                  ;   a  M  X R                  U'   UR                  < SUR                  < S[        UR                  5       5      < S[        UR                  5       5      < S[        U5      S 3	U R                   U'   XPR"                  U'   U$ )NÚconstantr   Ú	constant_r…  r*   Ú r>  )r+   Úaot_inductorÚuse_runtime_constant_foldingr(  Úitemsr]   ró   Úisdigitré  r_   r   r	  r;  r|  r}  Úhashr.  r_  )rn  rD  rŽ  Úconstant_namer=  rM  ÚprefixÚcnts           ry   Úallocate_non_dup_const_nameÚ)GraphLowering.allocate_non_dup_const_nameP  sO  € ô ×"Ñ"×?×?Ø(,¯©×(<Ñ(<Ö(>Ñ$�Ü! $×.Ó.Ø(Ò(ñ )?ð ‰<Øœc $§.¡.Ó1Ð2Ð3ˆDØˆ	Ø�‰7�?‰?×ÑØ˜t˜fÐ%ˆDØ× Ñ  Ó&ˆô   Ó%ˆØˆØˆØ—n‘nÓ$Ø�X˜Q˜s˜eÐ$ˆDØ�1‰HˆCð —n‘nÕ$ð  $�‰�tÑà�{‰{‰o˜Q˜tŸz™z™n¨AÜ�T—Y‘Y“[Ó!Ñ$ A¤e¨D¯K©K«MÓ&:Ñ%=¸QÜ�D‹z˜!ˆnðð 	×Ñ˜DÑ!ð
 .7×$Ñ$ TÑ*Øˆrz   c                óÒ   • U R                  X!5      n[        R                  " [        R                  " U[        UR                  UR                  /U R                  U5      Q76 S95      $ r  )	r\  rF   Úcreater,   r  r>   r   r	  r‹  )rn  rŽ  rD  Únew_names       ry   Úadd_tensor_constantÚ!GraphLowering.add_tensor_constanto  s`   € ð ×3Ñ3°DÓ?ˆÜ×ÒÜ×ÒØÜ"Ø—K‘K §¡ðØ.2×.GÑ.GÈÓ.Mòñó
ð 	
rz   c                ó¨  ^• U R                   T   R                  U:X  d  Uc  T$ [        R                  R                  R                  5          U R                  T SUR                   UR                  =(       d    S 3U R                   T   R                  U5      5      nX0R                   ;   d
   U S35       e[        U4S jU R                   5       5      (       a  U R                   U   U R                  U'   [        U4S jU R                   5       5      (       a  U R                   U   U R                  U'   UsSSS5        $ ! , (       d  f       g= f)zœ
We AOT copy constants to the devices they are needed on.
If device_override doesn't match the constant's device, then
copy it and return a different name.
Nr…  r   z' should be in V.graph.constants alreadyc              3  ó@   >#   • U  H  nT[        U5      :H  v •  M     g 7fru   ©r_   )r‹   r
  rD  s     €ry   r�   Ú.GraphLowering.constant_name.<locals>.<genexpr>’  s"   øé € ð â#5�Kð œ {Ó3Ö3Ú#5ùó   ƒc              3  ó@   >#   • U  H  nT[        U5      :H  v •  M     g 7fru   re  )r‹   Ú
param_namerD  s     €ry   r�   rf  š  s"   øé € ð â"7�Jð œ zÓ2Ö2Ú"7ùrg  )r(  r   r‚   ÚutilsÚ_python_dispatchÚ_disable_current_modesr\  r¸  rÿ  ÚtorÑ   r)  r*  )rn  rD  Údevice_overrideÚnon_dup_const_names    `  ry   rY  ÚGraphLowering.constant_name|  sE  ø€ ð �>‰>˜$Ñ×&Ñ&¨/Ó9¸_Ñ=TØˆKÜ�[‰[×)Ñ)×@Ñ@ÕBð "&×!AÑ!AØ�&˜˜/×.Ñ.Ð/°×0EÑ0E×0JÈÐ/KÐLØ—‘˜tÑ$×'Ñ'¨Ó8ó"Ðð
 &¯©Ó7ð Ø%Ð&Ð&MÐNóÐ7ô ô à#'×#5Ò#5ó÷ ñ ð :>¿¹Ø&ñ:�×"Ñ"Ð#5Ñ6ô ô à"&×"7Ò"7ó÷ ñ ð =A¿N¹NØ&ñ=�×%Ñ%Ð&8Ñ9ð &÷= C×B×Bús   ÁC-EÅ
Ec                ó˜	  >• U =R                   S-  sl         [        TU ]	  XU5      nU R                  U5      n[	        U[
        5      (       av  [        R                  R                  (       d  [        UR                  5      nOUR                  R                  nXPR                  U'   U R                  R                  U5        U$ [	        U[        [         ["        45      (       aA  [$        R&                  " U5      nXPR                  U'   U R                  R                  U5        U$ [	        U[(        5      (       a4  [+        XS9nX`R                  U'   U R                  R                  U5        U$ Uc  U R                  R                  U5        g [	        U[,        5      (       a  U R                  R                  U5        g [	        U[.        R0                  5      (       Ga  [3        [        R                  R4                  R6                  5      S:X  aŠ  [9        [;        [        R                  R4                  R6                  5      5      R<                  [.        R>                  R@                  RB                  [.        RD                  RF                  RH                  4;   d   e[J        RL                  " XRN                  S9nXpR                  U'   U R                  R                  U5        U$ [	        U[.        RP                  5      (       d   U5       eURR                  (       d  U RU                  U5      u  p‰OU RW                  U5      u  p‰U R                  (       ai  U RX                  (       aX  U R                   U RX                  ;   a>  [Z        R\                  " [_        U[a        URN                  URb                  X‰5      S95      n
O=[Z        R\                  " [e        U[a        URN                  URb                  X‰5      S95      n
X R                  U'   U R                  R                  U5        U
Rf                  Rf                  U Rh                  U'   U R4                  R6                  (       a  U Rk                  URN                  5        [m        5          [o        U5      (       d  U Rp                  Rs                  U5        S S S 5        U
$ ! , (       d  f       U
$ = f)Nr*   ©rD  r=  )rD  r   r  ):rk  r  Úplaceholderré  r|   r$   re   rV  r  r   r®   r‚  r  r  rµ   ÚintrÎ  r×  r}   Úsympifyr   rG   r   r‚   Ú	Generatorró   r:  ró  rK  Úiterr›   Ú_primsÚ	rng_primsÚgraphsafe_run_with_rng_staterð   Úhigher_orderÚinvoke_subgraphr,   ÚGeneratorStater   r   Ú_has_symbolic_sizes_stridesr‹  rˆ  rl  rF   r_  r=   r>   r	  rA   rŽ  r  r   r^   r`   rb  r´   )rn  r›   rw   rx   Úexampler‚  rš   ÚgenÚsizesÚstridesÚtensorrs  s              €ry   rs  ÚGraphLowering.placeholder¥  s¡  ø€ ð 	×Ò Ñ!ÕÜ‘'Ñ% f°FÓ;ˆØ×"Ñ" 6Ó*ˆÜ�gœx×(Ñ(ô —7‘7×&×&Ü,¨W¯\©\Ó:‘à—|‘|×(Ñ(�Ø(,×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆKÜ˜¤#¤t¬UÐ!3×4Ñ4Ü—=’= Ó)ˆDØ(,×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆKÜ˜Ô!1×2Ñ2Ü! vÑ=ˆCØ(+×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆJØ‰_Ø×"Ñ"×)Ñ)¨&Ô1ØÜ�gœ}×-Ñ-ð ×"Ñ"×)Ñ)¨&Ô1Øä˜¤§¡×1Ò1Ü”q—w‘w×+Ñ+×1Ñ1Ó2°aÓ7¼DÜ”Q—W‘W×)Ñ)×/Ñ/Ó0ó=ç‰fÜ—‘×&Ñ&×CÑCÜ—	‘	×&Ñ&×6Ñ6ðó=ð ð ô ×#Ò#¨¿¹ÑGˆCØ(+×Ñ˜fÑ%Ø×"Ñ"×)Ñ)¨&Ô1ØˆJä˜'¤5§<¡<×0Ñ0Ð9°'Ó9Ð0ð
 ×2×2à!×6Ñ6°wÓ?‰NˆE�7à!×8Ñ8¸ÓA‰NˆEð ××Ø×$×$Ø×$Ñ$¨×(<Ñ(<Ó<ä×%Ò%ÜØÜ& w§~¡~°w·}±}ÀeÓUñó‰Fô ×%Ò%ÜØÜ& w§~¡~°w·}±}ÀeÓUñóˆFð %+×Ñ˜&Ñ!Ø×Ñ×%Ñ% fÔ-Ø-3¯[©[×-=Ñ-=ˆ×"Ñ" 6Ñ*Ø×Ñ×"×"Ø× Ñ  §¡Ô0ô 1Õ2Ü.¨w×7Ñ7Ø×&Ñ&×*Ñ*¨6Ô2÷ 3ð ˆ÷ 3Ô2ð ˆús   Ò,R:Ò:
S	c           	     ó�  >^• T[         R                  L a3  [        US   [        [        [
        45      (       a  [        TU ]  TX#5      $ [        T[        R                  R                  5      (       d  [        TS5      (       a  T" U0 UD6$ T[        ;  Ga_  [        T[        R                  R                  5      (       d
   T S35       eTR                  5       R                  S5      S   nU[         ;   a  [#        TSSS9  Oô[$        R&                  (       a¶  [)        T/5      (       a  [*        O[,        n[.        R1                  SUR3                  TX#5      5        [5        TSS	9nUcF  [        R6                  R8                  R;                  T5      (       a  U R<                  (       a  [>        nO[5        TSS	9n[A        U5      n[#        TUS
9  O)[)        T/5      (       a  [+        TX#5      e[-        TX#5      e [.        RC                  S[        T   5        U RD                  n	[G        T5      n
U
(       aš  X#pËU
[H        L a�  SU	RJ                  ;   ap  U	RJ                  S   u  pÞ[        T[        R                  R                  5      (       d   eSU4S jjnU" XÞ5      u  pÞU" X#5      u  p#U" X¼5      u  p¼[I        X#XÞ5      u  p#OU
" U	/UQ70 UD6u  p#SU	RJ                  ;   a  [M        TSS9" U0 UD6nO[        T   " U0 UD6nU
(       a  U RO                  U	WWX#5        U$ ! [P         a£  nS n[        U S5      (       ae  U RD                  bX  [        U RD                  S5      (       a=  U RD                  RJ                  b&  U RD                  RJ                  RS                  SS 5      n[U        UTX#US9RW                  URX                  5      S eS nAff = f)Nr   Ú_inductor_lowering_functionz is not an OpOverloadr“   FT)ÚwarnÚoverride_decompz"Creating implicit fallback for:
%s)Úwith_default)Úlayout_constraintz  via %sÚeager_input_valsc                óv   >• [         R                  R                  R                  TX5      nUc   eUS   US   4$ )Nr   r*   )r‚   r¨   Úoperator_schemasÚnormalize_function)rw   rx   r·   r›   s      €ry   Ú	normalizeÚ.GraphLowering.call_function.<locals>.normalizea  sC   ø€ Ü%*§X¡X×%>Ñ%>×%QÑ%QØ &¨ó&˜Fð $*Ñ#5Ð5Ð#5Ø#)¨!¡9¨f°Q©iÐ#7Ð7rz   Úshould_fallback©Úadd_to_fallback_setr:  r§   Ústack_trace)r”  )rw   r   rx   r   rÇ   ztuple[Any, Any])-ÚoperatorÚgetitemr|   r?  r;  Údictr  r¿   r‚   rÁ   ÚOpOverloadPacketr–   rM   rÂ   rD  r”   rJ   rN   r+   Úimplicit_fallbacksr   r8   r9   rÕ  rû  Úoperator_strr   Ú_libraryrj  Ú
is_builtinr  rQ   rR   rÖ  r:  rO   rH   r§   rK   Úpropagate_mutationÚ	Exceptionrá   r7   Úwith_tracebackÚ__traceback__)rn  r›   rw   rx   Ú	base_nameÚerrorÚtagÚdecided_constraintÚdefault_tagrº  Úlayout_constraintsÚold_argsÚ
old_kwargsÚ	fake_argsÚfake_kwargsr�  ÚoutÚer”  rs  s    `                 €ry   r¿   ÚGraphLowering.call_function  s‹  ù€ Ø”X×%Ñ%Ò%¬*°T¸!±W¼tÄUÌDÐ>Q×*RÑ*RÜ‘7Ñ(¨°Ó>Ð>ô ˜&¤%§*¡*×"=Ñ"=×>Ñ>Ä7ØÐ1÷D
ñ D
ñ ˜4Ð* 6Ñ*Ð*àœÔ"Ü˜f¤e§j¡j×&;Ñ&;×<Ñ<ð Ø�(Ð/Ð0óÐ<ð Ÿ™›×+Ñ+¨CÓ0°Ñ3ˆIØÔ/Ó/Ü˜f¨5À$ÓGÜ×*×*ô *¨6¨(×3Ñ3õ .ä5ð ô
 —‘Ø9Ø×&Ñ& v¨tÓ<ôô
 /HØ¨ñ/�ð ‘KÜŸ™×,Ñ,×7Ñ7¸×?Ñ?Ø×(×(ô +ñ 'ô 1JØ¨Tñ1�Kô *BÀ+Ó)NÐ&ä˜fÐ8JÓKä# V H×-Ñ-ô 0°¸ÓEÐEä2°6¸4ÓHÐHð=	8Ü�I‰I�j¤)¨FÑ"3Ô4à×!Ñ!ˆAÜ!9¸&Ó!AÐÞ!Ø'+˜*Ø%Ô)BÒBð
 *¨Q¯V©VÓ3Ø12·±Ð8JÑ1KÑ.˜	ô  *¨&´%·*±*×2GÑ2G×HÑHÐHÐH÷8ñ 2;¸9Ó1RÑ.˜	Ù'0°Ó'>™˜Ù/8¸Ó/NÑ,˜ä'@Ø ¨)ó(™˜øñ $6°aÐ#I¸$Ò#IÀ&Ñ#I‘L�Dà  A§F¡FÓ*Ü& vÀ5ÒIØðØ#ñ‘ô   Ò'¨Ð8°Ñ8�æ!ð ×'Ñ'¨¨8°ZÀÔNàˆJøÜó 	8ØˆKä˜˜n×-Ñ-Ø×%Ñ%Ñ1Ü˜D×-Ñ-¨v×6Ñ6Ø×%Ñ%×*Ñ*Ñ6à"×/Ñ/×4Ñ4×8Ñ8¸ÈÓM�Ü#Ø�6˜4°[ñç‰n˜QŸ_™_Ó-°4ð8ûð	8ús   Ç6D!L Ì
OÌ"BO Ï Oc                ód   • [        U R                  5      S:H  =(       a    U R                  S   S:*  $ )z=
True if this is a small constant attr that will be inlined.
r*   r   é   )ró   Úshape)Úts    ry   Úcan_inline_constantÚ!GraphLowering.can_inline_constant�  s(   € ô
 �1—7‘7‹|˜qÑ ×4 Q§W¡W¨Q¡Z°1¡_Ð4rz   c                ót  • [        U R                  U5      n[        U[        R                  R
                  5      (       aB  XR                  ;   a  U R                  U   $ [        R                  " XS9nXPR                  U'   U$ [        U[        R                  R                  5      (       a&  X@R                  U'   SU R                  U'   [        XS9$ [        U[        5      (       a&  X@R                  U'   SU R                  U'   [        XS9$ [        [!        U5      5      (       a&  X@R                  U'   SU R                  U'   [        XS9$ [        U[        R"                  5      (       d   e[$        R&                  R(                  (       d4  [$        R*                  (       d  [-        U5      (       d  XR.                  ;   a  U R1                  XA5      $ [3        5          UR4                  S:X  a6  [7        UR9                  5       UR:                  UR<                  S9sS S S 5        $ U R?                  U5      (       aX  [@        RC                  S[E        U5      5        SSK#J$n  U" URK                  5       UR:                  UR<                  S	9sS S S 5        $  S S S 5        U R1                  XA5      $ ! , (       d  f       N= f)
N)rD  Úgraph_moduler  rr  rv   )r=  r	  r   zInlining constant: %s r*   )rƒ  )r	  r   )&r    r^  r|   r‚   r¨   rl   r-  r,   ÚSubgraphrÞ   ÚScriptObjectr+  r.  rG   r   r   r¸  r   r+   rT  rU  Úalways_keep_tensor_constantsrS   r   ra  r'   r°  r<   Úitemr	  r   r²  rÕ  rÖ  rH  Úloweringrƒ  Útolist)rn  r›   rw   rx   r=  r«  rƒ  s          ry   Úget_attrÚGraphLowering.get_attr•  s  € ô " $§+¡+¨vÓ6ˆä�eœUŸX™X×1Ñ1×2Ñ2à×,Ñ,Ó,Ø×*Ñ*¨6Ñ2Ð2ä—+’+ 6Ñ>ˆCØ*-×Ñ Ñ'ØˆJä�eœUŸX™X×2Ñ2×3Ñ3Ø/4×$Ñ$ VÑ,Ø*,ˆD×Ñ Ñ'Ü"¨Ñ<Ð<Ü˜Ô/×0Ñ0Ø/4×$Ñ$ VÑ,Ø*,ˆD×Ñ Ñ'Ü"¨Ñ<Ð<ÜœD ›K×(Ñ(Ø/4×$Ñ$ VÑ,Ø*,ˆD×Ñ Ñ'Ü"¨Ñ<Ð<ä˜%¤§¡×.Ñ.Ð.Ð.ä×Ñ×<×<Ü×2×2Ü(¨×/Ñ/Ø×3Ñ3Ó3à×+Ñ+¨EÓ:Ð:ä�]Ø�{‰{˜bÓ ÜØŸ*™*›,¨e¯k©kÀ%Ç,Á,ñ÷ ‰]ð
 ×'Ñ'¨×.Ñ.Ü—	‘	Ð2´C¸³KÔ@å,á˜eŸl™l›n°E·K±KÈÏÉÑU÷ ‰]ð
 /÷ ð ×'Ñ'¨Ó6Ð6÷ �]ús   Ç=J)È!A$J)Ê)
J7c                ó   • [         eru   ©ÚAssertionError©rn  r›   rw   rx   s       ry   Úcall_moduleÚGraphLowering.call_moduleÍ  ó   € ÜÐrz   c                ó   • [         eru   r¿  rÁ  s       ry   Úcall_methodÚGraphLowering.call_methodÐ  rÄ  rz   c                ó	  >• [         TU ]  XU5      n[        U[        [        45      (       d  U4n[        U[        [        45      (       d   [        U5      5       e[        S U 5       5      (       d   U5       e[        R                  R                  R                  S   n[        U[        [        45      (       d  U4nU Vs/ s H"  n[        R                  R                  U5      PM$     nn/ n[        U5      [        U5      :X  d   e[        XE5       GH\  u  p‰[        U[        R                   [        R"                  45      (       d  UR%                  U5        MH  [        UR'                  5       [        R(                  5      (       a0  UR%                  [        R                  R+                  U5      5        M¥  [,        R.                  R                  R1                  U5      (       d   eU	R2                  S   R5                  5        V
s/ s H:  n
[        U
[,        R6                  5      (       a  U
R8                  R:                  OU
PM<     nn
UR%                  [        R<                  " X‹5      5        GM_     Xpl        U R@                  RC                  5        GH�  u  pÍ[        U[D        5      (       a  M  [        U[         [F        RH                  [,        R.                  R                  RJ                  45      (       d   S[        U5       35       e[        U[         5      (       d  M�  URM                  5         [        U[         5      (       d   eURN                  n[        U[        RP                  5      (       d   eUnURN                  n[        U[R        5      (       a  URU                  5       U:w  d  GM  [        RV                  RY                  XÐRZ                  U   5         U R>                  R]                  U5      nU RZ                  U   U R>                  U'   GM„     U Ra                  5         [b        Re                  SU Rf                  U Rh                  b  U Rh                  5        g S5        g s  snf s  sn
f ! [^         a     GMî  f = f)Nc              3  óH  #   • U  H˜  n[        U[        [        R                  [	        S 5      [        R
                  [        R                  [        R                  R                  R                  [        [        R                  [        R                  [        4
5      v •  Mš     g 7fru   )r|   rF   r,   r<   r¸  r  r}   r   ÚlogicÚboolalgÚBooleanrt  ÚEffectfulKernelrD   rG   )r‹   r>  s     ry   r�   Ú'GraphLowering.output.<locals>.<genexpr>ß  sy   é € ð 
ò  �ô ØäÜ—K‘KÜ˜“JÜ×%Ñ%Ü—J‘JÜ—K‘K×'Ñ'×/Ñ/ÜÜ×&Ñ&Ü×,Ñ,Ü#ð÷ð ò ùs   ‚B B"r   r·  z'Unsupported inductor graph input type: zGForce channels last inputs for %d conv for the current graph with id %dr  )5r  r¢   r|   r;  r?  r¸  rÔ  re   rV  r:  rw   r,   ÚExternKernelÚrealize_inputró   ÚziprF   ÚBaseViewrµ   Úget_output_specÚCommBufferLayoutÚ
copy_inputr‚   Ú	_inductorÚis_storage_and_layoutr§   r}  r�  r®   r‚  Útry_match_insignificant_stridesrü   r  rV  rG   r}   r   r}  rI  rŽ  rE   rA   Úget_nameÚMutationLayoutSHOULDREMOVEÚrealize_intor  rÿ  Ú
ValueErrorÚfinalizerÕ  rÖ  r
  rJ  )rn  r›   rw   rx   r·   Úfx_node_argsr>  Úresult_correct_stridesÚrÚfx_nodeÚsÚmeta_stridesrD  r=  Úvalue_storage_boxÚindrs  s                   €ry   r¢   ÚGraphLowering.outputÔ  s§  ø€ ô ‘‘ ¨fÓ5ˆÜ˜&¤5¬$ -×0Ñ0à�YˆFÜ˜&¤5¬$ -×0Ñ0Ð>´$°v³,Ó>Ð0Üñ 
ñ  ó!
÷ 
ñ 
ð 	ð" ó#	ð 
ô& —w‘w×+Ñ+×0Ñ0°Ñ3ˆÜ˜,¬´¨×6Ñ6à(˜?ˆLÙ<BÓCºF°q”"—/‘/×/Ñ/°Ö2¹FˆÐCØ!#Ðä�<Ó ¤C¨£KÓ/Ð/Ð/Ü˜f×3‰JˆAÜ˜a¤"§,¡,´·±Ð!<×=Ñ=Ø&×-Ñ-¨aÖ0Ü˜A×-Ñ-Ó/´×1DÑ1D×EÑEð '×-Ñ-¬b¯o©o×.HÑ.HÈÓ.KÖLô —‘×)Ñ)×?Ñ?À×BÑBÐBÐBð %Ÿ\™\¨%Ñ0×7Ñ7Ô9ó ò :˜ô $.¨a´·±×#>Ñ#>�A—F‘F—K’KÀAÒEá9ð ð  ð
 '×-Ñ-Ü×6Ò6°qÓG÷ñ% 4ð, 4Ôà×,Ñ,×2Ñ2×4‰KˆDÜ˜%¤×1Ñ1ÙÜØœ	¤5§:¡:¬u¯©×/AÑ/A×/PÑ/PÐQ÷ñ ð Gà8¼¸e»¸ÐFóGð ô ˜e¤Y×/Ñ/ÙØ�M‰MŒOÜ˜e¤Y×/Ñ/Ð/Ð/Ø—J‘JˆEÜ˜e¤R§]¡]×3Ñ3Ð3Ð3Ø %ÐØ—J‘JˆEÜ˜e¤[×1Ñ1°U·^±^Ó5EÈÖ5Mä×-Ñ-×:Ñ:Ø×5Ñ5°dÑ;ôðØ×,Ñ,×2Ñ2Ð3DÓE�CØ.2×.HÑ.HÈÑ.N�D×&Ñ& sÔ+ñ- 5ð4 	�‰ŒÜ�	‰	ØUØ×'Ñ'Ø!Ÿ]™]Ñ6ˆD�M‰Mõ	
ð =?õ	
ùòo Dùò" øôD "ó Ûðús   Ã)Q+ÈAQ0Ï7Q5Ñ5
RÒRc                óJ   • U R                    H  nUR                  5         M     g ru   )r$  Údecide_layout)rn  r  s     ry   rÝ  ÚGraphLowering.finalize3  s   € Ø—<”<ˆCØ×ÑÖò  rz   c              #  ó\   #   • U R                   n Xl         S v •  X l         g ! X l         f = f7fru   )r:  )rn  r®   Úolds      ry   Úset_current_nodeÚGraphLowering.set_current_node7  s*   é € à×Ñˆð	$Ø $ÔÛà #Õø Õüs   ‚,�
! š,¡)©,c              #  óP   #   • U R                   n S v •  Xl         g ! Xl         f = f7fru   ©r6  )rn  rë  s     ry   Úset_current_wrapper_codeÚ&GraphLowering.set_current_wrapper_code@  s$   é € à×Ñˆð	$Ûà #Õø Õüs   ‚&� ”&›#£&c                óÌ  ^ • [        U5      [        U5      :X  d   e[        U5      [        U5      :X  d   eUR                  [        R                  R                  R
                  L Ga  UR                  S   n[        U[        5      (       d   e[        R                  R                  R                  US   US   UR                  5        VVs0 s H@  u  pxU[        U[        R                  R                  5      (       a  UR                  S   OU_MB     snnUS   5      n	U	 HY  n
US   U
   nUS   U
   nX¼L a  M  T R!                  [        R                  R"                  R$                  R&                  X¼40 5        M[     g[        UR                  [        R(                  R*                  5      (       d   e        SU 4S jjnUR                  R,                  n[/        [1        X$5      5       H   u  nu  p¼UR2                  U   nU" UX¼5        M"     UR2                   Vs0 s H  nUR4                  U_M     nnU H  nUU   nUU   nUU   nU" UX¼5        M     gs  snnf s  snf )	aP  Propagate mutations on new_args/new_kwargs back to old_args/old_kwargs.

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

If fx_node mutates any of new_args/new_kwargs, and they are different from
old_args/old_kwargs, then we need to update the original tensor.
rx   Ú
kernel_idxÚconstant_args_idxr·  Útma_descriptor_metadataNc                ób  >• XL a  g U R                   bœ  U R                   R                  (       a€  [        U[        R                  5      (       a  U4nU4n[        X5       HK  u  p4X4L a  M  TR                  [        R                  R                  R                  R                  X440 5        MM     g g g ru   )Ú
alias_infoÚis_writer|   r,   ÚIRNoderÑ  r¿   r‚   rð   rÉ   Úcopy_rõ   )Ú
schema_argÚold_argÚnew_argÚold_arg_itemÚnew_arg_itemrn  s        €ry   Úmaybe_propagateÚ9GraphLowering.propagate_mutation.<locals>.maybe_propagater  s›   ø€ ð Ò!ØØ×$Ñ$Ñ0°Z×5JÑ5J×5S×5Sô ˜g¤r§y¡y×1Ñ1Ø&˜j�GØ&˜j�Gä25°gÖ2GÑ.�LØ#Ò3Ù Ø×&Ñ&ÜŸ	™	Ÿ™×,Ñ,×4Ñ4°|Ð6RÐTVöò 3Hð 6TÐ0rz   )rû  ztorch._C.Argumentrü  ú	ir.IRNoderý  r  rÇ   rC  )ró   r›   r‚   rð   r{  Útriton_kernel_wrapper_mutationrx   r|   r—  rÛ   rÜ   Úget_mutated_tensorsrV  r¨   r%   r§   r¿   rÉ   rú  rõ   rÁ   rÂ   Ú_schemar•   rÑ  Ú	argumentsrD  )rn  rá  r§  r¨  Únew_argsÚ
new_kwargsrx   rq  rr  ÚmutatedrD  rü  rý  r   Úschemar­   rû  ÚargÚschema_kwargsÚkeys   `                   ry   r�  Ú GraphLowering.propagate_mutationH  sA  ø€ ô  �8‹}¤ H£Ó-Ð-Ð-Ü�:‹¤# j£/Ó1Ð1Ð1à�>‰>œUŸY™Y×3Ñ3×RÑRÓRØ—^‘^ HÑ-ˆFÜ˜f¤d×+Ñ+Ð+Ð+Ü×-Ñ-×@Ñ@×TÑTØ˜<Ñ(ØÐ.Ñ/ð !'§¡¤ôâ .™˜ð ¬
°1´e·h±h·m±m×(DÑ(D�q—v‘v˜e’}È!ÒKÙ .òð Ð4Ñ5óˆGó  �Ø$ XÑ.¨tÑ4�Ø$ XÑ.¨tÑ4�ØÒ%Ùà×"Ñ"¤5§9¡9§>¡>×#7Ñ#7×#?Ñ#?À'ÐASÐUWÖXñ  ð ä˜'Ÿ.™.¬%¯*©*×*?Ñ*?×@Ñ@Ð@Ð@ð	Ø)ð	Ø4=ð	ØHQð	à÷	ð( —‘×'Ñ'ˆÜ'0´°XÓ1HÖ'IÑ#ˆCÑ#�'Ø×)Ñ)¨#Ñ.ˆJÙ˜J¨Ö9ñ (Jð 39×2BÒ2BÓCÒ2B¨3˜Ÿ™ 3šÑ2BˆÐCãˆCØ  ‘oˆGØ  ‘oˆGØ& sÑ+ˆJÙ˜J¨Ö9ò	 ùóYùòT Ds   ÃAIÈ I!c                ó&$  >^ ^^#^$^%^&^'• S'U4S jjn      S(U%U&U 4S jjnSSK Jn  [        T R                  5      m$[        T R                  5      m'[        T/5      nTR                  S:H  nU(       a!  T R                  T5      u  pxU[        Xx5      -  n[        R                  R                  U5         T R                  T5         [        R                  " T5         TR                  S:X  aÌ  TR                  (       a»  [        TR                  [         R"                  R$                  5      (       aˆ  [         R&                  R(                  R+                  TR                  5      (       aP  [-        T5      (       d  UR/                  SSU4S j5      (       a$  U" S	5        [1        TR                  S
S9" W0 WD6n	GOXTR                  S:X  a�  [        TR                  [         R"                  R$                  [         R"                  R2                  45      (       a4  [5        T5      (       a$  U" S	5        [1        TR                  S
S9" W0 WD6n	GOÇTR                  S:X  aÿ  TR                  [         R6                  R8                  R:                  L aÎ  [<        R>                  S:w  aº  U" S5        [<        R>                  S:X  a‚  Wn
WnTR@                  RC                  S5      =n(       a  US   nUS   n[E        UUUU5      u  pxO[G        T/UQ70 UD6u  pxT RI                  TR                  Xx5      n	T RK                  TX«Xx5        OÔ[M        S[<        R>                   35      e[O        TR                  5      (       a‡  U" S5        [        TR@                  S   [         RP                  [         RR                  [         RT                  45      (       a$  TR@                  S   RV                  RX                  n	O'[Z        T(T ]¹  T5      n	OU" S5        [Z        T(T ]¹  T5      n	[         R6                  R^                  R`                  Rb                  [         R6                  R^                  Rd                  Rb                  [         R6                  R^                  Rf                  Rb                  [         R6                  R^                  Rh                  Rb                  [         R6                  R^                  Rj                  Rb                  /m#[m        S TRn                   5       5      nTT Rp                  ;   m&[m        U#4S jTRn                   5       5      m%TR@                  RC                  SS
5      (       aº  [        U	[r        5      (       a¥  U	Ru                  5         TR@                  S   Rw                  5       n[         Rx                  R(                  Rz                  " U6 nU	R}                  5       U:w  a=  U(       d6  [        R~                  " U5      n[        R€                  Rƒ                  U	U5      n	U(       aN  [        U	[r        5      (       a9  [        U	R„                  [        R†                  5      (       a  U	Ru                  5         U(       d  T%(       GaX  [        TR@                  S   [         Rˆ                  5      (       Ga+  T&(       a  T Rp                  RC                  T5      nOTR@                  S   Rw                  5       nUGbç  [        U5      S:”  Ga×  [<        RŠ                  =(       d    T&(       + =(       a    T%(       + n[         RŒ                  R�                  TR@                  S   5      n[        [‘        U5      5      S:„  nU(       d~  U(       aw  [        U	R“                  5       5      S:X  aZ  TT R”                  ;   aJ  T&(       dC  T%(       d<  [        R–                  R™                  U	R“                  5       [         Rš                  5      nU(       dÜ  [        U5      (       aÌ  TR@                  S   R�                  5       (       d)  [        U	R„                  [        R†                  5      (       a4  [        R€                  Rƒ                  U	[        R~                  " U5      US9n	OM[        U	R“                  5       5      S:X  a  [        U5      S:”  a  / n[        R€                  RŸ                  U	UUS9n	[        [        TRn                  5      5      nUS:”  Ga#  [        U	[r        5      (       Ga  TRn                   GHï  nUR                  [         ;   Ga�  U	R£                  5         [         R6                  R^                  R¤                  Rb                  [         R6                  R^                  R¦                  Rb                  [         R6                  R^                  R¨                  Rb                  /n/ nT Rª                  (       d=  UR­                  [         R6                  R^                  R®                  Rb                  5        [         R°                  R²                  (       Ga¤  U[         R6                  R´                  R¶                  Rb                  [         R6                  R´                  R¶                  R¸                  [         R6                  R^                  Rº                  Rb                  [         R6                  R¼                  R¾                  Rb                  [         R6                  R¼                  R¾                  RÀ                  [         R6                  R¼                  R¾                  R¸                  [         R6                  R¼                  R¾                  RÂ                  /-  nU[         R6                  R´                  RÄ                  Rb                  [         R6                  R´                  RÄ                  R¸                  [         R6                  R´                  RÆ                  R¸                  [         R6                  R´                  RÈ                  Rb                  [         R6                  R¼                  RÊ                  Rb                  [         R6                  R¼                  RÌ                  R¸                  /-  n[         R°                  RÎ                  (       a2  U[         R6                  RÐ                  RÒ                  Rb                  /-  nUR                  U;   aN  [        R€                  Rƒ                  U	[        R~                  " TR@                  S   Rw                  5       5      SS9n	UR                  U;   af  TURÔ                  S   L aT  [        R€                  Rƒ                  U	[        R~                  " [×        TR@                  S   RØ                  5      5      5      n	UR                  S:X  d  GM­  [        U	R„                  R„                  [Ú        [Ü        45      (       d  GMß  U	Ru                  5         GMò     U	R„                  n[        U[Þ        5      (       d�  [        U[        R†                  [        Rà                  45      (       aR  UR„                  n[        U[Þ        5      (       d1  [        U[        R†                  [        Rà                  45      (       a  MR  [        U[Þ        5      (       a2  URã                  [        TRn                  5      5      (       a	  U" U	T5      n	U	Rå                  [        TRn                  5      5        [        U	[r        5      (       a.  U	Rç                  5       (       a  U" U	T5      n	U	R£                  5         [        U	[r        5      (       an  [        U	R„                  [Þ        5      (       aO  U	R„                  R„                  n[        U[Ú        5      (       a$  URé                  SS9(       a  U	Ru                  5         SSS5        SSS5        SSS5        [ë        W	T5        T Rí                  U	5        [
        [î        Rð                     " 5       nT R                  T$S  H  nUURó                  5       -  nM     T R                  T'S  H  nUURó                  5       -  nM     [        Rô                  Rö                  Rø                  nTR                  S:X  aF  [        U	[î        Rð                  5      (       a'  URû                  U	5      (       a  URý                  U	5        S)U$U'U 4S  jjn [        Rô                  Rþ                  (       a  TR                  S:X  a  U	$ G[        [        Rô                  Rö                  Rø                  TR@                  RC                  S!0 5      5      n!U!c   e[        S" U! 5       5      n"UU":¼  d'   S#U S$U" S%TGR                  5        S&U " 5        35       eT GR                  TU5        U	$ ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f)*z4Lower and execute a single FX node into Inductor IR.c                óZ   >• [         R                  S[        TR                  5      U 5        g )Nzlowering %s %s)rÕ  rÖ  r   Úformat_node)Úmsgrº  s    €ry   rÖ  Ú%GraphLowering.run_node.<locals>.debug–  s   ø€ Ü�I‰IÐ&¬
°1·=±=Ó(AÀ3ÕGrz   c           	     ó  >• [         R                  R                  UR                  S   5      nUR                  S   R	                  5       n[        [        U5      5      S:„  nU(       d–  U(       a�  [        U R                  5       5      S:X  ar  UTR                  ;   ab  T(       d[  T(       dT  [        R                  R                  U [        R                  " [        UR                  S   R                  5      5      5      n U $ )Nr·  r   é   )r‚   Ú_prims_commonÚ%is_non_overlapping_and_dense_or_falser§   r}  ró   r   r�  rT  r,   rÏ  Úrequire_stride_orderÚget_stride_orderr   r°  )r·   rº  Údenser‚  Úunbacked_symbols_in_stridesÚis_input_for_as_stridedÚis_user_visiblern  s        €€€ry   Ú&maybe_apply_channels_last_stride_orderÚFGraphLowering.run_node.<locals>.maybe_apply_channels_last_stride_orderœ  sÅ   ø€ ô ×'Ñ'×MÑMØ—‘�u‘óˆEð —f‘f˜U‘m×*Ñ*Ó,ˆGÜ*-Ô.CÀGÓ.LÓ*MÐPQÑ*QÐ'æ/ÞÜ˜Ÿ™Ó)Ó*¨aÓ/Ø˜×8Ñ8Ó8Þ'Þ/äŸ™×=Ñ=ØÜ×'Ò'Ü6°q·v±v¸e±}×7JÑ7JÓKóó�ð ˆMrz   r   )ÚCompilerBisectorr¿   ÚinductorrM   c                 ó   >• [        T 5      $ ru   )ÚreprrÄ  s   €ry   Ú<lambda>Ú(GraphLowering.run_node.<locals>.<lambda>Í  s	   ø€ ¼¸a¼rz   rK   Fr’  Úflexible_layoutÚ-user_defined_triton_kernel_layout_constraintsÚneeds_fixed_stride_orderr‹  r*   z1Unknown triton_kernel_default_layout_constraint: r‘   r·  r  c              3  ó>   #   • U  H  oR                   S :H  v •  M     g7f)r¢   Nr£   )r‹   r÷  s     ry   r�   Ú)GraphLowering.run_node.<locals>.<genexpr>!  s   é € ÐDºG°DŸG™G xÖ/ºGùs   ‚c              3  ó@   >#   • U  H  oR                   T;   v •  M     g 7fru   )r›   )r‹   r÷  Úas_strided_opss     €ry   r�   r*  #  s   øé € ð *Ú:A°$—‘˜~Ö-º'ùrg  Úinductor_realize_to_stridesNr  )Úallow_paddingTr¢   éd   )Ú	thresholdrs  c                 óâ   >• TR                   TS   V s/ s H  n SU R                  5        SU  S3PM     nn UR                  S TR                  TS   5       5        SR	                  U5      $ s  sn f )Núunbacked_symbol_defs=ú in:
Ú
c              3  óP   #   • U  H  nS UR                  5        SU S3v •  M     g7f)r2  r3  r4  N)Úget_unbacked_symbol_defs)r‹   r�   s     ry   r�   ÚBGraphLowering.run_node.<locals>.format_new_defs.<locals>.<genexpr>å  s1   é € ð â?�Bð (¨×(CÑ(CÓ(EÐ'FÀfÈRÈDÐPRÕSÚ?ùs   ‚$&z***
)r$  r6  Úextendr%  r˜   )r  rà  Úbuffer_watermarkÚoperation_watermarkrn  s     €€€ry   Úformat_new_defsÚ/GraphLowering.run_node.<locals>.format_new_defsà  s‰   ø€ ð  Ÿ<™<Ð(8Ð(9Ñ:óâ:�Cð (¨×(DÑ(DÓ(FÐ'GÀvÈcÈUÐRTÓUÙ:ð ð ð �H‰Hñ àŸ/™/Ð*=Ð*>Ñ?óô ð —<‘< “?Ð"ùòs   “!A,Úunbacked_bindingsc              3  óˆ   #   • U  H8  n[         R                  R                  R                  R	                  X5      v •  M:     g 7fru   )re   r  rp  Úunbacked_renamingsrá   )r‹   râ  s     ry   r�   r*    s5   é € ð /
â&�ô �K‰K×!Ñ!×4Ñ4×8Ñ8¸×>Ð>Ú&ùs   ‚A Azfailed ú >= z (inductor >= fx)
fx node is: z
new operations are:

)r  rH  rÇ   rC  )r·   r  rº  rÆ   rÇ   r  ©rÇ   rH  )ƒÚ!torch._inductor.compiler_bisectorr   ró   r$  r%  r(   r�   Úfetch_args_kwargs_from_envrX   r,   rù  Úcurrent_originsrì  re   r›   r|   r‚   rÁ   rÂ   r›  rj  rœ  rL   Údisable_subsystemrK   ÚHigherOrderOperatorra   rð   r{  r  r+   Ú'triton_kernel_default_layout_constraintr§   rá   rH   rI   r¿   r�  r—   r‘   r�  ÚSymFloatÚSymBoolr®   r‚  r  Úrun_noderÉ   Ú
as_stridedrõ   Úas_strided_Úas_strided_scatterÚresizeÚ	resize_asrÑ   ró  rä   rF   rI  r}  rÖ  Úany_is_symbolicÚmaybe_get_strider  rÏ  r  rŽ  rÒ  r   rã   r  r  r   r�  rT  ÚFlexibleLayoutÚ stride_ordered_for_memory_formatÚchannels_lastÚ_is_viewÚrequire_exact_stridesrP   Úrealize_hintrË   ÚmmÚ_int_mmr	  rµ   rÊ   rÞ   Ú_has_mkldnnrí   Ú_linear_pointwiserö   Úmkldnn_rnn_layerÚonednnÚqlinear_pointwiserƒ  Úbinary_tensorrî   r÷   Ú _convolution_transpose_pointwiseÚqconv_pointwiseÚqconv2d_pointwiseÚhas_mklÚmklÚ_mkl_linearrw   r   r°  rB   rC   rE   Ú
MutableBoxÚshould_realize_on_reuseÚ
mark_reuseÚhas_exceeded_max_readsÚhas_large_inner_fnr;   rE  r}   r~   r6  rV  r  rp  Úis_unbacked_symintr´   r  r    r  Úcreate_deferred_runtime_asserts))rn  rº  rÖ  r  r   ÚoriginsÚis_call_functionrw   rx   r·   r§  r¨  r‹  Úinp_argsÚ
inp_kwargsÚ	is_outputr‚  Úsym_stridesÚstride_orderr.  r  r  Ú	num_usersr÷  Úneed_fixed_layoutÚneed_fixed_channels_last_layoutÚ_dataÚcurrÚnew_unbacked_defsr  r�   rp  r;  r=  Úrenamed_unbacked_bindingsr,  r9  r  r  r:  rs  s)   ``                                 @@@@@€ry   rJ  ÚGraphLowering.run_node“  sN  ÿ€ ÷	Hð	Øð	Ø"/ð	à÷	ñ 	õ0 	Gä˜tŸ|™|Ó,ÐÜ! $§/¡/Ó2Ðô $.¨q¨c£?ˆØŸ4™4 ?Ñ2ÐÞØ×:Ñ:¸1Ó=‰LˆDØ”~ dÓ3Ñ3ˆGä�I‰I×%Ñ% gÕ.Ø×!Ñ! !Õ$Ü×Ò˜qÕ!ð —‘˜Ó'à—H—HÜ˜qŸx™x¬¯©×)>Ñ)>×?Ñ?Ü—N‘N×(Ñ(×3Ñ3°A·H±H×=Ñ=ä9¸!×<Ñ<Ø'×9Ñ9Ø" K´÷ñ ñ
 Ð(Ô)Ü)¨!¯(©(ÈÒNØðàñ’ð
 —‘˜Ó'ÜØ—H‘HœuŸz™z×4Ñ4´e·j±j×6TÑ6TÐU÷ñ ô /¨q×1Ñ1ñ Ð(Ô)Ü)¨!¯(©(ÈÒNØðàñ’ð
 —‘˜Ó'Ø—H‘H¤§	¡	× 6Ñ 6× UÑ UÒUÜ×BÑBÐFWÓWáÐEÔFä×BÑBØ1ó2ð  $�HØ!'�Jà+,¯6©6¯:©:Ð6HÓ+IÐIÐ'ÕIØ#3°AÑ#6˜Ø%5°aÑ%8˜
Ü'@à à"Ø$Ø&ó(™˜˜fô (?¸qÐ'RÀ4Ò'RÈ6Ñ'R™˜Ø!×/Ñ/°·±¸$ÓG�FØ×+Ñ+¨A¨xÀTÕRä&ØKÌF×LzÑLzÐK{Ð|óð ô ! §¡×*Ñ*ñ Ð'Ô(ÜØ—F‘F˜5‘M¤E§L¡L´%·.±.Ä%Ç-Á-Ð#P÷ñ ð ŸV™V E™]×/Ñ/×4Ñ4‘Fä"™WÑ-¨aÓ0‘Fá�b”	Ü™Ñ)¨!Ó,�ô —	‘	—‘×)Ñ)×1Ñ1Ü—	‘	—‘×*Ñ*×2Ñ2Ü—	‘	—‘×1Ñ1×9Ñ9Ü—	‘	—‘×%Ñ%×-Ñ-Ü—	‘	—‘×(Ñ(×0Ñ0ðˆNô ÑD¸A¿GºGÓDÓDˆIØ 4×#CÑ#CÑCˆOÜ&)ô *Ø:;¿'º'ó*ó 'Ð#ð �v‰v�z‰zÐ7¸×?Ñ?ÄJØœ	÷Eñ Eð —‘Ô ØŸ&™& ™-×.Ñ.Ó0�Ü#Ÿo™o×3Ñ3×CÒCÀWÐM�Ø×*Ñ*Ó,°Ó7ÆÜ#%×#6Ò#6°wÓ#?�LÜŸ_™_×AÑAÀ&È,ÓW�FæÜ˜v¤y×1Ñ1Ü˜vŸ{™{¬B¯K©K×8Ñ8ð —‘Ô æ×4¼*Ø—‘�u‘œuŸ|™|÷;ò ;ö #Ø"×>Ñ>×BÑBÀ1ÓE‘GàŸf™f U™m×2Ñ2Ó4�GàÒ&¬3¨w«<¸!Ô+;ä×*Ñ*×A°/Ô.A÷%6à5Ô5ð "ô "×/Ñ/×UÑUØŸ™˜u™ó�Eô Ô1°'Ó:Ó;¸aÑ?ð 0ö 8Þ!Ü §¡Ó 1Ó2°aÓ7Ø ×!@Ñ!@Ó@Þ /Þ 7ä"$×"3Ñ"3×"TÑ"TØ"ŸO™OÓ-¬u×/BÑ/Bó#˜ö 7¼3¸w¿<¹<ð Ÿ6™6 %™=×1Ñ1×3Ñ3´zØ"ŸK™KÜŸK™K÷8ñ 8ô &(§_¡_×%IÑ%IØ &Ü "× 3Ò 3°GÓ <Ø.;ð &Jð &™Fô  # 6§?¡?Ó#4Ó5¸Ó:¼sÀ7»|ÈaÓ?OØ*, Ü%'§_¡_×%JÑ%JØ &¨¸}ð &Kð &˜Fô œJ q§w¡wÓ/Ó0ˆIØ˜1Œ}¤¨F´I×!>Ò!>ØŸG�G�DØ—{‘{Ô&;Ô;Ø×+Ñ+Ô-ô "ŸI™IŸN™N×?Ñ?×GÑGÜ!ŸI™IŸN™N×-Ñ-×5Ñ5Ü!ŸI™IŸN™N×2Ñ2×:Ñ:ð-Ð)ð
 ;=Ð7Ø#ŸŸØ-×4Ñ4´U·Y±Y·^±^×5OÑ5O×5WÑ5WÔXÜ Ÿ8™8×/×/Ð/Ø-Ü %§	¡	× 0Ñ 0× BÑ B× JÑ JÜ %§	¡	× 0Ñ 0× BÑ B× IÑ IÜ %§	¡	§¡× ?Ñ ?× GÑ GÜ %§	¡	× 0Ñ 0× BÑ B× JÑ JÜ %§	¡	× 0Ñ 0× BÑ B× IÑ IÜ %§	¡	× 0Ñ 0× BÑ B× IÑ IÜ %§	¡	× 0Ñ 0× BÑ B× PÑ Pð2ñ Ð-ð <Ü %§	¡	× 0Ñ 0× GÑ G× OÑ OÜ %§	¡	× 0Ñ 0× GÑ G× NÑ NÜ %§	¡	× 0Ñ 0× HÑ H× OÑ OÜ %§	¡	× 0Ñ 0× QÑ Q× YÑ YÜ %§	¡	× 0Ñ 0× @Ñ @× HÑ HÜ %§	¡	× 0Ñ 0× BÑ B× IÑ Ið@ñ Ð;ô  %Ÿx™x×/×/Ø 1´e·i±i·m±m×6OÑ6O×6WÑ6WÐ5XÑ XÐ 1ØŸ;™;Ð*;Ó;Ü%'§_¡_×%IÑ%IØ &Ü "× 3Ò 3°A·F±F¸5±M×4HÑ4HÓ4JÓ KØ.2ð &Jð &˜Fð !ŸK™KÐ+JÓJØ ! T§Y¡Y¨q¡\Ò 1ä%'§_¡_×%IÑ%IØ &Ü "× 3Ò 3Ü$BÀ1Ç6Á6È%Á=×CVÑCVÓ$Wó!"ó&˜Fð —w‘w (Ö*ä% f§k¡k×&6Ñ&6¼ÄIÐ8N×OÔOØ"ŸN™N×,ñy $ð| Ÿ™�Ü$ U¬J×7Ñ7¼JØœBŸK™K¬¯©Ð7÷=ñ =ð "ŸJ™J�Eô % U¬J×7Ñ7¼JØœBŸK™K¬¯©Ð7÷=ó =ô
 ˜e¤Z×0Ñ0°U×5RÑ5RÜ˜Ÿ™“L÷6ñ 6ñ DÀFÈAÓN�Fð ×!Ñ!¤# a§g¡g£,Ô/ô ˜&¤)×,Ñ,°×1NÑ1N×1PÑ1Pñ @ÀÈÓJ�Ø×#Ñ#Ô%ô ˜&¤)×,Ñ,´¸F¿K¹KÌ×1TÑ1TØ—{‘{×'Ñ'�Ü˜d¤I×.Ñ.à×.Ñ.¸Ð.Ö=ØŸ™Ô(÷Q "÷ %÷ /ôX 	˜6 1Ô%Ø×Ñ˜vÔ&ä&¤u§|¡|Ò4Ó6ÐØ—<‘<Ð 0Ð 1Ó2ˆCØ ×!=Ñ!=Ó!?Ñ?Òñ 3à—/‘/Ð"5Ð"6Ó7ˆBØ ×!<Ñ!<Ó!>Ñ>Òñ 8ô —G‘G×$Ñ$×.Ñ.ˆ	ð
 �D‰D�MÓ!Ü˜6¤5§<¡<×0Ñ0Ø×,Ñ,¨V×4Ñ4à×!Ñ! &Ô)÷		#ñ 		#ô �7‰7×× 1§4¡4¨=Ó#8ØˆMõ. 6Ü�G‰G×Ñ×&Ñ&¨¯©¯
©
Ð3FÈÓ(Kó
Ðð !Ñ,Ð,Ð,ô %/ñ /
á&ó/
ó %
Ð!ð
 !Ð$=Ó=ð 	
ØÐ'Ð(¨Ð-FÐ,Gð HØŸ=š=›?Ð+ð ,&Ù&5Ó&7Ð%8ð:ó	
Ð=ð
 	×,Ò,¨QÐ0AÔBØˆ÷
 "Ö!ú÷ %Ö$ú÷ /Ö.úsc   Â3AHÃAG/Ãs(AG÷	-AG÷;B5AGú2D1AGÿ#AG/ÿ+AHÁG
AG,ÁG'AG/ÁG/
AG>	ÁG9AHÁH
AHc                ób  ^ • S	U 4S jjn[        5       (       a|  UR                  [        R                  R                  R
                  R                  L aA  T R                  (       a0  T R                  U5      u  pEUS   S:w  a  U" US   US    S35        g g T =R                  U-  sl	        [        R                  R                  R                  nU GH[  nT R                  R                  U/ 5      nUR                   U   n	UR#                  5       R%                  U	5      (       d{  S
S jn
U
" U	R&                  5      (       a$  U" XyR&                  :¬  U SU	R&                   35        U
" U	R(                  5      (       a$  U" XyR(                  :*  U SU	R(                   35        U H‡  n[+        UR,                  5      nUT R                  -
  nU(       a;  [/        U[0        S9nT R                  R3                  U/ 5      R5                  U5        Mi  U" UR,                  UR,                   5        M‰     GM^     g )Nc                ót   >• [         R                  " X5      nTR                  USS9  TR                  U5        g )NTr,  )r,   ÚAssertScalarr2  r*  )r‚  r  Ú	assert_oprn  s      €ry   Úmake_assertÚBGraphLowering.create_deferred_runtime_asserts.<locals>.make_assertE  s2   ø€ ÜŸš¨Ó2ˆIØ× Ñ  °TÐ Ñ:Ø×#Ñ# IÕ.rz   r   Tz to be Truec                ó`   • U [         [         * 4;   a  g [        U 5        g! [         a     gf = f)NFT)r)   rt  Ú	TypeError)râ  s    ry   Úis_convertibleÚEGraphLowering.create_deferred_runtime_asserts.<locals>.is_convertiblea  s5   € Ø¤¬&¨Ð 1Ó1Ø#(ð)Ü œFØ#'øÜ(ó )Ù#(ð)ús   ”   
-¬-r@  z <= )r  )r‚  r#   r  rH  rÇ   rC  )râ  r   rÇ   rÎ  )r   r›   r‚   rð   rÉ   Ú_assert_scalarrõ   rI  rC  r  re   rV  r  rp  r  r²   Úvar_to_rangeÚ _default_unspecified_value_rangeÚissubsetÚlowerÚupperr   r‚  rÔ   rH  r³   rµ   )rn  rº  ry  r€  Ú	node_argsr…  rp  Úi0ÚrasÚvrr„  ÚraÚfvsÚmissingÚi1s   `              ry   rl  Ú-GraphLowering.create_deferred_runtime_asserts#  s½  ø€ ÷D	/ô %×&Ñ&Ø—‘œEŸI™IŸN™N×9Ñ9×AÑAÒAØ——à×:Ñ:¸1Ó=‰LˆIØ˜‰|˜tÓ#Ù˜I a™L¨Y°q©\¨N¸+Ð*FÕGð $ð ×'Ò'Ð+<Ñ<Õ'äŸ™×(Ñ(×2Ñ2ˆIô (�Ø×(Ñ(×,Ñ,¨R°Ó4�à×+Ñ+¨BÑ/�Ø ×AÑAÓC×LÑLÈR×PÑPô)ñ & b§h¡h×/Ñ/Ù# B¯(©(¡N°r°d¸$¸r¿x¹x¸jÐ4IÔJÙ% b§h¡h×/Ñ/Ù# B¯(©(¡N°r°d¸$¸r¿x¹x¸jÐ4IÔJã�BÜ/°·±Ó8�CØ! D×$?Ñ$?Ñ?�GÞÜ  ¬cÑ2˜Ø×*Ñ*×5Ñ5°b¸"Ó=×DÑDÀRÖHá# B§G¡G°·±¨yÖ:ô ò) (rz   c                ó¤   • [         R                  (       a  [        S5      e[        R                  S;  a  [        S[        R                   35      eg )NzC++ codegen is disabled)ÚlinuxÚdarwinÚwin32zUnsupported platform )r+   Údisable_cpp_codegenr6   ÚsysÚplatformrw  s    ry   Ú!validate_can_generate_cpp_wrapperÚ/GraphLowering.validate_can_generate_cpp_wrapperx  s@   € Ü×%×%Ü(Ð)BÓCÐCä�<‰<Ð;Ó;Ü(Ð+@ÄÇÁÀÐ)OÓPÐPð <rz   c                óì  • U R                   R                  5       nUR                  S5        UR                  S5        [        U5      S::  d%   SR	                  SR                  U5      5      5       e[        U5      S:H  nU(       a  SOUR                  5       U l        U R                  (       a  U R                  5         [        U R                  5      U l        [        U R                  U R                  U R                  5      nUc   SU R                   S35       eUR                  UUUU5      U l        U R                   (       a0  U R                   R                  R"                  U R                  l        g g )	Nrÿ   r§   r*   zDoes not support mixing {}Ú+r   zDevice z not supported)r  r  Údiscardró   Úformatr˜   r²   r   rE  rœ  r2   r5  r3   rF  r_  r6  r  Ú_names_iter)rn  Úis_subgraphrî  Úparent_wrapper_codeÚpartition_signaturesr  Úonly_cpuÚwrapper_code_gen_clss           ry   Úinit_wrapper_codeÚGraphLowering.init_wrapper_code  sP  € ð ×(Ñ(×-Ñ-Ó/ˆØ×Ñ˜UÔ#Ø×Ñ˜VÔ$ä�<Ó  AÓ%ð 	
Ð'C×'JÑ'JØ�H‰H�\Ó"ó(
ó 	
Ð%ô �|Ó$¨Ñ)ˆÞ$,™5°,×2BÑ2BÓ2DˆÔà××Ø×2Ñ2Ô4ä1°$×2BÑ2BÓCˆŒÜ=Ø×Ñ˜d×.Ñ.°·±ó 
Ðð $Ñ/ð 	
Ø�d×&Ñ&Ð' ~Ð6ó	
Ð/ð 1×7Ñ7ØØØØ ó	
ˆÔð ××Ø,0×,=Ñ,=×,JÑ,J×,VÑ,VˆD×ÑÕ)ð rz   c                ó   • SS K nUR                  U R                  5      nUR                  U5      n/ nUR                  R                   HY  nUR
                  S:X  d  M  UR                  [        R                  R                  R                  L d  MH  UR                  U5        M[     / n0 n0 n/ n	0 n
U GH  nUR                  S    H\  nU HS  nXÇ;   a  M
  [        U[        R                  R                  5      (       d  M5  [!        U5      X|'   UR                  U5        MU     M^     UR                  S   n[        R"                  R$                  R'                  UR                  S   UR                  S   UR)                  5        VVs0 s H@  u  pïU[        U[        R                  R                  5      (       a  UR*                  S   OU_MB     snnUR                  S   5      n0 nUR                  R-                  U5         UR)                  5        Hˆ  u  pïUU;   aJ  UR                  R/                  [        R0                  U4S	9n[!        U	5      UU'   U	R                  U5        MU  Xú;   a	  X¯   UU'   Mc  [!        U	5      X¯'   U	R                  U5        X¯   UU'   MŠ     S S S 5        UX…R2                  '   GM     X–-   nUR                  R                   H&  nUR
                  S
:X  d  M  [5        U5      4Ul          O   UR9                  5         [        R                  R;                  U5      nUR=                  U5      n[!        U5      S:”  aÓ  U[!        U	5      S  n0 U l        U H¸  nSn/ nUR                  S    H|  n/ nU HW  n[        U[        R                  R                  5      (       d  UR                  U5        M?  SnUR                  UX|      5        MY     UR                  [5        U5      5        M~     U(       d  MŸ  UU R>                  UR2                  '   Mº     US [!        U	5       U l         X€l!        g s  snnf ! , (       d  f       GN¨= f)Nr   r¿   Úgridrx   ró  rô  r·  rõ  )rw   r¢   FT)"r  Údeepcopyr]  rV  rÚ   r�   r›   r‚   rð   r{  r  rµ   rx   r|   r¨   r%   ró   rÛ   rÜ   r  rV  r§   Úinserting_beforer¿   ÚclonerD  r;  rw   Ú	recompileÚInterpreterr%  rQ  rO  rP  )rn  r  r  Ú	cloned_gmÚtriton_nodesr®   Úgrid_inputsÚvisited_gridsÚtriton_inputsÚkwargs_inputsÚvisited_kwargsr«  r·  rx   rq  rr  r	  r  Únew_nodeÚnew_outputsÚrunnerÚreturned_outputsÚgrid_outputsÚdynamic_gridÚ	new_gridsÚnew_grids                             ry   Úextract_autotune_inputsÚ%GraphLowering.extract_autotune_inputs¤  s²  € ó 	à—M‘M $§,¡,Ó/ˆ	ØŸ™ ~Ó6ˆØˆØ—O‘O×)Ô)ˆDà—‘˜?Õ*Ø—K‘K¤5§9¡9×#9Ñ#9×#XÑ#XÔXà×#Ñ# DÖ)ñ *ð ,.ˆØ24ˆà(*ˆØ-/ˆØ)+ˆÜ ˆDàŸ™ FÔ+�Û�CØÓ+Ù ä! #¤u§x¡x§}¡}×5Ó5Ü-0°Ó-=˜Ñ*Ø#×*Ñ*¨3Ö/ó  ñ ,ð —[‘[ Ñ*ˆFä×-Ñ-×@Ñ@×TÑTØ—‘˜LÑ)Ø—‘Ð/Ñ0ð !'§¡¤ôâ .™˜ð ¬
°1´e·h±h·m±m×(DÑ(D�q—v‘v˜e’}È!ÒKÙ .òð —‘Ð5Ñ6óˆGð *,ˆJØ—‘×1Ñ1°$Õ7Ø"ŸL™LžN‘D�AØ˜G“|Ø#,§?¡?×#@Ñ#@ÄÇÁÐTUÐSWÐ#@Ð#X˜Ü(+¨MÓ(:˜
 1™Ø%×,Ñ,¨XÔ6Ù àÓ*Ø(6Ñ(9˜
 1™Ù Ü(+¨MÓ(:�NÑ%Ø!×(Ñ(¨Ô+Ø$2Ñ$5�J˜q“Mñ +÷ 8ð (2ˆMŸ)™)Ô$ñM !ðP $Ñ1ˆØ—O‘O×)Ô)ˆDØ�w‰w˜(Õ"Ü" ;Ó/Ð1�”	Ùñ *ð
 	×ÑÔÜ—‘×%Ñ% iÓ0ˆØ!Ÿ:™: nÓ5Ðäˆ{Ó˜aÓØ+¬C°Ó,>Ð,@ÐAˆLØ$&ˆDÔ!Û$�Ø$�Ø.0�	Ø ŸK™K¨Ô/�DØ!�HÛ#˜Ü)¨#¬u¯x©x¯}©}×=Ñ=Ø$ŸO™O¨CÔ0Ù$Ø'+˜Ø Ÿ™¨°]Ñ5GÑ(HÖIñ  $ð ×$Ñ$¤U¨8£_Ö5ñ 0÷  �<Ø7@�D×)Ñ)¨$¯)©)Ó4ñ %ð" "2Ð2F´C¸Ó4FÐ!GˆÔØ"/Õùóo÷ 8Ö7ús   ÆAP8È BP>Ð>
Q	c                ó¾  ^ • [        U 4S jS 5       5      (       Ga  SU 4S jjn[        R                  R                  (       a†  [        R                  R                  (       aW  SnT R
                   H&  n[        U[        R                  5      (       d  M$  Sn  O   U(       a  U" 5       nT R                  U5        T R                  5       $ ST l        T R                  5       R                  nU" 5       n[        R                  R                   R#                  5          U" U5        SSS5        AST l        T R$                  R'                  5         T R(                  R'                  5         T R*                  R'                  5         [,        R.                  R0                  R2                  R'                  5         [,        R.                  R0                  R4                  R'                  5         [6        R8                  " 5         [        R:                  " SS05         T R                  5       sSSS5        $ T R                  5       $ ! , (       d  f       GN = f! , (       d  f       g= f)	zA
For GPU, Triton kernels are autotuned and stored as cubin files
c              3  ó@   >#   • U  H  oTR                   ;   v •  M     g 7fru   )r  )r‹   r   rn  s     €ry   r�   Ú9GraphLowering.codegen_with_cpp_wrapper.<locals>.<genexpr>		  s   øé € ÐIº¨v˜×*Ñ*Ö*ºùrg  )ÚcudaÚxpuc                 óö  >•     SS jn [         R                  R                  R                  5       nUb«  [	        [
        R                  [        5      (       dˆ  UR                  (       a  UR                  R                  5         UR                   Vs/ s H
  nUc  M  UPM     nn[        R                  " U[
        R                  5       Vs/ s H  nU " U5      PM     nnOU[	        [
        R                  [        5      (       a  TR                  O[
        R                   Vs/ s H  nU " U5      PM     nnTR                  (       a�  SSKJn  [#        TR$                  5       VVs/ s H<  u  pxUTR                  ;   d  M  [	        XW   [         R&                  5      (       d  M:  UPM>     n	nnU	 H3  nXW   n
[	        U
[         R&                  5      (       d   eU" U
5      XW'   A
M5     U$ s  snf s  snf s  snf s  snnf )Nc                óN  • U c  g [        U [        R                  [        R                  45      (       a  U R                  R
                  $ [        U [        5      (       a  [        U 5      $ [        U [        R                  5      (       d   S[        [        U 5      5      -   5       eU $ )Nz&Unknown type when creating real inputs)r|   r‚   r�  rH  r®   Úhintr   r   r   rH  r¸  )r>  s    ry   ÚmaterializeÚXGraphLowering.codegen_with_cpp_wrapper.<locals>.extract_real_inputs.<locals>.materialize	  s�   € ð ‘yà#Ü# A¬¯©´e·n±nÐ'E×FÑFà Ÿv™vŸ{™{Ð*Ü# A¤z×2Ñ2Ü% a›yÐ(ä)¨!¬U¯\©\×:Ñ:ð ØDÄsÌ4ÐPQË7Ã|ÑSóÐ:ð  !˜rz   r*   )Úclone_preserve_strides)r>  z1Union[torch.SymInt, torch.SymFloat, torch.Tensor]rÇ   zUnion[int, float, torch.Tensor])r‚   Ú_guardsÚTracingContextÚtry_getr|   re   Úreal_inputsrd   Úoutput_stridesÚclearÚparams_flatrh  Úchainr  r<  Ú
compile_fxrÌ  r•   r  r   )rÊ  Útracing_contextÚparamrÓ  r>  rÐ  rÌ  r­   rD  r=  Úmutated_inprn  s              €ry   Úextract_real_inputsÚCGraphLowering.codegen_with_cpp_wrapper.<locals>.extract_real_inputs	  sÛ  ø€ ð!ØHð!à4ô!ô" #(§-¡-×">Ñ">×"FÑ"FÓ"H�Ø"Ñ.´zÜ—M‘M¤;÷8ñ 8ð '×5×5Ø'×6Ñ6×<Ñ<Ô>ð &5×%@Ò%@ó#â%@˜EØ ÷ Ù%@ð  ð #ô "+§¢°¼a¿m¹mÔ!Ló#â!L˜Añ $ AžÙ!Lð  ð #�Kô  *¬!¯-©-¼×EÑEð !×/Ò/ä!"§¡ð/ó#ò/ð ñ $ Ažñ/ð  ð #ð ×&×&ÝBô *3°4×3DÑ3DÔ)Eô*â)E™I˜CØ 4×#6Ñ#6Ñ6ó ô ' {Ñ'7¼¿¹×F÷ Ù)Eð 'ñ *ó  2˜ð '2Ñ&6˜Ü)¨+´u·|±|×DÑDÐDÐDÙ+AÀ+Ó+N˜Ñ(Ú'ñ  2ð #Ð"ùòW#ùò
#ùò#ùó*s*   ÂG&ÂG&ÃG+Ä"G0Å%G5Å?G5Æ"G5FTNztriton.autotune_at_compile_time)rÇ   ú%list[Union[int, float, torch.Tensor]])rÑ   r+   ÚtritonÚautotune_at_compile_timeÚautotune_with_sample_inputsr%  r|   r,   ÚUserDefinedTritonKernelrÀ  ÚcodegenrE  Úcompile_to_moduleÚcallr‚   rj  rk  rl  r0  rÒ  r/  r4  re   rV  r  Úprecomputed_replacementsÚinv_precomputed_replacementsr-   ÚresetÚpatch)rn  rÙ  Úuser_defined_kernelsr�   rÐ  Úcompileds   `     ry   Úcodegen_with_cpp_wrapperÚ&GraphLowering.codegen_with_cpp_wrapper	  s¦  ø€ ô ÔI¹ÓI×IÒI÷D#ôL �}‰}×5×5ô —=‘=×<×<Ø+0Ð(Ø"Ÿoœo˜Ü% b¬"×*DÑ*D×EÓEØ37Ð0Ù!ñ .ö ,Ù&9Ó&;˜Ø×4Ñ4°[ÔAØ—|‘|“~Ð%ð $)�Ô Ø×1Ñ1Ó3×8Ñ8�á1Ó3�Ü—[‘[×1Ñ1×HÑHÕJÙ˜[Ô)÷ Kàð $(�Ô Ø×$Ñ$×*Ñ*Ô,Ø×'Ñ'×-Ñ-Ô/Ø×'Ñ'×-Ñ-Ô/Ü—‘× Ñ ×9Ñ9×?Ñ?ÔAÜ—‘× Ñ ×=Ñ=×CÑCÔEÜ—’”Ü—\’\Ð#DÀeÐ"LÕMØŸ<™<›>÷ NÑMð —<‘<“>Ð!÷! KÖJú÷ NÕMús   Ä	H<ÈIÈ<
IÉ
Ic                ó    • SSK Jn  [        R                  " SS5         U" U R                  5      U l         SSS5        g! , (       d  f       g= f)z°
(Re)initializes the scheduler member.  When initializing the scheduler, no CUBIN
files should be generated (to avoid biasing any benchmarks and pessimizing
fusion decisions).
r*   )Ú	Schedulerztriton.store_cubinFN)rN  rì  r+   ræ  r%  )rn  rì  s     ry   Ú_update_schedulerÚGraphLowering._update_schedulerv	  s2   € õ 	)ä�\Š\Ð.°Õ6Ù& t§¡Ó7ˆDŒN÷ 7×6Ö6ús	   ž?¿
Ac                óP  • [        SSS9   U R                  5         U R                  5         [        R                  R                  U R                  U R                  R                  5        U R                  R                  U 5        U R                  R                  5         [        R	                  S[        R                  R                  5        U R                  R                  U R                   5      nU R                  R#                  5         UsS S S 5        $ ! , (       d  f       g = f)NzGraphLowering.codegenT©Úlog_pt2_compile_eventzFFinished codegen for all nodes. The list of kernel names available: %s)r   r¨  rí  re   rÖ  Údraw_orig_fx_graphr]  rN  rÚ   r6  Úpush_codegened_graphrà  rÕ  rV  rg  Úgeneraterþ   Úpop_codegened_graph)rn  r·   s     ry   rà  ÚGraphLowering.codegen�	  sÇ   € ÜÐ1ÈÓNØ×"Ñ"Ô$à×"Ñ"Ô$Ü�G‰G×&Ñ& t§|¡|°T·^±^×5IÑ5IÔJà×Ñ×2Ñ2°4Ô8Ø�N‰N×"Ñ"Ô$ä�I‰IØXÜ—‘×0Ñ0ôð
 ×&Ñ&×/Ñ/°×0AÑ0AÓBˆFØ×Ñ×1Ñ1Ô3Ø÷! O×N×Nús   ‹DDÄ
D%c                ól  • [        SSS9   UR                  U l        UR                  U l        UR                  U l        UR                  U l        UR
                  U l        UR                  U l        U R                  5         U R                  R                  5         SSS5        g! , (       d  f       g= f)a”  
This is a more compact version of the `codegen()` above
where we codegen this graph as a subgraph of some parent
graph. The parent graph is passed as an argument: the
intention is to inline codegening of the subgraph in
the parent graph's wrapper code (including the generated
kernels). The wrapper code is not finalized (via `.generate()`
call), as this will be done in the parent graph's `codegen()`.
zGraphLowering.codegen_subgraphTrð  N)
r   r6  r5  rE  r  r  r   rí  rN  rà  )rn  Úparent_graphs     ry   Úcodegen_subgraphÚGraphLowering.codegen_subgraph”	  sŒ   € ô Ð:ÐRVÓWØ ,× 9Ñ 9ˆDÔØ*×5Ñ5ˆDŒOØ+×7Ñ7ˆDÔØ ,× 9Ñ 9ˆDÔØ+×7Ñ7ˆDÔØ+×7Ñ7ˆDÔà×"Ñ"Ô$Ø�N‰N×"Ñ"Ô$÷ X×WÖWús   ‹BB%Â%
B3c                óâ   • Sn/ n/ nU R                   R                   HL  nUR                  5       nX-  nUR                  XES-  45        UR                  XDR	                  5       45        MN     XU4$ )Nr   r  )rN  rÚ   Úget_read_write_buffers_sizesrµ   Úget_estimated_runtime)rn  Útotal_bytesÚnode_countsÚnode_runtimesr®   Ú	num_bytess         ry   r£  ÚGraphLowering.count_bytes©	  sy   € ð
 ˆØˆØˆØ—N‘N×(Ô(ˆDØ×9Ñ9Ó;ˆIØÑ$ˆKØ×Ñ °1¡nÐ5Ô6Ø× Ñ  $×(BÑ(BÓ(DÐ!EÖFñ	 )ð ¨Ð6Ð6rz   zOptional[Callable[[str], None]]Úsave_output_codec                óp   • [        SSSSS9   U R                  5       sS S S 5        $ ! , (       d  f       g = f)NzGraphLowering.compile_to_moduleÚcode_genTÚ,inductor_code_gen_cumulative_compile_time_us)Ú
phase_namerñ  Údynamo_compile_column_us)r   Ú_compile_to_modulerw  s    ry   rá  ÚGraphLowering.compile_to_module¼	  s4   € ÜØ-Ø!Ø"&Ø%Só	
ð ×*Ñ*Ó,÷
÷ 
÷ 
ús   �'§
5c                ój  • U R                   (       a  U R                  5       OU R                  5       u  p[        U[        5      (       a  U R                  U5      nO/[        U[        5      (       a  UnO[        S[        U5       35      eUR                  c   e[        UR                  5        [        R                  SUR                  5        [        R                  " SUR                  5        [        R                   (       a%  [#        SUR                   3[$        R&                  S9  [        U[        5      (       au  [(        R                  R+                  UR                  5        [(        R                  R-                  [.        R0                  R3                  UR                  5      S   S-   5        U$ )Nz Unrecognized wrapper code type: úOutput code written to: %szCompiled module path: )Úfiler   ú.debug)rE  ré  rà  r|   rc   Ú_compile_to_module_linesr0   ÚNotImplementedErrorr¸  Ú__file__rs   rÕ  rÖ  rq   rû  r+   Úbenchmark_kernelÚprintrš  Ústderrre   Úoutput_coder  ÚosÚpathÚsplitext)rn  r6  r…  Úmods       ry   r	  Ú GraphLowering._compile_to_moduleÅ	  s6  € ð 04×/?×/?ˆD×)Ñ)Ô+ÀTÇ\Á\Ã^ñ 	ˆô �lÔ$4×5Ñ5Ø×/Ñ/°Ó=‰CÜ˜Ô&;×<Ñ<Ø‰Cä%Ø2´4¸Ó3EÐ2FÐGóð ð �|‰|Ñ'Ð'Ð'ä˜Ÿ™Ô%Ü�	‰	Ð.°·±Ô=Ü×ÒÐ9¸3¿<¹<ÔHÜ×"×"ÜÐ*¨3¯<©<¨.Ð9ÄÇ
Á
ÒKÜ�lÔ$9×:Ñ:Ü�G‰G×Ñ §¡Ô-Ü�G‰G�L‰LœŸ™×)Ñ)¨#¯,©,Ó7¸Ñ:¸XÑEÔFàˆ
rz   c                óŠ  ^^• SSK Jn  [        R                  R                  (       aw  U R
                  R                  R                  5       nUR                  SS5      nSU-   U R
                  R                  R                  5       -   S-   nUTR                  -   Tl
        [        R                  b  [        R                  TR                  5        [        R                  " STR                  5        [        R                   " 5       n["        R$                  " UTR                  S9   TR&                   VVs/ s H  u  pgXgR(                  4PM     nnnUR+                  TR                  5      u  n	m[        R                  " S	T5        [,        R                  R/                  T5        [,        R                  R1                  [2        R4                  R7                  T5      S
   S-   5        [9        SU4S jU4S jS9  [=        SSS9   UR?                  U	TU0 U R@                  EU RB                  EU RD                  ES9n
S S S 5        X�l#        TU l$        X€l%        [        RL                  (       a%  [        RN                  (       a  W
RQ                  SSS9  W
$ s  snnf ! [:         a    [9        SU4S jS9  e f = f! , (       d  f       N€= f)Nr*   )ÚPyCodeCachez"""z\"\"\"z&r"""
Compile-time auto-tuning block: 
z"""
zOutput code: 
%s)Úcoder  r   r  Úinductor_output_codec                 óH   >• T [         R                  R                  T 5      S.$ )N)ÚfilenameÚ	file_path)r  r  Úabspath)r  s   €ry   r$  Ú8GraphLowering._compile_to_module_lines.<locals>.<lambda>
  s   ø€ Ø $Ü!#§¡§¡°Ó!6òrz   c                 ó   >• T R                   $ ru   ©r=  rï  s   €ry   r$  r#  
  ó   ø€  <×#5Ò#5rz   )Ú
payload_fnc                 ó   >• T R                   $ ru   r%  rï  s   €ry   r$  r#  
  r&  rz   zPyCodeCache.load_by_key_pathTrð  )ÚlinemapÚattrs)ÚtimesÚrepeat))Ú	codecacher  r+   rÜ  rÝ  r6  Úkernel_autotune_defsÚgetvalueÚreplaceÚkernel_autotune_callsr=  rú   r  rq   rÖ  rT   Úinductor_meta_from_configrU   Úbegin_compileÚline_mapr”  Úwritere   r  r  r  r  r  r   rž  r   Úload_by_key_pathr(  r+  r,  rW  rX  rY  Úbenchmark_harnessÚprofile_bandwidth_outputÚbenchmark_compiled_module)rn  r6  r  r.  Útuning_codeÚinductor_metaÚline_nor®   r)  r  r  r  s    `         @ry   r  Ú&GraphLowering._compile_to_module_linesä	  sx  ù€ õ 	+ä�=‰=×1×1à#'×#4Ñ#4×#IÑ#I×#RÑ#RÓ#TÐ Ø#7×#?Ñ#?ÀÀ{Ó#SÐ ð7à&ñ'ð ×#Ñ#×9Ñ9×BÑBÓDñEð ñ	ð ð "-¨|×/AÑ/AÑ!AˆLÔÜ×)Ñ)Ñ5Ü×*Ñ*¨<×+=Ñ+=Ô>Ü×ÒÐ1°<×3EÑ3EÔFä&×@Ò@ÓBˆÜ×*Ò*¨=¸|×?QÑ?QÒRð	ð &2×%:Ò%:ôâ%:‘M�Gð ×*Ñ*Ó+Ù%:ð ñ ð $×)Ñ)¨,×*<Ñ*<Ó=‰IˆC�Ü×!Ò!Ð">ÀÔEä�G‰G×Ñ Ô%Ü�G‰G�L‰LœŸ™×)Ñ)¨$Ó/°Ñ2°XÑ=Ô>ô Ø&ôô 6òô Ð8ÐPTÓUØ×.Ñ.ØØØðØ—n‘nðà×.Ñ.ðð ×4Ñ4ðð	 /ð 	ˆC÷ Vð ŒØˆŒØ$Ôä×#×#¬×(G×(Gà×)Ñ)°¸!Ð)Ñ<àˆ
ùóYøô ó 	ÜØ&ä5òð
 ð	ú÷  VÕUús+   Ä%J Ä4JÅBJ È7J4ÊJ ÊJ1Ê4
Kc                óÚ  • / n[         R                  " S5      n[         R                  " S5      nU H¶  n[        U[        R                  5      (       a+  UR                  U R                   S[        U5       35        MM  [        U[        R                  5      (       a+  UR                  U R                   S[        U5       35        M—  UR                  UR                  5       5        M¸     U$ )Nr   Ú_noneÚ_shape)
rh  ri  r|   r,   ÚNoneAsConstantBufferrµ   rD  rK  rD   rÙ  )rn  rü   ÚnamesÚshape_counterÚnone_counterr®   s         ry   Ú_get_output_namesÚGraphLowering._get_output_names,
  s®   € ØˆÜ!Ÿš¨Ó*ˆÜ —’ qÓ)ˆÛ!ˆDÜ˜$¤× 7Ñ 7×8Ñ8Ø—‘ §	¡	˜{¨%´°\Ó0BÐ/CÐDÖEÜ˜D¤"×":Ñ":×;Ñ;Ø—‘ §	¡	˜{¨&´°mÓ1DÐ0EÐFÖGà—‘˜TŸ]™]›_Ö-ñ "ð ˆrz   c                ó8   • U R                  U R                  5      $ ru   )rE  rü   rw  s    ry   Úget_output_namesÚGraphLowering.get_output_names9
  s   € Ø×%Ñ% d×&8Ñ&8Ó9Ð9rz   c                ó:  • XR                   ;   =(       ar    U R                   U   R                  5       S:H  =(       aK    [        U R                   U   R                  5       5      S:H  =(       a    [	        U R                   U   5      S:H  =(       d    XR
                  ;   $ )Nr*   r   rÿ   )r  r"  ró   r�  r?   r  rè  s     ry   Úis_unspec_argÚGraphLowering.is_unspec_arg<
  s‘   € ð ×%Ñ%Ñ%÷ BØ×!Ñ! $Ñ'×1Ñ1Ó3°qÑ8÷Bä�D×%Ñ% dÑ+×4Ñ4Ó6Ó7¸1Ñ<÷Bô   × 1Ñ 1°$Ñ 7Ó8¸EÑA÷	3ð
 ×2Ñ2Ñ2ð	3rz   )]r  rU  r!  r"  rg  r_  rI  rQ  rO  rP  r  rd  r#  r$  rl  rW  rY  rX  r  r  r&  r  r.  r(  rE  rC  rR  r:  rm  r  r[  r5  r   r  rZ  r  ra  r  r9  r  r'  rF  r1   rJ  r  r  r  rü   r4  r  rf  r  r  rþ   r	  r;  re  rH  r2  r=  r<  r   rD  r>  rA  r@  r)  r*  r3  rc  rT  r
  r,  r%  r]  r  rk  rM  r  rG  r0  r1  r/  r  rN  r-  r  r+  rb  rä   rj  r6  r  )NNNFFNNFFFNNNNNNF)&ro  útorch.fx.GraphModuler  zOptional[Sequence[object]]rp  zOptional[ShapeEnv]rJ  zOptional[int]rE  rÎ  rI  rÎ  r	  zOptional[bool]r9  z4Optional[Callable[[list[ir.ExternKernelNode]], Any]]rþ   rÎ  r  rÎ  r  rÎ  r&  zOptional[dict[str, int]]r  úOptional[str]r  rN  r  zOptional[GraphLowering]rD  rN  r  zOptional[Sequence[int]]rF  rÎ  rÇ   rC  )rÇ   rC  )rƒ  útorch.TensorrÇ   z=tuple[Sequence[Union[int, Expr]], Sequence[Union[int, Expr]]])rƒ  rO  rÇ   z)tuple[list[sympy.Expr], list[sympy.Expr]])r®   zOUnion[ir.TensorBox, ir.StorageBox, ir.Buffer, WorkspaceArg, ir.TorchBindObject]rÇ   zSequence[Expr])r®   z2Union[ir.Buffer, WorkspaceArg, ir.TorchBindObject]rÇ   r   )r   z.Union[torch._inductor.ir.IRNode, device, None]rš  r.   rÇ   rÎ  )T)r¢  ro   r£  rÎ  rÇ   rt  )rÇ   útorch.device)r   rP  rÇ   úIterator[None]rA  )ro  rl   rþ   rÎ  rÇ   rÎ  )rD  rH  rÇ   rH  )ro  rM  r  zlist[torch.Tensor]rî  rH  rÇ   rí  )rÇ   zOrderedSet[Node])rD  rH  rÇ   rC  )r   rP  rÇ   rC  )rÇ   z,torch._subclasses.fake_tensor.FakeTensorMode)r
  rH  rÇ   z<Optional[Union[ir.TensorBox, ir.Buffer, ir.TorchBindObject]])r  ú
sympy.ExprrÇ   rC  )r
  rH  rÇ   z2Union[ir.TensorBox, ir.Buffer, ir.TorchBindObject])r
  rH  rÇ   ztorch.dtype)r
  rH  rÇ   zUnion[int, Expr])rw   r   rÇ   r   )r�   zir.OperationrÇ   rH  )r1  z	ir.Bufferr-  rÎ  rÇ   rH  )r6  ú	list[str]rÇ   rH  )rD  rB  rÇ   rC  )rD  rH  rÇ   rO  )rD  rN  rŽ  zUnion[Tensor]rÇ   rH  ru   )rŽ  r   rD  rN  rÇ   rF   )rD  rH  rn  zOptional[torch.device]rÇ   rH  )r›   rH  rw   útuple[object]rx   údict[str, object]rÇ   zUnion[Expr, TensorBox, None])r›   rf   rw   r   rx   údict[str, Any]rÇ   r   )r±  rO  rÇ   rÎ  )r›   rH  rw   z	tuple[()]rx   rU  rÇ   zOUnion[Constant, TensorBox, ShapeAsConstantBuffer, ir.Subgraph, TorchBindObject])r›   r   rw   r   rx   r   rÇ   r   )r›   rH  rw   rT  rx   rU  rÇ   rC  )r®   rÆ   )rÇ   rQ  )rá  rÆ   r§  ú
tuple[Any]r¨  rV  r  rW  r  rV  rÇ   rC  )rº  rÆ   rÇ   Úobject)rº  rÆ   ry  zOrderedSet[sympy.Symbol]rÇ   rC  ©FNNN©
r£  rÎ  rî  rN  r¤  zOptional[PythonWrapperCodegen]r¥  z!Optional[GraphPartitionSignature]rÇ   rC  )r  rÛ  rÇ   rC  )rÇ   z)tuple[ValueWithLineMap, ValueWithLineMap])rø  rú   rÇ   rC  )rÇ   zVtuple[int, list[tuple[BaseSchedulerNode, int]], list[tuple[BaseSchedulerNode, float]]])rÇ   ÚCompiledModule)r6  rc   rÇ   r[  )rü   rû   rÇ   rS  )rÇ   rS  )rD  rH  rÇ   rÎ  )HÚ__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r  rv  rˆ  r‹  r‘  r—  r›  r¥  r©  Ú
contextlibr   r¬  r²  Ústaticmethodr  ré  rï  rS  rü  r   Úpropertyr  r  r  r  r  r"  r%  r*  r2  r7  rE  rJ  rN  r\  ra  rY  rs  r¿   r²  r¼  rÂ  rÆ  r¢   rÝ  rì  rð  r�  rJ  rl  rœ  r¨  rÀ  ré  rí  rà  rù  r£  r  rá  r	  r  rE  rH  rK  Ú__static_attributes__Ú__classcell__©rs  s   @ry   rú   rú   X  s7  ø‡ Ø"Ó"ð
 6:Ø(,Ø"&Ø!ØØ%)ð Ø"Ø!Ø$Ø7;Ø,0Ø+/Ø04Ø"Ø37Ø ð+QCà ðQCð 3ðQCð &ð	QCð
  ðQCð ðQCð ðQCð #ðQCð!
ðQCð ðQCð ðQCð ðQCð 5ðQCð  *ð!QCð" )ð#QCð$ .ð%QCð& ð'QCð( 1ð)QCð* ð+QCð, 
÷-QCð QCôf1ð# Øð# à	Fô# ðJØðà	2ôð#ð
ð#ð
 
ô#ð&EØFðEà	ôEðMà>ðMð  ðMð 
ô	Mö<ô(4ð ×Ñó(ó ð(ôð ó^ó ð^ô@ð
à ð
ð +ð
ð ð	
ð
 
ô
ô6>ô@Aô
Dð óó ððØðà	Eôô$FðQØðQà	;ôQô8ô,
8÷&ôð FK÷ ô(ð
Ø@ðà	ôôô
ð Ø!ðØ)6ðà	ôð@ 37ð
Øð
Ø"/ð
à	õ
ô&&ðRfàðfð ðfð "ð	fð
 
&÷f÷P~8ð@ ó5ó ð5ð67àð67ð ð67ð "ð	67ð

ô67ôpôð]
àð]
ð ð]
ð "ð	]
ð
 
÷]
ô~ ð ó$ó ð$ð ó$ó ð$ðI:àðI:ð ðI:ð #ð	I:ð
 ðI:ð #ðI:ð 
ôI:÷VNð`S;ØðS;Ø3KðS;à	ôS;ôjQð "Ø'+Ø>BØBFð#Wàð#Wð %ð#Wð <ð	#Wð
 @ð#Wð 
õ#WðJ]0ØCð]0à	ô]0ð~q"à	2ôq"ôf	8ôô&%ð*7ð
ô7ð" 9=ÐÐ5Ó<ô-ôð>FØ,ðFà	ôFôPô:÷3ò 3rz   rú   c                  ó^   ^ • \ rS rSrSrSU 4S jjr    S         SU 4S jjjrSrU =r$ )	rí  iG
  z‚
Mostly a helper class for the subgraph lowering. The main goal is to call
init_wrapper_code with the subgraph related arguments.
c                ó2   >• Xl         [        TU ]  " U0 UD6  g ru   )rì  r  r  )rn  rì  rw   rx   rs  s       €ry   r  ÚSubgraphLowering.__init__M
  s   ø€ ØŒÜ‰Ò˜$Ð) &Ó)rz   c                ó`   >• [         TU ]  SU R                  U R                  R                  S9  g )NT)r£  rî  r¤  )r  r¨  rD  rì  r6  )rn  r£  rî  r¤  r¥  rs  s        €ry   r¨  Ú"SubgraphLowering.init_wrapper_codeQ
  s.   ø€ ô 	‰Ñ!ØØŸ)™)Ø $§¡× 8Ñ 8ð 	"ò 	
rz   )rì  )rì  rú   rw   r   rx   r   rÇ   rC  rY  rZ  )	r\  r]  r^  r_  Ú__doc__r  r¨  rd  re  rf  s   @ry   rí  rí  G
  sV   ø† ñ÷
*ð "Ø'+Ø>BØBFð
àð
ð %ð
ð <ð	
ð
 @ð
ð 
÷
ö 
rz   rí  )rw   r   rx   r   rÇ   rC  )r‡   rR  rÇ   zOptional[torch.dtype])r�   r   rÇ   rÎ  )rš   rl   r›   rH  rÇ   z1Union[Tensor, torch._C.ScriptObject, GraphModule])r©   rm   rÇ   údict[Node, tuple[int, ...]])r¶   rm  rÇ   zdict[Node, object])r©   rm   rä   rm  rÇ   rC  )r®   r%   rÇ   rÎ  )¹Ú
__future__r   ra  rñ   rh  Úloggingr•  r  r  rš  rB  Úcollectionsr   r   Útypingr   r   r   r	   r
   r}   r   r‚   Útorch._loggingÚtorch.fxr   r   Útorch._decompr   Útorch._dynamo.utilsr   r   Ú"torch._library.fake_class_registryr   Útorch._library.opaque_objectr   Útorch._library.utilsr   r   r   Útorch._prims_commonr   r   Útorch._subclasses.fake_tensorr   Útorch._utils_internalr   Ú%torch.fx.experimental._backward_stater   Útorch.fx.experimental.sym_noder   r   Ú%torch.fx.experimental.symbolic_shapesr   r   r   r    r!   r"   r#   r$   Útorch.fx.noder%   Útorch.fx.passes.reinplacer&   Útorch.utils._mode_utilsr'   Útorch.utils._ordered_setr(   Útorch.utils._sympy.numbersr)   r  r+   r,   r-   Úcodegen.commonr.   r/   r0   r1   r2   r3   r4   r5   Úexcr6   r7   r8   r9   Úfx_utilsr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rº  rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   ÚruntimerT   Úruntime.autotune_cacherU   r  rV   rj  rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   Úvirtualizedrd   re   Úcollections.abcrf   rg   rh   ri   Útypesrj   Útorch._higher_order_ops.effectsrk   rl   Útorch.fx.graphrm   Úcodegen.wrapperrn   Údependenciesro   rN  rp   r[  Útorch._inductor.codecacherq   Ú	getLoggerr\  rÕ  Ú_loggingÚgetArtifactLoggerrú  rð   rÉ   ri  rL  r8  Útorch._inductor.fb.utilsrs   rˆ   r‘   r    r¯   r¼   rë   rø   r¨   r°  rú   rí  rv   rz   ry   Ú<module>r•     s  ðÝ "ã Û Û Û Û Û 	Û 	Û 
Û Ý #Ý %ß @Õ @ã Ý ã Û Û ß  Ý ,ß 4Ý ?Ý 7Ý :ß 7÷õ 5Ý :Ý ?ß L÷	÷ 	ó 	õ Ý 1Ý /Ý /Ý -ç !Ñ !÷	÷ 	ó 	÷ó õ %÷÷ ÷ õ ÷÷ ÷ ó õ $Ý 8Ý &÷÷ ÷ õ ÷ (ö ßFÓFÝ å;Ý$Ý$å5Ý!Ý,à˜:Ð'<Ð<Ñ=€Nå 5ð ×Ó˜Ó!€Ø—’×0Ò0°¸<ÓH€à‡y‚y‡~‚~€à$Ÿ?›?Ó,Ð à	×Ó×ÑÞ8ôôô(ð
Ø	ðØ!ðà6ôôð$Ø5ðàôð0V/ØðV/Ø+FðV/à	ôV/ôrô*l#3�E—H’H×(Ò(ô l#3ô^G
�}õ 
rz   