Ë
    g^(h&¿ ã                   óØ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZmZmZmZmZ ddlZddlZddlZddlmZ ddlZddlmc m Z! ddlm"Z" ddl#m$Z$m%Z% ddlm&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, dd	l-m.Z. dd
l/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?mZ@mAZA ddlBmCZCmDZD ddlEmFZFmGZGmHZHmIZImJZJ ddlKmKZK ddlLmMZM ddlNmOZO ddl>mPZPmQZQmRZRmSZSmTZT ddlUmVZV ddlWmXZX ddlYmZZZm[Z[ ddl\m]Z] ddl^m_Z_m`Z` ddlambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZo ddlmpZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZm€Z€m�Z� ddl‚mƒZƒ ddl„m…Z…m†Z†m‡Z‡mˆZˆ dd l‰mŠZŠ dd!l‹mŒZŒm�Z� dd"lŽm�Z� dd#l�m‘Z‘m’Z’m“Z“m”Z” dd$l•m–Z– erdd%l—m˜Z˜  e�j2                  eš«      Z›e�j8                  �j;                  ešd&«      Zže�j8                  �j;                  ešd'«      ZŸe�j8                  �j;                  ešd(«      Z e�j8                  �j;                  ešd)«      Z¡ ed*¬+«       G d,„ d-«      «       Z¢ G d.„ d/«      Z£ e�jH                  d«      d0„ «       Z¥e G d1„ d2«      «       Z¦d3„ Z§ G d4„ d5e�jP                  �jR                  «      Zª G d6„ d7«      Z«e¬e­e®f   Z¯ G d8„ d9«      Z°d:Z±d;„ Z² e�jf                  «       Z´ G d<„ d=«      Zµ G d>„ d?e"�jl                  «      Z·y)@a¶  
Core graph building functionality for PyTorch's Dynamo system. This module contains
the essential components for constructing and managing FX graphs during compilation:

- OutputGraph: Manages the overall graph construction and compilation process. It owns
  a SubgraphTracer and handles graph compilation, execution, and state management.
  OutputGraph also manages features like graph deduplication, symbolic shape handling,
  and tracking of side effects.

- SubgraphTracer: Handles the actual FX graph construction by tracing Python code.
  It supports advanced features like higher-order operators through nested tracers,
  lifting of free variables, and handling of symbolic shapes.

The module supports key Dynamo features including:
- Higher-order operators through nested SubgraphTracers
- Graph deduplication for optimization
- Symbolic shape handling and propagation
- Side effect tracking and management
- Guard insertion and management
é    N)Ú	dataclass)ÚAnyÚCallableÚcastÚOptionalÚTYPE_CHECKINGÚUnion)Úfx)ÚShortenTracebackÚTensorifyScalarRestartAnalysis)ÚCompileContextÚ	CompileIdÚGlobalContextCheckpointStateÚSourceÚTracingContext)Ú
FakeTensor)Úsignpost_event)Ú_make_graph_module)ÚBackwardState)Úfree_symbolsÚguard_scalarÚis_symbolicÚShapeEnv)Úinsert_deferred_runtime_asserts)Úis_traceable_wrapper_subclassé   )ÚconfigÚexcÚgraph_break_hintsÚloggingÚ	variables)Ú
CompiledFnÚ
CompilerFn)Úcreate_call_functionÚcreate_instructionÚcreate_load_constÚInstructionÚ	unique_id)Úcode_context)Ú	PyCodegen)Úenter_new_scope)ÚBackendCompilerFailedÚ!exceptions_allowed_to_be_fallbackÚ	SkipFrameÚunimplemented_v2Úunimplemented_v2_with_warning)Úapply_graph_deduplication)ÚGraphRegionTracker)ÚGuardBuilderÚinstall_guard)Úis_dynamic_nn_module)ÚAttributeMutationExistingÚSideEffects)Ú
AttrSourceÚBackwardStateSourceÚConstantSourceÚGetItemSourceÚGlobalStateSourceÚis_constant_sourceÚis_from_local_sourceÚLocalSourceÚNumpyTensorSourceÚParamBufferSourceÚShapeEnvSourceÚSyntheticLocalSourceÚTensorPropertyÚTensorPropertySource)Ú_extract_tensor_dictÚcheckpoint_paramsÚCleanupHookÚclone_inputsÚcount_callsÚcountersÚdynamo_timedÚget_instruction_source_311Úget_locals_to_stealÚget_static_address_typeÚget_unique_name_wrtÚgraph_break_reasonsÚincrement_op_countÚlazy_format_graph_codeÚ
LazyStringÚnn_module_proxyÚsameÚset_example_value)ÚVariableTracker)ÚBackwardStateGraphArgÚGraphArgÚTrackedFakeÚwrap_fx_proxy)ÚBaseListVariable)ÚCellVariableÚNullVariable)ÚNNModuleVariable)ÚNumpyNdarrayVariableÚSymNodeVariableÚTensorVariableÚUnspecializedPythonVariable)ÚTensorWithTFOverrideVariable)ÚInstructionTranslatorBaseÚgraphÚ
graph_codeÚgraph_sizesÚ
trace_callT)Úfrozenc                   ó"   — e Zd ZU eed<   eed<   y)ÚVariableTrackerCacheKeyÚvt_idÚsourceN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__r   © ó    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/output_graph.pyrm   rm   ž   s   … àƒJð „Nrv   rm   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚVariableTrackerCachec                 ó   — i | _         y ©N)Úcache©Úselfs    rw   Ú__init__zVariableTrackerCache.__init__¨   s	   € Øˆ�
rv   c                 óh   — t        t        |«      |«      }|| j                  vry | j                  |   S r{   ©rm   Úidr|   )r~   Úvaluero   Úkeys       rw   ÚlookupzVariableTrackerCache.lookup«   s/   € Ü%¤b¨£i°Ó8ˆØ�d—j‘jÑ ØØ�z‰z˜#‰Ðrv   c                 óL   — t        t        |«      |«      }|| j                  |<   y r{   r�   )r~   rƒ   ro   Úvtr„   s        rw   ÚaddzVariableTrackerCache.add±   s   € Ü%¤b¨£i°Ó8ˆØˆ�
‰
�3Šrv   c                 ód   — t        «       }|j                  j                  | j                  «       |S r{   )ry   r|   Úupdate)r~   Ú	new_caches     rw   ÚclonezVariableTrackerCache.cloneµ   s&   € ä(Ó*ˆ	Ø�‰×Ñ˜tŸz™zÔ*ØÐrv   c                 ó8   — | j                   j                  «        y r{   )r|   Úclearr}   s    rw   rŽ   zVariableTrackerCache.clear»   s   € Ø�
‰
×ÑÕrv   N)rp   rq   rr   r   r…   rˆ   rŒ   rŽ   ru   rv   rw   ry   ry   §   s   „ òòòòórv   ry   c                  ó4   — t        j                  t        «      S r{   )Útorchdynamo_loggingÚget_step_loggerÚlogru   rv   rw   Ú_step_loggerr“   ¿   s   € ä×.Ñ.¬sÓ3Ð3rv   c                   óT   — e Zd ZU dZeed<   eej                     ed<   dZ	e
ed<   d„ Zy)ÚGraphCompileReasonzOStores why a given output graph was compiled; i.e. what caused the graph break.ÚreasonÚ
user_stackTÚgraph_breakc                 óH   — | j                   rt        j                  | «       y y r{   )r˜   rQ   Úappendr}   s    rw   Ú__post_init__z GraphCompileReason.__post_init__Î   s   € Ø×ÒÜ×&Ñ& tÕ,ð rv   N)rp   rq   rr   Ú__doc__Ústrrt   ÚlistÚ	tracebackÚFrameSummaryr˜   Úboolr›   ru   rv   rw   r•   r•   Ä   s,   … áYàƒKØ�Y×+Ñ+Ñ,Ó,ð €K�Óó-rv   r•   c                 ó   ‡ — ˆ fd„}|S )Nc            
      óN   •— ‰D � ��cg c]  \  } }} | |i |¤Ž‘Œ c}}} S c c}}} w r{   ru   )ÚfnÚargsÚkwargsÚrandom_callss      €rw   Ú_gen_rand_valuesz1_get_gen_rand_values_fn.<locals>._gen_rand_valuesÔ   s+   ø€ Ø<H×IÐIÑ(8¨¨D°&‘�DÐ#˜FÓ#ÔIÐIùÔIs   ˆ ru   )r§   r¨   s   ` rw   Ú_get_gen_rand_values_fnr©   Ó   s   ø€ ôJð Ðrv   c                   óf   ‡ — e Zd ZdZdeeej                  j                  f   fˆ fd„Z	defd„Z
ˆ xZS )ÚFakeRootModulez'Trick the constructor of fx.GraphModuleÚ
nn_modulesc                 ól   •— t         ‰| �  «        |j                  «       D ]  \  }}t        | ||«       Œ y r{   )Úsuperr   ÚitemsÚsetattr)r~   r¬   ÚkÚvÚ	__class__s       €rw   r   zFakeRootModule.__init__Ý   s6   ø€ Ü‰ÑÔØ×$Ñ$Ó&ò 	 ‰DˆAˆqÜ�D˜!˜QÕñ	 rv   Úreturnc                  ó   — y)NzFakeRootModule(...)ru   r}   s    rw   Ú__repr__zFakeRootModule.__repr__â   s   € Ø$rv   )rp   rq   rr   rœ   Údictr�   ÚtorchÚnnÚModuler   r¶   Ú__classcell__©r³   s   @rw   r«   r«   Ú   s0   ø„ Ù1ð  4¨¨U¯X©X¯_©_Ð(<Ñ#=õ  ð
%˜#÷ %rv   r«   c                   ój   — e Zd Zdefd„Zdej                  j                  deej                     fd„Z
y)ÚWrapperBackendÚbackendc                 ó   — || _         y r{   )r¿   )r~   r¿   s     rw   r   zWrapperBackend.__init__ç   s	   € Ø#*ˆ�rv   ÚgmÚexample_inputsc                 ó®  — t        |«      | _        || _        t        j                  | j                  «      }| j                  ||«      | _        | j                  �"| j                  | j                  j                  u r| j                  j                  S t        j                  s| j                  S 	  | j                  j                  t        |«      Ž } | j                  t        |«      Ž }t        ||«      r| j                  | j                  «        S t        d| › �«      ‚# t        $ r t        j                  d«       ‚ w xY w# | j                  «        w xY w)Nzincorrect results of backend zerror in verify_correctness)rG   ÚrestorerÁ   ÚcopyÚdeepcopyr¿   Ú	candidateÚforwardr   Úverify_correctnessrI   rV   ÚRuntimeErrorÚ	Exceptionr’   Ú	exception)r~   rÁ   rÂ   Úcopy_gmÚcorrectÚresults         rw   Ú__call__zWrapperBackend.__call__ê   s
  € Ü(¨Ó,ˆŒØˆŒÜ—-‘- §¡Ó(ˆØŸ™ g¨~Ó>ˆŒà�>‰>Ð! T§^¡^°t·w±w·±Ñ%FØ—7‘7—?‘?Ð"ä×(Ò(Ø—>‘>Ð!ð	Ø%�d—g‘g—o‘o¤|°NÓ'CÐDˆGØ#�T—^‘^¤\°.Ó%AÐBˆFô �G˜VÔ$Ø—~‘~ð �L‰L�Nô Ð!>¸t¸fÐEÓFÐFøô ò 	Ü�M‰MÐ7Ô8Øð	ûð �L‰L�Nús   Â/AD ÄD Ä D?Ä?E ÅEN)rp   rq   rr   r#   r   r¸   r
   ÚGraphModulerž   ÚTensorrÐ   ru   rv   rw   r¾   r¾   æ   s4   „ ð+ 
ó +ð˜5Ÿ8™8×/Ñ/ð ÀÀeÇlÁlÑASô rv   r¾   c            
       ó®  ‡ — e Zd ZU dZeed<   deeef   de	e
   dededef
ˆ fd„Zd	„ ZdVd
efd„Zd„ Zd„ Zd„ Zdeg ef   fd„Zd„ Zed„ «       Zed„ «       Zd„ Zed„ «       Zej8                  d„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Z d„ Z!d„ Z"e#jH                  d„ «       Z%ed„ «       Z&ed„ «       Z'ed „ «       Z(ed!e)jT                  jV                  fd"„«       Z,ed!eeef   fd#„«       Z-dWd%„Z.d&„ Z/d'„ Z0ed(„ «       Z1d)„ Z2d*„ Z3d+„ Z4dXd,„Z5d-„ Z6e7d.„ «       Z8d/ed0ed!e9jt                  fd1„Z;d2e<e)jz                  j|                  e)j~                  ef   fd3„Z@d4„ ZA	 dYd5e	eB   fd6„ZCd7„ ZDd8„ ZEd9„ ZFd:efd;„ZGe#jH                  d<„ «       ZHd=„ ZId>„ ZJed!eKe9j˜                     fd?„«       ZMed!eKeN   fd@„«       ZOdAe9j                   d!eQfdB„ZRdAe9j                   d!eQfdC„ZSdD„ ZTdE„ ZUd!eKe)j~                     fdF„ZVdZdG„ZWdZdH„ZXdZdI„ZYdJeKeZ   d!d$fdK„Z[dZdL„Z\d!efdM„Z]d!efdN„Z^dZdO„Z_dPed!d$fdQ„Z`dRee9j                   gd$f   d!d$fdS„ZadTe)jr                  j˜                  fdU„Zbˆ xZcS )[ÚOutputGrapha  
    Wrapper class to hold outputs of InstructionTranslator.  Mainly the
    generated fx.Graph.

    OutputGraph is 1:1 with a frame being processed. Each frame is associated
    with some root InstructionTranslator. When user code calls a function,
    we construct a InliningInstructionTranslator that continues to write into
    the root InstructionTranslator's OutputGraph.
    Úside_effectsÚcode_optionsÚcompiler_fnÚexportÚlocal_scopeÚglobal_scopec                 ó–  •— t         ‰| �  «        t        | |¬«      g| _        i | _        || _        || _        || _        i | _        g | _	        t        t        «      | _        t        «       | _        |	j                  |	j                   |	j"                  dœ| _        t'        «       | _        g | _        t-        | j*                  t.        j0                  t.        j2                  t.        j4                  t.        j6                  | j$                  ¬«      }dd lmc m} |j=                  d¬«      5  t>        j@                  jC                  || j
                  rdnd| j
                  ¬«      }d d d «       tE        «      | _#        tI        jJ                  «       | _&        | jO                  «        tQ        jR                  tT        «      | _+        i | _,        t[        | «      | _.        t_        «       | _0        tc        jd                  «       | _3        ti        |«      | _5        g | _6        d| _7        g | _8        || _9        || _:        || _;        || _<        i | _=        g | _>        g | _?        d| _@        i | _A        t>        j„                  j‡                  «       | _D        t>        j„                  j‹                  «       | _F        |
| _G        d| _H        t        i «      | _I        t        i «      | _J        | j—                  «        i | _L        g | _M        d | _N        g | _O        i | _P        d | _Q        d | _R        | j§                  «       | _T        t        «       | _U        y # 1 sw Y   �ŒÞxY w)	N)Ú	is_export)Úco_nameÚco_filenameÚco_firstlineno)Útracked_fakesÚallow_scalar_outputsÚallow_dynamic_output_shape_opsÚ+prefer_deferred_runtime_asserts_over_guardsÚ'allow_complex_guards_as_runtime_assertsÚ	co_fieldsr   F©Ú(fake_tensor_allow_unsafe_data_ptr_accessT)Ú	shape_envÚallow_non_fake_inputsrØ   )Vr®   r   ÚSubgraphTracerÚtracersÚinput_source_to_varrØ   Úexport_constraintsÚframe_stateÚinput_source_to_sizes_stridesÚcleanup_hooksÚnextÚ_compile_id_counterÚ
compile_idÚsetÚinstalled_globalsrÝ   rÞ   rß   rå   r2   Úregion_trackerrà   r   r   Úcapture_scalar_outputsÚ capture_dynamic_output_shape_opsrã   rä   Útorch._functorch.configÚ
_functorchÚpatchr¸   Ú_subclassesÚFakeTensorModer   Útracing_contextr   Úcurrent_compile_idÚdynamo_compile_idÚinit_ambient_guardsÚcollectionsÚdefaultdictrž   Útracked_fakes_id_to_sourceÚparam_name_to_sourcer7   rÕ   ry   Úvariable_tracker_cacheÚ	itertoolsÚcountÚunique_var_idr·   rÖ   Úoutput_instructionsÚ	timestampÚregister_finalizer_fnsr×   rÚ   rÙ   Úroot_txÚsource_to_user_stacksÚ_current_txÚcleanupsÚshould_exitÚunspec_variable_mapÚ_CÚ_is_torch_function_enabledÚtorch_function_enabledÚ_is_torch_function_mode_enabledÚtorch_function_mode_enabledÚtorch_function_mode_stackÚ!has_user_defined_allowed_in_graphÚnon_compliant_opsÚcompliant_custom_opsÚsave_global_stateÚ dynamo_flat_name_to_original_fqnr§   Úrandom_values_varÚpregraph_bytecodeÚbackward_stateÚbackward_state_proxyÚbackward_state_varÚ!install_builtins_dict_in_fglobalsÚ%name_of_builtins_dict_key_in_fglobalsÚguard_on_key_order)r~   rÖ   r×   r  rØ   rí   rî   rÙ   rÚ   Úf_coder  rè   Ú_configÚ	fake_moder³   s                 €rw   r   zOutputGraph.__init__  s
  ø€ ô 	‰ÑÔÜ& t°vÔ>Ð?ˆŒð CEˆÔ ØˆŒØ"4ˆÔØ&ˆÔàKMˆÔ*Ø68ˆÔä#Ô$7Ó8ˆŒä+.«5ˆÔð
 —~‘~Ø!×-Ñ-Ø$×3Ñ3ñ
ˆŒô 1Ó2ˆÔð 13ˆÔäð ×,Ñ,Ü!'×!>Ñ!>Ü+1×+RÑ+RÜ8>×8jÑ8jÜ4:×4bÑ4bØ—n‘nô
ˆ	÷$ 	2Ð1à�]‰]ÀEˆ]ÓJñ 	Ü×)Ñ)×8Ñ8Ø#à.2¯kªk¡d¸uØ—{‘{ð	 9ó ˆI÷	ô 0>¸iÓ/HˆÔä×-Ñ-Ó/ð 	Ôð 	× Ñ Ô"ô ×#Ñ#¤DÓ)ð 	Ô'ð BDˆÔ!Ü'¨Ó-ˆÔô ';Ó&<ˆÔ#Ü&Ÿ_™_Ó.ˆÔÜ  Ó.ˆÔØ68ˆÔ ð ˆŒð OQˆÔ#ð 2=ˆÔØ(ˆÔØ&ˆÔØˆŒð RTˆÔ"à<>ˆÔØ+-ˆŒØ ˆÔØKMˆÔ ô ',§h¡h×&IÑ&IÓ&KˆÔ#ä+0¯8©8×+SÑ+SÓ+UˆÔ(à)BˆÔ&ð 27ˆÔ.ô >AÀ»WˆÔô ADÀBÃˆÔ!ð 	×ÑÔ ð ACˆÔ-ð ð 	Ôð "&ˆÔð 57ˆÔð ;=ˆÔØ>BˆÔ!Ø15ˆÔð ×2Ñ2Ó4ð 	Ô2ô -0«EˆÕ÷e	ñ 	ús   Ä';L>Ì>Mc                 ó|   — | j                   d   }t        |t        «      s|j                  }| j	                  d|«      S )NÚ__builtins__Ú__builtins_dict__)rÚ   Ú
isinstancer·   Ú__dict__Úinstall_global)r~   Ú
f_builtinss     rw   r#  z-OutputGraph.install_builtins_dict_in_fglobalsÏ  s=   € ð ×&Ñ& ~Ñ6ˆ
Ü˜*¤dÔ+Ø#×,Ñ,ˆJØ×"Ñ"Ð#6¸
ÓCÐCrv   Úhookc                 ó–   — |› t        | j                  «      › �}|| j                  vsJ ‚|| j                  |<   || j                  «       fS r{   )Úlenr   Úget_backward_state_proxy)r~   r0  ÚprefixÚnames       rw   Úadd_backward_state_hookz#OutputGraph.add_backward_state_hookâ  sT   € Ø�œ#˜d×1Ñ1Ó2Ð3Ð4ˆØ˜4×.Ñ.Ñ.Ð.Ð.Ø$(ˆ×Ñ˜DÑ!Ø�T×2Ñ2Ó4Ð4Ð4rv   c                 óf  — | j                   €š| j                  rt        dddg ¬«       t        «       }| j                  j                  dt        |«      |t        «       ¬«      | _         t        «       | j                   j                  j                  d<   | j                  «       | _        | j                   S )Nz&backward_state does not support exportÚ z3Compiled autograd doesn't work with `torch.export`.©Úgb_typeÚcontextÚexplanationÚhintsÚdynamo_backward_state©ro   Úgrapharg)r!  rØ   r/   r   Úroot_tracerÚcreate_graph_inputÚtyper9   rY   ÚnodeÚmetaÚnew_varr"  )r~   Úexample_values     rw   r3  z$OutputGraph.get_backward_state_proxyè  s¡   € Ø×$Ñ$Ð,Ø�{Š{Ü ØDØØ UØõ	ô *›OˆMØ(,×(8Ñ(8×(KÑ(KØ'Ü�]Ó#ØÜ*Ó,ð	 )Ló )ˆDÔ%ô ?TÓ>UˆD×%Ñ%×*Ñ*×/Ñ/°
Ñ;Ø&*§l¡l£nˆDÔ#Ø×(Ñ(Ð(rv   c                 óZ  — | j                   j                  t        «       j                  t        j
                  «      «       | j                   j                  t        «       j                  t        j                  «      «       | j                   j                  t        «       j                  t        j                  «      «       | j                   j                  t        «       j                  t        j                  «      «       | j                   j                  t        «       j                  t        j                  «      «       t        j                  j                  j                  «       }|�A| j                   j                  t        «       j                  t        j                  «      «       y y r{   )Úguardsrˆ   rB   Ú
make_guardr3   Ú	SHAPE_ENVr<   ÚDETERMINISTIC_ALGORITHMSÚ	GRAD_MODEÚDEFAULT_DEVICEÚTORCH_FUNCTION_STATEr¸   r  rú   Úpeek_interpreter_stackÚFUNCTORCH_STACK_MATCH)r~   Úcis     rw   r  zOutputGraph.init_ambient_guardsý  s  € ð 	�‰�‰œÓ(×3Ñ3´L×4JÑ4JÓKÔLà�‰�‰ÜÓ×*Ñ*¬<×+PÑ+PÓQô	
ð 	�‰�‰Ô)Ó+×6Ñ6´|×7MÑ7MÓNÔOà�‰�‰Ô)Ó+×6Ñ6´|×7RÑ7RÓSÔTà�‰�‰ÜÓ×*Ñ*¬<×+LÑ+LÓMô	
ô �X‰X× Ñ ×7Ñ7Ó9ˆØˆ>Ø�K‰K�O‰OÜ!Ó#×.Ñ.¬|×/QÑ/QÓRõð rv   c                 ó^  ‡‡—  ‰|Ž }| j                  «       }t        | j                  «      Š‰j                  ˆˆfd„«       ‰j	                  t        t        j                  j                  |«      «       ‰j                  t        |«      d«       ‰j                  |«       | j                  j                  ‰j                  «       «       t        |«      }t!        j"                  | j                  ||«      }t%        j&                  «       j(                  j*                  j-                  |«       |S )z]
        call fn(*args) before the graph runs and turn the result into a fake input.
        c                  óP   •— ‰ j                  ‰j                  ‰j                  «      S r{   )Úload_import_fromrq   rp   )Úcgr¤   s   €€rw   ú<lambda>z3OutputGraph.synthetic_graph_input.<locals>.<lambda>  s    ø€ �B×'Ñ'Ø—‘Ø—‘ó€ rv   F)rF  r*   r  Úadd_push_nullÚforeachÚmapr!   ÚConstantVariableÚcreateÚcall_functionr2  Ústorer  ÚextendÚget_instructionsrC   rX   Úbuildr   ÚgetÚguards_contextÚdynamo_guardsÚremove_guards_with_source)r~   r¤   r¥   rG  Úvarnamero   rÏ   rV  s    `     @rw   Úsynthetic_graph_inputz!OutputGraph.synthetic_graph_input  sç   ù€ ñ ˜D˜	ˆØ—,‘,“.ˆÜ�t—|‘|Ó$ˆØ
×Ñôô	
ð 	�
‰
”3”y×1Ñ1×8Ñ8¸$Ó?Ô@Ø
×Ñœ˜T› EÔ*Ø
�‰�ÔØ×Ñ×%Ñ% b×&9Ñ&9Ó&;Ô<Ü% gÓ.ˆÜ ×&Ñ& t§|¡|°]ÀFÓKˆÜ×ÑÓ×+Ñ+×9Ñ9×SÑSØô	
ð ˆrv   r¤   c                 ó:   — | j                   j                  |«       y r{   )rð   rš   )r~   r¤   s     rw   Úadd_cleanup_hookzOutputGraph.add_cleanup_hook,  s   € Ø×Ñ×!Ñ! "Õ%rv   c                 óz   — t        | j                  «      D ]	  } |«        Œ | j                  j                  «        y r{   )Úreversedrð   rŽ   )r~   r0  s     rw   Úcall_cleanup_hookszOutputGraph.call_cleanup_hooks/  s3   € Ü˜T×/Ñ/Ó0ò 	ˆDÙ�Fð	à×Ñ× Ñ Õ"rv   c                 ó    — | j                   d   S ©Nr   ©rë   r}   s    rw   rA  zOutputGraph.root_tracer4  s   € à�|‰|˜A‰Ðrv   c                 ó    — | j                   d   S ©Néÿÿÿÿro  r}   s    rw   Úcurrent_tracerzOutputGraph.current_tracer8  s   € à�|‰|˜BÑÐrv   c                 ó2   — t        | j                  «      dk(  S )Nr   )r2  rë   r}   s    rw   Úis_root_tracerzOutputGraph.is_root_tracer<  s   € ä�4—<‘<Ó  AÑ%Ð%rv   c                 ó.   — | j                   j                  S r{   ©rs  rg   r}   s    rw   rg   zOutputGraph.graph@  s   € à×"Ñ"×(Ñ(Ð(rv   c                 ó&   — || j                   _        y r{   rw  )r~   rƒ   s     rw   rg   zOutputGraph.graphE  s   € à$)ˆ×ÑÕ!rv   c                 ó.   — | j                   j                  S r{   )rs  Úinput_name_to_proxyr}   s    rw   rz  zOutputGraph.input_name_to_proxyI  s   € à×"Ñ"×6Ñ6Ð6rv   c                 ó.   — | j                   j                  S r{   )rs  Úreal_value_cacher}   s    rw   r|  zOutputGraph.real_value_cacheM  s   € à×"Ñ"×3Ñ3Ð3rv   c                 ó.   — | j                   j                  S r{   )rs  Úbound_symbolsr}   s    rw   r~  zOutputGraph.bound_symbolsQ  s   € à×"Ñ"×0Ñ0Ð0rv   c                 ó:   —  | j                   j                  |i |¤ŽS r{   )rs  Úcreate_proxy©r~   r¥   r¦   s      rw   r€  zOutputGraph.create_proxy[  s    € Ø/ˆt×"Ñ"×/Ñ/°Ð@¸Ñ@Ð@rv   c                 ó:   —  | j                   j                  |i |¤ŽS r{   )rs  Úcreate_noder�  s      rw   rƒ  zOutputGraph.create_node^  ó    € Ø.ˆt×"Ñ"×.Ñ.°Ð?¸Ñ?Ð?rv   c                 ó:   —  | j                   j                  |i |¤ŽS r{   )rs  Úremove_noder�  s      rw   r†  zOutputGraph.remove_nodea  r„  rv   c              #   óØ  K  — t        «       }	 |r|j                  | j                  u sJ ‚|j                  «        |r|n,t	        | | j                  || j                  j
                  ¬«      }| j                  j                  |«       |–— |j                  d d d «       | j                  j                  «        y # |j                  d d d «       | j                  j                  «        w xY w­w)N)ÚparentÚsource_targetrÜ   )
r+   rˆ  rs  Ú	__enter__rê   rÜ   rë   rš   Ú__exit__Úpop)r~   r‰  Úprior_tracerÚnew_scope_ctxÚtracers        rw   Ú	subtracerzOutputGraph.subtracerd  sÑ   è ø€ ä'Ó)ˆð	Ùà#×*Ñ*¨d×.AÑ.AÑAÐAÐAØ×#Ñ#Ô%ñ  ñ ä#ØØ×.Ñ.Ø"/Ø"×1Ñ1×;Ñ;ô	ð ð �L‰L×Ñ Ô'ØŠLà×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕøð ×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕüs   ‚C*ŽA<B8 Â
.C*Â8/C'Ã'C*c                 ó   — | S r{   ru   r}   s    rw   ÚoutputzOutputGraph.output|  s   € àˆrv   c                 ó.   — | j                   j                  S r{   )rþ   r(  r}   s    rw   r(  zOutputGraph.fake_mode€  s   € à×#Ñ#×-Ñ-Ð-rv   c                 óB   — | j                   j                  j                  S r{   )rþ   r(  rè   r}   s    rw   rè   zOutputGraph.shape_env„  s   € à×#Ñ#×-Ñ-×7Ñ7Ð7rv   r´   c                 óB   — | j                   j                  j                  S r{   )rþ   rc  rd  r}   s    rw   rI  zOutputGraph.guardsˆ  s   € à×#Ñ#×2Ñ2×@Ñ@Ð@rv   c                 óB   — | j                   j                  j                  S r{   )rþ   Úmodule_contextr¬   r}   s    rw   r¬   zOutputGraph.nn_modulesŒ  s   € à×#Ñ#×2Ñ2×=Ñ=Ð=rv   Nc                 ó`  — t        t        t        t        t        dt
        f   t        f   f   |�|n| j                  j                  j                  «      }| j                  | j                  f|d<   t        j                  t        j                  «       f|d<   t        j                   t        j"                  d«      t        j$                  d«      f|d<   t        j                   t        j"                  d«      t        j$                  d«      f|d<   t        j                   t        j&                  d«      t        j(                  d«      f|d	<   t        j                   t        j&                  d«      t        j(                  d«      f|d
<   t        j*                  t        j,                  «       f|d<   y)zc
        Saves to out if it is provided. Else saves to the tracing context's global_state.
        .Nr  Úgrad_enabledÚcudaÚautocast_enabledÚcpuÚautocast_cpu_enabledÚautocast_gpu_dtypeÚautocast_cpu_dtypeÚautocast_cache_enabled)r   r·   r�   Útupler   r   r¡   rþ   Úglobal_contextÚglobal_stateÚset_torch_function_stater  r¸   Úset_grad_enabledÚis_grad_enabledÚ	functoolsÚpartialÚset_autocast_enabledÚis_autocast_enabledÚset_autocast_dtypeÚget_autocast_dtypeÚset_autocast_cache_enabledÚis_autocast_cache_enabled)r~   Úoutr£  s      rw   r  zOutputGraph.save_global_state�  s€  € ô Ü””eœH S¬# XÑ.´Ð4Ñ5Ð5Ñ6ð �?ñ à×)Ñ)×8Ñ8×EÑEó
ˆð  ×)Ñ)Ø×'Ñ'ð2
ˆÐ-Ñ.ô ).×(>Ñ(>Ä×@UÑ@UÓ@WÐ'Xˆ�^Ñ$ô ×Ñœe×8Ñ8¸&ÓAÜ×%Ñ% fÓ-ð,
ˆÐ'Ñ(ô
 ×Ñœe×8Ñ8¸%Ó@Ü×%Ñ% eÓ,ð0
ˆÐ+Ñ,ô
 ×Ñœe×6Ñ6¸Ó?Ü×$Ñ$ VÓ,ð.
ˆÐ)Ñ*ô
 ×Ñœe×6Ñ6¸Ó>Ü×$Ñ$ UÓ+ð.
ˆÐ)Ñ*ô
 ×,Ñ,Ü×+Ñ+Ó-ð2
ˆÐ-Ò.rv   c                 ó:   — | j                   j                  |«       y r{   )r  rš   )r~   Útxs     rw   Úpush_txzOutputGraph.push_tx¾  s   € Ø×Ñ×Ñ Õ#rv   c                 ó6   — | j                   j                  «       S r{   )r  rŒ  r}   s    rw   Úpop_txzOutputGraph.pop_txÁ  s   € Ø×Ñ×#Ñ#Ó%Ð%rv   c                 óP   — | j                   s| j                  S | j                   d   S rq  )r  r  r}   s    rw   Ú
current_txzOutputGraph.current_txÄ  s$   € à#'×#3Ò#3ˆt�|‰|ÐM¸×9IÑ9IÈ"Ñ9MÐMrv   c                 ó,   — t        | j                  «      S r{   )rJ   rg   r}   s    rw   rJ   zOutputGraph.count_callsÈ  s   € Ü˜4Ÿ:™:Ó&Ð&rv   c                 óX   — t        t        | j                  j                  «      «      dk(  S rn  )r2  rž   rg   Únodesr}   s    rw   Úis_empty_graphzOutputGraph.is_empty_graphË  s!   € Ü”4˜Ÿ
™
×(Ñ(Ó)Ó*¨aÑ/Ð/rv   c                 ó–   — |sJ ‚| j                   }|j                  d«      D ]$  }t        |t        «      r||   }Œt	        ||«      }Œ& |S ©Nú.)r¬   Úsplitr,  r·   Úgetattr)r~   ÚkeysÚobjr±   s       rw   Úget_submodulezOutputGraph.get_submoduleÎ  sN   € ÙˆˆtØBFÇ/Á/ˆØ—‘˜C“ò 	&ˆAÜ˜#œtÔ$Ø˜!‘f‘ä˜c 1“o‘ð		&ð
 ˆ
rv   c                 ó¦   — t        | j                  d   «      }	 |› dt        | j                  «      › �}||vr| j                  dxx   |fz  cc<   |S Œ9)NÚco_varnamesÚ_)rô   rÖ   rñ   r	  )r~   r5  ÚexistingÚvars       rw   rF  zOutputGraph.new_varØ  s`   € Ü�t×(Ñ(¨Ñ7Ó8ˆàØ�F˜!œD ×!3Ñ!3Ó4Ð5Ð6ˆCØ˜(Ñ"Ø×!Ñ! -Ó0°S°FÑ:Ó0Ø�
ð	 rv   c                 óX   — || j                   d   vr| j                   dxx   |fz  cc<   yy)z/Ensure self.code_options.co_names contains nameÚco_namesN)rÖ   )r~   r5  s     rw   Úupdate_co_nameszOutputGraph.update_co_namesá  s2   € à�t×(Ñ(¨Ñ4Ñ4Ø×Ñ˜jÓ)¨d¨WÑ4Ô)ð 5rv   c                  ó  — dj                  t        t        | «      «      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|r|d   j                  «       sd|z   }|S )	NrÅ  z^[GL]\['?(.*?)'?\]$z\1z	\[(\d+)\]z_\g<1>z[^a-zA-Z0-9]r   Úsub)ÚjoinrZ  r�   ÚrerÌ  Úisalpha)Únamesr5  s     rw   Úmodule_key_namezOutputGraph.module_key_nameæ  sm   € ð �x‰xœœC ›Ó(ˆä�v‰vÐ,¨e°TÓ:ˆä�v‰v�l I¨tÓ4ˆä�v‰v�o s¨DÓ1ˆá˜4 ™7Ÿ?™?Ô,Ø˜4‘<ˆDàˆrv   Úattr_prefixÚ
attr_valuec                 ó¤   — t        || j                  «      }|| j                  |<   | j                  d|di «      }t        |j                  |«       |S )NÚget_attrru   )rP   r¬   r€  rW   rD  )r~   rÒ  rÓ  Ú	attr_nameÚproxys        rw   Ú%register_static_attr_and_return_proxyz1OutputGraph.register_static_attr_and_return_proxyö  sM   € ô (¨°T·_±_ÓEˆ	ð &0ˆ�‰˜	Ñ"Ø×!Ñ! *¨i¸¸RÓ@ˆÜ˜%Ÿ*™* jÔ1Øˆrv   Útargetc                 óæ  ‡ ‡‡‡
‡‡— t        ‰‰ j                  j                  «      r!t        j                  ‰ j
                  ‰fi ‰¤ŽS t        ‰«      Šd‰v sJ ‚‰d   Št        ‰t        «      rJ ‚t        ‰t        j                  «      r2‰ j                  Š‰ j                  «       s‰ j                  Šˆˆ ˆˆˆfd„}nºt        ‰t        j                  j                  «      r^t        ‰t        j                  j                  «      sJ ‚‰r/t!        ‰j#                  t$        j&                  «      «       ˆˆfd„}n?ˆˆfd„}n8t        ‰t        j(                  t        j*                  f«      rˆˆ ˆfd„}nˆ ˆfd„}‰ j,                  j/                  «       D ]  \  }}|‰u sŒ ||«      c S  t1        j2                  |Ž Š
t5        ‰
‰ j,                  ‰ j6                  «      Š
‰‰ j,                  ‰
<   t        ‰t        j                  j                  «      r_ˆ
ˆ ˆfd„}t9        ‰d«      r ‰j;                  «       D ]  \  }}	 ||«       Œ t9        ‰d	«      r ‰j=                  «       D ]  \  }}	 ||«       Œ  |‰
«      S )
Nro   c           	      ó  •— ‰j                   €J ‚‰‰j                   | <   ‰‰j                  j                  j                  v r#‰j                  j                  j                  ‰   S t	        ‰«      dk(  r9t        ‰t        «      s)t        ‰j                  t        j                  «      «       n3t        ‰«      s(t        ‰j                  t        j                  «      «       t        ‰j                  ‰j                  d| di «      fd‰i‰¤Ž}‰j                  j                  j                  j                  ‰|«      }d|j                   j"                  j$                  vsJ ‚t'        ‰«      |j                   j"                  j$                  d<   |S )NÚguardedrÕ  ru   rG  Útensor_dict)r  r  r’  rÕ   rO   r,  r@   r4   rJ  r3   ÚID_MATCHr=   ÚTENSOR_MATCHr\   r€  Útrack_object_existingr×  rD  rE  rF   )Ú
module_keyr‡   Úoptionsr~   ro   rÙ  r�  s     €€€€€rw   Ú	wrap_namez6OutputGraph.register_attr_or_module.<locals>.wrap_name!  sM  ø€ Ø×0Ñ0Ð<Ð<Ð<Ø8>�×)Ñ)¨*Ñ5ð ˜TŸ\™\×0Ñ0×=Ñ=Ñ=ØŸ<™<×.Ñ.×;Ñ;¸FÑCÐCä*¨6Ó2°iÒ?Ì
ØÔ-ôIô " &×"3Ñ"3´L×4IÑ4IÓ"JÕKÜ+¨FÔ3Ü! &×"3Ñ"3´L×4MÑ4MÓ"NÔOä"Ø—L‘LØ×'Ñ'¨
°JÀÀBÓGñð #)ðð ñ	�ð —\‘\×(Ñ(×5Ñ5×KÑKÈFÐTVÓW�à$¨B¯H©H¯M©M×,>Ñ,>Ñ>Ð>Ð>Ü4HÈÓ4P�—‘—‘×"Ñ" =Ñ1à�	rv   c                 ó2   •— t        t        ‰«      | ‰fi ‰¤ŽS r{   )r`   rC  ©rá  râ  rÙ  s    €€rw   rã  z6OutputGraph.register_attr_or_module.<locals>.wrap_nameG  s   ø€ Ü+¬D°«L¸*ÀfÑXÐPWÑXÐXrv   c                 ó0   •— t        j                  ‰fi ‰¤ŽS r{   )r!   ÚUnspecializedNNModuleVariablerå  s    €€rw   rã  z6OutputGraph.register_attr_or_module.<locals>.wrap_nameO  s   ø€ Ü$×BÑBÀ6ÑUÈWÑUÐUrv   c           	      óZ   •— t        j                  ‰‰j                  d| di «      fd‰i‰¤ŽS )NrÕ  ru   Úsym_num)rb   r\  r€  )rá  râ  r~   rÙ  s    €€€rw   rã  z6OutputGraph.register_attr_or_module.<locals>.wrap_nameZ  sA   ø€ Ü&×-Ñ-ØØ×%Ñ% j°*¸bÀ"ÓEñð #ðð ñ	ð rv   c                 óš   •— ‰j                   j                  | «       ‰‰j                  | <   t        j                  ‰‰t        | ¬«      «      S )N)Úsource_name)r’  rÊ  rÚ   rX   ra  r:   )rá  r~   rÙ  s    €€rw   rã  z6OutputGraph.register_attr_or_module.<locals>.wrap_namee  sD   ø€ Ø—‘×+Ñ+¨JÔ7Ø06�×!Ñ! *Ñ-Ü&×,Ñ,Ø˜&¤.¸ZÔ"Hóð rv   c                 óè   •— ‰j                   €J ‚t        ‰| «      }‰› d| › �}|‰j                   |<   t        ‰t        «      r1| ‰j                  t
        j                  |j                  «       «      <   y y r¼  )r  rA   r,  r?   r  rÔ   rÑ  r5  )Ú	leaf_nameÚ
new_sourceÚnew_namer5  r~   ro   s      €€€rw   Úregister_leaf_namez?OutputGraph.register_attr_or_module.<locals>.register_leaf_namev  sz   ø€ Ø×0Ñ0Ð<Ð<Ð<Ü.¨v°yÓA�
Ø"˜V 1 Y KÐ0�Ø6@�×)Ñ)¨(Ñ3Ü˜f¤kÔ2ð "ð ×9Ñ9Ü#×3Ñ3°J·O±OÓ4EÓFòð 3rv   Ú_parametersÚ_buffers)r5   r  rØ   rX   ra  r¶  r·   r,  rA   r¸   rÒ   rs  ru  rA  r¹   rº   r4   rJ  r3   Ú	NN_MODULEÚSymIntÚSymFloatr¬   r¯   rÔ   rÑ  rP   rÚ   ÚhasattrÚnamed_parametersÚnamed_buffers)r~   rÙ  rÐ  râ  rã  r±   r²   rð  rí  rÅ  r5  ro   r�  s   `` `      @@@rw   Úregister_attr_or_modulez#OutputGraph.register_attr_or_module  s	  ý€ ô   ¨¯©×(;Ñ(;Ô<ô #×(Ñ(¨¯©¸&ÑLÀGÑLÐLä�w“-ˆØ˜7Ñ"Ð"Ð"Ø˜Ñ"ˆÜ˜fÔ&7Ô8Ð8Ð8ä�fœeŸl™lÔ+Ø×(Ñ(ˆFØ×&Ñ&Ô(ð ×)Ñ)�÷ñ ô@ ˜¤§¡§¡Ô0Ü˜f¤e§h¡h§o¡oÔ6Ð6Ð6áÜ˜f×/Ñ/´×0FÑ0FÓGÔHöYöVô ˜¤§¡¬u¯~©~Ð >Ô?÷õð —O‘O×)Ñ)Ó+ò 	$‰DˆAˆqØ�FŠ{á  “|Ò#ð	$ô
 ×*Ñ*¨EÐ2ˆÜ" 4¨¯©¸$×:KÑ:KÓLˆØ &ˆ�‰˜ÑÜ�fœeŸh™hŸo™oÔ.ö"ô �v˜}Ô-Ø$*×$;Ñ$;Ó$=ò 2‘L�I˜qÙ& yÕ1ð2ä�v˜zÔ*Ø$*×$8Ñ$8Ó$:ò 2‘L�I˜qÙ& yÕ1ð2ñ ˜‹Ðrv   c                 ó®  — | j                   j                  d«      }t        |«      }|sg i fS g }i }g |j                  ¢|j                  j                  «       ¢| j                  j                  j                  «       ¢}|�r |j                  «       }t        |t        «      r,t        |j                  t        «      sJ ‚||j                  z  }ŒO|| j                  j                  vst        |j                  t        «      r`t        |j                   t"        «      rFt        |j                   j$                  t&        «      r"|j                   j$                  j(                  |v sŒâ|j                   j$                  j(                  }||vrg ||<   ||   j+                  |«       |r�Œ i }	i }
| j,                  D �]  }t        |j.                  t        «      r2t        |j                   t&        «      r|j                   j(                  |v sŒQ|j                   j(                  }|| j0                  d   v sJ ‚||   D ]ž  }|j                   |
v rŒ|j                   j2                  }||	vrV| j5                  |› d�«      }||	|<   |j7                  t9        d|¬«      t;        |«      t9        d«      t9        d|¬«      g«       |j                   }t'        |	|   «      |
|<   Œ  �Œ" ||
fS )Nr~   rÄ  Ú_refÚ	LOAD_FAST©ÚargvalÚBINARY_SUBSCRÚ
STORE_FAST)rÙ   rb  rN   ÚstackÚsymbolic_localsÚvaluesrÕ   Ústore_attr_mutationsrÀ  rŒ  r,  r]   r¯   rž   Úmutation_typer6   ro   r;   Úbaser?   Ú
local_namerš   Ú	graphargsÚ_examplerÖ   ÚindexrF  r_  r%   r&   )r~   r±  Úmaybe_gmÚstolen_list_namesÚalias_instsÚneeds_aliasÚqueueÚxÚstolen_nameÚvisitedÚoverridden_sourcesÚargÚ	list_nameÚlist_idxÚ
alias_nameÚ
old_sources                   rw   Úhandle_aliases_for_stolen_listsz+OutputGraph.handle_aliases_for_stolen_lists‹  s¢  € à×#Ñ#×'Ñ'¨Ó/ˆÜ/°Ó9ÐÙ Ø�r�6ˆMàˆØ8:ˆð
Ø�X‰Xð
à×Ñ×&Ñ&Ó(ð
ð ×Ñ×3Ñ3×8Ñ8Ó:ð
ˆò Ø—	‘	“ˆAÜ˜!Ô-Ô.Ü! !§'¡'¬4Ô0Ð0Ð0Ø˜Ÿ™Ñ �Øð ˜T×.Ñ.×CÑCÑCÜ! !§/¡/Ô3LÔMä˜qŸx™x¬Ô7Ü˜qŸx™xŸ}™}¬kÔ:Ø—H‘H—M‘M×,Ñ,Ð0AÑAààŸ(™(Ÿ-™-×2Ñ2ˆKØ +Ñ-Ø+-�˜KÑ(Ø˜Ñ$×+Ñ+¨AÔ.ó+ ð. ˆØ35ÐØ—>‘>ó %	PˆCä˜3Ÿ<™<¬Ô.Ü˜sŸz™z¬;Ô7Ø—J‘J×)Ñ)¨[Ñ8àð Ÿ
™
×-Ñ-ˆIØ × 1Ñ 1°-Ñ @Ñ@Ð@Ð@Ø  Ñ+ò P�à—8‘8Ð1Ñ1Øð Ÿ8™8Ÿ>™>�Ø 7Ñ*Ø!%§¡Ø$˜+ TÐ*ó"�Jð )3�G˜HÑ%à×&Ñ&ä.¨{À9ÔMÜ-¨hÓ7Ü.¨Ó?Ü.¨|ÀJÔOð	ôð ŸX™X�
Ü1<¸WÀXÑ=NÓ1OÐ" :Ò.ò5Pð%	PðV Ð.Ð.Ð.rv   r–   c                 ó\  ‡ ‡!— |€J ‚ddl m} |‰ _        |‰ _        d‰ _        t
        j                  d|«       t        d„ |j                  D «       «      st        ddd	g t        j                  ¢¬
«       g Š!t        j                  dk\  r­|j                  D ]ž  }|j                  dk(  r'‰!j!                  t#        d|j$                  ¬«      «       Œ9|j                  dk(  r3‰!j!                  t#        dt'        |j(                  d   «      ¬«      «       Œ{‰!j!                  t+        j*                  |«      «       Œ  ‰ j,                  r‰ j.                  rJ d«       ‚‰!j1                  ‰ j,                  «       ‰ j3                  |«      \  }}‰!j1                  |«       ˆ!ˆ fd„}t5        |j                  «      D ]  }	|	j7                  ||j8                  ¬«       Œ! ‰ j;                  «        |j=                  «        t?        |j@                  «      }
|
D ]  }|jC                  «        Œ ‰ jE                  «       }‰ jF                  jI                  «       D ��ci c]  \  }}|tK        |«      “Œ }}}tM        |«      }g }i }|jN                  jI                  «       D ]À  \  }}tQ        |jR                  tT        «      r|jR                  jV                  |k(  rŒ:tQ        |tX        «      r|jV                  |k(  rŒZt        j                  dk\  rtZ        j]                  t^        |«      rŒˆtZ        j]                  t^        |«      rJ ‚||vrg ||<   ||   j!                  |«       ŒÂ |ja                  «       D ]7  }|j1                  ||   «       |
j1                  |gt'        ||   «      z  «       Œ9 t'        ‰ jb                  «      dkD  rÛ |«        g }‰ je                  d«      ‰ _3         |ti        ‰ jb                  «      «      }‰ jk                  d|«      }tm        |||¬«      }|j1                  |jo                  |d«      «       |j1                  tq        dd«      «       |j!                  |js                  |jt                  jf                  «      «       ‰ jw                  |«       |
�rt        d„ |
D «       «      �rt        d„ |
D «       «      rõt'        ty        |
«      «      t'        |
«      k(  rÕ‰ jz                  j}                  «       r»t'        |j~                  «      dk7  s£‰ j€                  s— |«        ‰ jw                  ‰ jƒ                  |t?        t5        |
«      «      ||«      t#        dt'        |
«      ¬«      gz   «       ‰ jw                  t5        |«      D �cg c]  }tm        ||¬«      js                  |«      ‘Œ  c}«       y‰ je                  d«      }tm        ||||¬«      }‰ j…                  ||
|«       tm        ||||j†                  jI                  «       D ��ci c]  \  }}|dkD  sŒ|d“Œ c}}|¬«      }‰ j…                  ||
|«       d}g } t‰        ‰ jŠ                  «      dk7  st'        |jŒ                  «      dk7  r‡| j1                  ‰ jƒ                  ||j�                  «       ||«      «       t'        |jŒ                  «      dk7  r#| j!                  |js                  |«      «       d}n,| j!                  t#        d«      «       n‰ j‘                  |«        |«        ‰ jw                  | |j“                  «       z   «       ‰ jw                  t5        |«      D �cg c]  }tm        ||¬«      js                  |«      ‘Œ  c}«       |r-‰ jw                  tm        ||¬«      j•                  |«      g«       yyc c}}w c c}w c c}}w c c}w ) zw
        Generate a subgraph to continue execution on user code.
        Automatically restore live variables.
        Nr   ©ÚdisableTzCOMPILING GRAPH due to %sc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr{   )Úcan_restore)Ú.0Úblocks     rw   ú	<genexpr>z/OutputGraph.compile_subgraph.<locals>.<genexpr>ò  s   è ø€ ÒC¨5�5×$Ñ$×&ÑCùó   ‚z'Attempt to compile graph in a try blockr8  z9Dynamo cannot compile traced graphs while in a try block.r9  ©é   é   Ú	MAKE_CELLrý  ÚCOPY_FREE_VARSÚco_freevars)r  z)export does not support pregraph_bytecodec                  óH   •— ‰j                  ‰ «       ‰ j                  «        y r{   )Úadd_output_instructionsrŽ   )Úprefix_instsr~   s   €€rw   Úappend_prefix_instsz9OutputGraph.compile_subgraph.<locals>.append_prefix_insts  s   ø€ Ø×(Ñ(¨Ô6Ø×ÑÕ rv   )Úis_graph_break)r$  é   r   Úrandom_valuesÚ__gen_rand_values)r  Fc              3   óª   K  — | ]K  }t        |t        t        t        f«       xr) t        |t        «      xr |j                  «       t        u  –— ŒM y ­wr{   )r,  rd   ra   re   rb   Úpython_typeÚfloat)r  r²   s     rw   r!  z/OutputGraph.compile_subgraph.<locals>.<genexpr>c  s`   è ø€ ò ð ô Øä3Ü,Ü4ðóð ò Vô $ A¤Ó7ÒT¸A¿M¹M»OÌuÐ<TÐUóVñùs   ‚AAc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr{   )r,  rc   ©r  r  s     rw   r!  z/OutputGraph.compile_subgraph.<locals>.<genexpr>o  s   è ø€ ÒH°a”J˜q¤.×1ÑHùr"  ÚUNPACK_SEQUENCEÚ	graph_out)Útempvarsr  ÚPOP_TOP)KÚ
decoratorsr  Úpartial_convertÚcompile_subgraph_reasonr  r’   ÚdebugÚallÚblock_stackr/   r   ÚCAUSED_BY_EARLIER_GRAPH_BREAKÚsysÚversion_infor+  Úopnamerš   r%   rþ  r2  rÖ   rÅ   r  rØ   r_  r  rk  Úexitr˜   Úcleanup_graphÚprune_dead_localsrž   r  ÚrealizeÚ
dedup_passr¬   r¯   rU   r«   r  r,  ro   r?   r  r^   rC  Ú__instancecheck__r_   rÀ  r§   rF  r  r©   r.  r*   Úload_function_namer$   Úcreate_storer’  r*  rô   rÕ   Úis_emptyÚdebug_localsr   Úcompile_and_call_fx_graphÚcodegen_suffixÚusesrJ   rg   Úgraph_outputsÚgraph_output_varsÚrun_compiler_collectiver`  Úcreate_delete)"r~   r±  r;  r–   r  Úinstr  r  r,  r   Ústack_valuesrƒ   Úoutput_replacementsr5  ÚmodÚnn_modules_proxiesÚrootÚrestore_varsÚval_to_namesr±   r²   Úrandom_calls_instructionsÚrand_fnÚrand_fn_nameÚcodegenrÇ  Úgraph_output_varÚpass1Úvalr  Úpass2Ústored_graph_output_varr’  r+  s"   `                                @rw   Úcompile_subgraphzOutputGraph.compile_subgraphá  s  ù€ ð Ð!Ð!Ð!å'à.ˆÔØ'-ˆÔ$ØˆÔä�	‰	Ð-¨vÔ6äÑC°B·N±NÔCÔCÜØAØØWðÜ&×DÑDðõ	ð +-ˆÜ×Ñ˜wÒ&àŸ™ò 9�Ø—;‘; +Ò-Ø ×'Ñ'Ü*¨;¸t¿{¹{ÔKõð —[‘[Ð$4Ò4Ø ×'Ñ'Ü*Ø,´#°b·o±oÀmÑ6TÓ2Uôõð !×'Ñ'¬¯	©	°$«Õ8ð9ð ×*Ò*¨t¯{ª{ð 	
Ø7ó	
Ð;ð 	×Ñ˜D×2Ñ2Ô3Ø*.×*NÑ*NÈrÓ*RÑ'ˆÐ'Ø×Ñ˜KÔ(õ	!ô ˜bŸn™nÓ-ò 	>ˆEØ�J‰J�r¨&×*<Ñ*<ˆJÕ=ð	>ð 	×ÑÔØ
×ÑÔÜ˜BŸH™H“~ˆð "ò 	ˆEØ�M‰M�Oð	ð #Ÿo™oÓ/Ðð 9=¿¹×8MÑ8MÓ8O÷
Ù+4¨4°ˆD”/ #Ó&Ñ&ð
Ðñ 
ô Ð0Ó1ˆà"$ˆØ9;ˆð ×&Ñ&×,Ñ,Ó.ò 	&‰DˆAˆqô ˜!Ÿ(™(¤KÔ0°Q·X±X×5HÑ5HÈAÒ5MØÜ˜!œ\Ô*¨q¯|©|¸qÒ/@Øä×Ñ 7Ò*ä×)Ñ)¬,¸Ô:Øô  ×1Ñ1´,ÀÔBÐBÐBØ˜Ñ$Ø"$�˜Q‘Ø˜‰O×"Ñ" 1Õ%ð)	&ð* ×"Ñ"Ó$ò 	<ˆAØ×Ñ ¨Q¡Ô0Ø×Ñ  ¤c¨,°q©/Ó&:Ñ :Õ;ð	<ô
 ˆt× Ñ Ó! AÒ%ÙÔ!Ø(*Ð%Ø%)§\¡\°/Ó%BˆDÔ"ÙÔ5°d×6GÑ6GÓHÓIˆGØ×.Ñ.Ð/BÀGÓLˆLÜ  DÐ=OÔPˆGØ%×,Ñ,Ø×*Ñ*¨<¸Ó>ôð &×,Ñ,Ô-AÀ!ÀUÓ-KÔLØ%×,Ñ,Ø×$Ñ$ R§Y¡Y×%@Ñ%@ÓAôð ×(Ñ(Ð)BÔCò Üñ ð &ôõ ô ÑH¸<ÔHÔHÜ”C˜Ó%Ó&¬#¨lÓ*;Ò;Ø×!Ñ!×*Ñ*Ô,Ü˜Ÿ™Ó(¨AÒ-Ø×'Ò'áÔ!à×(Ñ(Ø×.Ñ.ØœœX lÓ3Ó4°dÐ<Oóô &Ð&7¼SÀÓ=NÔOÐPñQôð ×(Ñ(ô
  (¨Ó5ö	ð ô ˜bÐ5GÔH×UÑUØõòõð  $Ÿ|™|¨KÓ8ÐÜØ�DÐ*Ð?QôˆEð ×Ñ  L°%Ô8ô ØØØ Ø6;·j±j×6FÑ6FÓ6H×V©
¨¨UÈEÐTUËI˜#˜t™)ÓVØ#5ôˆEð ×Ñ  L°%Ô8à&+Ð#ØˆFÜ˜4Ÿ:™:Ó&¨!Ò+¬s°5×3FÑ3FÓ/GÈ1Ò/LØ—‘Ø×2Ñ2Ø˜E×3Ñ3Ó5°tÐ=Póôô �u×*Ñ*Ó+¨qÒ0Ø—M‘M %×"4Ñ"4Ð5EÓ"FÔGØ.2Ñ+à—M‘MÔ"4°YÓ"?Õ@ð ×,Ñ,¨RÔ0ÙÔ!Ø×(Ñ(¨°%×2HÑ2HÓ2JÑ)JÔKð ×(Ñ(ô
  (¨Ó5ö	ð ô ˜bÐ5GÔH×UÑUØõòôñ 'Ø×,Ñ,ä!ØÐ3Eôç'™-Ð(8Ó9ðõð 'ùóW
ùòhùó& Wùò8s   É
^Õ>#^Ø^#Ø^#Ü>#^)c                 óÒ  ‡‡— | j                   j                  ‰«       | j                  rs| j                  rJ ‚| j                  j	                  «       D ]H  \  }} ‰|«       ‰j                  ‰j                  | j                  «      «       ‰j                  |«       ŒJ | j                   j                  ‰«       |j                  D ]h  \  Š}‰j                  ˆˆfd„«       |D ]
  } ‰|«       Œ ‰j                  t        t        |«      d«      «       ‰j                  t        d«      g«       Œj ‰j!                  ||j                   ¬«       | j                   j#                  ‰«       y )Nc                  ó   •—  ‰ ‰«      S r{   ru   )rV  Ú	debug_vars   €€rw   rW  z,OutputGraph.codegen_suffix.<locals>.<lambda>Î  s   ø€ ¡R¨	£]€ rv   Fr9  )Úvalue_from_source)rÕ   Úcodegen_save_tempvarsr   rØ   r¯   Úappend_outputÚcreate_loadr"  Ú
store_attrÚcodegen_hooksrM  rX  Úextend_outputr$   r2  r%   Úrestore_stackÚcodegen_update_mutated)	r~   r±  rV  rV  r5  rc  r¥   r  ri  s	      `    @rw   rO  zOutputGraph.codegen_suffix¿  s4  ù€ ð 	×Ñ×/Ñ/°Ô3Ø×ÒØ—{’{Ð"�?Ø!×0Ñ0×6Ñ6Ó8ò $‘	��cÙ�3”Ø× Ñ  §¡°×0GÑ0GÓ!HÔIØ—‘˜dÕ#ð$ð 	×Ñ×'Ñ'¨Ô+ð  "Ÿ™ò 	>‰OˆI�tØ×ÑÔ2Ô3Øò �Ù�3•ðà×ÑÔ1´#°d³)¸UÓCÔDØ×ÑÔ0°Ó;Ð<Õ=ð	>ð 	×Ñ˜¸R¿Y¹Y¸ÐÔGØ×Ñ×0Ñ0°Õ4rv   c                 óÞ  — | j                   sJ ‚t        | j                  j                  «      }|D ]  }|j                  j                  dd«       Œ  t        j                  «       }t        ||dd «      D ]÷  \  }}|j                  t        j                  j                  u sŒ-t        |j                  «      | fk(  sŒH|j                  rŒU|j                  d   }|j                  t        j                  j                  u sŒ‹t        |j                  «      | fk(  sŒ¦|j                  rŒ³|j                  d   }| j                  j                  |«       | j                  j                  |«       Œù y)zÄ
        Remove "creation_timestamp" from node meta

        Remove this pattern from the graph:
            torch._C._set_grad_enabled(False)
            torch._C._set_grad_enabled(True)
        Úcreation_timestampNr   r   )r  rž   rg   r¹  rE  rŒ  r¸   r¦  ÚziprÙ  r  Ú_set_grad_enabledr¡  r¥   Ú_erasedÚ
erase_node)r~   r¹  rD  r™  Únode1Únode2s         rw   rE  zOutputGraph.cleanup_graph×  s  € ð ×ÒÐÐÜ�T—Z‘Z×%Ñ%Ó&ˆØò 	6ˆDØ�I‰I�M‰MÐ.°Õ5ð	6ô ×,Ñ,Ó.ˆÜ  u¨Q¨R yÓ1ò 	1‰LˆE�5à—‘¤§¡× :Ñ :Ò:Ü˜%Ÿ*™*Ó%¨lÐ*:Ð)<Ó<ØŸ›à$Ÿz™z¨!™}�à—L‘L¤E§H¡H×$>Ñ$>Ò>Ü˜eŸj™jÓ)°,Ð.>Ð-@Ó@Ø!ŸM›Mà#(§:¡:¨a¡=�LØ—J‘J×)Ñ)¨%Ô0Ø—J‘J×)Ñ)¨%Õ0ñ	1rv   c                 ó\  — i }| j                   j                  D ]‹  }|j                  j                  dd «      }t	        |t
        j                  j                  «      sŒD|j                  «       }|D �cg c]  }t	        |t        «      r|n
t        |«      ‘Œ! c}||j                  <   Œ� |S c c}w )NrG  )rg   r¹  rE  rb  r,  r¸   rü   r   Úsizers   Úreprr5  )r~   ÚretrD  rG  r|  Úss         rw   Úget_graph_sizes_structuredz&OutputGraph.get_graph_sizes_structuredõ  s‘   € ØˆØ—J‘J×$Ñ$ò 	VˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)EÕFØ$×)Ñ)Ó+�ØPTÖ!UÈ1¤z°!´SÔ'9¡!¼tÀA»wÑ"FÒ!U��D—I‘I’ð		Vð
 ˆ
ùò "Vs   Á1$B)r5  c                 óV  — d}|d|› d�z  }| j                   j                  D �]  }|j                  j                  dd «      }t	        |t
        j                  j                  «      sŒE|j                  «       }||j                  › dt        |«      › d�z  }g }d}|D ]g  }t	        |t        «      r|j                  |«       Œ%t	        |t
        j                  «      r(d}|j                  |j                  j                  «       Œg Œâ |sŒæ||j                  › d	t        |«      › d�z  }�Œ |S )
NzTRACED GRAPH TENSOR SIZES
z===== z =====
rG  z: ú
FTz (concrete): )rg   r¹  rE  rb  r,  r¸   rü   r   r|  r5  r¡  rs   rš   rô  rD  Úhint)	r~   r5  Úgraph_sizes_strrD  rG  r|  Úconcrete_sizeÚ
has_symintÚszs	            rw   Úget_graph_sizeszOutputGraph.get_graph_sizesþ  s  € Ø7ˆØ˜V D 6¨Ð2Ñ2ˆØ—J‘J×$Ñ$ó 	ˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)EÕFØ$×)Ñ)Ó+�Ø d§i¡i [°´5¸³;°-¸rÐ#BÑB�Ø "�Ø"�
Øò �BÜ! "¤cÔ*Ø%×,Ñ,¨RÕ0Ü# B¬¯©Ô5Ø%)˜
Ø%×,Ñ,¨R¯W©W¯\©\Õ:áðò "Ø'Ø#Ÿy™y˜k¨´u¸]Ó7KÐ6LÈBÐOñšð#	ð( Ðrv   c              #   ó’  K  — | j                   j                  j                  «       }i }| j                  |¬«       	 | j                   j                  j	                  |«       d–— | j                   j                  j	                  t        |«      «       y# | j                   j                  j	                  t        |«      «       w xY w­w)zj
        Momentarily restores the global state to what it was prior to tracing the current output
        )r¯  N)rþ   r¢  Úcopy_graphstater  Úrestore_graphstater   )r~   Úprior_global_stateÚcurrent_global_states      rw   Úrestore_global_statez OutputGraph.restore_global_state  s¦   è ø€ ð
 "×1Ñ1×@Ñ@×PÑPÓRÐØ<>ÐØ×ÑÐ#7ÐÔ8ð	à× Ñ ×/Ñ/×BÑBÐCUÔVÛð × Ñ ×/Ñ/×BÑBÜ,Ð-AÓBõøˆD× Ñ ×/Ñ/×BÑBÜ,Ð-AÓBõüs   ‚9C¼)B Á%/CÂ0CÃCc                 ó¸  ‡— |j                   xŠ��2‰j                  �€$‰j                  }t        j	                  d‰j
                  «       t        j                  j                  dd„ ˆfd„¬«       t        j                  j                  |j                  «       t        j                  j                  «       z  «      5  t        dd¬«      5  d g|j                  «       z  }t        j                   |‰j
                  |¬	«       |‰_        d d d «       d d d «       |j"                  j%                  «        t&        j(                  ‚y y # 1 sw Y   Œ=xY w# 1 sw Y   ŒAxY w)
Nzcompiler_collective %sÚartifactc                  ó   — dddœS )NÚcompiler_collectiveÚstring)r5  Úencodingru   ru   rv   rw   rW  z5OutputGraph.run_compiler_collective.<locals>.<lambda>/  s   € Ø1Ø (ñ%€ rv   c                  ó8   •— ‰ j                   j                  «       S r{   )Úlocal_stateÚrender)Údss   €rw   rW  z5OutputGraph.run_compiler_collective.<locals>.<lambda>3  s   ø€  2§>¡>×#8Ñ#8Ó#:€ rv   )Úmetadata_fnÚ
payload_fnr’  T)Úlog_pt2_compile_event)Úgroup)Údistributed_stateÚ
all_statesÚ
compile_pgr’   Úinfor–  r¸   Ú_loggingÚtrace_structuredrš  ÚdeviceÚrankÚdevice_countrL   r|  ÚdistÚall_gather_objectÚspeculation_logrŽ   r   Ú CompileCollectiveRestartAnalysis)r~   r±  rŸ  rž  r˜  s       @rw   rS  z#OutputGraph.run_compiler_collective)  s  ø€ Ø×&Ñ&Ð&ˆBÑ3¸¿¹Ñ8MØŸ™ˆJÜ�H‰HÐ-¨r¯~©~Ô>Ü�N‰N×+Ñ+Øñó ;ð ,ô ô —
‘
×!Ñ! *§/¡/Ó"3´e·j±j×6MÑ6MÓ6OÑ"OÓPñ+äÐ2È$ÔOñ+ð #˜V j§o¡oÓ&7Ñ7�
Ü×&Ñ& z°2·>±>ÈÕTØ *�”÷+÷ +ð ×Ñ×$Ñ$Ô&Ü×6Ñ6Ð6ð+ 9NÐ3÷+ð +ú÷ +ð +ús$   Â<EÃ
>EÄEÅE	Å	EÅEc                 ó¶  ‡ ‡— t         j                  j                  j                  «       5  ddlm} ‰ j                  sJ ‚‰ j                  |«       t        d«      }t        |t        «      sJ ‚t        |t        «      sJ ‚‰ j                  dd‰ j                  j                  t        d„ |D «       «      «      fi «      }|j!                  «       D ]  \  }}	|j#                  |	«       Œ |j$                  j                  j'                  ||«       t(        j*                  sQ‰ j-                  «        t/        t1        j2                  |‰ j4                  «      ‰ j6                  |‰ j8                  ¬«       ‰ j;                  «        t=        ‰ j4                  «      }
t>        d   dxx   |
z  cc<   ‰ jA                  «        ‰ jB                  jE                  «        tG        |‰ j4                  «      Š‰ jH                  D ]
  } |‰«       Œ ‰ jJ                  ‰_%        ‰ jL                  jO                  «       ‰jP                  d	<   ‰ jR                  ‰jP                  d
<   tT        jW                  dtY        |‰ddd¬«      «       t         jZ                  j]                  dˆ fd„ˆfd„¬«       ‰ j_                  «        ‰ j`                  jb                  }‰ j8                  s_ddl2m3c m} |ji                  d¬«      5  t         jj                  jm                  |j6                  ¬«      }ddd«       ‰ j`                  _1        ‰ jo                  «       5  ‰ jq                  ‰«      }ddd«       ddl9m:} t        |«      s&t        tw        |dd«      |«      rR|jx                  dk(  rCt        ||«      r|n|jz                  }|j}                  |«       t        ||«      s|j~                  } ||«      }t>        d   dxx   dz  cc<   ‰ j�                  ||«       tƒ        |«      }|j…                  |«       |j‡                  «       cddd«       S # 1 sw Y   �Œ#xY w# 1 sw Y   ŒôxY w# 1 sw Y   yxY w)zr
        Generate code from self.graph and return the Instruction()s to
        call that generated code.
        r   r  Ú__compiled_fnr’  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr{   )Úas_proxyr5  s     rw   r!  z8OutputGraph.compile_and_call_fx_graph.<locals>.<genexpr>U  s   è ø€ Ò5OÀq°a·j±j·lÑ5Oùr"  )rØ   ÚstatsÚcalls_capturedr  r   ú%sT)Úinclude_strideÚinclude_deviceÚcoloredÚdynamo_output_graphc                  ó(   •— d‰ j                  «       iS )NÚsizes)r€  r}   s   €rw   rW  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>ˆ  s   ø€ ˜ $×"AÑ"AÓ"CÐD€ rv   c                  ó,   •— ‰ j                  ddd¬«      S )NFT)Úprint_outputr±  r²  )Úprint_readable)rÁ   s   €rw   rW  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>‰  s   ø€  2×#4Ñ#4Ø!&°tÈDð $5ó $€ rv   )rš  r   NFræ   )rè   )Ú_LazyGraphModuleÚ__self__Ú_lazy_forwardÚunique_graphs)Dr¸   Ú_guardsr   Úclear_framer:  r  r  rS  r(   r,  rž   r«   rƒ  rs  Ú
create_argr¡  r¯   Úreplace_all_uses_withr’  Ú_maybe_preserve_original_metar   Údo_not_emit_runtime_assertsÚremove_unused_get_attr_nodesr   r
   rÑ   rg   rè   rØ   Úremove_unused_graphargsrJ   rK   Ú&remove_tensorify_specialized_graphargsr|  rŽ   r   r  r<  r  rÅ   rE  r   Úgraph_code_logr=  rS   r¡  r¢  rl  rþ   r(  rù   rú   rû   rü   rý   rŽ  Úcall_user_compilerÚtorch.fx._lazy_graph_modulerº  r¿  rp   r»  Úforce_recompilerÈ   Úinstall_global_unsafer*   Úmake_call_generated_coder`  )r~   r±  ÚrvrZ  Úreplaced_outputsr  r5  Úoutput_nodeÚold_nodeÚnew_nodeÚncallsÚregister_finalizerÚold_fake_moder'  Úbackend_fake_modeÚcompiled_fnrº  Úlazy_gmrV  rÁ   s   `                  @rw   rN  z%OutputGraph.compile_and_call_fx_graphA  sÞ  ù€ ô
 �]‰]×)Ñ)×5Ñ5Ó7ñ x	)Ý+à×#Ò#Ð#Ð#à×(Ñ(¨Ô,ä˜_Ó-ˆDä˜b¤$Ô'Ð'Ð'Ü˜d¤NÔ3Ð3Ð3à×*Ñ*ØØØ×$Ñ$×/Ñ/´Ñ5OÈBÔ5OÓ0OÓPÐRØó	ˆKð '7×&<Ñ&<Ó&>ò 9Ñ"�˜(Ø×.Ñ.¨xÕ8ð9ð �I‰I×$Ñ$×BÑBÀ2À{ÔSÜ×5Ò5ð ×1Ñ1Ô3Ü/Ü—N‘N 4¨¯©Ó4Ø—N‘NØØŸ;™;õ	ð ×(Ñ(Ô*Ü  §¡Ó,ˆFÜ�WÑÐ.Ó/°6Ñ9Ó/à×7Ñ7Ô9ð ×!Ñ!×'Ñ'Ô)ä# D¨$¯*©*Ó5ˆBØ&*×&AÑ&Aò 'Ð"Ù" 2Õ&ð'ð *.×)EÑ)EˆBÔ&à×5Ñ5×:Ñ:Ó<ð �G‰GÐ6Ñ7ð ,0×+AÑ+AˆB�G‰GÐ'Ñ(ä× Ñ ØÜ&Ø˜"¨TÀ$ÐPTôôô �N‰N×+Ñ+Ø%ÛDóð ,ô ð ×#Ñ#Ô%Ø ×0Ñ0×:Ñ:ˆMØ—;’;ß9Ð9à—]‘]ÈE�]ÓRñ ä(-×(9Ñ(9×(HÑ(HØ"/×"9Ñ"9ð )Ió )Ð%÷ð 2C�×$Ñ$Ô.à×*Ñ*Ó,ñ :Ø"×5Ñ5°bÓ9�÷:õ Eä˜+Ð'7Ô8Üœ7 ;°
¸DÓAÐCSÔTØ×(Ñ(¨OÒ;ô " +Ð/?Ô@ñ  à$×-Ñ-ð ð !×0Ñ0°Ô9ä! +Ð/?Ô@à")§/¡/�Ká! +Ó.ˆKä�WÑ˜oÓ.°!Ñ3Ó.à×&Ñ& t¨[Ô9ä˜2“ˆBØ×'Ñ'¨Ô-Ø×&Ñ&Ó(÷qx	)ñ x	)÷Xñ ú÷:ð :ú÷mx	)ð x	)ús=   «J?QË*+P6Ì)QÌ>QÍCQÐ6Q 	Ð;QÑQ	ÑQÑQc                 ó:   — | j                   j                  d¬«      S )NÚplaceholder©Úop)rg   Ú
find_nodesr}   s    rw   ÚplaceholderszOutputGraph.placeholdersÀ  s   € à�z‰z×$Ñ$¨Ð$Ó6Ð6rv   c                 óZ   — | j                   D �cg c]  }|j                  d   ‘Œ c}S c c}w ©Nr@  )rÝ  rE  ©r~   rD  s     rw   r  zOutputGraph.graphargsÄ  s%   € à26×2CÑ2CÖD¨$�—	‘	˜*Ó%ÒDÐDùÒDs   �(rÁ   c                 ón   — t        dddd¬«      5  | j                  |«      cd d d «       S # 1 sw Y   y xY w)NúOutputGraph.call_user_compilerÚbackend_compileTÚ'aot_autograd_cumulative_compile_time_us)Ú
phase_namer›  Údynamo_compile_column_us)rL   Ú_call_user_compiler)r~   rÁ   s     rw   rÈ  zOutputGraph.call_user_compilerÈ  s;   € ÜØ,Ø(Ø"&Ø%Nô	
ñ 	0ð ×+Ñ+¨BÓ/÷	0÷ 	0ò 	0ús   �+«4c                 óæ  — | j                   €J ‚d}g }|j                  j                  D ]6  }|j                  dv r|dz  }|j                  dk(  sŒ&|j	                  |«       Œ8 t        |«       |D ]"  }|j                  d   }|j                  |_        Œ$ | j                  |_
        | j                  |_        t        | j                   d«      r| j                   j                  nd}	  t        «       t         j"                  d|› �«       | j                   }t$        j&                  rt)        |«      } ||| j+                  «       «      }	 t        «       t         j"                  d	|› �«       t-        |	«      sJ d
«       ‚	 tO        ddi | jP                  ¥|tS        |j                  j                  «      tS        |«      dœ¥«       	S # t.        t0        f$ r ‚ t2        $ rº}
| j4                  rCt7        | j                   |
t9        j:                  «       «      j=                  |
j>                  «      d ‚tA        |
| jB                  jD                  dd|› dtG        |
«      › d| jB                  jI                  «       › �d|› dtG        |
«      › d�dg¬«       Y d }
~
�Œd }
~
wtJ        $ r}
|
‚d }
~
wtL        $ rH}
t7        | j                   |
t9        j:                  «       «      j=                  |
j>                  «      d ‚d }
~
ww xY w)Nr   ©r]  Úcall_methodÚcall_moduler   rÙ  r@  rp   z<unknown compiler_fn>zcalling compiler function zdone compiler function z#compiler_fn did not return callablezBackend compiler exceptionz	Backend: z
Exception:z
Traceback:
zBackend compiler `z` failed with z. Adding a graph break.z-Report an issue to the backend compiler repo.r9  Údynamorâ  )Úop_countÚ
node_countÚinput_count)*r×   rg   r¹  rÛ  rš   rR   rE  ro   Ú_dynamo_sourcer  Ú_param_name_to_sourcer  Ú_source_to_user_stacksrö  rp   r“   r    ÚINFOr   rÉ   r¾   rÂ   Úcallabler   r   r-   r  r,   ÚinspectÚcurrentframeÚwith_tracebackÚ__traceback__r0   r  r&  r�   Úformat_frame_summaryr.   rË   r   rå   r2  )r~   rÁ   ÚtotrÝ  rD  Úplr  r5  r×   rÖ  Úes              rw   rç  zOutputGraph._call_user_compilerÑ  sÃ  € Ø×ÑÐ+Ð+Ð+ØˆØˆØ—H‘H—N‘Nò 	*ˆDØ�w‰wÐIÑIØ�q‘�Ø�w‰w˜-Ó'Ø×#Ñ# DÕ)ð		*ô
 	˜3ÔØò 	+ˆBØ—'‘'˜*Ñ%ˆCð !$§
¡
ˆBÕð		+ð $(×#<Ñ#<ˆÔ Ø$(×$>Ñ$>ˆÔ!ô �t×'Ñ'¨Ô4ð ×Ñ×%Ò%à(ð 	ð
 	8ØŒL‹Nœ7Ÿ<™<Ð+EÀdÀVÐ)LÔMØ×*Ñ*ˆKÜ×(Ò(Ü,¨[Ó9�Ù% b¨$×*=Ñ*=Ó*?Ó@ˆKØŒL‹Nœ7Ÿ<™<Ð+BÀ4À&Ð)IÔJÜ˜KÔ(ÐOÐ*OÓOÑ(ô6 	ØØ,ðØ—.‘.ðàÜ! "§(¡(§.¡.Ó1Ü" <Ó0ò	ô		
ð ÐøôK /Ô0@ÐAò 	ØÜ0ò 	Ø×5Ò5Ü+Ø×$Ñ$ a¬×)=Ñ)=Ó)?óç ‘. §¡Ó1°tð<ô *ØØ—‘×#Ñ#Ø4Ø# D 6¨´c¸!³f°X¸^ÈDÏLÉL×LmÑLmÓLoÐKpÐqØ0°°°nÄSÈÃVÀHÐLcÐdàCð÷	ó 	ûô ò 	ð ˆGûÜò 	8Ü'Ø× Ñ  !¤W×%9Ñ%9Ó%;óç‰n˜QŸ_™_Ó-°4ð8ûð	8ús3   Ã%BG ÇK0ÇB/JÊK0ÊJÊK0Ê(AK+Ë+K0c                 ót   — t         j                  j                  j                  rt	        | «      S t        «       S r{   )r¸   Ú_dynamor   Úuse_graph_deduplicationr1   r·   r}   s    rw   rH  zOutputGraph.dedup_pass  s'   € Ü�=‰=×Ñ×7Ò7Ü,¨TÓ2Ð2ä“6ˆMrv   c                 óz   — t        || j                  d¬«      }||_        d|_        | j	                  ||d ¬«       |S )NT)Úrequires_suffixFr?  )rP   r¬   rp   Útorchdynamo_force_dynamicrù  )r~   r5  Úsub_gmÚ	next_names       rw   Úinstall_subgraphzOutputGraph.install_subgraph  s@   € Ü'¨¨d¯o©oÈtÔTˆ	Ø#ˆŒØ+0ˆÔ(ð 	×$Ñ$ V¨Y¸tÐ$ÔDØÐrv   c                 óV   — | j                   D �cg c]  }|j                  ‘Œ }}|S c c}w r{   )r  Úexample)r~   r  rÏ   s      rw   rÂ   zOutputGraph.example_inputs(  s'   € Ø)-¯©Ö8 #�#—+“+Ð8ˆÐ8Øˆùò 9s   �&c                 óÂ   — t        | j                  j                  d¬«      d¬«      D ]5  }t        t	        |j
                  «      «      dk(  sŒ%| j                  |«       Œ7 y )NrÕ  rÚ  T)Úreverser   )Úsortedrg   rÜ  r2  rž   Úusersr†  rà  s     rw   rÄ  z(OutputGraph.remove_unused_get_attr_nodes,  sN   € Ü˜4Ÿ:™:×0Ñ0°JÐ0Ó?ÈÔNò 	'ˆDÜ”4˜Ÿ
™
Ó#Ó$¨Ó)Ø× Ñ  Õ&ñ	'rv   c                 óú  ‡ ‡‡‡— ‰ j                   sJ ‚dt        j                  j                  fd„}dt        j                  j                  fd„Šˆfd„}ddlm} t        t        ‰ j                  j                  «      «      D ]À  }t        t        |j                  «      «      dk(  sŒ%|j                  dk(  s||j                  d	k(  r|j                  t        j                  u sQ|j                  d	k(  r1|j                  t         j"                  u r ||j$                  d   «      s ||«      s	 ||«      sŒ°‰ j'                  |«       ŒÂ d
„ }ˆ fd„}t)        «       Šdt*        t         j,                  t         j.                  f   fd„Šg }‰ j0                  D �]¸  } ||«      d u}|r|j                  rŒ|j3                  |«       Œ/|j                  s&t5        |j6                  d   t8        «      s	 ||«       Œa|j6                  d   }	t5        |	t8        «      rŒ�t5        |j6                  d   j:                  t         j<                  «      rÚ|j6                  d   j:                  }
|j6                  d   j>                  }t         j@                  jB                  jE                  |
«      s}tG        |
jI                  «       «      }|jK                  «       D ]Q  }tM        |jN                  |«      }tQ        jR                  t         j,                  t         j.                  fˆˆfd„|«       ŒS �ŒŒ|	jT                  �|	jT                  n|	j:                  } ‰‰|«       �Œ» |D ]+  } ||«      }|€Œ|‰vr	 ||«       Œ‰jW                  |«       Œ- y )NÚb_nodec                 óú   — | du ryt        | t        j                  «      sy| j                  j	                  d«      }|€y|du ryt        |t
        j                  «      r|j                  j                  «       x}�|S y)NTFrG  )	r,  r
   ÚNoderE  rb  r¸   ÚSymBoolrD  Úmaybe_as_bool)r  ÚbÚrs      rw   Úis_static_truez;OutputGraph.remove_unused_graphargs.<locals>.is_static_true>  sq   € Ø˜‰~ØÜ˜f¤b§g¡gÔ.ØØ—‘—‘ Ó0ˆAØˆyØØ�D‰yØä˜1œeŸm™mÔ,ØŸ&™&×.Ñ.Ó0Ð0�QÐ=à�ð rv   Úac                 óÆ   — ddl m} t        | t        t        t
        f«      ryt        | t        j                  «      r%t        | j                  j                  d«      |«      S y)Nr   ©ÚSymTypesTrG  F)
Útorch.fx.experimental.sym_noder  r,  rs   r3  r¡   r
   r  rE  rb  )r  r  s     rw   Úis_symnode_argz;OutputGraph.remove_unused_graphargs.<locals>.is_symnode_argQ  sD   € Ý?ä˜!œc¤5¬$Ð/Ô0ØÜ˜!œRŸW™WÔ%Ü! !§&¡&§*¡*¨_Ó"=¸xÓHÐHØrv   c                 ó  •— ddl m} | j                  dk7  ryt        | j                  j                  d«      |«      syt        ˆfd„| j                  D «       «      syt        ˆfd„| j                  j                  «       D «       «      syy)	Nr   r  r]  FrG  c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr{   ru   ©r  r  r  s     €rw   r!  zWOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node.<locals>.<genexpr>h  s   øè ø€ Ò<¨Q‘~ a×(Ñ<ùó   ƒc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr{   ru   r  s     €rw   r!  zWOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node.<locals>.<genexpr>j  s   øè ø€ ÒG¨Q‘~ a×(ÑGùr  T)
r  r  rÛ  r,  rE  rb  r>  r¥   r¦   r  )rD  r  r  s     €rw   Úis_symnode_compute_nodezDOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node]  sg   ø€ Ý?à�w‰w˜/Ò)Øä˜dŸi™iŸm™m¨OÓ<¸hÔGØô Ó<°$·)±)Ô<Ô<ØÜÓG°$·+±+×2DÑ2DÓ2FÔGÔGØØrv   r   )Úis_accessor_noderÕ  r]  c                 óö   — | j                   d   }|j                  }t        |t        j                  «      rDt        |j
                  j                  t        j                  «      r|j
                  j                  S y rß  )	rE  r  r,  r¸   rô  rD  ÚexprÚsympyÚSymbol)rD  r  r  s      rw   Úplaceholder_binds_symbolzEOutputGraph.remove_unused_graphargs.<locals>.placeholder_binds_symbol  sV   € Ø—)‘)˜JÑ'ˆCØ—k‘kˆGÜ˜'¤5§<¡<Ô0´ZØ—‘×!Ñ!¤5§<¡<ô6ð —|‘|×(Ñ(Ð(Ørv   c                 óð   •— t         j                  d| j                  d   j                  j	                  «       «       | j                  d= ‰j                  | «       ‰j                  j                  | d «       y )NzREMOVE UNUSED GRAPHARG %sr@  )r’   r=  rE  ro   r5  r†  r|  rŒ  )rD  r~   s    €rw   Úremove_unusedz:OutputGraph.remove_unused_graphargs.<locals>.remove_unusedˆ  s\   ø€ Ü�I‰IÐ1°4·9±9¸ZÑ3H×3OÑ3O×3TÑ3TÓ3VÔWð —	‘	˜*Ð%Ø×Ñ˜TÔ"Ø×!Ñ!×%Ñ% d¨DÕ1rv   Úfakec                 ó    — | t        |«      z  } y r{   )r   )Úused_symbolsr)  s     rw   Úupdate_used_symbolsz@OutputGraph.remove_unused_graphargs.<locals>.update_used_symbols’  s   € ØœL¨Ó.Ñ.‰Lrv   r@  c                 ó   •—  ‰‰| «      S r{   ru   )Útr,  r+  s    €€rw   rW  z5OutputGraph.remove_unused_graphargs.<locals>.<lambda>³  s   ø€ Ñ.AÀ,ÐPQÓ.R€ rv   ),r  r
   rD  ÚArgumentÚ%torch.fx.experimental.symbolic_shapesr!  rk  rž   rg   r¹  r2  r  rÛ  rÙ  ÚoperatorÚgetitemr¸   Ú_checkr¥   r†  rô   r	   rô  rÒ   rÝ  rš   r,  rE  rY   r  ÚScriptObjectÚexample_strong_refÚ_libraryÚfake_class_registryÚtracing_with_realr·   Ú__obj_flatten__rÀ  r¿  Úwrapped_objÚpytreeÚtree_map_onlyÚfake_tensorÚremove)r~   r  r   r!  rD  r&  r(  Úrecheck_placeholdersÚbinds_symbolr  Úreal_script_objÚfake_script_objÚ	flat_dictÚattrÚfake_attr_valr)  Úsymbolr  r,  r+  s   `                @@@rw   rÅ  z#OutputGraph.remove_unused_graphargs1  sè  û€ ð ×ÒÐÐð	¤2§7¡7×#3Ñ#3ó 	ð&	œbŸg™g×.Ñ.ó 	ô	õ" 	KäœT $§*¡*×"2Ñ"2Ó3Ó4ò 	+ˆDÜ”4˜Ÿ
™
Ó#Ó$¨Ó)à—G‘G˜zÒ)ØŸ™ ?Ò2°t·{±{Äh×FVÑFVÑ7VàŸ™ ?Ò2Ø ŸK™K¬5¯<©<Ñ7Ù*¨4¯9©9°Q©<Ô8á.¨tÔ4Ù'¨Õ-à×$Ñ$ TÕ*ð	+ò	ô	2ô +.«%ˆð	/´E¼%¿,¹,ÌÏÉÐ:TÑ4Uó 	/ð  "ÐØ×%Ñ%ó $	<ˆDÙ3°DÓ9ÀÐEˆLáØ—z“zØ(×/Ñ/°Õ5à—z’z¬*Ø—I‘I˜jÑ)Ô+@ô+ñ " $Õ'ð Ÿ)™) JÑ/�CÜ! #Ô'<Ô=Ø Ü! $§)¡)¨JÑ"7×"?Ñ"?Ä×ASÑASÔTØ*.¯)©)°JÑ*?×*GÑ*G˜Ø*.¯)©)°JÑ*?×*RÑ*R˜Ü$Ÿ~™~×AÑA×SÑSØ+ô ô )-¨_×-LÑ-LÓ-NÓ(O˜IØ(1¯©Ó(8ò " Ü07Ø$3×$?Ñ$?Àó1" ô !'× 4Ñ 4Ü%*§\¡\´5·<±<Ð$@Ü$RØ$1õ!"ð	"ñ !à+.¯?©?Ð+F˜ŸšÈCÏKÉKð ñ (¨°dÖ;ðI$	<ðN )ò 	0ˆDÙ-¨dÓ3ˆFØÑ!Ø Ñ-Ù! $Õ'ð !×'Ñ'¨Õ/ñ	0rv   c                 ó€  — ddl m} | j                  j                  D �]  }|j                  j                  d«      }t        |t        «      sŒ0|j                  €Œ=t        |j                  j                  j                  d«      sŒht        d„ |j                  D «       «      sŒ…|j                  |j                  j                  j                  j                  «      sŒ¿t!        |j                  «      D ]7  }|j#                  t%        |j                  «      «       | j'                  |«       Œ9 | j'                  |«       �Œ! y )Nr   )ÚTensorifyStaterG  r5  c              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)ÚitemN)rÙ  )r  Úus     rw   r!  zEOutputGraph.remove_tensorify_specialized_graphargs.<locals>.<genexpr>Ý  s   è ø€ Ò?¨q˜Ÿ™ FÕ*Ñ?ùs   ‚)Útorch._dynamo.symbolic_convertrH  rg   r¹  rE  rb  r,  r   Ú	item_memorö  rD  Ú_exprr>  r  Úshould_specializer5  rž   rÁ  r   r†  )r~   rH  rD  rG  rK  s        rw   rÆ  z2OutputGraph.remove_tensorify_specialized_graphargsÆ  sñ   € õ 	Bà—J‘J×$Ñ$ó 	'ˆDØ ŸI™IŸM™M¨/Ó:ˆMä˜=¬*Õ5Ø!×+Ñ+Ñ7Ü˜M×3Ñ3×8Ñ8×>Ñ>ÀÕGÜÑ?°D·J±JÔ?Õ?Ø"×4Ñ4à!×+Ñ+×0Ñ0×6Ñ6×;Ñ;õô
 ˜dŸj™jÓ)ò (�AØ×+Ñ+¬L¸×9PÑ9PÓ,QÔRØ×$Ñ$ QÕ'ð(ð × Ñ  Ö&ñ	'rv   r4  c                 óH   — | j                   j                  |«       d| _        y)zt
        We call this on the creation of a new compiled subgraph that is inserted
        before user code.
        TN)r
  r_  r  )r~   r4  s     rw   r*  z#OutputGraph.add_output_instructionsè  s    € ð
 	× Ñ ×'Ñ'¨Ô/ØˆÕrv   c                 óÎ   — || j                   vsJ ‚| j                   j                  |«       | j                  j                  t	        j
                  | j                  ||«      «       y)a`  
        WARNING: prefer the safer `install_global_by_id/install_global`.
        torch.compile instances should be independent of each other;
        one footgun is to have one instance depend on the existence of
        a global installed by another instance. This can happen if we mangle
        a global the same way across both instances.
        N)rõ   rˆ   r  rš   rH   r\  rÚ   )r~   r5  rƒ   s      rw   rË  z!OutputGraph.install_global_unsafeð  sS   € ð ˜4×1Ñ1Ñ1Ð1Ð1Ø×Ñ×"Ñ" 4Ô(Ø�‰×Ñœ[×/Ñ/°×0AÑ0AÀ4ÈÓOÕPrv   c                 ó„   — |› dt        |«      › d| j                  › �}|| j                  v r|S | j                  ||«       |S )z¹
        Installs a global if it hasn't been installed already.
        This is determined by (prefix, id(value)) pair.

        Returns the name of the newly installed global.
        rÅ  Ú_c)r‚   ró   rõ   rË  ©r~   r4  rƒ   r5  s       rw   Úinstall_global_by_idz OutputGraph.install_global_by_idü  sK   € ð �˜œ2˜e›9˜+ R¨¯©Ð'8Ð9ˆØ�4×)Ñ)Ñ)ØˆKØ×"Ñ" 4¨Ô/Øˆrv   c                 ó@   — t        |«      }| j                  ||«       |S )z~
        Installs a global, generating a unique name for it.

        Returns the name of the newly installed global.
        )r(   rË  rT  s       rw   r.  zOutputGraph.install_global  s#   € ô ˜Ó ˆØ×"Ñ" 4¨Ô/Øˆrv   c                 óÊ  — d | _         | j                  j                  «        d | _        | j                  j
                  D ]  }d|j                  v sŒ|j                  d= Œ  | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                   j                  «        y rß  )r  r¬   rŽ   r  rg   r¹  rE  r|  rz  rÕ   r  r  r  rþ   rì   r  r   rà  s     rw   ÚcleanupzOutputGraph.cleanup  s
  € ð ˆŒØ�‰×ÑÔØ$(ˆÔ!à—J‘J×$Ñ$ò 	*ˆDØ˜TŸY™YÒ&Ø—I‘I˜jÑ)ð	*ð 	×Ñ×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(Ø×Ñ×ÑÔ!Ø×#Ñ#×)Ñ)Ô+Ø×#Ñ#×)Ñ)Ô+Ø×-Ñ-×3Ñ3Ô5Ø×Ñ×"Ñ"Ô$Ø× Ñ ×&Ñ&Ô(Ø× Ñ ×&Ñ&Ô(Ø×Ñ×!Ñ!Õ#rv   Úenabledc                 ó   — || _         y r{   )r  )r~   rY  s     rw   r¤  z$OutputGraph.set_torch_function_state+  s
   € Ø&-ˆÕ#rv   rÓ  c                 ó:   — | j                   j                  |«       y r{   )r  rš   )r~   rÓ  s     rw   Úadd_graph_finalizerzOutputGraph.add_graph_finalizer.  s   € ð 	×#Ñ#×*Ñ*Ð+=Õ>rv   rD  c                 ó¦   — |j                   dk(  r|j                  d   j                  S |j                   dk(  sJ ‚| j                  |j                     S )z#Extract the non-fake example tensorrÙ  r@  rÕ  )rÛ  rE  r  r¬   rÙ  rà  s     rw   Úexample_value_from_input_nodez)OutputGraph.example_value_from_input_node3  sH   € à�7‰7�mÒ#Ø—9‘9˜ZÑ(×0Ñ0Ð0Ø�w‰w˜*Ò$Ð$Ð$Ø�‰˜tŸ{™{Ñ+Ð+rv   )r0  r{   )Útmp©FN)r´   N)drp   rq   rr   rœ   r7   rt   r·   r�   r   r   r#   r¡   ÚScoper   r#  rX   r6  r3  r  rg  r   ri  rl  ÚpropertyrA  rs  ru  rg   Úsetterrz  r|  r~  r€  rƒ  r†  Ú
contextlibÚcontextmanagerr�  r’  r(  rè   r¸   r¾  Ú	GuardsSetrI  r¬   r  r²  r´  r¶  rJ   rº  rÂ  rF  rÊ  ÚstaticmethodrÑ  r
   ÚProxyrØ  r	   r¹   rº   rÒ   rù  r  r•   rf  rO  rE  r€  rˆ  rŽ  rS  rN  rž   r  rÝ  rZ   r  rÑ   r"   rÈ  rç  rH  r  rÂ   rÄ  rÅ  rÆ  r'   r*  rË  rU  r.  rX  r¤  r\  r^  r»   r¼   s   @rw   rÔ   rÔ     s  ø… ñð Óðt2à˜3 ˜8‘nðt2ð ˜jÑ)ðt2ð
 ðt2ð ðt2ð õt2òlDñ&5¨Oó 5ò)ò*ò.ð0& 8¨B°¨GÑ#4ó &ò#ð
 ñó ðð ñ ó ð ò&ð ñ)ó ð)ð ‡\�\ñ*ó ð*ð ñ7ó ð7ð ñ4ó ð4ð ñ1ó ð1òAò@ò@ð ×Ññó ðð. ñó ðð ñ.ó ð.ð ñ8ó ð8ð ðA˜Ÿ™×/Ñ/ò Aó ðAð ð>˜D  c ™Nò >ó ð>ó,
ò\$ò&ð ñNó ðNò'ò0òóò5ð
 ñó ðð	Øð	Ø,/ð	à	�‰ó	ðHà�e—h‘h—o‘o u§|¡|°SÐ8Ñ9óHòTT/ðn QUñ\Ø19Ð:LÑ1Mó\ò|5ò01ò<ð Có ð2 ×Ññó ðò"7ò0})ð~ ð7˜d 2§7¡7™mò 7ó ð7ð ðE˜4 ™>ò Eó ðEð0 R§^¡^ð 0¸
ó 0ðF b§n¡nð F¸ó FòPòð  U§\¡\Ñ 2ó ó'ó
S0ój 'ðD ¨d°;Ñ.?ð  ÀDó  ó
Qð°Só ð	¨só 	ó$ð*.°ð .¸ó .ð?Ø"*¨B¯N©NÐ+;¸TÐ+AÑ"Bð?à	ó?ð
,°%·(±(·-±-÷ ,rv   rÔ   a  With the current config, we will graph break (and fall back to eager-mode PyTorch) on all ops that have do not have the 'pt2_compliant_tag'. Please see the following doc for how to mark this op as PT2 compliant https://pytorch.org/tutorials/advanced/custom_ops_landing_page.htmlc                 óÜ  ‡ — |dk7  ry ˆ fd„}ˆ fd„}t        |t        j                  j                  «      r=t        j                  j
                  |j                  v r	 ||«       y  ||d|› d�«       y t        |t        j                  j                  «      �r't        |j                  «       «      }t        |«      dk(  rLt        ||d   «      }t        j                  j
                  |j                  v r	 ||«       y  ||d|› d	�«       y t        j                  j                  j                  ‰ j                  ||fd
«      \  }}	 t        j                   j"                  |j$                  g|¢­i |¤Ž}	t        |	«      }t        j                  j
                  |j                  v r	 ||«       y  ||d|› d|	› d�«       y y # t&        $ r"}
t)        ddt+        |
«      g ¬«       Y d }
~
Œsd }
~
ww xY w)Nr]  c                 óZ   •— | j                   dv ry ‰j                  j                  | «       y )N>   ÚatenÚprimÚprims)Ú	namespacer  rˆ   )rÙ  Úoutput_graphs    €rw   Úencountered_compliant_opz8check_pt2_compliant_op.<locals>.encountered_compliant_opH  s)   ø€ Ø×ÑÐ8Ñ8ØØ×)Ñ)×-Ñ-¨fÕ5rv   c                 ó�   •— ‰j                   j                  | «       t        j                  rt	        dd|dz   t
        z   g ¬«       y y )Nz Encountered non-PT2-compliant opr8  ú r9  )r  rˆ   r   Úonly_allow_pt2_compliant_opsr/   Úerr_epilogue)rÙ  Úmsgro  s     €rw   Úencountered_non_compliant_opz<check_pt2_compliant_op.<locals>.encountered_non_compliant_opM  sB   ø€ Ø×&Ñ&×*Ñ*¨6Ô2Ü×.Ò.ÜØ:ØØ #™I¬Ñ4Øö	ð /rv   z%Encountered the torch.ops.OpOverload z that is not PT2 compliant.r   r   z:Encountered the non-overloaded torch.ops.OpOverloadPacket z that is not PT2 compliant. Fz*Error when attempting to resolve op packetr8  r9  z+Encountered the torch.ops.OpOverloadPacket z! which resolves to the overload (z) that is not PT2 compliant.)r,  r¸   Ú_opsÚ
OpOverloadÚTagÚpt2_compliant_tagÚtagsÚOpOverloadPacketr¡  Ú	overloadsr2  r¿  rþ  ÚutilsÚget_fake_values_from_nodesr¶  r  Ú_jit_resolve_packetÚ_qualified_op_namerÊ   r/   r�   )ro  ÚkindrÙ  r¥   r¦   rp  rv  r}  rÛ  Úoverloadrü  s   `          rw   Úcheck_pt2_compliant_opr„  D  sß  ø€ ØˆÒØô6ô
ô �&œ%Ÿ*™*×/Ñ/Ô0Ü�9‰9×&Ñ&¨&¯+©+Ñ5Ù$ VÔ,ØÙ$ØØ3°F°8Ð;VÐWô	
ð 	ä�&œ%Ÿ*™*×5Ñ5Õ6Ü˜&×*Ñ*Ó,Ó-ˆ	ô ˆy‹>˜QÒÜ˜ ¨1¡Ó.ˆBÜ�y‰y×*Ñ*¨b¯g©gÑ5Ù(¨Ô,ØÙ(Øð.Ø.4¨Xð 6.ð/ôð ä—}‘}×*Ñ*×EÑEØ×#Ñ# d¨F ^°Uó
‰ˆˆfð
	Ü—x‘x×3Ñ3Ø×)Ñ)ðØ,0òØ4:ñˆHô �V˜XÓ&ˆÜ�9‰9×&Ñ&¨"¯'©'Ñ1Ù$ RÕ(á(ØØ=¸f¸Xð F3Ø3;°*ð =%ð&õðI 7øô0 ò 	ÜØDØÜ ›FØ÷	ò ûð	ús   Å-G  Ç 	G+Ç	G&Ç&G+c                   ó   — e Zd Zd„ Zd„ Zy)Ú	LazyProxyc                 ó<   — || _         || _        || _        || _        y r{   )r�  r¤   r¥   r¦   )r~   r�  r¤   r¥   r¦   s        rw   r   zLazyProxy.__init__‘  s   € ØˆŒØˆŒØˆŒ	Øˆ�rv   c                 óN   —  | j                   | j                  i | j                  ¤ŽS r{   )r¤   r¥   r¦   r}   s    rw   rÐ   zLazyProxy.__call__—  s    € Øˆt�w‰w˜Ÿ	™	Ð1 T§[¡[Ñ1Ð1rv   N)rp   rq   rr   r   rÐ   ru   rv   rw   r†  r†  �  s   „ òó2rv   r†  c                   ó*  ‡ — e Zd ZdZdˆ fd„	Zd„ Z	 	 	 dˆ fd„	Z	 dˆ fd„	Zd„ Z	 dd„Z	d„ Z
d	„ Zd
eeej                  j                   f   fd„Zdeej$                  ej&                  f   dee   fd„Zdej$                  deej2                     fd„Zˆ xZS )rê   a  
    Holds an FX graph that is being traced. OutputGraph owns a SubgraphTracer
    and the separation of responsibilities is that SubgraphTracer is
    responsible for building the graph while OutputGraph is responsible for
    compiling and executing the graph.
    c                 ó:  •— t         ‰| �  «        t        j                  |«      | _        t
        j                  j                  «       | _        || _	        i | _
        i | _        || _        || _        i | _        i | _        d | _        d| _        d| _        d| _        |�|j(                  dz   nd| _        d | _        d | _        d | _        d | _        | j                  €g | _        y | j                  j2                  | j                  j5                  |«      |fgz   | _        y )NFr   r   )r®   r   Úweakrefr×  ro  r¸   r
   ÚGraphrg   rÜ   rz  r|  rˆ  r‰  Úlifted_freevarsr~  Ú	prev_instÚunder_activation_checkpointÚ#allow_side_effects_under_checkpointÚis_reconstructing_generatorÚdebug_levelÚ	_cur_codeÚ_orig_gm_metaÚ_orig_gm_lineno_mapÚ_orig_gm_firstlinenoÚsource_fn_stackÚ_target_to_str)r~   ro  rˆ  rÜ   r‰  r³   s        €rw   r   zSubgraphTracer.__init__£  s  ø€ Ü‰ÑÔÜ#ŸM™M¨,Ó7ˆÔÜ—X‘X—^‘^Ó%ˆŒ
ð #ˆŒð 9;ˆÔ à=?ˆÔð ˆŒØ*ˆÔð  "ˆÔð TVˆÔàˆŒð ,1ˆÔ(ð
 49ˆÔ0ð ,1ˆÔ(à:@Ð:L × 2Ñ 2°QÒ 6ÐRSˆÔàˆŒØ!ˆÔØ#'ˆÔ Ø$(ˆÔ!ð
 �;‰;ÐØ#%ˆDÕ à#'§;¡;×#>Ñ#>Ø—‘×*Ñ*¨=Ó9¸=ÐIðBñ $ˆDÕ rv   c                 ó–  — | j                   r½| j                  r°| j                  r£|j                  j                  }d }|�)| j                  j                  || j                  z
  d «      }|�]| j                   |   }t        j                  j                  D ]  }||v sŒ||   |j                  |<   Œ d|v r|d   |j                  d<   y y y y y y )NÚstack_trace)
r”  r•  r–  Úcurrent_instructionÚstarts_linerb  r
   r×  Ú_COPY_META_FIELDSrE  )r~   r±  rD  ÚlinenoÚnode_idxrE  Úfields          rw   rÂ  z,SubgraphTracer._maybe_preserve_original_metaè  sß   € à×ÒØ×(Ò(Ø×)Ò)à×+Ñ+×7Ñ7ˆFØˆHØÐ!Ø×3Ñ3×7Ñ7Ø˜T×6Ñ6Ñ6¸ó�ð Ð#Ø×)Ñ)¨(Ñ3�ÜŸX™X×7Ñ7ò 7�EØ ’}Ø+/°©;˜Ÿ	™	 %Ò(ð7ð ! DÑ(Ø/3°MÑ/B�D—I‘I˜mÒ,ð )ð $ð *ð )ð rv   c           	      óÌ  •‡‡‡‡‡— | j                   �^t        j                  ||f«      \  }}	g }
|D ]$  }| j                  |«      }|
j	                  |«       Œ& t        j
                  |
|	«      \  }}t        ‰| �  |‰|||||«      Š| j                  j                  }t        j                  dk\  r |dv rœ|j                  Š‰| j                  ur‚‰j                  �v‰j                  j                  �`|j                   Š|j#                  ‰j                  j                  ¬«      Šˆˆˆˆfd„}t$        j'                  dt)        |«      «       ‰| _        d}|j                   | j*                  urÚ t-        j.                  |j                   «      j1                  dd„ «      «       }t3        |t4        j6                  j8                  «      rld	}|j:                  j<                  D �cg c]  }|j>                  ‘Œ c}| _         |jB                  | _"        |jF                  jH                  jJ                  | _&        nd | _         d | _"        d | _&        |jN                  }|r'|jQ                  «       ‰jR                  j>                  d
<   |dv r>| jT                  ‰jR                  jV                  ‰fgz   ‰jR                  j>                  d<   n¡|dk(  rœ| j                   �tY        dd| jZ                  › �dg ¬«       | jT                  ‰jR                  jV                  t]        ˆfd„‰jR                  j>                  d
   j_                  «       D «       «      fgz   ‰jR                  j>                  d<   | ja                  |‰jR                  «       |�s!d
‰jR                  j>                  vr5|jN                  }|r'|jQ                  «       ‰jR                  j>                  d
<   d‰jR                  j>                  vr¼|dv r>| jT                  ‰jR                  jV                  ‰fgz   ‰jR                  j>                  d<   nz|dk(  ru| j                   �tY        dddg ¬«       | jT                  ‰jR                  jV                  ‰jR                  j>                  d
   ‰   d   fgz   ‰jR                  j>                  d<   d‰jR                  j>                  vr g }|r?|jc                  «       s|j	                  |je                  «       «       tg        |dd «      }|rŒ?|ji                  «        tj        jl                  jo                  |«      jq                  «       }djs                  |«      ‰jR                  _:        t4        jv                  jx                  jz                  s$t4        jv                  jx                  j|                  rD| j                  j~                  j�                  | j                  j                  ‰jR                  «       ‰S c c}w )Nr#  ré  )rž  c                  óv   •— t        ‰‰«      j                  «       } d‰j                  j                  › d‰› d| › �S )NzTRACE FX call z from r‚  )rM   ÚrstriprD  r5  )ÚlineÚcur_instÚheaderrÍ  Útx_codes    €€€€rw   Úget_trace_call_log_strz;SubgraphTracer.create_proxy.<locals>.get_trace_call_log_strF  s9   ø€ Ü5°g¸xÓH×OÑOÓQ�DØ+¨B¯G©G¯L©L¨>¸À¸xÀrÈ$ÈÐPÐPrv   r°  FÚorig_graphmodulec                   ó   — y r{   ru   ru   rv   rw   rW  z-SubgraphTracer.create_proxy.<locals>.<lambda>Q  s   � rv   TÚnn_module_stack>   rê  r]  r—  rë  z4Invoking an nn.Module inside a higher order operatorzHigher order op name: zThis is not supported.r9  c              3   ó\   •K  — | ]#  \  }\  }}|j                  d «      d   ‰k(  r|–— Œ% y­w)ú@r   N)r¾  )r  r±   rÅ  ÚtyrÙ  s       €rw   r!  z.SubgraphTracer.create_proxy.<locals>.<genexpr>u  s5   øè ø€ ò á&˜A™w  2ØŸ7™7 3›<¨™?¨fÒ4ô ñùs   ƒ),z2Invoking an nn.Module inside a HigherOrderOperatorr8  r   rš  rˆ  )Arˆ  r;  Útree_flattenÚ#maybe_lift_tracked_freevar_to_inputrš   Útree_unflattenr®   r€  ro  r¶  rA  rB  r›  rŽ  Ú	positionsrž  r&  Úget_line_of_code_headerÚtrace_call_logr=  rT   r“  r)   Úget_contextrb  r,  r¸   r
   rÑ   rg   r¹  rE  r”  Ú_lineno_mapr•  rÈ   Ú__code__rß   r–  r«  rÅ   rD  r—  r5  r/   r‰  rñ   r¯   rÂ  Úis_co_filename_from_nn_modulesÚframe_summaryr¿  r	  rŸ   ÚStackSummaryÚ	from_listÚformatrÍ  rš  rþ  r   rÿ  Útrack_nodes_for_deduplicationrö   Ú
track_node)r~   r‚  rÙ  r¥   r¦   r5  Ú	type_exprÚproxy_factory_fnÚ	flat_argsÚ	tree_specÚnew_flat_argsr  Úmaybe_new_argr±  r¨  Úis_retracingÚorig_graphmodule_maybeÚndr«  Úframe_summariesÚmsgsr¥  r¦  rÍ  r§  r³   s     `                  @@@@€rw   r€  zSubgraphTracer.create_proxyü  s'  ý€ ðV �;‰;Ð"Ü#)×#6Ñ#6¸¸f°~Ó#FÑ ˆI�yØˆMØ ò 4�Ø $× HÑ HÈÓ M�Ø×$Ñ$ ]Õ3ð4ô "×0Ñ0°À	ÓJ‰LˆD�&ä‰WÑ!Ø�&˜$ ¨¨iÐ9Ió
ˆð
 ×Ñ×)Ñ)ˆô ×Ñ˜wÒ&¨4ð 4
ñ ,
ð
 ×-Ñ-ˆHà §¡Ñ.Ø×&Ñ&Ð2Ø×&Ñ&×-Ñ-Ð9àŸ)™)�Ø×3Ñ3¸8×;MÑ;M×;TÑ;TÐ3ÓU�÷Qô ×$Ñ$ T¬:Ð6LÓ+MÔNØ!)�”ð ˆØ�9‰9˜DŸN™NÑ*ð&¤\×%=Ñ%=¸b¿i¹iÓ%H×%LÑ%LØ"¡Ló&ó &Ð"ô Ð0´%·(±(×2FÑ2FÔGØ#�à&<×&BÑ&B×&HÑ&Hö&Ø "�B—G“Gò&�Ô"ð ,B×+MÑ+M�Ô(à*×2Ñ2×;Ñ;×JÑJð Õ)ð &*�Ô"Ø+/�Ô(Ø,0�Ô)Ø×,Ñ,ˆÙØ.=×.BÑ.BÓ.DˆB�G‰G�L‰LÐ*Ñ+àÐ3Ñ3Ø.2×.BÑ.BØ—‘—‘˜vÐ&ðFñ /ˆB�G‰G�L‰LÐ*Ò+ð �]Ò"Ø�{‰{Ð&ä ØRØ4°T×5GÑ5GÐ4HÐIØ 8Øõ	ð /3×.BÑ.Bà—G‘G—L‘LÜó à*,¯'©'¯,©,Ð7HÑ*I×*OÑ*OÓ*Qôó ðð	Fñ 	/ˆB�G‰G�L‰LÐ*Ñ+ð 	×*Ñ*¨2¨r¯w©wÔ7âØ ¨¯©¯©Ñ4Ø"$×"4Ñ"4�Ù"Ø6E×6JÑ6JÓ6L�B—G‘G—L‘LÐ!2Ñ3à ¨¯©¯©Ñ4ØÐ;Ñ;Ø6:×6JÑ6JØŸ™Ÿ™ vÐ.ðNñ 7�B—G‘G—L‘LÐ!2Ò3ð ˜]Ò*Ø—{‘{Ð.ä(Ø$XØ$&Ø(@Ø"$õ	ð 7;×6JÑ6JàŸG™GŸL™LØŸG™GŸL™LÐ):Ñ;¸FÑCÀAÑFððNñ 7�B—G‘G—L‘LÐ!2Ñ3ð  §¡§¡Ñ,Ø<>ˆOÙð ×8Ñ8Ô:Ø#×*Ñ*¨2×+;Ñ+;Ó+=Ô>Ü˜R ¨4Ó0�ò ð ×#Ñ#Ô%ô ×)Ñ)×3Ñ3°OÓD×KÑKÓMˆDØ"$§'¡'¨$£-ˆB�G‰GÔô �M‰M× Ñ ×8Ò8Ü�}‰}×#Ñ#×AÒAà×Ñ×,Ñ,×7Ñ7Ø×!Ñ!×,Ñ,¨b¯g©gôð ˆ	ùòy&s   ÇW!c                 ó‚  •— t        | j                  ||||«       | j                  �at        j                  |i |¤Ž}|D ]G  }t        |t        j                  j                  «      sŒ(|j                  | j                  k(  rŒBJ d«       ‚ t        ‰
| �-  ||||||«      }	| j                  j                  |	j                  d<   |	S )Nz2create_node using arg not from this SubgraphTracerrt  )r„  ro  rˆ  r;  Úarg_tree_leavesr,  r¸   r
   r  rg   r®   rƒ  r  rE  )r~   rÛ  rÙ  r¥   r¦   r5  r¿  rÁ  r  rD  r³   s             €rw   rƒ  zSubgraphTracer.create_node³  s¹   ø€ ô 	˜t×0Ñ0°"°f¸dÀFÔKØ�;‰;Ð"Ü×.Ñ.°Ð?¸Ñ?ˆIØ ò �Ü! #¤u§x¡x§}¡}Ô5ØØ—y‘y D§J¡JÓ.ð ØHóÐ.ðô ‰wÑ" 2 v¨t°V¸TÀ9ÓMˆØ*.×*;Ñ*;×*EÑ*Eˆ�	‰	Ð&Ñ'Øˆrv   c                 óÞ  — t        |j                  «      dkD  r”g }|j                  j                  «       D ]S  }|j                  | j                  k7  sŒ|j	                  t        t        |j                  j                  «      «      «       ŒU |D ]  }|j                  j                  |«       Œ | j                  j                  |«       | j                  j                  |j                  d «       y rn  )r2  r  rÀ  rg   r_  rk  rž   r¹  rx  rz  rŒ  r5  )r~   rD  Úuser_graph_nodesÚuserÚother_graph_nodes        rw   r†  zSubgraphTracer.remove_nodeÆ  s¿   € Üˆt�z‰z‹?˜QÒØ46ÐØŸ
™
Ÿ™Ó)ò N�ð —:‘: §¡Ó+ð %×+Ñ+¬H´T¸$¿*¹*×:JÑ:JÓ5KÓ,LÕMðNð %5ò DÐ Ø ×&Ñ&×1Ñ1Ð2BÕCðDà�
‰
×Ñ˜dÔ#Ø× Ñ ×$Ñ$ T§Y¡Y°Õ5rv   c                 ó¢  — t         j                  d||�|j                  «       nd|| j                  |«       |€| j                  €J d|› d|› d�«       ‚| j
                  r`| j                  €Tt        |d¬«      sG| j                  j                  j                  |g «      j                  t        j                  «       «       t        || j                  «      }| j                  rqt        t!        | j                  «      «      }| j                  |   j"                  }|r| j$                  j'                  |«      }n7| j$                  j)                  |«      }n| j$                  j'                  d «      }|5  | j+                  d|d	i |¬
«      }	t-        |	j"                  |«       | j                  r>|r<| j                  j/                  «       \  }
}|	| j                  |<   || j                  |
<   n|	| j                  |<   | j
                  }t0        j2                  j5                  «       }|s.|s,t7        |t0        j8                  «      r| j;                  ||«       t7        |t0        j<                  «      rQt7        |j"                  j>                  t@        jB                  «      r#|	| jD                  |j"                  j>                  <   |	cd d d «       S # 1 sw Y   y xY w)Nz7create_graph_input %s %s %s at debug_level %s before=%sz(none)z0you are required to provide a source for inputs z example_val z on the root tracerT)Úonly_allow_inputrÙ  ru   ©r¿  )#r’   r=  r5  r’  rˆ  rÜ   r>   ro  r  Ú
setdefaultrš   r   Úextract_stackrP   rz  rñ   rk  rD  rg   Úinserting_beforeÚinserting_afterr€  rW   Úpopitemr¸   ÚcompilerÚis_compilingr,  rÒ   Ú_lift_basic_symbolsrô  r#  r$  r%  r~  )r~   r5  r¿  rG  Úbeforero   Ú	prev_namerD  Úctxr×  r±   r²   Úis_strict_exportÚis_non_strict_exports                 rw   rB  z!SubgraphTracer.create_graph_inputÜ  sd  € ô 	�	‰	ØEØØ#Ð/ˆF�K‰KŒM°XØØ×ÑØô	
ð ˆ>Ø—;‘;Ð*ð ØBÀ4À&ÈÐVcÐUdÐdwÐxóÐ*ð �>Š>˜dŸk™kÐ1Ü'¨ÀÕFØ×!Ñ!×7Ñ7×BÑBÀ6È2ÓN×UÑUÜ"×0Ñ0Ó2ôô # 4¨×)AÑ)AÓBˆØ×#Ò#ÜœX d×&>Ñ&>Ó?Ó@ˆIØ×+Ñ+¨IÑ6×;Ñ;ˆDÙØ—j‘j×1Ñ1°$Ó7‘à—j‘j×0Ñ0°Ó6‘à—*‘*×-Ñ-¨dÓ3ˆCØñ /	Ø×%Ñ% m°T¸2¸rÈYÐ%ÓWˆEÜ˜eŸj™j¨-Ô8Ø×'Ò'©FØ×/Ñ/×7Ñ7Ó9‘��1Ø16�×(Ñ(¨Ñ.Ø./�×(Ñ(¨Ò+à16�×(Ñ(¨Ñ.ð2  $Ÿ~™~ÐÜ#(§>¡>×#>Ñ#>Ó#@Ð á$Ù,Ü˜}¬e¯l©lÔ;à×(Ñ(¨¸Ô?ô ˜-¬¯©Ô6¼:Ø×"Ñ"×'Ñ'¬¯©ô<ð ?D�×"Ñ" =×#5Ñ#5×#:Ñ#:Ñ;Ø÷_/	÷ /	ò /	ús   Å/EKËKc                 ón  — | j                   €J d«       ‚|j                  j                  d   }t        |t        j
                  «      rE|j                  j                  | j                  v r#| j                  |j                  j                     S || j                  v r| j                  |   S |j                  | j                   k7  r| j                   j                  |«       |j                  j                  d   }| j                  |j                  j                  t        |«      |«      }|| j                  |<   |S )NzIlift_tracked_freevar_to_input should not be called on root SubgraphTracerrG  )rˆ  rD  rE  r,  r¸   rô  r#  r~  r�  r�  Úlift_tracked_freevar_to_inputrB  r5  rC  )r~   r×  rG  Ú	new_proxys       rw   rá  z,SubgraphTracer.lift_tracked_freevar_to_input7	  s  € ð �{‰{Ð&ð 	
ØWó	
Ð&ð Ÿ
™
Ÿ™¨Ñ8ˆô �}¤e§l¡lÔ3Ø×"Ñ"×'Ñ'¨4×+=Ñ+=Ñ=à×%Ñ% m×&8Ñ&8×&=Ñ&=Ñ>Ð>ð
 �D×(Ñ(Ñ(Ø×'Ñ'¨Ñ.Ð.ð
 �<‰<˜4Ÿ;™;Ò&Ø�K‰K×5Ñ5°eÔ<àŸ
™
Ÿ™¨Ñ8ˆØ×+Ñ+Ø�J‰J�O‰OœT -Ó0°-ó
ˆ	ð '0ˆ×Ñ˜UÑ#ØÐrv   c                 ó  ‡ — t        |t        j                  j                  «      sDt        |t        «      r2t	        ˆ fd„|j
                  |j                  |j                  fD «       Ž S |S |j                  ‰ k(  r|S ‰ j                  |«      S )z£
        If arg is a free variable, then lift it to be an input.
        Returns the new lifted arg (if arg was a freevar), else the
        original arg.
        c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr{   )r°  )r  Úsub_argr~   s     €rw   r!  zESubgraphTracer.maybe_lift_tracked_freevar_to_input.<locals>.<genexpr>l	  s$   øè ø€ ò à#ð ×@Ñ@À×Iñùs   ƒ)
r,  r¸   r
   rh  ÚsliceÚstartÚstopÚstepr�  rá  )r~   r  s   ` rw   r°  z2SubgraphTracer.maybe_lift_tracked_freevar_to_input_	  sy   ø€ ô ˜#œuŸx™xŸ~™~Ô.ô
 ˜#œuÔ%Üóà(+¯	©	°3·8±8¸S¿X¹XÐ'Fôðð ð �
Ø�Z‰Z˜4ÒØˆJØ×1Ñ1°#Ó6Ð6rv   Úe_proxyc                 ó  ‡ ‡— |j                   Št        ‰t        «      sJ ‚dt        fˆ fd„}ˆfd„}t        |t        j
                  «      �rõt        |j                  «       «      D ]�  \  }} ||«      sŒt        j                  d|||‰j                  «       t        ‰||dt        j                  j                  j                  j                  ||fi t!        |«      ¬«      }‰ j#                  ||«       Œ� |j$                  t        j&                  u r«t        |j)                  «       «      D ]�  \  }} ||«      sŒt        j                  d|||‰j                  «       t        ‰||dt        j                  j                  j*                  j                  ||fi t!        |«      ¬«      }‰ j#                  ||«       Œ� �n6|j$                  t        j,                  u rA‰ j#                  |j/                  «       |«       ‰ j#                  |j1                  «       |«       nÙ|j$                  t        j2                  t        j4                  hv rA‰ j#                  |j7                  «       |«       ‰ j#                  |j9                  «       |«       nl|j$                  t        j:                  t        j<                  hv r@‰ j#                  |j?                  «       |«       ‰ j#                  |jA                  «       |«       tC        |«      rC|jE                  «       \  }}	|D ]*  }
tG        ||
«      }‰ j#                  |tG        ||
«      «       Œ, y y t        |t        jH                  «      r/ ||«      r&|jJ                  jL                  }|‰jN                  |<   y y y )Nr´   c                 ó>  •— ddl m}  || «      xr� t        | j                  j                  t
        j                  «      xr] | j                  j                  j                  | j                  j                  «      xr" | j                  j                  ‰j                  vS )Nr   )r   )
r0  r   r,  rD  r#  r$  r%  rè   Úis_unbacked_symintr~  )r  r   r~   s     €rw   Ú	need_bindz8SubgraphTracer.track_unbacked_symbols.<locals>.need_bind‘	  sq   ø€ ÝIñ ˜A“ò :Ü˜qŸv™vŸ{™{¬E¯L©LÓ9ò:à—F‘F×$Ñ$×7Ñ7¸¿¹¿¹ÓDò:ð —F‘F—K‘K t×'9Ñ'9Ð9ð	rv   c                 óX   •—  ‰j                   |i |¤Ž}t        |j                  | «       |S r{   )r€  rW   rD  )rG  r¥   r¦   r×  r�  s       €rw   Ú_proxy_with_example_valuezHSubgraphTracer.track_unbacked_symbols.<locals>._proxy_with_example_value›	  s-   ø€ Ø'�F×'Ñ'¨Ð8°Ñ8ˆEÜ˜eŸj™j¨-Ô8ØˆLrv   z>_track_unbacked_symbols %s for %s.size()[%s] at debug_level %sr]  rÒ  z@_track_unbacked_symbols %s for %s.stride()[%s] at debug_level %s)(r�  r,  rê   r¡   r¸   rÒ   Ú	enumerater|  r’   r=  r’  r†  Úopsrk  Úsym_sizers   rC  Útrack_unbacked_symbolsÚlayoutÚstridedÚstrideÚ
sym_strideÚ
sparse_cooÚ_indicesÚ_valuesÚ
sparse_csrÚ
sparse_bsrÚcrow_indicesÚcol_indicesÚ
sparse_cscÚ
sparse_bscÚccol_indicesÚrow_indicesr   Ú__tensor_flatten__r¿  rô  rD  r#  r~  )r~   rG  rê  rî  rð  Úir  Ú
lazy_proxyÚattrsrÝ  rD  Úinner_tr#  r�  s   `            @rw   rô  z%SubgraphTracer.track_unbacked_symbols~	  s  ù€ ð  —‘ˆÜ˜&¤.Ô1Ð1Ð1ð	œDõ 	ô	ô
 �m¤U§\¡\Õ2Ü! -×"4Ñ"4Ó"6Ó7ò ?‘��1Ù˜Q•<Ü—I‘IØXØØØØ×*Ñ*ôô "+ØØ1ØØ'ÜŸ	™	Ÿ™×/Ñ/×3Ñ3Ø  !˜ØÜ"& q£'ô	"�Jð ×/Ñ/°°:Õ>ð'?ð* ×#Ñ#¤u§}¡}Ñ4Ü% m×&:Ñ&:Ó&<Ó=ò C‘D�A�qÙ  •|ÜŸ	™	Ø^ØØ#ØØ"×.Ñ.ôô &/Ø"Ø5ØØ+Ü!ŸI™IŸN™N×5Ñ5×9Ñ9Ø$ a˜LØÜ&*¨1£gô	&˜
ð ×3Ñ3°A°zÕBò'Cð* ×%Ñ%¬×)9Ñ)9Ñ9Ø×+Ñ+¨M×,BÑ,BÓ,DÀgÔNØ×+Ñ+¨M×,AÑ,AÓ,CÀWÕMØ×%Ñ%¬%×*:Ñ*:¼E×<LÑ<LÐ)MÑMØ×+Ñ+¨M×,FÑ,FÓ,HÈ'ÔRØ×+Ñ+¨M×,EÑ,EÓ,GÈÕQØ×%Ñ%¬%×*:Ñ*:¼E×<LÑ<LÐ)MÑMØ×+Ñ+¨M×,FÑ,FÓ,HÈ'ÔRØ×+Ñ+¨M×,EÑ,EÓ,GÈÔQÜ,¨]Ô;Ø*×=Ñ=Ó?‘
��sØ!ò Q�DÜ% m°TÓ:�GØ×/Ñ/°¼ÀÈ$Ó9OÕPñQð <ô
 ˜¤u§|¡|Ô4á˜Ô'Ø$×)Ñ)×.Ñ.�Ø-4�×$Ñ$ TÒ*ð (ð 5rv   rG  Úsrcc           	      óÔ  ‡ — 	 ddt         t        t        j                  f   dt        t
           dt        dd fˆ fd„}t        |t        j                  «      �rnt        |j                  «       «      D ]-  \  }} |||�t        |t        j                  |«      nd d¬«       Œ/ |j                  t        j                  u r€t        |j!                  «       «      D ]-  \  }} |||�t        |t        j"                  |«      nd d¬«       Œ/  ||j%                  «       |�t        |t        j&                  «      nd d¬«       �n6|j                  t        j(                  u rA‰ j+                  |j-                  «       |«       ‰ j+                  |j/                  «       |«       nÙ|j                  t        j0                  t        j2                  hv rA‰ j+                  |j5                  «       |«       ‰ j+                  |j7                  «       |«       nl|j                  t        j8                  t        j:                  hv r@‰ j+                  |j=                  «       |«       ‰ j+                  |j?                  «       |«       tA        |«      rG|jC                  «       \  }}|D ].  }tE        ||«      }	‰ j+                  |	|�tG        ||«      nd «       Œ0 y y t        |t        j                  «      r
 |||«       y y )	Nr  ro   rÛ  r´   c                 óì  •— t        | «      sy t        | t        j                  «      sJ ‚‰j	                  | «      }t        |«      dk(  ry ‰j                  �Ý‰j                  j                  | |«       |D ]»  }‰j                  j                  |   }|j                  j                  d   }t        |t        j                  «      sJ ‚‰j                  t        |«      t        |«      |||¬«      }t        j                  d||�|j!                  «       nd‰j"                  «       |‰j$                  |<   Œ½ y t        |«      dk(  sJ d|› d| › �«       ‚|€J d	| › d
| › d�«       ‚t'        t)        |«      «      }‰j                  t        |«      t        | «      | ||¬«      }t        j                  d| |�|j!                  «       nd‰j"                  «       t+        || dd d¬«      |j                  j                  d<   y )Nr   rG  )rÛ  ro   z4_lift_symbols_in_symint %s from %s at debug_level %szsubgraph inputsr   zyFor root tracer, we only expect to bind basic symbols (compound symbols should be cached before) but got unbound symbols z in zSource of 'zÕ' is None when lifting it to input of top-level. If it's an unbacked symbol, this could be because it's not tracked with lazy_bind_unbacked_symbols. Otherwise, should provide a source when create_graph_input for `z` at root tracer.F)Úpass_arg_as_tensorr=  Ú	is_tensorr@  )r   r,  r¸   rô  Úlookup_unbound_symbolsr2  rˆ  rÚ  r~  rD  rE  rB  r�   rC  r’   r=  r5  r’  r�  rñ   ÚiterrZ   )	r  ro   rÛ  Úself_to_be_boundÚs0Úparent_proxyÚexample_valÚphr~   s	           €rw   Ú_lift_symbols_in_symintzCSubgraphTracer._lift_basic_symbols.<locals>._lift_symbols_in_symintè	  s  ø€ ô
 ˜q”>Øä˜a¤§¡Ô.Ð.Ð.Ø#×:Ñ:¸1Ó=ÐÜÐ#Ó$¨Ò)Øð �{‰{Ð&à—‘×/Ñ/°°6Ô:Ø*ò <�BØ#'§;¡;×#<Ñ#<¸RÑ#@�LØ".×"3Ñ"3×"8Ñ"8¸Ñ"I�KÜ% k´5·<±<Ô@Ð@Ð@Ø×0Ñ0Ü˜B›Ü˜[Ó)Ø#Ø%Ø%ð 1ó �Bô —I‘IØNØØ)/Ð);˜Ÿ™œÐARØ×(Ñ(ô	ð :<�D×(Ñ(¨Ò6ñ#<ô( Ð+Ó,°Ò1ð ðHØHXÐGYÐY]Ð^_Ð]`ðbóÐ1ð Ð)ð Ø! ! ð %WàWXÐVYÐYjðlóÐ)ô
 œ$Ð/Ó0Ó1�Ø×,Ñ,Ü˜“GÜ˜“GØØ!Ø!ð -ó �ô —	‘	ØJØØ%+Ð%7�F—K‘K”MÐ=NØ×$Ñ$ô	ô ,4ØØØ',Ø $Ø#ô,�—‘—‘˜ZÒ(rv   T)rÛ  )F)$r	   rs   r¸   rô  r   r   r¡   r,  rÒ   rñ  r|  rE   rD   ÚSIZErõ  rö  r÷  ÚSTRIDEÚstorage_offsetÚSTORAGE_OFFSETrù  rÚ  rú  rû  rü  rý  rþ  rÿ  r   r  r  r  r   r  r¿  r8   )
r~   rG  r	  r  r  r  r  rÝ  rD  r  s
   `         rw   rÚ  z"SubgraphTracer._lift_basic_symbolsá	  s¤  ø€ ð !ñB	Ü”Sœ%Ÿ,™,Ð&Ñ'ðB	äœVÑ$ðB	ô ðB	ð õ	B	ôH �m¤U§\¡\Õ2Ü! -×"4Ñ"4Ó"6Ó7ò 	‘��1Ù'Øð ˜?ô -¨S´.×2EÑ2EÀqÔIà!àöð	ð ×#Ñ#¤u§}¡}Ñ4Ü% m×&:Ñ&:Ó&<Ó=ò 	‘D�A�qÙ+Øð  #˜ô 1°´n×6KÑ6KÈQÔOà!%à#öð	ñ (Ø!×0Ñ0Ó2ð ˜?ô -¨S´.×2OÑ2OÔPà!à÷ð ×%Ñ%¬×)9Ñ)9Ñ9Ø×(Ñ(¨×)?Ñ)?Ó)AÀ3ÔGØ×(Ñ(¨×)>Ñ)>Ó)@À#ÕFØ×%Ñ%¬%×*:Ñ*:¼E×<LÑ<LÐ)MÑMØ×(Ñ(¨×)CÑ)CÓ)EÀsÔKØ×(Ñ(¨×)BÑ)BÓ)DÀcÕJØ×%Ñ%¬%×*:Ñ*:¼E×<LÑ<LÐ)MÑMØ×(Ñ(¨×)CÑ)CÓ)EÀsÔKØ×(Ñ(¨×)BÑ)BÓ)DÀcÔJÜ,¨]Ô;Ø*×=Ñ=Ó?‘
��sØ!ò �DÜ% m°TÓ:�GØ×,Ñ,Ø¸#¸/¤¨C°Ô!6Ètõñð <ô ˜¤u§|¡|Ô4Ù#ØØõð 5rv   r  r´   c                 ó´  — |j                   j                  j                  }t        |«      dk(  rg S g }|D ]”  }|| j                  vr|j                  |«       Œ#| j                  |   }t        |t        «      r |«       }|| j                  |<   t        |t        j                  j                  «      r|j                  | u rŒ‹J d|› d�«       ‚ t        |d„ ¬«      S )Nr   zThe proxy of symbol z" doesn't belong to current tracer.c                 ó   — | j                   S r{   )r5  )r  s    rw   rW  z7SubgraphTracer.lookup_unbound_symbols.<locals>.<lambda>v
  s
   € °·±€ rv   )r„   )rD  r#  r   r2  r~  rš   r,  r†  r¸   r
   rh  r�  r
  )r~   r  r   Úto_be_boundr  r×  s         rw   r  z%SubgraphTracer.lookup_unbound_symbolsc
  sÒ   € Ø—v‘v—{‘{×/Ñ/ˆÜˆ|Ó Ò!ØˆIàˆØò 	ˆBØ˜×+Ñ+Ñ+Ø×"Ñ" 2Ô&Øà×&Ñ& rÑ*ˆEÜ˜%¤Ô+Ù›�Ø).�×"Ñ" 2Ñ&Ü˜e¤U§X¡X§^¡^Ô4¸¿¹ÈÒ9Mð Ø& r dÐ*LÐMóÐMð	ô �kÑ'7Ô8Ð8rv   )NFN)NNN)NNNNr`  )rp   rq   rr   rœ   r   rÂ  r€  rƒ  r†  rB  rá  r°  r	   r†  r¸   r
   rh  rô  rô  rÒ   r   r   rÚ  rž   r$  r%  r  r»   r¼   s   @rw   rê   rê   ›  sÃ   ø„ ñõBòJCð4 ØØõuðp HLõò&6ð. DHóXòv&òP7ð>`5Ø&+¨I°u·x±x·~±~Ð,EÑ&Fó`5ðF~Ø" 5§<¡<°·±Ð#=Ñ>ð~ØEMÈfÑEUó~ðD9¨¯©ð 9¸¸e¿l¹lÑ9K÷ 9rv   rê   )¸rœ   r  rd  rÅ   r§  rõ  r  r    r1  rÎ  rA  rŸ   r‹  Údataclassesr   Útypingr   r   r   r   r   r	   r$  Útorch._guardsr¸   Útorch._loggingÚtorch.distributedÚdistributedr¦  Útorch.nnÚtorch.utils._pytreer~  Ú_pytreer;  r
   Útorch._dynamo.excr   r   r   r   r   r   r   Útorch._subclasses.fake_tensorr   Útorch._utils_internalr   rÉ  r   Ú%torch.fx.experimental._backward_stater   r0  r   r   r   r   Útorch.fx.passes.runtime_assertr   Útorch.utils._python_dispatchr   r8  r   r   r   r�   r!   Úbackends.registryr"   r#   Úbytecode_transformationr$   r%   r&   r'   r(   r)   r`  r*   Úcurrent_scope_idr+   r,   r-   r.   r/   r0   Úgraph_deduplicationr1   Úgraph_region_trackerr2   rI  r3   r4   Úmutation_guardr5   rÕ   r6   r7   ro   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   Úvariables.baserX   Úvariables.builderrY   rZ   r[   r\   Úvariables.listsr]   Úvariables.miscr^   r_   Úvariables.nn_moduler`   Úvariables.tensorra   rb   rc   rd   Úvariables.torch_functionre   rL  rf   Ú	getLoggerrp   r’   r¡  ÚgetArtifactLoggerÚgraph_tabular_logrÇ  Úgraph_sizes_logr´  rm   ry   Ú	lru_cacher“   r•   r©   r¹   rº   r«   r¾   r·   r�   Úobjectra  rÔ   rt  r„  r  rò   r†  ÚTracerrê   ru   rv   rw   ú<module>r@     sf  ðñó* Û Û Û Û Û Û Û Û 	Û 
Û Û Ý !ß F× Fã ã Û Ý  Û ß $Ð $Ý ß N÷õ õ 5Ý 0Ý :Ý ?÷ó õ KÝ Fç WÕ Wß 5÷õ õ 'Ý Ý -÷õ õ ;Ý 4ß /Ý 0ß @÷÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ õ( ,÷ó õ .ß 6Ý 1÷ó õ Cñ ÝHð €g×Ò˜Ó!€Ø—N’N×4Ò4°X¸wÓGÐ Ø—’×1Ò1°(¸LÓI€Ø—.’.×2Ò2°8¸]ÓK€Ø—’×1Ò1°(¸LÓI€ñ �$Ô÷ð ó ð÷ñ ð0 €×Ò�TÓñ4ó ð4ð ÷-ð -ó ð-òô	%�U—X’X—_’_ô 	%÷ ñ  ðF 	ˆS�&ˆ[Ñ€÷l,ñ l,ð`1Jð òFðR &�i—o’oÓ'Ð ÷2ñ 2ô[9�R—Y’Yõ [9rv   