Ë
    L²jû ã                   óð	  — 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ZddlZddlZddlZddlmZmZ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mZ ddl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.m/Z/ dd	l0m1Z1 dd
l2m3Z3m4Z4 ddl#m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJmKZKmLZLmMZMmNZNmOZO ddlPmQZQ ddlRmSZS ddlTmUZU ddlVmWZW ddlXmYZYmZZZmZ[m\Z\ ddl]m^Z^m_Z_ ddl`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZk ddllmlZl ddlmmnZn ddlompZp ddlqmrZr dd lZmsZsmtZtmuZumvZvmwZw dd!lxmyZymzZz dd"l{m|Z| dd#l}m~Z~mZ dd$l€m�Z� dd%l1m‚Z‚mƒZƒ dd&l„m…Z… dd'l†m‡Z‡mˆZˆm‰Z‰ dd(lŠm‹Z‹mŒZŒm�Z�mŽZŽm�Z�m�Z�m‘Z‘m’Z’m“Z“m”Z”m•Z•m–Z–m—Z—m˜Z˜m™Z™mšZš dd)l+m›Z›mœZœm�Z�mžZžmŸZŸm Z m¡Z¡m¢Z¢m£Z£m¤Z¤m¥Z¥m¦Z¦m§Z§m¨Z¨m©Z©mªZªm«Z«m¬Z¬m­Z­m®Z®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½ dd/l¾m¿Z¿ dd0lÀmÁZÁmÂZÂmÃZÃ dd1lÄmÅZÅ dd2lÆmÇZÇ erdd3lÈmÉZÉ dd4lÊmËZË dd5lÌmÍZÍ dd6lÎmÏZÏ dd7lÐmÑZÑ  e�j¤                  eÓ«      ZÔe$�jª                  �j­                  eÓd8«      Z×e$�jª                  �j­                  eÓd9«      ZØe$�jª                  �j­                  eÓd:«      ZÙe$�jª                  �j­                  eÓd;«      ZÚe1�j¶                  ZÛe$�j¸                  �jº                  �j¼                  Zße$�j¸                  �jº                  �jÀ                  Zád<ed=eâeãef   d>ed?ef   fd@„Zä edA¬B«       G dC„ dD«      «       Zå edA¬B«       G dE„ dF«      «       Zæ	 dpdGeçeèe$j^                  eãdz  f      dHeée$�jÔ                  �jÖ                  �jØ                     dz  d>eée$�jÔ                  �jÖ                  �jØ                     fdI„Zíe�jÜ                  d>efdJ„«       Zïe G dK„ dL«      «       ZðdMed>eg eçe   f   fdN„Zñ G dO„ dPe$�j¸                  �jº                  «      Zò G dQ„ dR«      Zóeâeãeôf   Zõe G dS„ dT«      «       Zöe G dU„ dV«      «       Z÷e G dW„ dX«      «       Zøe G dY„ dZ«      «       Zùd[eõd>eâeãef   fd\„Zú G d]„ d^e÷«      Zû G d_„ d`eû«      Zü G da„ db«      ZýdcZþddeüdeeãdfedgedhed>dfdi„Zÿ e�j                   «       �Z e dj«      �Z e!dk«      �Z G dl„ dm«      �Z G dn„ doe.�j
                  «      �Zy)qa¶  
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)ÚCallableÚ	GeneratorÚSequence)Ú	dataclassÚfield)ÚCodeType)ÚAnyÚcastÚOptionalÚTYPE_CHECKINGÚUnion)Ú	ParamSpecÚTypeVar)ÚfxÚTensor)Úguards)ÚShortenTracebackÚTensorifyScalarRestartAnalysis)ÚCompileContextÚ	CompileIdÚGlobalContextCheckpointStateÚSourceÚtracingÚTracingContext)ÚFakeScriptObject)Úis_opaque_type)Ú
FakeTensor)Úsignpost_event)Ú_ConstraintTarget)Ú_make_graph_module)ÚBackwardState)Úfree_symbolsÚguard_scalarÚis_symbolicÚShapeEnvÚSpecializationÚuninteresting_files)ÚTarget)Úinsert_deferred_runtime_asserts)Ú
OrderedSet)Úis_traceable_wrapper_subclassé   )ÚconfigÚexcÚloggingÚ	variables)Ú
CompiledFnÚ
CompilerFn)Úcreate_binary_sliceÚcreate_binary_subscrÚcreate_build_tupleÚcreate_call_functionÚcreate_dup_topÚcreate_instructionÚcreate_load_constÚcreate_rot_nÚcreate_swapÚInstructionÚ	unique_id)Úcode_context)Ú	PyCodegen)Úenter_new_scope)Úget_interface_for_device)ÚBackendCompilerFailedÚ!exceptions_allowed_to_be_fallbackÚ	SkipFrameÚunimplementedÚunimplemented_with_warning)Úhas_user_objectsÚindex_to_bytecode_constructor)Úapply_graph_deduplication)Ú#get_backend_override_for_compile_idÚ+get_inductor_config_override_for_compile_id)ÚGraphRegionTracker)ÚGuardBuilderÚinstall_guard)Úis_dynamic_nn_module)ÚAttributeMutationExistingÚSideEffectsÚValueMutationExisting)Ú_get_source_debug_nameÚ
AttrSourceÚBackwardStateSourceÚConstantSourceÚDictGetItemSourceÚGetItemSourceÚGlobalStateSourceÚis_constant_sourceÚis_from_local_sourceÚLocalSourceÚNumpyTensorSourceÚParamBufferSourceÚShapeEnvSourceÚSyntheticLocalSourceÚTensorPropertyÚTensorPropertySource)Ú_extract_tensor_dictÚcheckpoint_paramsÚCleanupHookÚclone_inputsÚcompilation_time_metricsÚcount_callsÚcountersÚdynamo_timedÚget_chromium_event_loggerÚget_instruction_source_311Úget_locals_to_stealÚget_static_address_typeÚget_unique_name_wrtÚgraph_break_reasonsÚincrement_op_countÚistypeÚlazy_format_graph_codeÚ
LazyStringÚnn_module_proxyÚsameÚset_example_value)ÚBackwardStateGraphArgÚGraphArgÚTrackedFakeÚwrap_fx_proxy)ÚContextWrappingVariable)ÚClosureConversionErrorÚVariableTracker)ÚBaseListVariable)ÚNullVariable)ÚNNModuleVariable)ÚNumpyNdarrayVariableÚSymNodeVariableÚUnspecializedPythonVariable)ÚTensorWithTFOverrideVariable)ÚUserDefinedDictVariable©ÚDynamoProfilerState)ÚCompilePackage)ÚInstructionTranslatorBase)Ú_CudagraphAnnotation)ÚStorageWeakRefÚgraphÚ
graph_codeÚgraph_sizesÚ
trace_callÚcompiler_fnÚconfig_patchesÚreturn.c                 ón   ‡ ‡— dt         dt         dt         fˆ ˆfd„}t        ‰ dd«      |_        ‰ |_        |S )zê
    Wrap a compiler function to apply inductor config patches during compilation.

    Passes config_patches as a keyword argument so that compile_fx can
    propagate them to backward compilation via its inner_compile wrapping.
    ÚgmÚexample_inputsr“   c                 ó   •—  ‰| |‰¬«      S )N)r’   © )r•   r–   r‘   r’   s     €€úY/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_dynamo/output_graph.pyÚwrappedz+_wrap_with_inductor_config.<locals>.wrappedÔ   s   ø€ Ù˜2˜~¸nÔMÐMó    Ú__name__z	<wrapped>)r	   Úgetattrrœ   Ú__wrapped__)r‘   r’   rš   s   `` r™   Ú_wrap_with_inductor_configrŸ   Ê   sA   ù€ ðN”Cð N¬ð N´ö Nô ˜{¨J¸ÓD€GÔØ%€GÔØ€Nr›   T)Úfrozenc                   ó"   — e Zd ZU eed<   eed<   y)ÚAliasingInfoÚhas_aliasingÚmsgN©rœ   Ú
__module__Ú__qualname__ÚboolÚ__annotations__Ústrr˜   r›   r™   r¢   r¢   Ý   ó   … àÓØ	„Hr›   r¢   c                   ó"   — e Zd ZU eed<   eed<   y)ÚMutationInfoÚhas_mutationr¤   Nr¥   r˜   r›   r™   r­   r­   ã   r«   r›   r­   Útensors_with_sourcesÚstop_atc                 óp  — |€
t        «       }t        «       }g }| D ]@  \  }}t        |t        j                  «      sŒ!|j                  }|€Œ0|j                  |«       ŒB |rV|j                  «       }||v rŒ||v rŒ|j                  |«       |j                  D ]  \  }}|€Œ	|j                  |«       Œ |rŒV|S )aÜ  Collect all grad_fns reachable from tensors' autograd graphs.

    Performs a DFS traversal and collects all visited grad_fns.
    Optionally stops traversal nodes in stop_at set. This signals the
    autograd.grad boundary.

    Args:
        tensors_with_sources: List of (tensor, source_name) tuples to start search from.
        stop_at: Optional set of grad_fns where traversal should stop (excluded from result).

    Returns:
        Set of all reachable grad_fns.
    )	ÚsetÚ
isinstanceÚtorchr   Úgrad_fnÚappendÚpopÚaddÚnext_functions)	r¯   r°   ÚvisitedÚstackÚtensorÚ_rµ   ÚnodeÚnext_fns	            r™   Úcollect_reachable_grad_fnsrÀ   é   sÁ   € ð" €Ü“%ˆä.1«e€GØ-/€Eà)ò &‰	ˆ�Ü�fœeŸl™lÕ+Ø—n‘nˆGØÑ"Ø—‘˜WÕ%ð	&ñ Ø�y‰y‹{ˆØ�7‰?Øð �7‰?ØØ�‰�DÔØ×-Ñ-ò 	&‰JˆG�QØÑ"Ø—‘˜WÕ%ð	&ò ð €Nr›   c                  ó4   — t        j                  t        «      S ©N)Útorchdynamo_loggingÚget_step_loggerÚlogr˜   r›   r™   Ú_step_loggerrÆ     s   € ä×.Ñ.¬sÓ3Ð3r›   c                   óV   — e Zd ZU dZeed<   eej                     ed<   dZ	e
ed<   dd„Zy)	ÚGraphCompileReasonzOStores why a given output graph was compiled; i.e. what caused the graph break.ÚreasonÚ
user_stackTÚgraph_breakNc                 óH   — | j                   rt        j                  | «       y y rÂ   )rË   rp   r¶   ©Úselfs    r™   Ú__post_init__z GraphCompileReason.__post_init__$  s   € Ø×ÒÜ×&Ñ& tÕ,ð r›   ©r“   N)rœ   r¦   r§   Ú__doc__rª   r©   ÚlistÚ	tracebackÚFrameSummaryrË   r¨   rÏ   r˜   r›   r™   rÈ   rÈ     s,   … áYàƒKØ�Y×+Ñ+Ñ,Ó,ð €K�Óô-r›   rÈ   Úrandom_callsc                 ó.   ‡ — dt         t           fˆ fd„}|S )Nr“   c            
      óN   •— ‰D � ��cg c]  \  } }} | |i |¤Ž‘Œ c}}} S c c}}} w rÂ   r˜   )ÚfnÚargsÚkwargsrÕ   s      €r™   Ú_gen_rand_valuesz1_get_gen_rand_values_fn.<locals>._gen_rand_values*  s+   ø€ Ø<H×IÐIÑ(8¨¨D°&‘�DÐ#˜FÓ#ÔIÐIùÔIs   ˆ )rÒ   r	   )rÕ   rÛ   s   ` r™   Ú_get_gen_rand_values_fnrÜ   )  s   ø€ ðJœd¤3™iõ Jð Ðr›   c                   ó¬   ‡ — e Zd ZdZdeeej                  j                  f   ddfˆ fd„Z	defd„Z
deeej                  j                  f   ddfd„Zˆ xZS )ÚFakeRootModulez'Trick the constructor of fx.GraphModuleÚ
nn_modulesr“   Nc                 ól   •— t         ‰| �  «        |j                  «       D ]  \  }}t        | ||«       Œ y rÂ   )ÚsuperÚ__init__ÚitemsÚsetattr)rÎ   rß   ÚkÚvÚ	__class__s       €r™   râ   zFakeRootModule.__init__3  s6   ø€ Ü‰ÑÔØ×$Ñ$Ó&ò 	 ‰DˆAˆqÜ�D˜!˜QÕñ	 r›   c                  ó   — y)NzFakeRootModule(...)r˜   rÍ   s    r™   Ú__repr__zFakeRootModule.__repr__8  s   € Ø$r›   c                 óN   — |j                  «       D ]  \  }}t        | ||«       Œ y rÂ   )rã   rä   )rÎ   rß   rå   ræ   s       r™   Úadd_nn_moduleszFakeRootModule.add_nn_modules;  s*   € Ø×$Ñ$Ó&ò 	 ‰DˆAˆqÜ�D˜!˜QÕñ	 r›   )rœ   r¦   r§   rÑ   Údictrª   r´   ÚnnÚModulerâ   ré   rë   Ú__classcell__©rç   s   @r™   rÞ   rÞ   0  s\   ø„ Ù1ð  4¨¨U¯X©X¯_©_Ð(<Ñ#=ð  À$õ  ð
%˜#ó %ð ¨¨c°5·8±8·?±?Ð.BÑ)Cð  È÷  r›   rÞ   c                   ór   — e Zd Zdeddfd„Zdej                  j                  deej                     de
fd„Zy)ÚWrapperBackendÚbackendr“   Nc                 ó   — || _         y rÂ   )ró   )rÎ   ró   s     r™   râ   zWrapperBackend.__init__A  s	   € Ø#*ˆ�r›   r•   r–   c                 ó®  — 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)rd   Úrestorer•   ÚcopyÚdeepcopyró   Ú	candidateÚforwardr-   Úverify_correctnessrf   rv   ÚRuntimeErrorÚ	ExceptionrÅ   Ú	exception)rÎ   r•   r–   Úcopy_gmÚcorrectÚresults         r™   Ú__call__zWrapperBackend.__call__D  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)rœ   r¦   r§   r2   râ   r´   r   ÚGraphModulerÒ   r   r1   r  r˜   r›   r™   rò   rò   @  sE   „ ð+ 
ð +¨tó +ðØ—(‘(×&Ñ&ðØ8<¸U¿\¹\Ñ8Jðà	ôr›   rò   c                   óR   — e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   d	d„Z
y)
ÚBytecodeTracingTimingsaX  Accumulated wall-clock time (ns) for major components during Dynamo
    bytecode tracing that are not related to variable trackers.  Each field
    is an int accumulator that gets bumped via ``time.time_ns()`` in the
    corresponding hot-path wrapper.  To add a new timer, add a field here
    and wire up the wrapper in the relevant function.r   Úget_fake_value_nsÚcreate_proxy_nsÚ!wrap_to_fake_tensor_and_record_nsÚvariable_builder_call_nsNc                 ó|  — t        «       }i }t        j                  | «      D ]ƒ  }t        | |j                  «      }|dkD  sŒ|j                  j                  d«      }|dz  ||› d�<   t        j                  |g «      j                  |dz  «       t        | |j                  d«       Œ… |r |j                  di |¤Ž yy)z‚Flush accumulated timings to the bytecode_tracing chromium event
        and to compilation_time_metrics, then reset all counters.r   Ú_nsg    eÍÍAÚ_time_sN)Úbytecode_tracing)rk   ÚdataclassesÚfieldsr�   ÚnameÚremovesuffixrg   Ú
setdefaultr¶   rä   Útry_add_event_data)rÎ   Úchromium_logÚ
event_dataÚfÚns_valÚkeys         r™   Úreport_and_resetz'BytecodeTracingTimings.report_and_resett  s¶   € ô 1Ó2ˆàˆ
Ü×#Ñ# DÓ)ò 	)ˆAÜ˜T 1§6¡6Ó*ˆFØ˜‹zØ—f‘f×)Ñ)¨%Ó0�Ø.4°s©l�
˜c˜U '˜?Ñ+Ü(×3Ñ3°C¸Ó<×CÑCÀFÈSÁLÔQÜ˜˜aŸf™f aÕ(ð	)ñ Ø+ˆL×+Ñ+ÑMÀ*ÓMð r›   rÐ   )rœ   r¦   r§   rÑ   r  Úintr©   r  r  r	  r  r˜   r›   r™   r  r  g  s:   … ñ9ð Ð�sÓØ€O�SÓØ-.Ð% sÓ.Ø$%Ð˜cÓ%ôNr›   r  c                   ó¨  — e Zd ZU dZeed<   eed<   eej                  j                     ed<   e
e   ed<   eeeeef   f   ed<   eed<   eej                   j"                  j$                     ed<   ej&                  d	z  ed
<   ej(                  j*                  j,                  j.                  ed<   ej0                  j2                  ed<   eej0                  j4                     ed<   dZeed<   dZeed<   dZeed<   d	Zed	z  ed<   e de!fd„«       Z"e dej0                  j2                  fd„«       Ze deej0                  j4                     fd„«       Z#dd„Z$y	)ÚOutputGraphGuardsStatear  
    A base class containing fields that are considered "persistent" when we
    want to save all the important state for reconstrucing guards in a different
    process. Normally we don't need to add states here, but we may have to when
    the information is needed to serialize the guards, so the fields here are
    supposed to be serializable as a requirement.
    Úlocal_scopeÚglobal_scopeÚtorch_function_mode_stackÚguard_on_key_orderÚinput_source_to_sizes_stridesÚ
dual_levelÚfunctorch_layersNÚcurrent_deviceÚglobal_state_guardÚ_guardsÚ_aotautograd_guardsFÚexportÚskip_guards_checkÚexport_constraintsÚ%name_of_builtins_dict_key_in_fglobalsr“   c                 ó0   — t        dt        | «      › �«      ‚)Nz%shape_env shouldn't be accessed from )ÚAssertionErrorÚtyperÍ   s    r™   Ú	shape_envz OutputGraphGuardsState.shape_env¤  s   € äÐDÄTÈ$ÃZÀLÐQÓRÐRr›   c                 ó   — | j                   S rÂ   )r&  rÍ   s    r™   r   zOutputGraphGuardsState.guards¨  s   € à�|‰|Ðr›   c                 ó   — | j                   S rÂ   )r'  rÍ   s    r™   Úaotautograd_guardsz)OutputGraphGuardsState.aotautograd_guards¬  s   € à×'Ñ'Ð'r›   c                 ób  — t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  ¬«      S )N)r  r  r  r   r!  r"  r#  r$  r%  r+  r(  r*  r&  r'  r)  )r  r  r  r  r   r!  r"  r#  r$  r%  r+  r(  r*  r   r2  r)  rÍ   s    r™   Údump_guards_statez(OutputGraphGuardsState.dump_guards_state°  s�   € ä%Ø×(Ñ(Ø×*Ñ*Ø&*×&DÑ&DØ#×6Ñ6Ø*.×*LÑ*LØ—‘Ø!×2Ñ2Ø×.Ñ.Ø#×6Ñ6Ø26×2\Ñ2\Ø—;‘;Ø#×6Ñ6Ø—K‘KØ $× 7Ñ 7Ø"×4Ñ4ô
ð 	
r›   )r“   r  )%rœ   r¦   r§   rÑ   ÚScoper©   rÒ   r´   Ú	overridesÚTorchFunctionModer²   r   rì   rª   r	   r  Ú
_functorchÚpyfunctorchÚFuncTorchInterpreterÚdeviceÚ_CÚ_dynamor   ÚGlobalStateGuardr&  Ú	GuardsSetÚGuardEnvExprr(  r¨   r)  r*  r+  Úpropertyr%   r/  r2  r4  r˜   r›   r™   r  r  …  s_  … ñð ÓØÓà# E§O¡O×$EÑ$EÑFÓFØ˜F™Ó#à#'¨°°S¸#°X±Ð(>Ñ#?Ó?ØƒOØ˜5×+Ñ+×7Ñ7×LÑLÑMÓMØ—L‘L 4Ñ'Ó'ØŸ™×(Ñ(×/Ñ/×@Ñ@Ó@Ø�]‰]×$Ñ$Ó$Ø˜eŸm™m×8Ñ8Ñ9Ó9ð €FˆDÓØ#Ð�tÓ#Ø$Ð˜Ó$Ø8<Ð)¨3°©:Ó<àðS˜8ò Só ðSð ð˜Ÿ™×/Ñ/ò ó ðð ð( D¨¯©×)CÑ)CÑ$Dò (ó ð(ô
r›   r  c                   ó  — e Zd ZU dZdZeed<    ee¬«      Z	ee
ef   ed<    ee¬«      Zee   ed<    ee¬«      Zee
   ed<    ee¬«      Zeeeeedf   f      ed	<    ee¬«      Zee   ed
<    ee¬«      Zeee
eedf   f      ed<   y)ÚStackLocalsMetadatazf
    Stores metadata for a frame's stack and locals for the purposes of building resume functions
    r   Ú	num_stack©Údefault_factoryÚlocals_namesÚstack_null_idxesÚlocals_null_keys.Ústack_ctx_argsÚstack_ctx_idxes_origÚlocals_ctx_argsN)rœ   r¦   r§   rÑ   rD  r  r©   Údc_fieldrì   rG  rª   rÒ   rH  rI  rJ  Útupler	   rK  rL  r˜   r›   r™   rC  rC  Å  s»   … ñð €IˆsÓÙ#+Øô$€L�$�s˜C�x‘.ó ñ #+¸4Ô"@Ð�d˜3‘iÓ@Ù"*¸4Ô"@Ð�d˜3‘iÓ@Ù8@ÐQUÔ8V€N�D˜˜s E¨#¨s¨(¡OÐ3Ñ4Ñ5ÓVÙ&.¸tÔ&DÐ˜$˜s™)ÓDÙ9AÐRVÔ9W€O�T˜%  U¨3°¨8¡_Ð 4Ñ5Ñ6ÔWr›   rC  c                   óà  — e Zd ZU  ee¬«      Zeeedz  f   ed<    ee¬«      Z	eee
eef   f   ed<   ej                  j                  j                   Zej                  j                  j$                  ej                  j                  j&                  z  ed<    ee¬«      Zeeeeej                  j                  j$                  ej                  j                  j&                  z  f   f   ed<   y)ÚExportMetaDatarE  NÚgraph_input_idx_to_local_sourceÚoutput_return_typeÚout_specÚmodule_call_spec)rœ   r¦   r§   rM  rì   rQ  r  r   r©   rR  rN  rª   r	   r´   ÚutilsÚ_pytreeÚ
_LEAF_SPECrS  ÚTreeSpecÚLeafSpecrT  r˜   r›   r™   rP  rP  ×  sê   … ñ
 AIØôAÐ# T¨#¨v¸©}Ð*<Ñ%=ó ñ 6>ÈdÔ5SÐ˜˜S %¨¨S¨¡/Ð1Ñ2ÓSð 	�‰×Ñ×&Ñ&ð ˆe�k‰k×!Ñ!×*Ñ*¨U¯[©[×-@Ñ-@×-IÑ-IÑIó ñ 	 Ô&ð �dØØˆS�%—+‘+×%Ñ%×.Ñ.°·±×1DÑ1D×1MÑ1MÑMÐMÑNð	Pñô 'r›   rP  r  c                 óH   — | d   }t        |t        «      s|j                  }|S )NÚ__builtins__)r³   rì   Ú__dict__)r  Ú
f_builtinss     r™   Úget_builtins_dictr^  î  s)   € ð ˜nÑ-€JÜ�j¤$Ô'Ø×(Ñ(ˆ
ØÐr›   c                   ó¤   ‡ — e Zd ZdZ	 	 	 	 ddedeeef   dz  dedz  dedz  dee	e
e   f   dz  ddfˆ fd	„Zedefd
„«       Zddededdfd„Zˆ xZS )ÚOutputGraphCommonaå  
    A minimal interface for full graph capture. It is intended to be
    the target of any tracer that feeds into backends.

    Currently dynamo's OutputGraph is the only known implementation
    of this interface, used by (aot) precompile and (strict) export.
    Importantly, that implementation also contains many other fields
    that are using during tracing but not included in this interface
    because they are not used once tracing is complete.

    It should be safe to assume that (caching) precompile also uses
    this interface.

    In the future, we want make_fx, used by (non-strict) export, to
    also implement this interface.

    The serializable part of this interface is OutputGraphGuardsState.
    We do not need to serialize other parts; however it will pay to
    be disciplined about what those other parts are, especially since
    we want other tracers to be able to meaningfully implement them,
    and we should generally try to cut them down when possible.
    NÚoutput_graph_guards_stateÚimport_sourcesr/  Úexport_metadataÚtracked_fakes_id_to_sourcer“   c                 óä  •— t         ‰| �  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   «       |xs i | _        |xs
 t%        «       | _        |xs
 t)        «       | _        |xs i | _        y rÂ   )rá   râ   r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  rb  r%   Ú
_shape_envrP  rc  rd  )rÎ   ra  rb  r/  rc  rd  rç   s         €r™   râ   zOutputGraphCommon.__init__  sØ   ø€ ô 	‰ÑØ%×1Ñ1Ø%×2Ñ2Ø%×?Ñ?Ø%×8Ñ8Ø%×CÑCØ%×0Ñ0Ø%×6Ñ6Ø%×4Ñ4Ø%×8Ñ8Ø%×-Ñ-Ø%×9Ñ9Ø%×,Ñ,Ø%×7Ñ7Ø%×8Ñ8Ø%×KÑKô	
ð$ -Ò2°ˆÔð $Ò1¤x£zˆŒØ.ÒB´.Ó2BˆÔà&Ò,¨"ð 	Õ'r›   c                 ó   — | j                   S rÂ   )rf  rÍ   s    r™   r/  zOutputGraphCommon.shape_env@  s   € à�‰Ðr›   rÉ   rÚ   c                 ó   — t         ‚rÂ   )ÚNotImplementedError©rÎ   rÉ   rÚ   s      r™   Úbypass_packagez OutputGraphCommon.bypass_packageD  s
   € ô "Ð!r›   ©NNNN©Ú )rœ   r¦   r§   rÑ   r  rì   rª   r%   rP  r  rÒ   r   râ   rA  r/  r	   rk  rï   rð   s   @r™   r`  r`    s´   ø„ ñð4 15Ø%)Ø15ØEIñ$
à#9ð$
ð ˜S #˜X™¨Ñ-ð$
ð ˜d‘?ð	$
ð
 (¨$Ñ.ð$
ð %)¨¨d°6©lÐ):Ñ$;¸dÑ$Bð$
ð 
õ$
ðL ð˜8ò ó ðñ" Sð "¸ð "À÷ "r›   r`  c                   ó`  — e Zd ZU dZeed<   	 d”deeef   de	dz  ddd	e
d
ee   dededededeej"                  j$                     ded   de
ddfd„Zddœde
dee   fd„Zdededefd„Zdededdfd„Zd•d„Zd•d„Zdefd„Z	 d–d ed!edeeej>                  j@                  f   fd"„Z!dej>                  j@                  fd#„Z"d•d$„Z#dee   dz  fd%„Z$	 d—d&e%d'ef   d(eed'f   d)eedz  d'f   dz  defd*„Z&d&e%g ef   ddfd+„Z'd•d,„Z(e)d˜d.„«       Z*e)d˜d/„«       Z+de
fd0„Z,	 	 	 	 d™d2„Z-d3Z.d4e/ddfd5„Z0e)dej>                  jb                  fd6„«       Z2e2jf                  d7ej>                  jb                  ddfd8„«       Z2e)deeej@                  f   fd9„«       Z4e)deejj                  ejl                  f   fd:„«       Z7e)dee8jr                  e:ej>                  j@                  d;f   f   fd<„«       Z;d(ed=edej>                  j@                  fd>„Z<d(ed=edej>                  jj                  fd?„Z=d(ed=eddfd@„Z>e?j€                  	 d—dAeAdz  dBed-   dCedz  deBdD   fdE„«       ZCe)dšdF„«       ZDe)dejŠ                  jŒ                  fdG„«       ZGe)deHfdH„«       ZIe)dej”                  j–                  fdI„«       ZLe)deeef   fdJ„«       ZMe)deej”                  jœ                     fdK„«       ZO	 d—dLeeee%d'ef   e
f   f   dz  ddfdM„ZPd™dN„ZQd›dO„ZRe)d›dP„«       ZSdQedefdR„ZTde/fdS„ZUde
fdT„ZVde
fdU„ZWdVedej°                  j²                  ez  fdW„ZZdœdXedefdY„Z[dXeddfdZ„Z\e]d[edefd\„«       Z^d]ed^edej@                  fd_„Z_d`ej°                  j²                  ejl                  z  ez  d[edaedefdb„Z`d1ddeeea   eeef   f   fdc„Zbd1ddde/deee   ecf   fde„Zd	 d�d1ddfeedde/deec   fdg„Zfd1ddhegddfdi„Zhd1ddjee   dhegdke
ddf
dl„Zid•dm„Zjdždfed=eddfdn„Zkdeeee/ez     f   fdo„ZldXedefdp„Zme?j€                  defdq„«       Znd•dr„Zodsedt   d1dddfdu„Zpdsedt   d1dddfdv„Zqd1ddsee   dwerdeea   fdx„Zse)deejj                     fdy„«       Zte)deeu   fdz„«       Zvd{ejî                  d|ee6   dexfd}„Zyd{ejî                  d|ee6   dexfd~„Zzdeeej>                  jî                  f   fd„Z{dXed€ej>                  jî                  defd�„Z|deejl                     fd‚„Z}d•dƒ„Z~d•d„„Zd•d…„Z€d!eea   ddfd†„Z�dXed‡e‚j                  dˆeeef   ddfd‰„ZƒdXed7eddfdŠ„Z„d!ed7edefd‹„Z…d!ed7edefdŒ„Z†d•d�„Z‡dŽe%ejî                  gdf   ddfd�„Zˆd�ej>                  jj                  defd‘„Z‰d’ej°                  j²                  dQeddfd“„ZŠy)ŸÚ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_effectsFÚcode_optionsr‘   NÚroot_txrŠ   r(  r*  Úframe_stater  r  Úf_coder  Úpackager‰   Ú	one_graphr“   c                 ó>
  — t         j                  | |||
t        «       i t        j                  j
                  j                  t        j                  j                  j                  «       t        j                  j                  j                  t        j                  j                  j                  xs2 t        j                   j                  j"                  j%                  «       t        j&                  j)                  «       g ¬«       t+        | |¬«      g| _        i | _        g | _        || _        || _        || _        g | _        t;        t<        «      | _        t        «       | _         |	jB                  |	jD                  |	jF                  dœ| _$        d | _%        tM        «       | _'        d| _(        g | _)        tU        | jR                  |xs tV        jX                  |xs tV        jZ                  tV        j\                  | jH                  ¬«      }dd l/mc m+} |ja                  d¬«      5  t        jb                  je                  |tg        | j2                  «      | j2                  ¬«      }d d d «       ti        «      | _5        | jj                  jl                  jo                  |	«       | jJ                  | jj                  _%        | jj                  jl                  | _6        tq        jr                  «       | _:        | jw                  «        ty        jz                  t|        «      | _?        i | _@        tƒ        | «      | _B        i | _C        i | _D        t        «       | _E        i | _F        t�        j�                  «       | _I        t•        |«      | _K        g | _L        d| _M        i | _N        d | _O        g | _P        || _Q        || _R        d | _S        || _T        i | _U        g | _V        g | _W        d| _X        i | _Y        t        j                   jµ                  «       | _[        d| _\        d| _]        t        «       | _^        t        i «      | __        t        i «      | _`        | jÃ                  «        i | _b        g | _c        d | _d        g | _e        i | _f        i | _g        d | _h        d | _i        | jÕ                  «       | _k        tÙ        jÚ                  «       | _n        tß        «       | _p        | jã                  «       | _r        i | _s        té        «       | _u        tí        «       | _w        i | _x        d | _y        y # 1 sw Y   �Œ°xY w)	N)r   r!  r"  r#  r$  r%  r&  r'  )Ú	is_export)Úco_nameÚco_filenameÚco_firstlinenoF)Útracked_fakesÚallow_scalar_outputsÚallow_dynamic_output_shape_opsÚ+prefer_deferred_runtime_asserts_over_guardsÚ	co_fieldsr   ©Ú(fake_tensor_allow_unsafe_data_ptr_access)r/  Úallow_non_fake_inputsr(  )zr  râ   r²   r´   ÚautogradÚ
forward_adÚ_current_levelr8  r9  Ú#retrieve_all_functorch_interpretersrU  Ú_deviceÚCURRENT_DEVICEr=  Úconvert_frameÚinitial_global_stater<  r   r>  r&  r?  ÚSubgraphTracerÚtracersÚinput_source_to_varÚleaf_var_creation_orderr(  r*  rt  Úcleanup_hooksÚnextÚ_compile_id_counterÚ
compile_idÚinstalled_globalsrz  r{  r|  r�  Úcudagraph_annotationrL   Úregion_trackerÚ_emit_debugger_breakpointr}  r%   r-   Úcapture_scalar_outputsÚ capture_dynamic_output_shape_opsr€  Útorch._functorch.configÚpatchÚ_subclassesÚFakeTensorModer¨   r   Útracing_contextÚtraced_coder¶   r   Úcurrent_compile_idÚdynamo_compile_idÚinit_ambient_guardsÚcollectionsÚdefaultdictrÒ   rd  Úparam_name_to_sourcerQ   rq  Úvariable_tracker_cacheÚmro_source_cacheÚguarded_mro_absent_keysÚsignature_cacheÚ	itertoolsÚcountÚunique_var_idrì   rr  Úoutput_instructionsÚ	timestampÚ_input_mutation_streamsÚ_last_checked_input_versionsÚregister_finalizer_fnsr‘   rs  Úprofiler_staterv  Úsource_to_user_stacksÚ_current_txÚcleanupsÚshould_exitÚunspec_variable_mapÚ_is_torch_function_mode_enabledÚtorch_function_mode_enabledÚtorch_function_subclass_inlinedÚ!has_user_defined_allowed_in_graphÚautograd_grad_consumed_grad_fnsÚnon_compliant_opsÚcompliant_custom_opsÚsave_global_stateÚ dynamo_flat_name_to_original_fqnrÕ   Úrandom_values_varÚpregraph_bytecodeÚsynthetic_source_ctor_infoÚbackward_stateÚbackward_state_proxyÚbackward_state_varÚ!install_builtins_dict_in_fglobalsr+  Ú
contextlibÚ	ExitStackÚcompiler_trace_stackr  Úbytecode_tracing_timingsÚ+maybe_install_saved_tensors_hooks_subgraphsÚ"saved_tensors_hooks_subgraph_namesrb  rP  rc  r*   Ú"used_inlined_inbuilt_modules_namesÚattr_source_cacheÚ(_cached_replayed_side_effect_source_refs)rÎ   rr  r‘   rs  r(  r*  rt  r  r  ru  r  rv  rw  r/  Ú_configÚ	fake_modes                   r™   râ   zOutputGraph.__init__X  sš  € ô 	×'Ñ'ØØØØ%Ü"›uØ*,Ü—~‘~×0Ñ0×?Ñ?Ü"×-Ñ-×9Ñ9×]Ñ]Ó_Ü Ÿ;™;×.Ñ.×=Ñ=ä$Ÿ}™}×:Ñ:×OÑOò  :Ü�x‰x×Ñ×&Ñ&×7Ñ7Ó9ä—M‘M×+Ñ+Ó-Ø "ð 	(ô 	
ô" ' t°vÔ>Ð?ˆŒð CEˆÔ ð ?AˆÔ$ØˆŒØ"4ˆÔØ&ˆÔØ68ˆÔä#Ô$7Ó8ˆŒä+.«5ˆÔð
 —~‘~Ø!×-Ñ-Ø$×3Ñ3ñ
ˆŒð BFˆÔ!ä0Ó2ˆÔØ/4ˆÔ&ð 13ˆÔäð ×,Ñ,à!*Ò!K¬f×.KÑ.KØ+4ò ,7Ü×6Ñ6Ü8>×8jÑ8jØ—n‘nô
ˆ	÷& 	2Ð1à�]‰]ÀEˆ]ÓJñ 	Ü×)Ñ)×8Ñ8Ø#ä&*¨4¯;©;Ó&7Ø—{‘{ð	 9ó ˆI÷	ô 0>¸iÓ/HˆÔØ×Ñ×(Ñ(×/Ñ/°Ô7Ø48×4MÑ4Mˆ×ÑÔ1Ø×/Ñ/×;Ñ;ˆÔÜ3A×3TÑ3TÓ3VˆÔØ× Ñ Ô"ô ×#Ñ#¤DÓ)ð 	Ô'ð ?AˆÔ!Ü'¨Ó-ˆÔð FHˆÔ#ð KMˆÔô
 >A»UˆÔ$à;=ˆÔÜ&Ÿ_™_Ó.ˆÔÜ,0°Ó,>ˆÔØ68ˆÔ ð ˆŒð KMˆÔ$ØCGˆÔ)ð OQˆÔ#ð /:ˆÔØˆŒð ;?ˆÔàˆŒð RTˆÔ"à<>ˆÔØ+-ˆŒØ ˆÔØKMˆÔ ô ,1¯8©8×+SÑ+SÓ+UˆÔ(ð 05ˆÔ,ð 27ˆÔ.ô PSËuˆÔ,ô >AÀ»WˆÔô ADÀBÃˆÔ!ð 	×ÑÔ ð ACˆÔ-ð ð 	Ôð '+ˆÔð 57ˆÔð ð 	Ô'ð ;=ˆÔØ;?ˆÔ!Ø.2ˆÔð ×2Ñ2Ó4ð 	Ô2ô %/×$8Ñ$8Ó$:ˆÔ!ä(>Ó(@ˆÔ%ð ×<Ñ<Ó>ð 	Ô/ð
 /1ˆÔä-Ó/ˆÔô DNÃ<ˆÔ/àGIˆÔØPTˆÕ5÷o	ñ 	ús   È$A TÔT©Úpopulate_export_metadatarÕ  c                óì  — |s7| j                   j                  s!| j                  �t        | j                  «      S ddlm} g }| j                   j                  «       D �]n  }t        |d«      sŒ|j                  }t        |t        t        f«      sŒ4t        |t        «      ròt        |j                  |«      rÜ|rÚ|j                  €J ‚|j                  j                  j                  «       D ]¥  \  }}i }|j                  j                  «       D ]0  \  }	}
|
j!                  «       ||	j"                  j!                  «       <   Œ2 ddgt        |j%                  «       «      k(  sJ ‚|| j&                  j(                  |j"                  j!                  «       <   Œ§ t        |t        «      rt        |j                  |«      r�Œ^|j+                  |«       �Œq |D �cg c]  }t-        |j.                  «      ‘Œ c}S c c}w )zKReturn Python-side effect sources that Dynamo replays outside the FX graph.r   )Ú_ExportModuleSpecTrackerDictÚmutation_typeÚin_specrS  )rq  Úid_to_variablerÑ  rÒ   Útorch.export._tracer×  Ú_get_modified_varsÚhasattrrØ  r³   rP   rR   r†   ÚvalueÚ_base_vtrã   Úas_python_constantÚvtÚkeysrc  rT  r¶   rS   Úsource)rÎ   rÕ  r×  Úpotential_side_effectsÚvarÚmut_typerå   ræ   ÚspecsÚk_specÚvals              r™   Ú$get_replayed_side_effect_source_refsz0OutputGraph.get_replayed_side_effect_source_refsn  sÅ  € ñ
 )Ø×%Ñ%×4Ò4Ø×=Ñ=ÐIä˜×EÑEÓFÐFåDà!#ÐØ×$Ñ$×7Ñ7Ó9ó %	;ˆCÜ�s˜OÕ,Ø×,Ñ,�ô ØÔ8Ô:OÐPõô " #Ô'>Ô?ÄJØŸ	™	Ð#?ôEñ 4Ø#&§<¡<Ð#;Ð;Ð#;ð
 !$§¡× 2Ñ 2× 8Ñ 8Ó :ò	*ñ !Ø !Ø !ð
 )+ à34·7±7·=±=³?ò !&¡K F¨Cà(+×(>Ñ(>Ó(@ð %*¨&¯)©)×*FÑ*FÓ*HÒ$Ið!&ð )2°:Ð'>Ä$ÀuÇzÁzÃ|ÓBTÒ'TÐ TÐ'Tð %*ð !%× 4Ñ 4× EÑ Eà$%§D¡D×$;Ñ$;Ó$=ò!"ð*ô* # 3Ô(?Ô@Ü& s§y¡yÐ2NÖOà.×5Ñ5°cÖ:ðK%	;ðN ?UÖU°sÔ& s§z¡zÕ2ÒUÐUùÒUs   ÇG1ÚbaseÚpathc                 ó0  — |j                  d«      }||d   f}|| j                  vrt        ||d   «      | j                  |<   | j                  |   }|dd  D ]<  }||f}|| j                  vrt        ||«      | j                  |<   | j                  |   }Œ> |S )Nú.r   r,   )ÚsplitrÐ  rT   )rÎ   rë  rì  Úpartsr  r  Úparts          r™   Úget_chained_attr_sourcez#OutputGraph.get_chained_attr_source¥  s°   € Ø—
‘
˜3“ˆØ�U˜1‘XÐˆØ�d×,Ñ,Ñ,Ü*4°T¸5À¹8Ó*DˆD×"Ñ" 3Ñ'Ø×'Ñ'¨Ñ,ˆØ˜!˜"�Iò 	1ˆDØ˜4�.ˆCØ˜$×0Ñ0Ñ0Ü.8¸ÀÓ.F�×&Ñ& sÑ+Ø×+Ñ+¨CÑ0‰Fð		1ð
 ˆr›   r^   c                 ó¢   — |j                  dd«      }t        |«      dk(  rt        ||«      S | j                  ||d   «      }t        ||d   «      S )Nrî  r,   r   )ÚrsplitÚlenr^   rò  )rÎ   rë  rì  rð  Úintermediate_bases        r™   Úget_chained_param_buffer_sourcez+OutputGraph.get_chained_param_buffer_source²  sU   € ð —‘˜C Ó#ˆÜˆu‹:˜Š?Ü$ T¨4Ó0Ð0Ø ×8Ñ8¸¸uÀQ¹xÓHÐÜ Ð!2°E¸!±HÓ=Ð=r›   c                 óv  — | j                   j                  t        dd¬«      «       t        j                  rƒddlm} | j                  € |«       | _        | j                  j                  }| j                  j                  |j                  |j                  |j                  t        j                  «       «       y y )Nr  T©Úlog_pt2_compile_eventr   r‡   )rË  Úenter_contextrj   r-   Údynamo_profilerÚtorch._dynamo.dynamo_profilerrˆ   r³  rs  ru  Úpushrz  r{  r|  ÚtimeÚtime_ns)rÎ   rˆ   Úcodes      r™   Úmark_bytecode_tracing_startz'OutputGraph.mark_bytecode_tracing_start»  s“   € Ø×!Ñ!×/Ñ/ÜØ"Ø&*ôô	
ô ×!Ò!ÝIà×"Ñ"Ð*Ù&9Ó&;�Ô#Ø—<‘<×&Ñ&ˆDØ×Ñ×$Ñ$Ø—‘Ø× Ñ Ø×#Ñ#Ü—‘“õ	ð "r›   c                 óæ  — | j                   j                  «        | j                  j                  «        t        j
                  �r,| j                  ��ddlm} | j                  j                  «       }t        j                  «       }|�œ||j                  z
  }||j                  z
  } ||j                  |j                  |j                   ||t#        | j$                  j&                  j(                  «      dd d d |j*                  d¬«      }| j                  j-                  |«       d }t/        t        j
                  t0        «      rt        j
                  }| j                  j3                  |«       y y y )Nr   )ÚFunctionTraceTimingr˜   )Ú	func_nameÚfilenameÚfirstlinenoÚ
cumtime_nsÚ
tottime_nsÚbytecode_countÚinline_depthÚcaller_func_nameÚcaller_filenameÚcaller_firstlinenoÚis_primitive_callÚ
call_stack)rÌ  r  rË  Úcloser-   rü  r³  rý  r  r·   rÿ  r   Ústart_time_nsÚchild_time_nsr  r  r  rõ  rs  ru  Úco_coder  Úrecord_timingr³   rª   Ú
dump_stats)rÎ   r  Ústack_entryÚtrace_end_nsr  r	  ÚtimingÚoutput_files           r™   Úmark_bytecode_tracing_stopz&OutputGraph.mark_bytecode_tracing_stopÐ  s2  € Ø×%Ñ%×6Ñ6Ô8Ø×!Ñ!×'Ñ'Ô)ä×!Ó! d×&9Ñ&9Ñ&EÝIà×-Ñ-×1Ñ1Ó3ˆKÜŸ<™<›>ˆLØÐ&Ø)¨K×,EÑ,EÑE�
Ø'¨+×*CÑ*CÑC�
Ù,Ø)×3Ñ3Ø(×1Ñ1Ø +× 7Ñ 7Ø)Ø)Ü#& t§|¡|×':Ñ':×'BÑ'BÓ#CØ!"Ø%)Ø$(Ø'+Ø&1×&CÑ&CØ!ô�ð ×#Ñ#×1Ñ1°&Ô9ð ˆKÜœ&×0Ñ0´#Ô6Ü$×4Ñ4�Ø×Ñ×*Ñ*¨;Õ7ð9 'FÐ!r›   c                 óP   — t        | j                  «      }| j                  d|«      S )NÚ__builtins_dict__)r^  r  Úinstall_global)rÎ   r]  s     r™   rÈ  z-OutputGraph.install_builtins_dict_in_fglobalsò  s&   € Ü& t×'8Ñ'8Ó9ˆ
Ø×"Ñ"Ð#6¸
ÓCÐCr›   ÚhookÚprefixc                 ó–   — |› t        | j                  «      › �}|| j                  vsJ ‚|| j                  |<   || j                  «       fS rÂ   )rõ  rÅ  Úget_backward_state_proxy)rÎ   r  r   r  s       r™   Úadd_backward_state_hookz#OutputGraph.add_backward_state_hookö  sV   € ð �œ#˜d×1Ñ1Ó2Ð3Ð4ˆØ˜4×.Ñ.Ñ.Ð.Ð.Ø$(ˆ×Ñ˜DÑ!Ø�T×2Ñ2Ó4Ð4Ð4r›   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 exportrn  z3Compiled autograd doesn't work with `torch.export`.©Úgb_typeÚcontextÚexplanationÚhintsÚdynamo_backward_state©rã  Úgrapharg)rÆ  r(  rE   r!   Úroot_tracerÚcreate_graph_inputr.  rU   rx   r¾   ÚmetaÚnew_varrÇ  )rÎ   Úexample_values     r™   r"  z$OutputGraph.get_backward_state_proxyþ  s¡   € Ø×$Ñ$Ð,Ø�{Š{ÜØDØØ UØõ	ô *›OˆMØ(,×(8Ñ(8×(KÑ(KØ'Ü�]Ó#ØÜ*Ó,ð	 )Ló )ˆDÔ%ô ?TÓ>UˆD×%Ñ%×*Ñ*×/Ñ/°
Ñ;Ø&*§l¡l£nˆDÔ#Ø×(Ñ(Ð(r›   c                 ó¢  — | 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                  «      «       | j                   j                  t        «       j                  t        j                  «      «       t        j                  j                  j                  «       }|�@| j                   j                  t        «       j                  t        j                   «      «       t        j"                  j$                  j&                  sA| j                   j                  t        «       j                  t        j(                  «      «       y y rÂ   )r   r¸   r_   Ú
make_guardrM   Ú	SHAPE_ENVrY   ÚDETERMINISTIC_ALGORITHMSÚ	GRAD_MODEÚDEFAULT_DEVICEÚGLOBAL_STATEÚTORCH_FUNCTION_STATEr´   r<  r8  Úpeek_interpreter_stackÚFUNCTORCH_STACK_MATCHr=  Úcompiled_autogradÚin_compiled_autograd_regionÚAUTOGRAD_SAVED_TENSORS_HOOKS)rÎ   Úcis     r™   r£  zOutputGraph.init_ambient_guards  sr  € ð 	�‰�‰œÓ(×3Ñ3´L×4JÑ4JÓKÔLà�‰�‰ÜÓ×*Ñ*¬<×+PÑ+PÓQô	
ð 	�‰�‰Ô)Ó+×6Ñ6´|×7MÑ7MÓNÔOà�‰�‰Ô)Ó+×6Ñ6´|×7RÑ7RÓSÔTà�‰�‰Ô)Ó+×6Ñ6´|×7PÑ7PÓQÔRØ�‰�‰ÜÓ×*Ñ*¬<×+LÑ+LÓMô	
ô �X‰X× Ñ ×7Ñ7Ó9ˆØˆ>Ø�K‰K�O‰OÜ!Ó#×.Ñ.¬|×/QÑ/QÓRôô �}‰}×.Ñ.×JÒJØ�K‰K�O‰OÜ!Ó#×.Ñ.Ü ×=Ñ=óõð Kr›   c                 ób  — t         j                  j                  j                  ry t         j                  j
                  j                  j                  }t         j                  j
                  j                  j                  } |«       } ||«      sy |\  }}| j                  dt         j                  j                  | j                  |j                  «      «      }| j                  dt         j                  j                  | j                  |j                  «      «      }|dk(  sJ ‚|dk(  sJ ‚||gS )NÚsaved_tensors_hooks_packÚsaved_tensors_hooks_unpackÚsaved_tensors_hooks_pack_0Úsaved_tensors_hooks_unpack_0)r´   r=  r<  r=  r8  Ú_aot_autogradrU  Útop_saved_tensors_hooksÚ"saved_tensors_hooks_are_inlineableÚinstall_subgraphr   r  rß   r�   )rÎ   Ú	get_hooksÚare_inline_hooksÚhooksÚpack_gmÚ	unpack_gmÚpack_subgraph_nameÚunpack_subgraph_names           r™   rÍ  z7OutputGraph.maybe_install_saved_tensors_hooks_subgraphs1  s  € Ü�=‰=×*Ñ*×FÒFØä×$Ñ$×2Ñ2×8Ñ8×PÑPˆ	ä×Ñ×*Ñ*×0Ñ0×SÑSð 	ñ “ˆÙ Ô&Øð #Ñˆ�Ø!×2Ñ2Ø&Ü�H‰H× Ñ  §¡°'·-±-Ó@ó
Ðð  $×4Ñ4Ø(Ü�H‰H× Ñ  §¡°)·/±/ÓBó 
Ðð "Ð%AÒAÐAÐAØ#Ð'EÒEÐEÐEØ"Ð$8Ð9Ð9r›   rØ   .rÙ   Úctor_arg_sourcesc                 óì  ‡‡—  ‰|Ž }| j                  «       }t        | j                  «      Š‰j                  ˆˆfd„«       |r#‰j	                  d„ t        ||«      D «       «       n3‰j	                  t        t        j                  j                  |«      «       ‰j                  t        |«      d«       ‰j                  |«       | j                  j                  ‰j                  «       «       t!        |«      }‰||f| j"                  |<   t%        j&                  | j                  ||«      }|j)                  «       }t+        j,                  «       j.                  j0                  j3                  |«       |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_fromr¦   rœ   )ÚcgrØ   s   €€r™   ú<lambda>z3OutputGraph.synthetic_graph_input.<locals>.<lambda>[  s    ø€ �B×'Ñ'Ø—‘Ø—‘ó€ r›   c              3   óh   K  — | ]*  \  }}|�|nt         j                  j                  |«      –— Œ, y ­wrÂ   )r0   ÚConstantVariableÚcreate)Ú.0ré  Úsrcs      r™   ú	<genexpr>z4OutputGraph.synthetic_graph_input.<locals>.<genexpr>a  s6   è ø€ ò á�C˜ð �‘¬I×,FÑ,F×,MÑ,MÈcÓ,RÓRñùs   ‚02F)r0  r?   rs  Úadd_push_nullÚforeachÚzipÚmapr0   rW  rX  Úcall_functionrõ  ÚstorerÃ  ÚextendÚget_instructionsr`   rÄ  r~   ÚbuildÚrealizer   ÚgetÚguards_contextÚdynamo_guardsÚremove_guards_with_source)	rÎ   rØ   rÙ   rP  r1  Úvarnamerã  r  rT  s	    `      @r™   Úsynthetic_graph_inputz!OutputGraph.synthetic_graph_inputN  s1  ù€ ñ ˜D˜	ˆØ—,‘,“.ˆÜ�t—|‘|Ó$ˆØ
×Ñôô	
ñ Ø�J‰Jñ ä # DÐ*:Ó ;ôõ ð
 �J‰J”sœ9×5Ñ5×<Ñ<¸dÓCÔDØ
×Ñœ˜T› EÔ*Ø
�‰�ÔØ×Ñ×%Ñ% b×&9Ñ&9Ó&;Ô<Ü% gÓ.ˆØ35°tÐ=MÐ2Nˆ×'Ñ'¨Ñ/Ü ×&Ñ& t§|¡|°]ÀFÓKˆà—‘Ó!ˆÜ×ÑÓ×+Ñ+×9Ñ9×SÑSØô	
ð ˆr›   c                 ó:   — | j                   j                  |«       y rÂ   )r‘  r¶   )rÎ   rØ   s     r™   Úadd_cleanup_hookzOutputGraph.add_cleanup_hookt  s   € Ø×Ñ×!Ñ! "Õ%r›   c                 óz   — t        | j                  «      D ]	  } |«        Œ | j                  j                  «        y rÂ   )Úreversedr‘  Úclear)rÎ   r  s     r™   Úcall_cleanup_hookszOutputGraph.call_cleanup_hooksw  s3   € Ü˜T×/Ñ/Ó0ò 	ˆDÙ�Fð	à×Ñ× Ñ Õ"r›   r�  c                 ó    — | j                   d   S ©Nr   ©rŽ  rÍ   s    r™   r-  zOutputGraph.root_tracer|  s   € à�|‰|˜A‰Ðr›   c                 ó    — | j                   d   S ©Néÿÿÿÿrt  rÍ   s    r™   Úcurrent_tracerzOutputGraph.current_tracer€  s   € à�|‰|˜BÑÐr›   c                 ó2   — t        | j                  «      dk(  S )Nr,   )rõ  rŽ  rÍ   s    r™   Úis_root_tracerzOutputGraph.is_root_tracer„  s   € ä�4—<‘<Ó  AÑ%Ð%r›   Útxc                 ó¨  — t        |d«      sy|j                  j                  «       sy| j                  }| j                  €#t        t        |j                  «      «      | _        |j                  j                  «       }d}|j                  j                  D ]º  }|j                  dk7  r y|j                  j                  d«      }t        |t        j                   «      sŒJ| j                  j                  |«      }|j"                  }|�C||kD  r>|| j$                  vr!t'        j(                  «       | j$                  |<   || j                  |<   |dz  }Œ¼ y)z‘Record which stream index has input mutations by comparing current
        tensor versions against the versions captured at graph input creation.Úsymbolic_stream_stateNr   Úplaceholderr1  r,   )rÝ  r}  Úin_stream_contextr-  r±  rì   Ú	enumerateÚ_input_versions_at_beginningÚcur_stream_idr�   ÚnodesÚopr/  rf  r³   r´   r   Ú_versionr°  r   Úextract_stack)	rÎ   r{  ÚtracerÚcur_stream_indexÚ	input_idxr¾   r1  Úprev_versionÚcur_versions	            r™   Ú&check_input_mutation_on_current_streamz2OutputGraph.check_input_mutation_on_current_streamˆ  s6  € ô
 �rÐ2Ô3ØØ×'Ñ'×9Ñ9Ô;Øà×!Ñ!ˆØ×,Ñ,Ð4Ü04Ü˜&×=Ñ=Ó>ó1ˆDÔ-ð ×3Ñ3×AÑAÓCÐØˆ	Ø—L‘L×&Ñ&ò 	ˆDØ�w‰w˜-Ò'ÙØ ŸI™IŸM™M¨/Ó:ˆMÜ˜m¬U¯\©\Ô:ØØ×<Ñ<×@Ñ@ÀÓKˆLØ'×0Ñ0ˆKØÐ'¨K¸,Ò,FØ#¨4×+GÑ+GÑGä&×4Ñ4Ó6ð ×0Ñ0Ð1AÑBð @K�×1Ñ1°)Ñ<Ø˜‰N‰Iñ	r›   a~  To fix this, either:
  1. Move the input mutation after the event.record() call.
  2. Record the event outside the compiled region:
       compiled_fn(x)
       event.record(stream)  # after torch.compile returns
  3. Insert a graph break before recording:
       torch._dynamo.graph_break()
       event.record(stream)
  4. Record the event on a stream that has no input mutations.Ústream_indexc                 ó  — || j                   vry| j                   |   }t        j                  «       }ddj                  |j	                  «       «      › ddj                  |j	                  «       «      › d�| j
                  z   }t        |«      ‚)uÍ   Error if an event is being recorded on a stream that already has
        an input mutation. Called at record time so ordering is naturally
        respected â€” records before mutations won't trigger this.Na  An event was recorded on a stream where a graph input was previously mutated. The input mutation is applied via copy_() in the runtime epilogue after the graph executes, so the event would not capture the mutation, leading to incorrect synchronization.

Input mutation occurred here:
rn  z
Event record occurred here:
ú
)r°  r   r†  ÚjoinÚformatÚ_EVENT_INPUT_MUTATION_FIXrü   )rÎ   r�  Úmutation_stackÚrecord_stackr¤   s        r™   Ú'check_event_record_after_input_mutationz3OutputGraph.check_event_record_after_input_mutation¶  s™   € ð ˜t×;Ñ;Ñ;Øà×5Ñ5°lÑCˆÜ%×3Ñ3Ó5ˆð.ð �w‰w�~×,Ñ,Ó.Ó/Ð0ð 1,à�w‰w�|×*Ñ*Ó,Ó-Ð.¨bð2ð 59×4RÑ4RñSð 	ô ˜3ÓÐr›   c                 ó.   — | j                   j                  S rÂ   ©rx  r�   rÍ   s    r™   r�   zOutputGraph.graphÍ  s   € à×"Ñ"×(Ñ(Ð(r›   rÞ  c                 ó&   — || j                   _        y rÂ   r—  )rÎ   rÞ  s     r™   r�   zOutputGraph.graphÒ  s   € à$)ˆ×ÑÕ!r›   c                 ó.   — | j                   j                  S rÂ   )rx  Úinput_name_to_proxyrÍ   s    r™   rš  zOutputGraph.input_name_to_proxyÖ  s   € à×"Ñ"×6Ñ6Ð6r›   c                 ó.   — | j                   j                  S rÂ   )rx  Úreal_value_cacherÍ   s    r™   rœ  zOutputGraph.real_value_cacheÚ  s   € à×"Ñ"×3Ñ3Ð3r›   Ú	LazyProxyc                 ó.   — | j                   j                  S rÂ   )rx  Úbound_symbolsrÍ   s    r™   rŸ  zOutputGraph.bound_symbolsÞ  s   € à×"Ñ"×0Ñ0Ð0r›   rÚ   c                 ó:   —  | j                   j                  |i |¤ŽS rÂ   )rx  Úcreate_proxy©rÎ   rÙ   rÚ   s      r™   r¡  zOutputGraph.create_proxyè  s    € Ø/ˆt×"Ñ"×/Ñ/°Ð@¸Ñ@Ð@r›   c                 ó:   —  | j                   j                  |i |¤ŽS rÂ   )rx  Úcreate_noder¢  s      r™   r¤  zOutputGraph.create_nodeë  ó    € Ø.ˆt×"Ñ"×.Ñ.°Ð?¸Ñ?Ð?r›   c                 ó:   —  | j                   j                  |i |¤ŽS rÂ   )rx  Úremove_noder¢  s      r™   r§  zOutputGraph.remove_nodeî  r¥  r›   Úsource_targetÚprior_tracerÚdescription)r�  NNc              #   óÚ  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)Úparentr¨  ry  rª  )
r@   r¬  rx  Ú	__enter__r�  ry  rŽ  r¶   Ú__exit__r·   )rÎ   r¨  r©  rª  Únew_scope_ctxr‡  s         r™   Ú	subtracerzOutputGraph.subtracerñ  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=B9 Â.C+Â9/C(Ã(C+c                 ó   — | S rÂ   r˜   rÍ   s    r™   ÚoutputzOutputGraph.output  s   € àˆr›   c                 ó^   — | j                   j                  €J ‚| j                   j                  S rÂ   )rŸ  rÓ  rÍ   s    r™   rÓ  zOutputGraph.fake_mode  s,   € à×#Ñ#×-Ñ-Ð9Ð9Ð9Ø×#Ñ#×-Ñ-Ð-r›   c                 ó¶   — | j                   j                  €J ‚| j                   j                  j                  €J ‚| j                   j                  j                  S rÂ   )rŸ  rÓ  r/  rÍ   s    r™   r/  zOutputGraph.shape_env  sP   € à×#Ñ#×-Ñ-Ð9Ð9Ð9Ø×#Ñ#×-Ñ-×7Ñ7ÐCÐCÐCØ×#Ñ#×-Ñ-×7Ñ7Ð7r›   c                 óB   — | j                   j                  j                  S rÂ   )rŸ  rg  rh  rÍ   s    r™   r   zOutputGraph.guards  s   € à×#Ñ#×2Ñ2×@Ñ@Ð@r›   c                 óB   — | j                   j                  j                  S rÂ   )rŸ  Úmodule_contextrß   rÍ   s    r™   rß   zOutputGraph.nn_modules"  s   € à×#Ñ#×2Ñ2×=Ñ=Ð=r›   c                 óB   — | j                   j                  j                  S rÂ   )rŸ  rg  r2  rÍ   s    r™   r2  zOutputGraph.aotautograd_guards&  s   € à×#Ñ#×2Ñ2×EÑEÐEr›   Úoutc                 ó†  — t        t        t        t        t        dt
        f   t        f   f   |�|n| j                  j                  j                  «      }t        j                  t        j                  «       f|d<   t        j                  j                  «       x}r|j                  nd}t!        j"                  t        j$                  |«      t        j&                  |«      f|d<   t!        j"                  t        j$                  d«      t        j&                  d«      f|d<   t!        j"                  t        j(                  |«      t        j*                  |«      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.
        .NÚgrad_enabledÚcudaÚautocast_enabledÚcpuÚautocast_cpu_enabledÚautocast_gpu_dtypeÚautocast_cpu_dtypeÚautocast_cache_enabled)r
   rì   rª   rN  r   r	   r¨   rŸ  Úglobal_contextÚglobal_stater´   Úset_grad_enabledÚis_grad_enabledÚacceleratorÚcurrent_acceleratorr.  Ú	functoolsÚpartialÚset_autocast_enabledÚis_autocast_enabledÚset_autocast_dtypeÚget_autocast_dtypeÚset_autocast_cache_enabledÚis_autocast_cache_enabled)rÎ   r¹  rÄ  ÚaccÚgpu_types        r™   rÀ  zOutputGraph.save_global_state*  sˆ  € ô Ü””eœH S¬# XÑ.´Ð4Ñ5Ð5Ñ6ð �?ñ à×)Ñ)×8Ñ8×EÑEó
ˆô ).×(>Ñ(>Ä×@UÑ@UÓ@WÐ'Xˆ�^Ñ$ô !&× 1Ñ 1× EÑ EÓ GÐG˜ÐGˆC�HŠHÈfð 	ô ×Ñœe×8Ñ8¸(ÓCÜ×%Ñ% hÓ/ð,
ˆÐ'Ñ(ô
 ×Ñœe×8Ñ8¸%Ó@Ü×%Ñ% eÓ,ð0
ˆÐ+Ñ,ô
 ×Ñœe×6Ñ6¸ÓAÜ×$Ñ$ XÓ.ð.
ˆÐ)Ñ*ô
 ×Ñœe×6Ñ6¸Ó>Ü×$Ñ$ UÓ+ð.
ˆÐ)Ñ*ô
 ×,Ñ,Ü×+Ñ+Ó-ð2
ˆÐ-Ò.r›   c                 ó:   — | j                   j                  |«       y rÂ   )rµ  r¶   )rÎ   r{  s     r™   Úpush_txzOutputGraph.push_txS  s   € Ø×Ñ×Ñ Õ#r›   c                 ó6   — | j                   j                  «       S rÂ   )rµ  r·   rÍ   s    r™   Úpop_txzOutputGraph.pop_txV  s   € Ø×Ñ×#Ñ#Ó%Ð%r›   c                 óP   — | j                   s| j                  S | j                   d   S rv  )rµ  rs  rÍ   s    r™   Ú
current_txzOutputGraph.current_txY  s$   € à#'×#3Ò#3ˆt�|‰|ÐM¸×9IÑ9IÈ"Ñ9MÐMr›   rã  c                 ó~   — |j                  | j                  j                  | j                  j                  dœi i «      S )zî
        Resolve the runtime value a Source points to using root_tx's frame.

        Useful to inspect the python object associated with the source during
        debugging. Will also be used by invoke subgraph caching later on.
        )ÚGÚL)Ú	get_valuers  Ú	f_globalsÚf_locals)rÎ   rã  s     r™   Úresolve_source_valuez OutputGraph.resolve_source_value]  s9   € ð ×ÑØ—,‘,×(Ñ(¨t¯|©|×/DÑ/DÑEØØó
ð 	
r›   c                 ó,   — t        | j                  «      S rÂ   )rh   r�   rÍ   s    r™   rh   zOutputGraph.count_callsj  s   € Ü˜4Ÿ:™:Ó&Ð&r›   c                 óX   — t        t        | j                  j                  «      «      dk(  S rs  )rõ  rÒ   r�   rƒ  rÍ   s    r™   Úis_empty_graphzOutputGraph.is_empty_graphm  s!   € Ü”4˜Ÿ
™
×(Ñ(Ó)Ó*¨aÑ/Ð/r›   c                 óŒ   — t        | j                  j                  D �cg c]  }|j                  dk(  sŒ|‘Œ c}«      dkD  S c c}w )Nr²  r   )rõ  r�   rƒ  r„  )rÎ   Úxs     r™   Úhas_outputszOutputGraph.has_outputsp  s5   € Ü˜tŸz™z×/Ñ/ÖD˜!°1·4±4¸8Ó3C’AÒDÓEÈÑIÐIùÒDs
   žA³Arâ  c                 ó–   — |sJ ‚| j                   }|j                  d«      D ]$  }t        |t        «      r||   }Œt	        ||«      }Œ& |S ©Nrî  )rß   rï  r³   rì   r�   )rÎ   râ  Úobjrå   s       r™   Úget_submodulezOutputGraph.get_submodules  sN   € ÙˆˆtØ<@¿O¹OˆØ—‘˜C“ò 	&ˆAÜ˜#œtÔ$Ø˜!‘f‘ä˜c 1“o‘ð		&ð
 ˆ
r›   r  c                 ó¦   — t        | j                  d   «      }	 |› dt        | j                  «      › �}||vr| j                  dxx   |fz  cc<   |S Œ9)NÚco_varnamesr½   )r²   rr  r’  r­  )rÎ   r  Úexistingrå  s       r™   r0  zOutputGraph.new_var}  s`   € Ü�t×(Ñ(¨Ñ7Ó8ˆàØ�F˜!œD ×!3Ñ!3Ó4Ð5Ð6ˆCØ˜(Ñ"Ø×!Ñ! -Ó0°S°FÑ:Ó0Ø�
ð	 r›   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)rr  )rÎ   r  s     r™   Úupdate_co_nameszOutputGraph.update_co_names†  s2   € à�t×(Ñ(¨Ñ4Ñ4Ø×Ñ˜jÓ)¨d¨WÑ4Ô)ð 5r›   Únamesc                  ó^  — dj                  t        t        | «      «      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd	|«      }t        j                  d
d|«      }|r|d   j                  «       sd|z   }|S )Nr½   z9\._(?:modules|parameters|buffers)\[(['\"])([^'\"\]]+)\1\]z.\2z2getattr\(\s*([^,]+?)\s*,\s*(['\"])([^'\"]+)\2\s*\)z\1.\3z^[GL]\['?(.*?)'?\]$z\1z	\[(\d+)\]z_\g<1>z[^a-zA-Z0-9]r   Úsub)r�  r_  rª   Úrerò  Úisalpha)rð  r  s     r™   Úmodule_key_namezOutputGraph.module_key_name‹  sœ   € ð �x‰xœœC ›Ó(ˆä�v‰vØHÈ&ÐRVó
ˆô �v‰vØAÀ8ÈTó
ˆô �v‰vÐ,¨e°TÓ:ˆä�v‰v�l I¨tÓ4ˆä�v‰v�o s¨DÓ1ˆá˜4 ™7Ÿ?™?Ô,Ø˜4‘<ˆDàˆr›   Úattr_prefixÚ
attr_valuec                 óh  — t        |t        j                  j                  «      r>| j                  j                  «       D ]!  \  }}||u sŒ| j                  d|di «      }|c S  t        || j                  «      }|| j                  |<   | j                  d|di «      }t        |j                  |«       |S ©NÚget_attrr˜   )
r³   r´   rí   rî   rß   rã   r¡  ro   rw   r¾   )rÎ   rö  r÷  r  ÚmodÚproxyÚ	attr_names          r™   Ú%register_static_attr_and_return_proxyz1OutputGraph.register_static_attr_and_return_proxy£  s¤   € ô
 �j¤%§(¡(§/¡/Ô2Ø!Ÿ_™_×2Ñ2Ó4ò !‘	��cØ˜*Ò$Ø ×-Ñ-¨j¸$ÀÀBÓG�EØ ’Lð!ô
 (¨°T·_±_ÓEˆ	ð &0ˆ�‰˜	Ñ"Ø×!Ñ! *¨i¸¸RÓ@ˆÜ˜%Ÿ*™* jÔ1Øˆr›   ÚtargetÚoptionsc                 ó  ‡ ‡‡‡
‡‡— t        ‰‰ j                  «      r!t        j                  ‰ j                  ‰fi ‰¤ŽS t        ‰«      Šd‰v sJ ‚‰d   Št        ‰t        «      rJ ‚t        ‰t        j                  «      r@‰ j                  Š‰ j                  «       s‰ j                  Šdt        dt        fˆˆ ˆˆˆfd„}�n@t        ‰t        j                  j                  «      rxt        ‰t        j                  j                  «      sJ ‚‰r<t!        ‰j#                  t$        j&                  «      «       dt        dt        fˆˆfd„}n¸dt        dt        fˆˆfd„}n¤t        ‰t        j(                  t        j*                  f«      rdt        dt        fˆˆ ˆfd„}net-        t/        ‰«      «      r>‰ j                  Š‰ j                  «       s‰ j                  Šdt        dt        fˆˆ ˆˆfd„}ndt        dt        fˆ ˆfd	„}‰ j0                  j3                  «       D ]  \  }}|‰u sŒ ||«      c S  t5        j6                  |Ž Š
t9        ‰
‰ j0                  ‰ j:                  «      Š
‰‰ j0                  ‰
<   t        ‰t        j                  j                  «      rhd
t        dd fˆ
ˆ ˆfd„}t=        ‰d«      r ‰j?                  «       D ]  \  }}	 ||«       Œ t=        ‰d«      r ‰jA                  «       D ]  \  }}	 ||«       Œ  |‰
«      S )Nrã  Ú
module_keyr“   c           	      óB  •— ‰j                   €J ‚‰‰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ú  r˜   r1  Útensor_dict)r¦  rs  r²  rq  rn   r³   r]   rN   r3  rM   ÚID_MATCHrZ   ÚTENSOR_MATCHr{   r¡  Útrack_object_existingÚas_proxyr¾   r/  rc   )r  rá  r   rÎ   rã  rÿ  r‡  s     €€€€€r™   Ú	wrap_namez6OutputGraph.register_attr_or_module.<locals>.wrap_nameÖ  se  ø€ Ø×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¯K©K«M×,>Ñ,>×,CÑ,CÑCÐCÐCä9MÈfÓ9U�—‘“×"Ñ"×'Ñ'¨Ñ6à�	r›   c                 ó2   •— t        t        ‰«      | ‰fi ‰¤ŽS rÂ   )r�   r.  ©r  r   rÿ  s    €€r™   r
  z6OutputGraph.register_attr_or_module.<locals>.wrap_nameþ  s   ø€ ä+¬D°«L¸*ÀfÑXÐPWÑXÐXr›   c                 ó0   •— t        j                  ‰fi ‰¤ŽS rÂ   )r0   ÚUnspecializedNNModuleVariabler  s    €€r™   r
  z6OutputGraph.register_attr_or_module.<locals>.wrap_name  s   ø€ ä$×BÑBÀ6ÑUÈWÑUÐUr›   c           	      ón   •— t        j                  ‰j                  ‰j                  d| di «      fd‰i‰¤ŽS )Nrú  r˜   Úsym_num)rƒ   rX  rs  r¡  )r  r   rÎ   rÿ  s    €€€r™   r
  z6OutputGraph.register_attr_or_module.<locals>.wrap_name  sE   ø€ Ü&×-Ñ-Ø—L‘LØ×%Ñ% j°*¸bÀ"ÓEñð #ðð ñ	ð r›   c                 ó>  •— t         j                  j                  j                  ‰j                  ‰«      }‰j                  d| di «      }t        |j                  |«       t        j                  j                  j                  j                  j                  ||fi ‰¤ŽS rù  )r´   Ú_libraryÚfake_class_registryÚmaybe_to_fake_objrÓ  r¡  rw   r¾   r=  r0   Úscript_objectÚTorchScriptObjectVariablerX  )r  Úfake_script_objrü  r   rÎ   rÿ  r‡  s      €€€€r™   r
  z6OutputGraph.register_attr_or_module.<locals>.wrap_name%  s‚   ø€ Ü"'§.¡.×"DÑ"D×"VÑ"VØ—N‘N Fó#�ð ×+Ñ+¨J¸
ÀBÈÓK�Ü! %§*¡*¨oÔ>Ü—}‘}×.Ñ.×<Ñ<×VÑV×]Ñ]Ø˜?ñØ.5ñð r›   c                 óš   •— ‰j                   j                  | «       ‰‰j                  | <   t        j                  ‰‰t        | ¬«      «      S )N)Úsource_name)r²  rï  r  r~   rd  rV   )r  rÎ   rÿ  s    €€r™   r
  z6OutputGraph.register_attr_or_module.<locals>.wrap_name3  sF   ø€ Ø—‘×+Ñ+¨JÔ7Ø06�×!Ñ! *Ñ-Ü&×,Ñ,ØØÜ"¨zÔ:óð r›   Ú	leaf_namec                 óì   •— ‰j                   €J ‚‰j                  ‰| «      }‰› d| › �}|‰j                   |<   t        ‰t        «      r-| ‰j                  t
        j                  |j                  «      <   y y rç  ©r¦  r÷  r³   r\   rÁ  rp  rõ  r  ©r  Ú
new_sourceÚnew_namer  rÎ   rã  s      €€€r™   Úregister_leaf_namez?OutputGraph.register_attr_or_module.<locals>.register_leaf_nameF  s}   ø€ Ø×0Ñ0Ð<Ð<Ð<Ø!×AÑAÀ&È)ÓT�
Ø"˜V 1 Y KÐ0�Ø6@�×)Ñ)¨(Ñ3Ü˜f¤kÔ2ð "ð ×9Ñ9Ü#×3Ñ3°J·O±OÓDòð 3r›   Ú_parametersÚ_buffers)!rO   r(  r~   rd  rØ  rì   r³   r^   r´   r   rx  rz  r-  rª   rí   rî   rN   r3  rM   Ú	NN_MODULEÚSymIntÚSymFloatr   r.  rß   rã   rp  rõ  ro   r  rÝ  Únamed_parametersÚnamed_buffers)rÎ   rÿ  rð  r   r
  rå   ræ   r   r  r½   r  rã  r‡  s   `` `      @@@r™   Úregister_attr_or_modulez#OutputGraph.register_attr_or_module¶  sª  ý€ ô   ¨¯©Ô4ô #×(Ñ(¨¯©¸&ÑLÀGÑLÐLä�w“-ˆØ˜7Ñ"Ð"Ð"Ø˜Ñ"ˆÜ˜fÔ&7Ô8Ð8Ð8ä�fœeŸl™lÔ+Ø×(Ñ(ˆFØ×&Ñ&Ô(ð ×)Ñ)�ð ¤cð  ¬o÷  ó  ôD ˜¤§¡§¡Ô0Ü˜f¤e§h¡h§o¡oÔ6Ð6Ð6áÜ˜f×/Ñ/´×0FÑ0FÓGÔHðY¬#ð Y´/÷ YðV¬#ð V´/÷ Vô ˜¤§¡¬u¯~©~Ð >Ô?ð¤cð ¬o÷ ð ô œD ›LÔ)ð
 ×(Ñ(ˆFØ×&Ñ&Ô(Ø×)Ñ)�ð¤cð ¬o÷ ñ ð¤cð ¬oö ð —O‘O×)Ñ)Ó+ò 	$‰DˆAˆqØ�FŠ{á  “|Ò#ð	$ô
 ×*Ñ*¨EÐ2ˆÜ" 4¨¯©¸$×:KÑ:KÓLˆØ &ˆ�‰˜ÑÜ�fœeŸh™hŸo™oÔ.ð"¬cð "°d÷ "ô �v˜}Ô-Ø$*×$;Ñ$;Ó$=ò 2‘L�I˜qÙ& yÕ1ð2ä�v˜zÔ*Ø$*×$8Ñ$8Ó$:ò 2‘L�I˜qÙ& yÕ1ð2ñ ˜‹Ðr›   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                   €J ‚|j                   j2                  }||	vrU| j5                  |› d�«      }||	|<   |j7                  t9        d|¬«      t;        |«      t=        «       t9        d|¬«      g«       |j                   €J ‚|j                   }t'        |	|   «      |
|<   Œ» �Œ= ||
fS )NrÎ   rë  Ú_refÚ	LOAD_FAST©ÚargvalÚ
STORE_FAST)r  rf  rm   r»   Úsymbolic_localsÚvaluesrq  Ústore_attr_mutationsrâ  r·   r³   r   rã   rÒ   rØ  rP   rã  rX   rë  r\   Ú
local_namer¶   Ú	graphargsÚ_examplerr  Úindexr0  rb  r8   r9   r4   )rÎ   r{  Úmaybe_gmÚstolen_list_namesÚalias_instsÚneeds_aliasÚqueuerä  Ústolen_namerº   Úoverridden_sourcesÚargÚ	list_nameÚlist_idxÚ
alias_nameÚ
old_sources                   r™   Ú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Ô.ó+ ð0 ˆØ35ÐØ—>‘>ó '	PˆCä˜3Ÿ<™<¬Ô.Ü˜sŸz™z¬;Ô7Ø—J‘J×)Ñ)¨[Ñ8àð Ÿ
™
×-Ñ-ˆIØ × 1Ñ 1°-Ñ @Ñ@Ð@Ð@Ø  Ñ+ò P�à—8‘8Ð1Ñ1Øð —x‘xÐ+Ð+Ð+ØŸ8™8Ÿ>™>�Ø 7Ñ*Ø!%§¡Ø$˜+ TÐ*ó"�Jð )3�G˜HÑ%à×&Ñ&ä.¨{À9ÔMÜ-¨hÓ7Ü0Ó2Ü.¨|ÀJÔOð	ôð —x‘xÐ+Ð+Ð+ØŸX™X�
Ü1<¸WÀXÑ=NÓ1OÐ" :Ò.ò9Pð'	PðZ Ð.Ð.Ð.r›   Ú
stack_popsc                 óH  — |j                  «        g }t        «       }dt        ddfd„}t        |j                  «      D �];  \  }}t        |j                  «      |z
  |k  }t        j                  j                  ||¬«       t        |t        j                  «      st        j                  ||«       |r|j                  |«       Œ‡t        |t        «      r|j                  j                  |«       n|j                  |«       t        |t        «      sŒÕ|j                   €dnt#        |j                   «      }	|j$                  j                  t        |«      dz
  |	f«       |j&                  j                  |«       �Œ> t        |«      |_        t+        |j-                  «       |j/                  «       z   «      }
|j0                  j3                  «       D �]K  \  }}t        j                  ||«       t        |j4                  t6        «      r(|j4                  j8                  |k(  r|| j:                  u rŒ_||
v rŒdt<        j>                  dk\  r6t@        jC                  t        |«      r8|jD                  j                  |«       Œ­t@        jC                  t        |«      rJ ‚t        |jF                  «      |jF                  |<   t        |t        «      r@|j                   €dnt#        |j                   «      }	|jH                  j                  ||	f«       |j                  |«       �ŒN ||fS )	a«  
        Gets the stack + locals values belonging to tx that need to be restored.

        Also prunes dead tx locals and realizes all VTs in the tx's stack.

        NullVariables in stack/locals will NOT be restored, unless they are the top `stack_pops`
        elements of the stack - it is expected that the next instruction to run will pop the top
        `stack_pops` elements of the stack, so we should codegen NULLs.

        Returns:
            - stack_values: stack and locals values that need to be restored
            - meta: locations of NULLs and ContextWrappingVariables in the stack/locals
                (ignores the top `stack_pops` values on the stack)
        rå  r“   Nc                 ób   — t         j                  t        j                  | «      rt	        d«      ‚y )NzCAttempted to reconstruct WithExitFunctionVariable outside the stack)r.  Ú__instancecheck__r0   ÚWithExitFunctionVariabler-  )rå  s    r™   Úctx_exit_checkz@OutputGraph._get_stack_values_to_restore.<locals>.ctx_exit_checkÌ  s.   € Ü×%Ñ%¤i×&HÑ&HÈ#ÔNÜ$ØYóð ð Or›   )Úallow_lazy_constantr˜   r,   )é   é   )%Úprune_dead_localsrC  r~   r€  r»   rõ  r0   ÚLazyVariableTrackerÚrealize_allr³   rG  Úvisitr¶   r€   rH  r|   Útarget_valuesrN  rJ  rK  rD  r²   ÚcellvarsÚfreevarsr/  rã   rã  r\   r2  rs  ÚsysÚversion_infor.  rF  rI  rG  rL  )rÎ   r{  rC  Ústack_valuesr/  rH  ÚirÞ  rI  rP  Úcell_and_freevarsrå   ræ   s                r™   Ú_get_stack_values_to_restorez(OutputGraph._get_stack_values_to_restore¶  s¯  € ð" 	×ÑÔàˆÜ"Ó$ˆð	¤ð 	°Dó 	ô " "§(¡(Ó+ó 	4‰HˆAˆuä"% b§h¡h£-°!Ñ"3°zÑ"AÐÜ×)Ñ)×5Ñ5ØÐ+>ð 6ô ô ˜e¤Y×%GÑ%GÔHÜ×%Ñ% n°eÔ<á"Ø×#Ñ# EÔ*ØÜ˜%¤Ô.Ø×%Ñ%×,Ñ,¨QÕ/à×#Ñ# EÔ*Ü˜%Ô!8Õ9à×-Ñ-Ð5‘B¼5À×ATÑATÓ;Uð ð ×#Ñ#×*Ñ*¬C°Ó,=ÀÑ,AÀ=Ð+QÔRØ×)Ñ)×0Ñ0°Ö3ð/	4ô2 ˜\Ó*ˆŒä §¡£°·±³Ñ =Ó>Ðð ×&Ñ&×,Ñ,Ó.ó #	#‰DˆAˆqä×!Ñ! .°!Ô4ô ˜1Ÿ8™8¤[Ô1Ø—H‘H×'Ñ'¨1Ò,Ø˜$Ÿ,™,Ñ&ààÐ%Ñ%Øä×Ñ 7Ò*ô ×)Ñ)¬,¸Ô:Ø×)Ñ)×0Ñ0°Ô3Øô  ×1Ñ1´,ÀÔBÐBÐBÜ#& t×'8Ñ'8Ó#9ˆD×Ñ˜aÑ Ü˜!Ô4Ô5àŸ/™/Ð1‘B´u¸Q¿_¹_Ó7Mð ð ×$Ñ$×+Ñ+¨Q°Ð,>Ô?Ø×Ñ Ö"ðG#	#ðJ ˜TÐ!Ð!r›   rÉ   c                 ór  — | j                   €J ‚t        j                  s| j                   |u sJ ‚| j                  «        || _        d| _        t        j                  d|«       g }t        j                  dk\  r‹| j                   j                  D ]r  }|j                  dk(  r=|j                  t        dt        | j                   j                  d   «      ¬«      «       ŒO|j                  t!        j                   |«      «       Œt g }g }|}|�¡t#        d„ |j$                  D «       «      sJ ‚| j'                  |||u r|nd	«      \  }	}
|j                  |	«       |j                  |
«       t)        |j$                  «      D ]  }|j+                  ||j,                  ¬
«       Œ! |j.                  }|�Œ¡| j0                  j3                  |«       | j5                  |«       | j6                  r#ddlm} | j5                   |«       «       d| _        | j<                  r| j>                  rJ d«       ‚| j5                  | j<                  «       | jA                  | j                   «      \  }}| j5                  |«       | jC                  «        | jD                  jG                  «       D ��ci c]  \  }}|tI        |«      “Œ }}}tK        |«      }ddl&m'} t        | jP                  «      d	kD  rÖg }| jS                  d«      | _*         |tW        | jP                  «      d¬«      }| jY                  d|«      }t[        | j                   ||¬«      }|j]                  |j_                  |d«      «       |j]                  ta        d	d«      «       |j                  |jc                  | jT                  «      «       | j5                  |«       |D ��cg c]  }|D ]  }|‘Œ Œ }}}d}d}| j                   |u �r)|�r&t#        d„ |D «       «      �rt#        d„ |D «       «      �r t        te        |«      «      t        |«      k(  rà| j0                  jg                  «       rÆ|jh                  sº| jj                  s®|d   jl                  sŸ|d   jn                  s�t[        | j                   «      }| jq                  ||«       | j5                  g | js                  |tu        t)        |«      «      |«      ¢|jw                  «       ¢ty        d«      ¢t        dt        |«      ¬«      ‘«       �nô| jS                  d«      }t[        | j                   |||¬«      }| j{                  |||d«       i }|j|                  jG                  «       D ]'  \  }} | dkD  sŒt        |t€        t‚        f«      rŒ#d||<   Œ) t[        | j                   ||||¬«      }!| j{                  |||!d«       t„        j†                  j                  jˆ                  �r3|�r0t        |«      dk(  �r!|d	   }"t‹        |"t„        j†                  jŒ                  jŽ                  «      �rí|"j�                  t„        j†                  j’                  j”                  u �r¼|"jF                  d	   }#|"jF                  d   }$t‹        |#t„        j†                  jŒ                  j–                  «      sJ ‚i }%|!j˜                  j›                  «       D ]M  }&t‹        |&t„        j†                  jœ                  jž                  «      sJ ‚|&j                   }'|&j¢                  |%|'<   ŒO t¥        |#jF                  «      D ]Ê  \  }(}"|"|%v rd|%|"   f| j¦                  j¨                  |(<   Œ)|"jª                  �Lt­        |"jª                  dd«      x})r3t­        |)dd«      r&d|"jª                  f| j¦                  j¨                  |(<   Œ�|"j¯                  «       r*d|"j±                  «       f| j¦                  j¨                  |(<   Œ»t³        d |"› d!|(› �«      ‚ 	 |$j±                  «       | j¦                  _Z        g }+t»        | j¼                  «      d	k7  st        |!j˜                  «      d	k7  r†|+j]                  | js                  ||!j¿                  «       |«      «       t        |!j˜                  «      d	k7  r#|+j                  |!jc                  |«      «       d}n+|+j                  t        d(«      «       n| jÁ                  «        | j5                  |+|!jw                  «       z   «       | j5                  t        d)t        |«      |d	   jÂ                  z
  ¬«      g«       d	},d	}-t¥        |«      D �]Ä  \  }.}
t        |
jÄ                  «      }/|.d	k7  r|/|
jÂ                  z  }/|/d	k(  r)| j5                  t        d)d	¬«      gty        d«      ¢«       n;|-|/z  }-| j5                  tÇ        «       gtÉ        |,|-«      ¢ty        d«      ¢«       |,|/z  },|.t        |«      dz
  k(  sŒ«t[        | j                   «      }0i }1| j                   jÊ                  jG                  «       D ]~  \  }2}3t‹        |3jª                  t‚        «      sŒ!|3jª                  jÌ                  |2k(  sŒ;|0jÏ                  |0jÑ                  |2«      «       t        |
jÄ                  «      t        |1«      z   |1|2<   Œ€ | j5                  |0jw                  «       t        d)t        |1«      ¬«      t        d*d¬«      gz   «       |
jÄ                  jÓ                  |1«       �ŒÇ | j5                  t        d(«      t        d)t        |«      ¬«      gtÕ        |d	   jÂ                  dz   «      ¢«       |r|r| j5                  t        d+|¬,«      g«       t„        j†                  j                  jÖ                  d-v rc| jÙ                  d¬.«      }4|4rOt„        j†                  j                  jÖ                  d/k(  rtÛ        jÜ                  d0|4› �«       |S tß        d0|4› �«      ‚|S c c}}w c c}}w # t¶        $ r }*t¹        d"d#|$› �d$d%d&g|*¬'«       Y d}*~*�Œd}*~*ww xY w)1aÍ  
        Compiles the current subgraph, with inputs w.r.t. self.root_tx, and codegens:
            - Call the compiled subgraph
            - Apply side effects
            - Codegen stack and locals
            - Store the locals

        Python does not allow NULL to be an arg to a function, so we do not codegen NULLs on the stack,
        unless the value is one of the top `stack_pops` values on the stack (these values are expected to be
        popped immediately after this generated code. The prologue of the resume function is expected to restore
        any dropped NULLs.

        Returns stack indices and locals keys where we dropped NULLs, and where we found inactive context manager objects.
        NTzCOMPILING GRAPH due to %s©rJ  é   ÚCOPY_FREE_VARSÚco_freevars©r=  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrÂ   )Úcan_restore)rY  Úblocks     r™   r[  z/OutputGraph.compile_subgraph.<locals>.<genexpr>Z  s   è ø€ ÒK¨u�u×(Ñ(×*ÑKùó   ‚r   )Úis_graph_breakr,   )Úcreate_breakpointFz)export does not support pregraph_bytecode©ÚdisableÚrandom_valuesz.do not trace into Dynamo rng recovery function©rÉ   Ú__gen_rand_values)r<  c              3   óª   K  — | ]K  }t        |t        t        t        f«       xr) t        |t        «      xr |j                  «       t        u  –— ŒM y ­wrÂ   )r³   r„   r‚   r…   rƒ   Úpython_typeÚfloat)rY  ræ   s     r™   r[  z/OutputGraph.compile_subgraph.<locals>.<genexpr>º  s`   è ø€ ò ð ô Øä3Ü,Ü4ðóð ò Vô $ A¤Ó7ÒT¸A¿M¹M»OÌuÐ<TÐUóVñùs   ‚AAc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrÂ   )Ú	is_tensor©rY  rä  s     r™   r[  z/OutputGraph.compile_subgraph.<locals>.<genexpr>Æ  s   è ø€ Ò= a�A—K‘K—MÑ=ùrb  rw  é   ÚUNPACK_SEQUENCEÚ	graph_out)Útempvarsr<  rë  Úis_inputÚinputÚconstantzEncountered unrecognized type z at output z8nested function with non-constructible closure in outputz as_python_constant for out_spec z£Cannot return a nested function with closure from a compiled function. Dynamo failed to construct the function defined in the compiled region with closure objects.zGDefine the function at module scope instead of inside another function z0Ensure that all closure variables are constants.)r&  r'  r(  r)  Úfrom_excÚPOP_TOPÚ
BUILD_LISTÚLIST_EXTENDÚDELETE_FASTr,  )ÚwarnÚerrorrÔ  r|  z‹While compiling, we found certain side effects happened in the model.forward. Here are the list of potential sources you can double check: )prs  r-   Únested_graph_breaksr  Úcompile_subgraph_reasonr·  rÅ   ÚdebugrS  rT  Úprefix_instsÚopnamer¶   r8   rõ  rr  r÷   ÚallÚblock_stackrX  ro  ÚexitrË   r¬  rq  Úprune_dead_object_newÚadd_output_instructionsr˜  Úbytecode_transformationrd  rÃ  r(  rB  Úcleanup_graphrß   rã   ru   rÞ   Ú
decoratorsrf  rÕ   r0  rÂ  rÜ   r  r?   rb  Úload_function_namer6   Úcreate_storer²   Úis_emptyÚdebug_localsrÅ  rH  rI  Úcodegen_cellsÚcompile_and_call_fx_graphrÒ   rc  r;   Úcodegen_suffixÚusesrr   r`   r\   r´   r=  Úlog_graph_in_out_metadatar³   r0   ÚNamedTupleVariableÚ	tuple_clsÚfunctional_exportÚExportTracerOutputÚListVariableÚgraph_outputsr0  ÚcodegenÚGraphOutputEntryÚvariabler5  r€  rc  rR  rã  r�   Úis_python_constantrà  r-  rS  r}   rE   rh   r�   Úgraph_output_varsÚrun_compiler_collectiverD  rG  r7   r3   r/  r2  Úappend_outputÚcreate_loadÚupdater:   Úside_effect_replay_policyrê  Úwarningsr|  rü   )5rÎ   r{  rÉ   rC  r�  ÚinstÚall_stack_valuesÚall_stack_locals_metasÚcur_txrU  r/  ra  rd  r8  r<  r  rû  Únn_modules_proxiesÚrootrf  Úrandom_calls_instructionsÚrand_fnÚrand_fn_namerš  Úvalsré  Ústack_values_flatÚstored_graph_output_varÚgraph_output_varÚcell_cgÚpass1rs  r¬  Úpass2rá  Úflat_returnsrS  Úvt_to_graph_out_idxrÞ  rœ  Úidxrã  Úer²  Ú	start_idxÚend_idxrV  Ún_valsÚroot_cgÚunmodified_locals_namesrå   ræ   Úside_effect_refss5                                                        r™   Úcompile_subgraphzOutputGraph.compile_subgraph   sÞ  € ð* �|‰|Ð'Ð'Ð'ä×)Ò)à—<‘< 2Ñ%Ð%Ð%ð 	×'Ñ'Ô)à'-ˆÔ$ØˆÔä�	‰	Ð-¨vÔ6ð +-ˆÜ×Ñ˜wÒ&ØŸ™×1Ñ1ò 	9�Ø—;‘;Ð"2Ò2Ø ×'Ñ'Ü*Ø,Ü # D§L¡L×$=Ñ$=¸mÑ$LÓ Môõð !×'Ñ'¬¯	©	°$«Õ8ð	9ð Ðà!#ÐØ35ˆØÐ äÑK¸×8JÑ8JÔKÔKÐKÐKà!%×!BÑ!BØ f°¡l™
¸ó"ÑˆL˜$ð ×#Ñ# LÔ1Ø"×)Ñ)¨$Ô/ô " &×"4Ñ"4Ó5ò F�Ø—
‘
˜6°&×2DÑ2D�
ÕEðFð —]‘]ˆFð Ñ ð" 	×Ñ×/Ñ/°Ô3à×$Ñ$ \Ô2à×)Ò)ÝBà×(Ñ(Ñ):Ó)<Ô=Ø-2ˆDÔ*à×*Ò*¨t¯{ª{ð 	
Ø7ó	
Ð;ð 	×$Ñ$ T×%;Ñ%;Ô<à*.×*NÑ*NØ�L‰Ló+
Ñ'ˆÐ'ð 	×$Ñ$ [Ô1à×ÑÔð 9=¿¹×8MÑ8MÓ8O÷
Ù+4¨4°ˆD”/ #Ó&Ñ&ð
Ðñ 
ô Ð0Ó1ˆå'ô ˆt× Ñ Ó! AÒ%Ø(*Ð%Ø%)§\¡\°/Ó%BˆDÔ"ÙÜ'¨×(9Ñ(9Ó:ØGôˆGð  ×.Ñ.Ð/BÀGÓLˆLÜØ—‘˜dÐ7IôˆGð &×,Ñ,Ø×*Ñ*¨<¸Ó>ôð &×,Ñ,Ô-AÀ!ÀUÓ-KÔLØ%×,Ñ,Ø×$Ñ$ T×%;Ñ%;Ó<ôð ×(Ñ(Ð)BÔCð& .>×N TÈÒNÀ#šSÐN˜SÐNÐÑNØ"'ÐØÐð �L‰L˜BÒÚ!Üñ ð +ôõ ô Ñ=Ð+<Ô=Õ=Ü”CÐ)Ó*Ó+¬sÐ3DÓ/EÒEØ×!Ñ!×*Ñ*Ô,Ø—O’OØ×'Ò'Ø*¨2Ñ.×?Ò?Ø*¨2Ñ.×?Ò?ô   §¡Ó-ˆGØ×Ñ˜r 7Ô+Ø×(Ñ(ðà×3Ñ3ØœD¤Ð*;Ó!<Ó=¸tóðð
 ×-Ñ-Ó/ðô ! “^ðô 'Ð'8¼cÐBSÓ>TÔUðö
ð  $Ÿ|™|¨KÓ8Ðô Ø—‘ØØ Ø#5ô	ˆEð ×Ñ Ð$5°u¸eÔDð ˆHØ#Ÿj™j×.Ñ.Ó0ò )‘
��Uà˜1“9¤V¨CÔ2FÌÐ1TÕ%UØ$(�H˜S’Mð)ô Ø—‘ØØ Ø!Ø#5ôˆEð ×Ñ Ð$5°u¸dÔCô —‘×$Ñ$×>Ó>Ú%ÜÐ)Ó*¨aÓ/à& qÑ)�ä˜r¤5§=¡=×#:Ñ#:×#MÑ#MÕNØŸ™Ü—}‘}×6Ñ6×IÑIòJð $&§8¡8¨A¡;�LØ!Ÿx™x¨™{�HÜ%Ø$¤e§m¡m×&=Ñ&=×&JÑ&Jôð ð ð GIÐ'Ø!&×!4Ñ!4×!;Ñ!;Ó!=ò D˜Ü)¨%´·±×1FÑ1F×1WÑ1WÔXÐXÐXØ49·N±N˜Ø8=¿¹Ð+¨HÒ5ðDô
 $-¨\×-?Ñ-?Ó#@ò ™˜˜RØÐ!4Ñ4à +Ø 3°BÑ 7ðL˜D×0Ñ0×CÑCÀCÒHð
 ŸI™IÐ1Ü+2°2·9±9¸fÀdÓ+KÐ!K Ð!KÜ '¨°
¸EÔ Bð !(Ø "§	¡	ðL˜D×0Ñ0×CÑCÀCÒHð  ×2Ñ2Ô4à *Ø "× 5Ñ 5Ó 7ðL˜D×0Ñ0×CÑCÀCÒHô
 #1Ø"@ÀÀÀKÐPSÈuÐ Uó#ð ð+ð0Ø8@×8SÑ8SÓ8U˜×,Ñ,Ô5ð  ˆFÜ˜4Ÿ:™:Ó&¨!Ò+¬s°5×3FÑ3FÓ/GÈ1Ò/LØ—‘Ø×2Ñ2°2°u×7NÑ7NÓ7PÐRVÓWôô �u×*Ñ*Ó+¨qÒ0Ø—M‘M %×"4Ñ"4Ð5EÓ"FÔGØ.2Ñ+à—M‘MÔ"4°YÓ"?Õ@ð ×,Ñ,Ô.Ø×(Ñ(¨°%×2HÑ2HÓ2JÑ)JÔKð 	×$Ñ$ä"Ø ÜÐ-Ó.Ð1GÈÑ1J×1TÑ1TÑTôðô	
ð& ˆ	ØˆÜ Ð!7Ó8ó -	B‰GˆAˆtä˜×*Ñ*Ó+ˆFØ�AŠvØ˜$Ÿ.™.Ñ(�Ø˜Š{Ø×,Ñ,ä*¨<¸QÔ?ðä$ Q›ðõð ˜6Ñ!�Ø×,Ñ,ä&Ó(ðä,¨Y¸Ó@ðô % Q›ðôð ˜VÑ#�	ð ”CÐ.Ó/°!Ñ3Ó3Ü# D§L¡LÓ1�Ø:<Ð'Ø ŸL™L×8Ñ8×>Ñ>Ó@ò ‘D�A�qÜ! !§(¡(¬KÕ8¸Q¿X¹X×=PÑ=PÐTUÓ=UØ×-Ñ-¨g×.AÑ.AÀ!Ó.DÔEÜ58¸×9JÑ9JÓ5KÌcØ3óOñ 6Ð/°Ò2ðð ×,Ñ,Ø×,Ñ,Ó.ä*Ø(¬cÐ2IÓ.Jôô +¨=¸aÔ@ðñô	ð ×!Ñ!×(Ñ(Ð)@ÖAð[-	Bðv 	×$Ñ$ä" 9Ó-Ü" <´SÐ9OÓ5PÔQðô Ð4°QÑ7×AÑAÀAÑEÓFðô	
ñ" Ñ 7Ø×(Ñ(Ü# MÐ:JÔKÐLôô �=‰=×Ñ×9Ñ9Ð=NÑNØ#×HÑHØ)-ð  Ió  Ðñ  Ü—=‘=×'Ñ'×AÑAÀVÒKÜ—M‘MðXØXhÐWiðkôð &Ð%ô 'ðXØXhÐWiðkóð ð
 &Ð%ùóO

ùóZ Oøôz 2ò Ü%Ø$^Ø&FÀxÀjÐ$Qð!ð !jØ Rð#ð &'÷ó ûðús$   ÊpÎ:pß4p ð	p6ðp1ð1p6rT  c                 ó  — | j                   j                  rÕd}|}|�²t        t        |j	                  «       «      «      }|D ]T  }|| j
                  u r!|j                  |j                  |«      «       Œ2|j                  sJ ‚ ||j                  |   «       ŒV |j                  t        t        |«      «      «       |j                  }|dz  }|�Œ²|j                  t        d|¬«      «       y |j                  t        dd¬«      «       y )Nr   r,   ry  r^  )r  rË   rN  ÚsortedrW  rs  r   Úcreate_load_closureÚpost_prune_cell_and_freevarsr5   rõ  r¬  r8   )rÎ   r{  rT  Útx_cntr¨  rR  Úcells          r™   r�  zOutputGraph.codegen_cellsÎ  sõ   € à×'Ñ'×3Ò3ØˆFØ79ˆFØÐ$ô !¤¨×(@Ñ(@Ó(BÓ!CÓD�Ø$ò F�DØ §¡Ñ-Ø×(Ñ(¨×)?Ñ)?ÀÓ)EÕFà%×BÒBÐBÐBÙ˜6×>Ñ>¸tÑDÕEðFð × Ñ Ô!3´C¸³MÓ!BÔCØŸ™�Ø˜!‘�ð Ñ$ð  ×ÑÔ/°À&ÔIÕJà×ÑÔ/°À!ÔDÕEr›   rU  Úlog_side_effectsc                 ó4  ‡‡	— | j                   j                  ‰«       | j                  r�| j                  rJ ‚| j                  j	                  «       D ]V  \  }} ‰|«       | j
                  €J ‚‰j                  ‰j                  | j
                  «      «       ‰j                  |«       ŒX t        j                  r| j                   j                  ‰«       |j                  D ]h  \  Š	}‰j                  ˆˆ	fd„«       |D ]
  } ‰|«       Œ ‰j                  t        t!        |«      d«      «       ‰j                  t#        d«      g«       Œj | j%                  |‰«       ‰j'                  ||j                   ¬«       | j                   j)                  ‰|«       y )Nc                  ó   •—  ‰ ‰«      S rÂ   r˜   )rT  Ú	debug_vars   €€r™   rU  z,OutputGraph.codegen_suffix.<locals>.<lambda>ÿ  s   ø€ ¡R¨	£]€ r›   Frx  )Úvalue_from_source)rq  Úcodegen_save_tempvarsrÅ  r(  rã   rÇ  r   r¡  Ú
store_attrr-   Úreplay_side_effectsÚcodegen_hooksrŽ  r\  Úextend_outputr6   rõ  r8   r�  Úrestore_stackÚcodegen_update_mutated)
rÎ   r{  rU  rT  rÆ  r  ré  rÙ   r=  rÉ  s
      `     @r™   r‘  zOutputGraph.codegen_suffixç  sb  ù€ ð 	×Ñ×/Ñ/°Ô3Ø×ÒØ—{’{Ð"�?Ø!×0Ñ0×6Ñ6Ó8ò $‘	��cÙ�3”Ø×.Ñ.Ð:Ð:Ð:Ø× Ñ  §¡°×0GÑ0GÓ!HÔIØ—‘˜dÕ#ð	$ô
 ×%Ò%Ø×Ñ×+Ñ+¨BÔ/ð  "Ÿ™ò 	>‰OˆI�tØ×ÑÔ2Ô3Øò �Ù�3•ðà×ÑÔ1´#°d³)¸UÓCÔDØ×ÑÔ0°Ó;Ð<Õ=ð	>ð 	×Ñ˜2˜rÔ"à
×Ñ˜¸R¿Y¹Y¸ÐÔGØ×Ñ×0Ñ0°Ð5EÕFr›   c                 óê  — | j                   sJ ‚t        | j                  j                  «      }|D ]  }|j                  j                  dd«       Œ  t        j                  «       }t        j                  |«      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�   rƒ  r/  r·   r´   rÆ  r«  Úpairwiserÿ  r<  Ú_set_grad_enabledrN  rÙ   Ú_erasedÚ
erase_node)rÎ   rƒ  r¾   r»  Únode1Únode2s         r™   r‰  zOutputGraph.cleanup_graph	  s  € ð ×ÒÐÐÜ�T—Z‘Z×%Ñ%Ó&ˆØò 	6ˆDØ�I‰I�M‰MÐ.°Õ5ð	6ô ×,Ñ,Ó.ˆÜ%×.Ñ.¨uÓ5ò 	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ñ	1r›   c                 óz  ‡‡— | j                   syt        j                  j                  j                  r*t        j                  j
                  j                  d‰«      ‚t        j                  d‰«       t        j                  j                  dd„ ˆˆfd„¬«       | j                   j                  «        d| _         y)zE
        Do not save this output graph to the CompilePackage
        NzDetected a package bypass: %sÚartifactc                  ó   — dddœS )NÚprecompile_cache_bypassÚjson©r  Úencodingr˜   r˜   r›   r™   rU  z,OutputGraph.bypass_package.<locals>.<lambda>6	  s   € Ø1Ø"ñ!€ r›   c                  ó   •— d‰i‰ ¥S )NÚ_reasonr˜   )rÚ   rÉ   s   €€r™   rU  z,OutputGraph.bypass_package.<locals>.<lambda>:	  s   ø€ à˜6ð ð ð € r›   ©Úmetadata_fnÚ
payload_fn)rv  r´   r=  r-   Ústrict_precompiler.   ÚPackageErrorrÅ   ÚwarningÚ_loggingÚtrace_structuredÚbypass_current_entryrj  s    ``r™   rk  zOutputGraph.bypass_package)	  s’   ù€ ð �|Š|ØÜ�=‰=×Ñ×1Ò1Ü—-‘-×#Ñ#×0Ñ0Ø/°óð ô 	�‰Ð3°VÔ<Ü�‰×'Ñ'Øñôð 	(ô 	
ð 	�‰×)Ñ)Ô+Øˆ�r›   c                 óT  — 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 )Nr1  )r�   rƒ  r/  rf  r³   r´   r�  r   Úshaper  Úreprr  )rÎ   Úretr¾   r1  ÚsizeÚss         r™   Úget_graph_sizes_structuredz&OutputGraph.get_graph_sizes_structuredC	  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   Á-$B%c                 óL  — d}|d|› d�z  }| j                   j                  D ]ÿ  }|j                  j                  dd «      }t	        |t
        j                  j                  «      sŒD|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 =====
r1  z: r�  FTz (concrete): )r�   rƒ  r/  rf  r³   r´   r�  r   rí  r  rN  r  r¶   r$  r¾   Úhint)	rÎ   r  Úgraph_sizes_strr¾   r1  rð  Úconcrete_sizeÚ
has_symintÚszs	            r™   Úget_graph_sizeszOutputGraph.get_graph_sizesL	  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ñšð#	ð( Ðr›   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      r™   Úrestore_global_statez OutputGraph.restore_global_statee	  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                 óh  ‡— | j                   }|€J ‚|j                  xŠ��z‰j                  �€l‰j                  }t        j                  d‰j                  «       t        j                  j                  dd„ ˆfd„¬«       |j                  }t        |«      dk(  s%J dj                  dj                  |«      «      «       ‚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 «       |j0                  j3                  «        t4        j6                  ‚y y # 1 sw Y   Œ=xY w# 1 sw Y   ŒAxY w)Nzcompiler_collective %srÛ  c                  ó   — dddœS )NÚcompiler_collectiveÚstringrß  r˜   r˜   r›   r™   rU  z5OutputGraph.run_compiler_collective.<locals>.<lambda>€	  s   € Ø1Ø (ñ%€ r›   c                  ó8   •— ‰ j                   j                  «       S rÂ   )Úlocal_stateÚrender)Údss   €r™   rU  z5OutputGraph.run_compiler_collective.<locals>.<lambda>„	  s   ø€  2§>¡>×#8Ñ#8Ó#:€ r›   rã  r,   z&Expect only one device type but got {}ú+r  Trù  )Úgroup)rs  Údistributed_stateÚ
all_statesÚ
compile_pgrÅ   Úinfor  r´   ré  rê  Ú_device_typesrõ  r‘  r�  rA   r·   r;  ÚrankrÇ  Údevice_countrj   rð  ÚdistÚall_gather_objectÚspeculation_logrp  r.   Ú CompileCollectiveRestartAnalysis)rÎ   r{  r  Údevice_typesr  r  s        @r™   rŸ  z#OutputGraph.run_compiler_collectivew	  s|  ø€ Ø�\‰\ˆØˆ~Ðˆ~Ø×&Ñ&Ð&ˆBÑ3¸¿¹Ñ8MØŸ™ˆJä�H‰HÐ-¨r¯~©~Ô>Ü�N‰N×+Ñ+Øñó ;ð ,ô ð &×3Ñ3ˆLÜ�|Ó$¨Ò)ð Ø8×?Ñ?ÀÇÁÈÓ@VÓWóÐ)ô )¨×)9Ñ)9Ó);Ó<×CÑCØ—O‘OÓ%¬×(9Ñ(9×(FÑ(FÓ(HÑHóñ
+ô Ð2È$ÔOñ	
+ð *.¨°·±Ó1BÑ(B�
ä×&Ñ& z°2·>±>ÈÕTà *�”÷
+÷ 
+ð ×Ñ×$Ñ$Ô&Ü×6Ñ6Ð6ð= 9NÐ3÷ 
+ð 
+ú÷ 
+ð 
+ús$   ÄF(Ä">FÅ F(ÆF%	Æ!F(Æ(F1Úrvr~   c                 óÐ  — | j                   syddlm} |D �]  }t        ||«      r|j                  sŒ|j                  «       j                  j                  j                  d«      }t        |t        j                  j                  j                  «      sJ ‚|j                  €Œ�t        |dfg«      }|| j                   z  sŒ«|j                  rt!        |j                  «      n|j"                  j                  j$                  }|j&                  j(                  j+                  |«       �Œ |j&                  j(                  r'd|j&                  _        t/        j0                  d¬«      ‚y)aj  
        Validate that if torch.autograd.grad is used in the graph and outputs
        require grad, we trigger AutogradGradRestartAnalysis only if the output is connected
        to the autograd.grad computation.

        rv here refers to list of variables that are being returned from dynamo graph.

        See Note [Tracing autograd.grad in dynamo]
        Nr,   ©ÚTensorVariabler1  Tz3autograd.grad consumed grad_fns of returned tensors©Úrestart_reason)r½  Úvariables.tensorr  r³   Úrequires_gradr	  r¾   r/  rf  r´   r�  Úfake_tensorr   rµ   rÀ   rã  rª   rü  r  r  Úautograd_grad_leaked_tensorsr¶   Úgraph_break_on_autograd_gradr.   ÚAutogradGradRestartAnalysis)rÎ   r  r{  r  rå  r  Úreachable_grad_fnsÚtensor_names           r™   Ú)_validate_outputs_safe_for_autograd_nodesz5OutputGraph._validate_outputs_safe_for_autograd_nodesš	  s&  € ð ×3Ò3Øå4àó 	TˆCÜ˜c >Ô2¸#×:KÒ:KØàŸ,™,›.×-Ñ-×2Ñ2×6Ñ6°ÓGˆKÜ˜k¬5×+<Ñ+<×+HÑ+H×+SÑ+SÔTÐTÐTØ×"Ñ"Ð*Øô "<¸kÈ4Ð=PÐ<QÓ!RÐØ! D×$HÑ$HÓHà14·²œc #§*¡*œoÀÇÁÇÁ×ATÑAT�Ø×"Ñ"×?Ñ?×FÑFÀ{ÖSð	Tð" ×Ñ×:Ò:à>BˆB×ÑÔ;Ü×1Ñ1ØTôð ð ;r›   c                 ó|  ‡— ddl m} t        «       Š| j                  D ]E  }t	        ||«      sŒ|j
                  rŒ‰j                  |j                  «       j                  «       ŒG ‰sy| j                  j                  D ]7  }|‰v rŒt        ˆfd„|j                  D «       «      sŒ'‰j                  |«       Œ9 |D ]  }t	        ||«      sŒ|j                  sŒ|j                  «       j                  ‰v sŒ:d}|j                  rt        dd|dd	g¬
«       ŒZd|j                   _        t%        j&                  d¬«      ‚ y)a—  Skip frame if a source-less requires_grad_() intermediate leaks as output.

        AOTAutograd's functionalization drops requires_grad_() on intermediates,
        so returning them (or tensors derived from them) produces wrong results.
        We detect this via FX graph reachability: find the requires_grad_() nodes
        for source-less intermediates, then check if any output is downstream.
        r,   r  Nc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrÂ   r˜   )rY  ÚinpÚtainted_nodess     €r™   r[  zHOutputGraph._check_requires_grad_intermediate_outputs.<locals>.<genexpr>Ü	  s   øè ø€ ÒH¨C�3˜-Ô'ÑHùs   ƒaK  An intermediate tensor that had requires_grad_() called on it (or a tensor derived from it) is being returned from the compiled region. AOTAutograd's functionalization drops the requires_grad_() effect on graph outputs, producing wrong results. If you only need the tensor values without gradients, call .detach() before returning.z,returning intermediate with requires_grad_()z4graph output depends on source-less requires_grad_()zVIf you only need the tensor values without gradients, call .detach() before returning.z‚Consume the gradient inside the compiled function (call backward() and use .grad), or move requires_grad_() outside torch.compile.r%  Tz:source-less requires_grad_() intermediate leaked as outputr  )r  r  r²   r�  r³   rã  r¸   r	  r¾   r�   rƒ  ÚanyÚall_input_nodesr  rw  rE   r  Úgraph_break_on_requires_grad_r.   ÚRequiresGradRestartAnalysis)	rÎ   r  r{  r  ræ   r¾   rå  r¤   r(  s	           @r™   Ú)_check_requires_grad_intermediate_outputsz5OutputGraph._check_requires_grad_intermediate_outputsÃ	  s5  ø€ õ 	5ô -0«EˆØ×-Ñ-ò 	5ˆAÜ˜!˜^Õ,°Q·X³XØ×!Ñ! !§*¡*£,×"3Ñ"3Õ4ð	5ñ Øð —J‘J×$Ñ$ò 	(ˆDØ�}Ñ$ØÜÓH°4×3GÑ3GÔHÕHØ×!Ñ! $Õ'ð		(ð ò 	ˆCä˜3 Õ/Ø×%Ó%Ø—L‘L“N×'Ñ'¨=Ò8ðQð ð —<’<Ü!Ø NØ VØ$'ð?ðNðö	ð HL�B×&Ñ&ÔDÜ×9Ñ9Ø'côð ñ;	r›   rª  c                 ó†  ‡ ‡"‡#‡$‡%‡&‡'— t         j                  j                  j                  «       5  ddlm} ‰ j                  sJ ‚‰ j                  «        t        ‰ j                  «      dk(  rt        |«      dk(  rg cddd«       S t        dd¬«      }t        |t        «      sJ ‚t        |t        «      sJ ‚‰ j                  ||«       ‰ j!                  ||«       ‰ j#                  dd‰ j$                  j'                  t)        d	„ |D «       «      «      fi «      }‰ j+                  «       }|j-                  |«       ‰ j$                  j/                  ||«       t0        j2                  s¿t5        d
«      5  t7        |«      D ]L  }t9        ||«      }	t        |	t:        j<                  «      sŒ*t?        |	‰ j@                  |‰ jB                  ¬«       ŒN ‰ jE                  «        t?        t;        j<                  |‰ j                  «      ‰ j@                  |‰ jB                  ¬«       ddd«       ‰ jG                  «        t        ‰ j                  «      }
tH        d   dxx   |
z  cc<   ‰ jK                  «        ‰ jL                  jO                  «        tQ        |‰ j                  «      Š$ddl)m*}  |‰$«       ‰ jV                  r(‰ jV                  D ]  }tY        ‰$|t9        ||«      «       Œ ‰ jZ                  D ]
  } |‰$«       Œ t]        ‰$j_                  «       d«      �%‰ ja                  d‰$jc                  ddd¬«      ¬«       ‰ jd                  �|‰$_3        ‰ jh                  ‰$_4        ‰ jj                  jm                  «       ‰$jn                  d<   ‰ jp                  ‰$jn                  d<   |‰$jn                  d<   ‰ jr                  �‰ jr                  ‰$jn                  d<   tt        jw                  dty        |‰$ddd¬«      «       t         jz                  j}                  dˆ fd„ˆ$fd„¬«       ‰ j                  «        ‰ j€                  j‚                  }|€J ‚|‰ _B        ‰ jB                  s_ddlCmDc m} |j‹                  d¬«      5  t         jŒ                  j�                  |j@                  ¬«      }ddd«       ‰ j€                  _A        ‰ j‘                  «       5  ‰ j“                  ‰$‰ j•                  «       «      Š#ddd«       ddlKmL} t        ‰#|«      s&t        t9        ‰#d d«      |«      rR‰#jš                  d!k(  rCt        ‰#|«      r‰#n‰#jœ                  }|jŸ                  |«       t        ‰#|«      s|j                   Š#‰ jd                  �‰ jd                  j£                  |‰#«       ‰ j¤                  r	‰#Š%ˆ%fd"„}|Š# |‰#d#¬$«      Š#tH        d   d%xx   dz  cc<   |j@                  €J ‚|j@                  j¦                  x}�r5g Š'i Š&‰ j¨                  D �cg c]  }|jª                  ‘Œ }}|D ]·  }|j­                  |jª                  «      }t¯        j°                  |j²                  «      jµ                  «       }t·        «       }t¹        jº                  ||j²                  |gd«      }t¼        jw                  d&|«       ‰'j¿                  tÁ        jÂ                  |fd'„|«      |f«       Œ¹ t         jÄ                  j                  d#¬$«      d(tÆ        d)tÆ        d*tÆ        fˆ#ˆ$ˆ ˆ&ˆ'fd+„«       }‰ jÉ                  ||«       n‰ jÉ                  |‰#«       ‰ jÊ                  €J ‚tÍ        ‰ jÊ                  «      Š"tÏ        «       r¿‰"jÑ                  ˆ"fd,„«       g }tÓ        jÔ                  «       D ]<  } |‰"«       ‰ j×                  «       }‰"jÙ                  |«       |j¿                  |«       Œ> |D ]"  }‰"jÛ                  ‰"jÝ                  |«      «       Œ$ ‰"jß                  t        tÒ        «      d«       ‰"já                  «        tã        ‰ j¨                  «      D ](  \  } }!|!jª                  ‰ jä                  jæ                  | <   Œ* ‰"jé                  |«       ‰"jë                  «       cddd«       S # 1 sw Y   �ŒpxY w# 1 sw Y   �ŒûxY w# 1 sw Y   �Œ¾xY wc c}w # 1 sw Y   yxY w)-zÞ
        Generate code from self.graph and return the Instruction()s to
        call that generated code.

        Code is generated w.r.t. self.root_tx.
        tx is only used for preserving GraphModule metadata
        r,   re  r   NÚ__compiled_fnT)Ú	with_uuidr²  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrÂ   )r	  ro  s     r™   r[  z8OutputGraph.compile_and_call_fx_graph.<locals>.<genexpr>*
  s   è ø€ Ò5OÀq°a·j±j·lÑ5Oùrb  r)   )r(  ÚstatsÚcalls_captured)Údce_hop_extra_outputsz8Graph contains named parameters due to static addresses.F©Úprint_outputÚinclude_strideÚinclude_device©r•   rÁ  r¢  Ú
backend_idr–  ú%s)r7  r8  ÚcoloredÚdynamo_output_graphc                  ó(   •— d‰ j                  «       iS )NÚsizes)rò  rÍ   s   €r™   rU  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>…
  s   ø€ ˜ $×"AÑ"AÓ"CÐD€ r›   c                  ó,   •— ‰ j                  ddd¬«      S )NFTr5  )Úprint_readabler9  s   €r™   rU  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>†
  s   ø€  2×#4Ñ#4Ø!&°tÈDð $5ó $€ r›   )rå  r‚  )r/  )Ú_LazyGraphModuleÚ__self__Ú_lazy_forwardc                  ó|   •— t         j                  j                  «       5   ‰| i |¤Žcd d d «       S # 1 sw Y   y xY wrÂ   )r´   r<  ÚDisableTorchFunctionSubclass)rÙ   rÚ   Úreal_compiled_fns     €r™   Ú_tf_disabled_wrapperzCOutputGraph.compile_and_call_fx_graph.<locals>._tf_disabled_wrapperÌ
  s9   ø€ ÜŸ™×>Ñ>Ó@ñ AÙ/°Ð@¸Ñ@÷A÷ Aò Aús    2²;z"do not trace Dynamo-compiled graphrh  Úunique_graphsz:Compiling backend specialized graph with specialization=%sc                 ó   —  |||    «      S rÂ   r˜   )r·  rÙ   Úcheck_fns      r™   rU  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>ð
  s   € ÁXØ$(¨¡IóF"€ r›   rÙ   rÚ   r“   c                  ó°  •— ‰	D ]±  \  }} || «      sŒ|‰v r ‰|   | i |¤Žc S ‰j                   j                  |j                  |j                  «      5  |‰j                  d<   t        | «      }t        ‰j                  «      5  ‰j                  ‰|«      ‰|<   d d d «       d d d «        ‰|   | i |¤Žc S   ‰| i |¤ŽS # 1 sw Y   Œ'xY w# 1 sw Y   Œ+xY w)NÚspecialization)	r/  Úpatch_source_specializationrã  rK  r/  rÒ   r   rŸ  Úcall_user_compiler)
rÙ   rÚ   rK  rM  r–   Úcompiled_fnr•   rÎ   Úspecialization_cacheÚspecialization_guardss
        €€€€€r™   Úspecialized_dispatchzCOutputGraph.compile_and_call_fx_graph.<locals>.specialized_dispatchù
  s	  ø€ à4Iò YÑ0˜ .Ù# D�>Ø-Ð1EÑEØ'KÐ';¸NÑ'KØ%)ð("Ø-3ñ("ò !"ð "&§¡×!KÑ!KØ .× 5Ñ 5°~×7NÑ7Nó"ñ 	&ð =K §¡Ð(8Ñ 9Ü?CÀD»z Ü%,¨T×-AÑ-AÓ%Bñ !&à(,×(?Ñ(?ÀÀNÓ(Sð %9¸Ñ$H÷!&÷	&ð $HÐ#7¸Ñ#GÈÐ#XÐQWÑ#XÒXð%Yñ& '¨Ð7°Ñ7Ð7÷!&ð !&ú÷	&ð 	&ús$   Á0CÂC ÂCÃ C	ÃCÃC	c                  ól   •— ‰ j                  t        j                  j                  j                  d«      S )NÚstore_user_object_weakrefs)rS  r´   r=  Úgraph_bytecode_inputsrœ   )rT  s   €r™   rU  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>   s(   ø€ ˜B×/Ñ/ÜŸ™×;Ñ;×DÑDØ4ó€ r›   )vr´   r&  r   Úclear_framerŠ  rf  r·  rŸ  rh   r�   rõ  r=   r³   rÒ   rÞ   r-  r$  r¤  rx  Ú
create_argrN  Ú
dedup_passrë   Ú_maybe_preserve_original_metar-   Údo_not_emit_runtime_assertsrj   Údirr�   r   r  r)   r/  r(  Úremove_unused_get_attr_nodesÚremove_unused_graphargsri   Ú&remove_tensorify_specialized_graphargsrœ  rp  r    Údce_extra_outputsr4  rÎ  rä   r²  r’  Ú
parametersrk  rA  rv  Ú_backend_idr  rÁ  r÷   r/  r¢  r–  Úgraph_code_logr€  rs   ré  rê  rq  rŸ  rÓ  Ú_old_fake_moder›  r8  rœ  r�  rž  rÿ  rO  r–   Útorch.fx._lazy_graph_modulerB  rœ   rC  Úforce_recompilerú   Úadd_backend_idr»  Úspecializationsr3  rã  r5  ÚinspectÚ	getsourcerK  ÚstripÚRootGuardManagerr   ÚLAMBDA_GUARDrÅ   r¶   rÉ  rÊ  r=  r	   Úinstall_global_unsafers  r?   rG   r\  rH   r0  r0  ra  r   r¡  r`  Úpop_topr€  rc  rQ  Úmake_call_generated_coderc  )(rÎ   r{  r  rª  rf  r  Úoutput_nodeÚsub_gmsÚattrÚsubgraphÚncallsr4  Úsubgraph_nameÚregister_finalizerÚold_fake_moderÒ  Úbackend_fake_moderB  Úlazy_gmrH  rh  ÚaÚsourcesrM  Úsource_indexÚcheck_fn_sourceÚunused_root_guard_managerrK  rS  Útmp_varsÚconstructorÚvar_namer·  r=  rT  rP  r•   rG  rQ  rR  s(   `                                 @@@@@@r™   r�  z%OutputGraph.compile_and_call_fx_graph
  s  þ€ ô �]‰]×)Ñ)×5Ñ5Ó7ñ j	)Ý+à×#Ò#Ð#Ð#à×(Ñ(Ô*Ü˜4Ÿ:™:Ó&¨!Ò+´°B³¸1²Ø÷j	)ñ j	)ô ˜_¸Ô=ˆDä˜b¤$Ô'Ð'Ð'Ü˜d¤NÔ3Ð3Ð3ð
 ×:Ñ:¸2¸rÔBð ×:Ñ:¸2¸rÔBà×*Ñ*ØØØ×$Ñ$×/Ñ/´Ñ5OÈBÔ5OÓ0OÓPÐRØó	ˆKð —o‘oÓ'ˆGØ×Ñ Ô(à×Ñ×=Ñ=¸bÀ+ÔNÜ×5Ò5ô "Ð"CÓDñ Ü # D£	ò ˜Ü#*¨4°Ó#6˜Ü% h´·±Õ?Ü;Ø (Ø $§¡Ø $Ø'+§{¡{ö	ðð ×5Ñ5Ô7Ü3ÜŸ™ t¨T¯Z©ZÓ8ØŸ™ØØ#Ÿ{™{õ	÷ð& ×(Ñ(Ô*Ü  §¡Ó,ˆFÜ�WÑÐ.Ó/°6Ñ9Ó/à×7Ñ7Ô9ð ×!Ñ!×'Ñ'Ô)ä# D¨$¯*©*Ó5ˆBå@á! "Ô%ð
 ×6Ò6Ø%)×%LÑ%Lò M�MÜ˜B ¬w°t¸]Ó/KÕLðMð '+×&AÑ&Aò 'Ð"Ù" 2Õ&ð'ô �B—M‘M“O TÓ*Ð6ð ×#Ñ#ØNØ×(Ñ(Ø%*¸4ÐPTð )ó ð $ô ð �|‰|Ð'Ø!%�”ð *.×)EÑ)EˆBÔ&ð ×5Ñ5×:Ñ:Ó<ð �G‰GÐ6Ñ7ð ,0×+AÑ+AˆB�G‰GÐ'Ñ(Ø$(ˆB�G‰G�LÑ!à×(Ñ(Ð4Ø26×2KÑ2K�—‘Ð.Ñ/ä× Ñ ØÜ&Ø˜"¨TÀ$ÐPTôôô �N‰N×+Ñ+Ø%ÛDóð ,ô ð ×#Ñ#Ô%Ø ×0Ñ0×:Ñ:ˆMØ Ð,Ð,Ð,à"/ˆDÔØ—;’;ß9Ð9à—]‘]ÈE�]ÓRñ ô ).×(9Ñ(9×(HÑ(HØ"/×"9Ñ"9ð )Ió )Ð%÷ð& 2C�×$Ñ$Ô.à×*Ñ*Ó,ñ QØ"×5Ñ5°b¸$×:MÑ:MÓ:OÓP�÷Qõ Eä˜+Ð'7Ô8Üœ7 ;°
¸DÓAÐCSÔTØ×(Ñ(¨OÒ;ô " +Ð/?Ô@ñ  à$×-Ñ-ð ð !×0Ñ0°Ô9ä! +Ð/?Ô@à")§/¡/�Kà�|‰|Ð'Ø—‘×+Ñ+¨D°+Ô>ð ×3Ò3Ø#.Ð ôAð 3�á!ØÐ$HôˆKô �WÑ˜oÓ.°!Ñ3Ó.Ø ×*Ñ*Ð6Ð6Ð6Ø"/×"9Ñ"9×"IÑ"IÐIˆÑIØ(*Ð%ØSUÐ$Ø-1¯^©^Ö<¨˜1Ÿ8›8Ð<�Ð<Ø&5ò �NØ#*§=¡=°×1FÑ1FÓ#G�LÜ&-×&7Ñ&7¸×8OÑ8OÓ&P×&VÑ&VÓ&X�Oä0@Ó0BÐ-Ü%×2Ñ2Ø1Ø&×/Ñ/Ø(Ð)Øó	 �Hô —I‘IØTØ'ôð
 *×0Ñ0ä%×-Ñ-Ø;Cò !"ð !-ó	ð +ðõ
ð#ô: —‘×&Ñ&Ð.RÐ&ÓSð8´ð 8¼sð 8Äs÷ 8ð 8ó Tð8ð. ×*Ñ*¨4Ð1EÕFð ×*Ñ*¨4°Ô=à—<‘<Ð+Ð+Ð+Ü˜4Ÿ<™<Ó(ˆBäÔ!ð × Ñ óôð �Ü#@×#GÑ#GÓ#Iò .�KÙ ”OàŸ™›ð ð —H‘H˜XÔ&Ø—O‘O HÕ-ð.ð !)ò ?�HØ×$Ñ$ R§^¡^°HÓ%=Õ>ð?ð × Ñ ¤Ô%BÓ!CÀUÔKØ—
‘
”ä% d§n¡nÓ5ò W‘��SØLOÏJÉJ�×$Ñ$×DÑDÀSÒIðWð ×'Ñ'¨Ô-Ø×&Ñ&Ó(÷U	j	)ñ j	)÷Pñ ú÷tñ ú÷*Qñ Qüòh =÷Wj	)ð j	)úsq   °Ab7ÂC+b7Å15bÆ'A6bÈIb7Ñ4+bÒ)b7Ó!b%Ó)Db7Ø b2ØI.b7âb	âb7âb"	âb7â%b/	â*b7â7c c                 ó:   — | j                   j                  d¬«      S )Nr~  ©r„  )r�   Ú
find_nodesrÍ   s    r™   ÚplaceholderszOutputGraph.placeholders<  s   € à�z‰z×$Ñ$¨Ð$Ó6Ð6r›   c                 óZ   — | j                   D �cg c]  }|j                  d   ‘Œ c}S c c}w ©Nr,  )r†  r/  ©rÎ   r¾   s     r™   r3  zOutputGraph.graphargs@  s%   € à26×2CÑ2CÖD¨$�—	‘	˜*Ó%ÒDÐDùÒDs   �(r•   r–   c                 ót   — t        dd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Úcompile_aot_autogradÚ'aot_autograd_cumulative_compile_time_us)Ú
phase_namerú  Úlog_waitcounterÚwaitcounter_name_overrideÚdynamo_compile_column_us)rj   Ú_call_user_compiler)rÎ   r•   r–   s      r™   rO  zOutputGraph.call_user_compilerD  sI   € ô Ø,Ø(Ø"&Ø Ø&<Ø%Nô
ñ 	@ð ×+Ñ+¨B°Ó?÷	@÷ 	@ò 	@ús   ’.®7c                 óž  — | j                   €J ‚d}g }|j                  j                  D ]6  }|j                  dv r|dz  }|j                  dk(  sŒ&|j	                  |«       Œ8 t        |«       |D ]/  }t        |d«      rŒ|j                  d   }|j                  |_	        Œ1 | j                  |_        | j                  |_        t        | j                  t         j"                  «      xs | j                   }t%        | j                  t         j&                  «      }	|	rt)        ||	«      }t        |d«      r|j*                  nd}
t         j,                  rdd	lm}  ||«      }	  t1        «       t2        j4                  d
|
› �«       t         j6                  rt9        |«      } |||«      } t1        «       t2        j4                  d|
› �«       t;        |«      sJ d«       ‚	 t]        ddi | j^                  ¥|ta        |j                  j                  «      ta        |«      dœ¥«       S # t<        t>        f$ r ‚ t@        $ rº}| jB                  rCtE        | j                   |tG        jH                  «       «      jK                  |jL                  «      d ‚tO        || jP                  jR                  dd|
› dtU        |«      › d| jP                  jW                  «       › �d|
› dtU        |«      › d�dg¬«       Y d }~�Œd }~wtX        $ r ‚ tZ        $ rH}tE        | j                   |tG        jH                  «       «      jK                  |jL                  «      d ‚d }~ww xY w)Nr   ©r`  Úcall_methodÚcall_moduler,   r~  Ú_dynamo_sourcer,  rœ   z<unknown compiler_fn>)Úinline_invoke_subgraphz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.r%  Údynamor‹  )Úop_countÚ
node_countÚinput_count)1r‘   r�   rƒ  r„  r¶   rq   rÝ  r/  rã  r˜  r¦  Ú_param_name_to_sourcer´  Ú_source_to_user_stacksrJ   r¢  r-   Údebug_backend_overriderK   Údebug_inductor_config_overriderŸ   rœ   r™  Ú5torch._higher_order_ops.passes.inline_invoke_subgraphrÆ   r/   ÚINFOrû   rò   Úcallabler   r   rC   r¼  rB   ri  ÚcurrentframeÚwith_tracebackÚ__traceback__rF   rs  ru  rª   Úformat_frame_summaryrD   rý   r   r�  rõ  )rÎ   r•   r–   Útotr†  r¾   Úplr=  r‘   Úinductor_config_overrider  r™  rP  r¸  s                 r™   r“  zOutputGraph._call_user_compilerQ  s-  € ð ×ÑÐ+Ð+Ð+ØˆØˆØ—H‘H—N‘Nò 	*ˆDØ�w‰wÐIÑIØ�q‘�Ø�w‰w˜-Ó'Ø×#Ñ# DÕ)ð		*ô
 	˜3ÔØò 	/ˆBÜ˜2Ð/Õ0Ø—g‘g˜jÑ)�ð %(§J¡J�Õ!ð	/ð $(×#<Ñ#<ˆÔ Ø$(×$>Ñ$>ˆÔ!ô 0Ø×&Ñ&¬×(EÑ(Eóò  ð ×Ñð	 	ô $OØ×"Ñ"¤F×$IÑ$Ió$
Ð ñ $Ü4ØÐ5óˆKô �{ JÔ/ð × Ò à(ð 	ô
 ×(Ò(õñ (¨Ó+ˆBð	8ØŒL‹Nœ7Ÿ<™<Ð+EÀdÀVÐ)LÔMÜ×(Ò(Ü,¨[Ó9�Ù% b¨.Ó9ˆKØŒL‹Nœ7Ÿ<™<Ð+BÀ4À&Ð)IÔJÜ˜KÔ(ÐOÐ*OÓOÑ(ô6 	ØØ,ðØ—.‘.ðàÜ! "§(¡(§.¡.Ó1Ü" <Ó0ò	ô		
ð ÐøôM /Ô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ð÷	ó 	ûô ò 	ð Üò 	8Ü'Ø× Ñ  !¤W×%9Ñ%9Ó%;óç‰n˜QŸ_™_Ó-°4ð8ûð	8ús'   Å A:H" È"MÈ:B/K/Ë/MÌAMÍMc                 ód   — t         j                  j                  j                  rt	        | «      S i S rÂ   )r´   r=  r-   Úuse_graph_deduplicationrI   rÍ   s    r™   rY  zOutputGraph.dedup_pass´  s%   € Ü�=‰=×Ñ×7Ò7Ü,¨TÓ2Ð2àˆIr›   Úsub_gmc                 óz   — t        || j                  d¬«      }||_        d|_        | j	                  ||d ¬«       |S )NT)Úrequires_suffixFr+  )ro   rß   rœ   Útorchdynamo_force_dynamicr(  )rÎ   r  r®  Ú	next_names       r™   rH  zOutputGraph.install_subgraphº  s@   € Ü'¨¨d¯o©oÈtÔTˆ	Ø#ˆŒØ+0ˆÔ(ð 	×$Ñ$ V¨Y¸tÐ$ÔDØÐr›   c                 óV   — | j                   D �cg c]  }|j                  ‘Œ }}|S c c}w rÂ   )r3  Úexample)rÎ   r=  r  s      r™   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   )rÁ  r�   r…  rõ  rÒ   Úusersr§  r‰  s     r™   r]  z(OutputGraph.remove_unused_get_attr_nodesÈ  sN   € Ü˜4Ÿ:™:×0Ñ0°JÐ0Ó?ÈÔNò 	'ˆDÜ”4˜Ÿ
™
Ó#Ó$¨Ó)Ø× Ñ  Õ&ñ	'r›   c                 ó  ‡ ‡‡‡— ‰ j                   sJ ‚dt        j                  j                  dt        fd„}dt        j                  j                  dt        fd„Šdt        j
                  dt        fˆ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t        j
                  dt,        j.                  d z  fd„}dt        j
                  dd fˆ fd„}t1        «       Šdt0        t,        j.                     dt$        j2                  t$        j4                  z  dd fd„Šg }‰ j6                  D �]×  } ||«      d u}|r|j                  rŒ|j9                  |«       Œ/|j                  s&t;        |j<                  d   t>        «      s	 ||«       Œa|j<                  d   }	t;        |	t>        «      rŒ�t;        |j<                  d   j@                  t$        jB                  «      rÌ|j<                  d   j@                  }
|j<                  d   jD                  }t$        jF                  jH                  jK                  |
«      sotM        |
jO                  «       «      }|D ]Q  }tQ        |jR                  |«      }tU        jV                  t$        j2                  t$        j4                  fˆˆfd„|«       ŒS �Œ~tY        t[        |j<                  d   j@                  «      «      r�Œ«|	j\                  �|	j\                  n|	j@                  } ‰‰|«       �ŒÚ |D ]+  } ||«      }|€Œ|‰vr	 ||«       Œ‰j_                  |«       Œ- y )NÚb_noder“   c                 óú   — | 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)NTFr1  )	r³   r   ÚNoder/  rf  r´   ÚSymBoolr¾   Úmaybe_as_bool)r¹  ÚbÚrs      r™   Ú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Ð=à�ð r›   r{  c                 óÆ   — ddl m} t        | t        t        t
        f«      ryt        | t        j                  «      r%t        | j                  j                  d«      |«      S y)Nr   ©ÚSymTypesTr1  F)
Útorch.fx.experimental.sym_noderÃ  r³   r  rl  r¨   r   r»  r/  rf  )r{  rÃ  s     r™   Úis_symnode_argz;OutputGraph.remove_unused_graphargs.<locals>.is_symnode_argî  sD   € Ý?ä˜!œc¤5¬$Ð/Ô0ØÜ˜!œRŸW™WÔ%Ü! !§&¡&§*¡*¨_Ó"=¸xÓHÐHØr›   r¾   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`  Fr1  c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrÂ   r˜   ©rY  r{  rÅ  s     €r™   r[  zWOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node.<locals>.<genexpr>  s   øè ø€ Ò<¨Q‘~ a×(Ñ<ùó   ƒc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrÂ   r˜   rÈ  s     €r™   r[  zWOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node.<locals>.<genexpr>  s   øè ø€ ÒG¨Q‘~ a×(ÑGùrÉ  T)
rÄ  rÃ  r„  r³   r/  rf  rƒ  rÙ   rÚ   r0  )r¾   rÃ  rÅ  s     €r™   Ú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ØØr›   r   )Úis_accessor_noderú  r`  c                 óö   — | j                   d   }|j                  }t        |t        j                  «      rDt        |j
                  j                  t        j                  «      r|j
                  j                  S y rˆ  )	r/  r´  r³   r´   r$  r¾   ÚexprÚsympyÚSymbol)r¾   r=  r´  s      r™   Úplaceholder_binds_symbolzEOutputGraph.remove_unused_graphargs.<locals>.placeholder_binds_symbol  sV   € Ø—)‘)˜JÑ'ˆCØ—k‘kˆGÜ˜'¤5§<¡<Ô0´ZØ—‘×!Ñ!¤5§<¡<ô6ð —|‘|×(Ñ(Ð(Ør›   c                 óè   •— t         j                  d| j                  d   j                  j                  «       | j                  d= ‰j                  | «       ‰j                  j                  | d «       y )NzREMOVE UNUSED GRAPHARG %sr,  )rÅ   r€  r/  rã  r  r§  rœ  r·   )r¾   rÎ   s    €r™   Úremove_unusedz:OutputGraph.remove_unused_graphargs.<locals>.remove_unused%  sY   ø€ Ü�I‰IÐ1°4·9±9¸ZÑ3H×3OÑ3O×3TÑ3TÔUð —	‘	˜*Ð%Ø×Ñ˜TÔ"Ø×!Ñ!×%Ñ% d¨DÕ1r›   Úused_symbolsÚfakec                 ó    — | t        |«      z  } y rÂ   )r"   )rÔ  rÕ  s     r™   Úupdate_used_symbolsz@OutputGraph.remove_unused_graphargs.<locals>.update_used_symbols/  s   € ð œL¨Ó.Ñ.‰Lr›   r,  c                 ó   •—  ‰‰| «      S rÂ   r˜   )Útr×  rÔ  s    €€r™   rU  z5OutputGraph.remove_unused_graphargs.<locals>.<lambda>R  s   ø€ Ñ.AÀ,ÐPQÓ.R€ r›   )0r·  r   r¾   ÚArgumentr¨   r»  Ú%torch.fx.experimental.symbolic_shapesrÌ  ro  rÒ   r�   rƒ  rõ  r·  r„  rÿ  ÚoperatorÚgetitemr´   Ú_checkrÙ   r§  rÏ  rÐ  r²   r$  r   r†  r¶   r³   r/  rx   r´  ÚScriptObjectÚexample_strong_refr  r  Útracing_with_realrì   Ú__obj_flatten__r�   Úwrapped_objÚpytreeÚtree_map_onlyr   r.  r  Úremove)rÎ   rÀ  rË  rÌ  r¾   rÑ  rÓ  Úrecheck_placeholdersÚbinds_symbolr=  Úreal_script_objr  Ú	flat_dictrs  Úfake_attr_valrÕ  ÚsymbolrÅ  r×  rÔ  s   `                @@@r™   r^  z#OutputGraph.remove_unused_graphargsÍ  sb  û€ ð ×ÒÐÐð	¤2§7¡7×#3Ñ#3ð 	¼ó 	ð&	œbŸg™g×.Ñ.ð 	´4ó 	ð	¬"¯'©'ð 	´dõ 	õ" 	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¯7©7ð 	´u·|±|ÀdÑ7Jó 	ð	2¤§¡ð 	2¨Dõ 	2ô +.«%ˆð	/ÜœeŸl™lÑ+ð	/Ü38·<±<Ä%Ç,Á,Ñ3Nð	/àó	/ð
  "ÐØ×%Ñ%ó &	<ˆ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ò " Ü07Ø$3×$?Ñ$?Àó1" ô !'× 4Ñ 4Ü%*§\¡\´5·<±<Ð$@Ü$RØ$1õ!"ð	"ñ !Ü%¤d¨4¯9©9°ZÑ+@×+HÑ+HÓ&IÔJÙ à+.¯?©?Ð+F˜ŸšÈCÏKÉKð ñ (¨°dÖ;ðM&	<ðR )ò 	0ˆDÙ-¨dÓ3ˆFØÑ!Ø Ñ-Ù! $Õ'ð !×'Ñ'¨Õ/ñ	0r›   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   )ÚTensorifyStater1  r  c              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)ÚitemN)rÿ  )rY  Úus     r™   r[  zEOutputGraph.remove_tensorify_specialized_graphargs.<locals>.<genexpr>~  s   è ø€ Ò?¨q˜Ÿ™ FÕ*Ñ?ùs   ‚)Útorch._dynamo.symbolic_convertrî  r�   rƒ  r/  rf  r³   r   Ú	item_memorÝ  r¾   Ú_exprrƒ  r·  Úshould_specializer  rÒ   Úreplace_all_uses_withr#   r§  )rÎ   rî  r¾   r1  rñ  s        r™   r_  z2OutputGraph.remove_tensorify_specialized_graphargsg  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Õ'ð(ð × Ñ  Ö&ñ	'r›   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®  rb  r·  )rÎ   r   s     r™   r‡  z#OutputGraph.add_output_instructions‰  s    € ð
 	× Ñ ×'Ñ'¨Ô/ØˆÕr›   r  rÝ  c                 óø   ‡‡‡— ‰j                   rDdt        t        j                  df   dt        j                  fˆˆˆfd„}| j                  ‰|«       y| j                  ‰t        j                  ‰‰‰«      «       y)aa  Install a resume function as a global.

        When the code has freevars, installs a factory that creates the
        function with correct globals and closure (since MAKE_FUNCTION
        inherits the current frame's globals, which is wrong for resume
        functions from inlined frames). Otherwise installs the function
        directly.
        Úclosure.r“   c                 ó6   •— t        j                  ‰‰‰d | «      S rÂ   )ÚtypesÚFunctionType)rù  r  rÝ  r  s    €€€r™   Ú_make_fnz<OutputGraph.install_resume_function_global.<locals>._make_fn¡  s   ø€ ô ×)Ñ)¨$°	¸4ÀÀwÓOÐOr›   N)r]  rN  rû  ÚCellTyperü  rn  )rÎ   r  r  rÝ  rý  s    ``` r™   Úinstall_resume_function_globalz*OutputGraph.install_resume_function_global‘  so   ú€ ð ×ÒðPÜœuŸ~™~¨sÐ2Ñ3ðPä×#Ñ#÷Pð
 ×&Ñ& t¨XÕ6à×&Ñ&ØÜ×"Ñ" 4¨°DÓ9õr›   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¶   re   rX  r  )rÎ   r  rÞ  s      r™   rn  z!OutputGraph.install_global_unsafe­  sS   € ð ˜4×1Ñ1Ñ1Ð1Ð1Ø×Ñ×"Ñ" 4Ô(Ø�‰×Ñœ[×/Ñ/°×0AÑ0AÀ4ÈÓOÕPr›   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)Úidr”  r•  rn  ©rÎ   r   rÞ  r  s       r™   Úinstall_global_by_idz OutputGraph.install_global_by_id¹  sK   € ð �˜œ2˜e›9˜+ R¨¯©Ð'8Ð9ˆØ�4×)Ñ)Ñ)ØˆKØ×"Ñ" 4¨Ô/Øˆr›   c                 ó@   — t        |«      }| j                  ||«       |S )z~
        Installs a global, generating a unique name for it.

        Returns the name of the newly installed global.
        )r=   rn  r  s       r™   r  zOutputGraph.install_globalÈ  s#   € ô ˜Ó ˆØ×"Ñ" 4¨Ô/Øˆr›   c                 ó
  — d | _         | j                  j                  «        | j                  j                  «        d | _        | j
                  j                  D ]  }d|j                  v sŒ|j                  d= Œ  | j                  j                  «        | j                  j                  «        t        | j                  «       «      | _        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                   j                  «        | j"                  j                  «        | j$                  j                  «        | j&                  j                  «        | j(                  j                  «        | j*                  j                  «        | j,                  j                  «        | j.                  j                  «        | j0                  j                  «        y rˆ  )rs  rß   rp  rÏ  r¦  r�   rƒ  r/  rœ  rš  rN  rê  rÑ  rq  r§  r¨  r©  rª  r²  rÁ  rŸ  r�  r�  r¸  rÅ  r‰  s     r™   ÚcleanupzOutputGraph.cleanupÓ  s  € ð ˆŒØ�‰×ÑÔØ×/Ñ/×5Ñ5Ô7Ø$(ˆÔ!à—J‘J×$Ñ$ò 	*ˆDØ˜TŸY™YÒ&Ø—I‘I˜jÑ)ð	*ð 	×Ñ×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(Ü8=Ø×5Ñ5Ó7ó9
ˆÔ5ð 	×Ñ×ÑÔ!Ø×#Ñ#×)Ñ)Ô+Ø×Ñ×#Ñ#Ô%Ø×$Ñ$×*Ñ*Ô,Ø×Ñ×"Ñ"Ô$Ø×#Ñ#×)Ñ)Ô+Ø×-Ñ-×3Ñ3Ô5Ø×Ñ×"Ñ"Ô$Ø× Ñ ×&Ñ&Ô(Ø×$Ñ$×*Ñ*Ô,Ø× Ñ ×&Ñ&Ô(Ø×Ñ×!Ñ!Õ#r›   rw  c                 ó:   — | j                   j                  |«       y rÂ   )r²  r¶   )rÎ   rw  s     r™   Úadd_graph_finalizerzOutputGraph.add_graph_finalizerð  s   € ð 	×#Ñ#×*Ñ*Ð+=Õ>r›   r¾   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„  r/  r´  rß   rÿ  r‰  s     r™   Úexample_value_from_input_nodez)OutputGraph.example_value_from_input_nodeõ  sH   € à�7‰7�mÒ#Ø—9‘9˜ZÑ(×0Ñ0Ð0Ø�w‰w˜*Ò$Ð$Ð$Ø�‰˜tŸ{™{Ñ+Ð+r›   Úinlined_modulec                 óZ  ‡ ‡‡— t         j                  ‰j                  «      Št        ‰‰ j                  ‰ j
                  «      Š‰ j                  j                  ‰«       dt        dd fˆˆ ˆfd„}t        |d«      rQt        |j                  «      r<|j                  j                  t        u r |j                  «       D ]  \  }} ||«       Œ t        |d«      rTt        |j                  «      r>|j                  j                  t        u r!|j                  «       D ]  \  }} ||«       Œ y y y y )Nr  r“   c                 óì   •— ‰j                   €J ‚‰j                  ‰| «      }‰› d| › �}|‰j                   |<   t        ‰t        «      r-| ‰j                  t
        j                  |j                  «      <   y y rç  r  r  s      €€€r™   r   zHOutputGraph.add_fqn_info_for_inlined_modules.<locals>.register_leaf_name  s}   ø€ Ø×,Ñ,Ð8Ð8Ð8Ø×=Ñ=¸fÀiÓPˆJØ˜˜q  Ð,ˆHØ2<ˆD×%Ñ% hÑ/Ü˜&¤+Ô.ð ð ×5Ñ5Ü×/Ñ/°
·±Ó@òð /r›   r!  r"  )rp  rõ  r  ro   rÏ  r  r¸   rª   rÝ  r¤  r&  Ú__func__Ú!og_module_named_parameters_fn_ptrr'  Úog_module_named_buffers_fn_ptr)rÎ   r  rã  r   r  r½   r  s   ` `   @r™   Ú add_fqn_info_for_inlined_modulesz,OutputGraph.add_fqn_info_for_inlined_modulesü  s  ú€ ô ×*Ñ*¨6¯;©;Ó7ˆÜ"Ø�$×9Ñ9¸4×;LÑ;Ló
ˆð 	×/Ñ/×3Ñ3°DÔ9ð	¬#ð 	°$÷ 	ô �> =Ô1ä˜×8Ñ8Ô9Ø"×3Ñ3×<Ñ<Ü4ñ5ð %3×$CÑ$CÓ$Eò 2‘L�I˜qÙ& yÕ1ð2ä�> :Ô.ä˜×5Ñ5Ô6Ø"×0Ñ0×9Ñ9Ü1ñ2ð %3×$@Ñ$@Ó$Bò 2‘L�I˜qÙ& yÕ1ñ2ð2ð 7ð /r›   ©FrÐ   )r  rÂ   )r“   r�  )r{  rŠ   r“   N)r“   rp  )r“   rŠ   )Útmp)r   rm  )‹rœ   r¦   r§   rÑ   rQ   r©   rì   rª   r	   r2   r¨   r   r   r5  r   rÒ   r´   r6  r7  r   râ   rê  r   rT   rò  r÷  r  r  rÈ  r~   rN  r   ÚProxyr#  r"  r£  rÍ  r   rk  rm  rq  rA  r-  rx  rz  rŒ  r’  r  r•  ÚGraphr�   Úsetterrš  r»  r   rœ  rÏ  rÐ  r   rŸ  r¡  r¤  r§  rÉ  Úcontextmanagerr(   r   r°  r²  r�  rž  rÓ  r%   r/  r&  r?  r   rß   r@  r2  rÀ  rÔ  rÖ  rØ  rß  rh   râ  rå  rí   rî   ré  r0  rï  Ústaticmethodrõ  rþ  r(  r<   rB  rC  rX  rÈ   r¿  r?   r�  r‘  r‰  rk  rò  rù  rÿ  rŸ  r$  r-  rÞ   r�  r†  ry   r3  r  r1   rO  r“  rY  rH  r–   r]  r^  r_  r‡  rû  rÿ  rn  r  r  r  r
  r  r  r˜   r›   r™   rp  rp  K  st
  … ñð Óð  ñTUà˜3 ˜8‘nðTUð   $Ñ&ðTUð -ð	TUð
 ðTUð %Ð%6Ñ7ðTUð ðTUð ðTUð ðTUð ðTUð $(¨¯©×(IÑ(IÑ#JðTUð Ð*Ñ+ðTUð ðTUð 
óTUðn 38ò5VØ+/ð5Và	ˆc‰ó5Vðn¨Fð ¸#ð À*ó ð>Øð>Ø"%ð>à	ó>óó* 8ðDD°3ó Dð
 4:ñ5Ø#ð5Ø-0ð5à	ˆs�E—H‘H—N‘NÐ"Ñ	#ó5ð)¨%¯(©(¯.©.ó )ó*ð<:¸TÀ#¹YÈÑ=Mó :ðB >Bñ	$à�S˜#�XÑð$ð �C˜�H‰oð$ð   ¨¡¨sÐ 2Ñ3°dÑ:ð	$ð
 
ó$ðL& 8¨B°¨GÑ#4ð &¸ó &ó#ð
 òó ðð ò ó ð ð& ó &ð Ø-ð à	ó ðF	Ið ð ÀCð  ÈDó  ð. ð)�u—x‘x—~‘~ò )ó ð)ð ‡\�\ð*˜5Ÿ8™8Ÿ>™>ð *¨dò *ó ð*ð ð7 T¨#¨r¯x©x¨-Ñ%8ò 7ó ð7ð ð4 $ r§w¡w°·±Ð'<Ñ"=ò 4ó ð4ð ð1˜t E§L¡L°%¸¿¹¿¹ÈÐ8SÑ2TÐ$TÑUò 1ó ð1ðA #ð A°ð A¸¿¹¿¹ó Að@ ð @°ð @¸¿¹¿¹ó @ð@ ð @°ð @¸ó @ð ×Ñð
 #'ñ	à ‘}ðð Ð/Ñ0ðð ˜4‘Zð	ð
 
Ð/Ñ	0òó ðð: òó ðð ð.˜5×,Ñ,×;Ñ;ò .ó ð.ð ð8˜8ò 8ó ð8ð
 ðA˜Ÿ™×/Ñ/ò Aó ðAð ð>˜D  c ™Nò >ó ð>ð ðF D¨¯©×)CÑ)CÑ$Dò Fó ðFð HLñ'
Ø˜˜U 8¨C°¨HÑ#5°tÐ#;Ñ<Ð<Ñ=ÀÑDð'
à	ó'
óR$ó&ð òNó ðNð
¨6ð 
°có 
ð'˜Só 'ð0 ó 0ðJ˜Tó Jð #ð ¨%¯(©(¯/©/¸CÑ*?ó ñ˜Cð ¨Có ð5 Cð 5¨Dó 5ð
 ð ð ¨ò ó ðð.ØðØ,/ðà	�‰óð&cà—‘—‘ %§,¡,Ñ.°Ñ4ðcð ðcð ð	cð
 
ócðJY/Ø-ðY/à	ˆt�KÑ  $ v¨v ~Ñ"6Ð6Ñ	7óY/ðvh"Ø-ðh"Ø;>ðh"à	ˆt�OÑ$Ð&9Ð9Ñ	:óh"ð\ ñ	l&à'ðl&ð #ðl&ð ð	l&ð
 
Ð!Ñ	"ól&ð\FÐ ;ð FÀð FÈtó Fð2"Gà'ð"Gð ˜?Ñ+ð"Gð ð	"Gð
 ð"Gð 
ó"GóH1ñ< Sð ¸ð Àó ð4¨D°°d¸3À¹9±oÐ1EÑ,Fó ð Cð ¨Có ð2 ×Ñð cò ó ðó"!7ðF'ØÐ(Ñ)ð'Ø/Jð'à	ó'ðR>ØÐ(Ñ)ð>Ø/Jð>à	ó>ð@w)à'ðw)ð �Ñ!ðw)ð ð	w)ð
 
ˆkÑ	ów)ðr	 ð7˜d 2§7¡7™mò 7ó ð7ð ðE˜4 ™>ò Eó ðEð@Ø—.‘.ð@Ø26°v±,ð@à	ó@ðaØ—.‘.ðaØ26°v±,ðaà	óaðF˜D  e§h¡h×&:Ñ&:Ð!:Ñ;ó ð Sð °%·(±(×2FÑ2Fð È3ó ð  U§\¡\Ñ 2ó ó
'ó
X0ót 'ðD ¨d°;Ñ.?ð  ÀDó  ðàðð �n‰nðð ˜˜S˜‘>ð	ð
 
óð8
Q¨#ð 
Q°cð 
Q¸dó 
Qð¨3ð °sð ¸só ð	 Sð 	°ð 	¸ó 	ó$ð:?Ø"*¨B¯N©NÐ+;¸TÐ+AÑ"Bð?à	ó?ð
,°%·(±(·-±-ð ,ÀCó ,ð$2Ø#Ÿh™hŸo™oð$2Ø7=ð$2à	ô$2r›   rp  c                   ó–   — e Zd ZU eed<   eed<   edz  ed<   edz  ed<   eedf   dz  ed<   ee	ef   ed<   	 dd	d
dedz  ddfd„Z
dd„Zy)ÚDynamoTracerOutputÚerror_on_graph_breakÚis_tracing_resume_prologueNÚoutput_graphÚoutput_graph_for_cleanup.rù  rÝ  r‡  rŠ   r}  r“   c                 óä   — |j                   | _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        |rd | _        y |j                  | _        y rÂ   )r  r  rù  rÝ  r²  r   r  )rÎ   r‡  r}  s      r™   râ   zDynamoTracerOutput.__init__-  s[   € ð %+×$?Ñ$?ˆÔ!Ø*0×*KÑ*KˆÔ'Ø—~‘~ˆŒØ×)Ñ)ˆŒØ(.¯©ˆÔ%ÙØ $ˆDÕà &§¡ˆDÕr›   c                 ó2  — | j                   }|r‰|j                  D ]  }|j                  j                  «        Œ |j                  j
                  rG|j                  j
                  j                  r&d |j                  j
                  j                  _        y y y y rÂ   )r   rŽ  r�   Ú_clear_nodesrŸ  rÓ  r/  r}  )rÎ   r  r‡  s      r™   Ú_cleanup_output_graphz(DynamoTracerOutput._cleanup_output_graph:  s…   € Ø×4Ñ4ˆÙØ&×.Ñ.ò ,�Ø—‘×)Ñ)Õ+ð,ð ×,Ñ,×6Ò6Ø ×0Ñ0×:Ñ:×DÒDàQU�×,Ñ,×6Ñ6×@Ñ@ÕNð Eð 7ð r›   rÂ   rÐ   )rœ   r¦   r§   r¨   r©   rp  rN  r	   rì   rª   râ   r$  r˜   r›   r™   r  r  #  su   … ØÓØ $Ó$Ø Ñ$Ó$ð *¨DÑ0Ó0Ø�3˜�8‰_˜tÑ#Ó#Ø�C˜�H‰~Óð HLñ.Ø1ð.Ø:=À¹*ð.à	ó.ô
Vr›   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.htmlr  Úkindrÿ  rÙ   rÚ   c                 ó\  ‡ — |dk7  ry dt         j                  j                  dd fˆ fd„}dt         j                  j                  dt        dd fˆ 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`  rÿ  r“   c                 óZ   •— | j                   dv ry ‰j                  j                  | «       y )N>   ÚatenÚprimÚprims)Ú	namespacer¿  r¸   )rÿ  r  s    €r™   Úencountered_compliant_opz8check_pt2_compliant_op.<locals>.encountered_compliant_opV  s)   ø€ Ø×ÑÐ8Ñ8ØØ×)Ñ)×-Ñ-¨fÕ5r›   r¤   c                 ó�   •— ‰j                   j                  | «       t        j                  rt	        dd|dz   t
        z   g ¬«       y y )Nz Encountered non-PT2-compliant oprn  ú r%  )r¾  r¸   r-   Úonly_allow_pt2_compliant_opsrE   Úerr_epilogue)rÿ  r¤   r  s     €r™   Úencountered_non_compliant_opz<check_pt2_compliant_op.<locals>.encountered_non_compliant_op[  sB   ø€ Ø×&Ñ&×*Ñ*¨6Ô2Ü×.Ò.ÜØ:ØØ #™I¬Ñ4Øö	ð /r›   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 packetrn  r%  z+Encountered the torch.ops.OpOverloadPacket z! which resolves to the overload (z) that is not PT2 compliant.)r´   Ú_opsÚ
OpOverloadrª   r³   ÚTagÚpt2_compliant_tagÚtagsÚOpOverloadPacketrN  Ú	overloadsrõ  r�   r=  rU  Úget_fake_values_from_nodesrØ  r<  Ú_jit_resolve_packetÚ_qualified_op_namerü   rE   )r  r%  rÿ  rÙ   rÚ   r,  r1  r8  r„  Úoverloadr¸  s   `          r™   Úcheck_pt2_compliant_opr=  P  s  ø€ ð ˆÒØð6¬¯©×)>Ñ)>ð 6À4õ 6ð
¬U¯Z©Z×-BÑ-Bð Ìð ÐQUõ ô �&œ%Ÿ*™*×/Ñ/Ô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   Æ-H  È 	H+È	H&È&H+ÚPÚRc            
       óf   — e Zd Zdddeeef   dej                  dej                  ddf
d„Zde	fd	„Z
y)
r�  r‡  r�  rØ   rÙ   rÚ   r“   Nc                 ó<   — || _         || _        || _        || _        y rÂ   )r‡  rØ   rÙ   rÚ   )rÎ   r‡  rØ   rÙ   rÚ   s        r™   râ   zLazyProxy.__init__¢  s    € ð ˆŒàˆŒØˆŒ	Øˆ�r›   c                 óN   —  | j                   | j                  i | j                  ¤ŽS rÂ   )rØ   rÙ   rÚ   rÍ   s    r™   r  zLazyProxy.__call__¯  s    € Øˆt�w‰w˜Ÿ	™	Ð1 T§[¡[Ñ1Ð1r›   )rœ   r¦   r§   r   r>  r?  rÙ   rÚ   râ   r	   r  r˜   r›   r™   r�  r�  ¡  sS   „ ðà ðð �Q˜�T‰Nðð �v‰vð	ð
 —(‘(ðð 
óð2˜#ô 2r›   r�  c                   óŒ  ‡ — e Zd ZdZ	 	 	 	 d,ddded    dededz  dedz  d	dfˆ fd
„Zde	d	dfd„Z
dddej                  d	dfd„Z	 	 	 d-dedededededz  dedz  deej                  gej                   f   dz  d	ej                   fd„Z	 	 	 d-dedededededz  dedz  deej                  gej                   f   dz  d	ej                   fˆ fd„Z	 	 	 	 d.dedededededz  dedz  d	ej                  fˆ fd„Zdej                  d	dfd„Z	 	 d/dedededededz  d	ej                   fd„Zd ej                   d	eej                   z  fd!„Zd"ed	efd#„Zded$eej                  j                   z  d	dfd%„Zdej8                  ej:                  z  d&edz  d	dfd'„Zd(ej8                  d	ee jB                     fd)„Z"d	e#fd*„Z$d	e%fd+„Z&ˆ xZ'S )0r�  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.
    Nr  rp  r¬  ry  r¨  rª  r“   c                 ó  •— t         ‰| �  «        t        j                  |«      | _        t
        j                  j                  «       | _        || _	        i | _
        i | _        || _        || _        || _        i | _        i | _        i | _        d | _        d| _        d| _        d| _        d | _        t/        «       | _        d| _        |�|j4                  dz   nd| _        d | _        d | _        d | _        d | _        | j                  €g | _        n:| j                  j>                  | j                  jA                  |«      |fgz   | _        t/        «       | _!        g | _"        t        jF                  «       rtI        d«      ‚t/        «       | _%        y )NFr,   r   zSInference mode is supposed to be disabled during compilation. Please open an issue.)&rá   râ   Úweakrefrü  r  r´   r   r  r�   ry  rš  rœ  r¬  r¨  rª  Úlifted_freevarsrŸ  Údynamic_scalar_nodesÚ	prev_instÚ,unsafe_allow_externally_visible_side_effectsÚ+traced_with_externally_visible_side_effectsÚallow_side_effects_in_hopÚside_effect_stackr*   Útraced_sourcesÚis_reconstructing_generatorÚdebug_levelÚ	_cur_codeÚ_orig_gm_metaÚ_orig_gm_lineno_mapÚ_orig_gm_firstlinenoÚsource_fn_stackÚ_target_to_strÚ_used_namesr�  Úis_inference_mode_enabledrü   Útracked_proxyable_vt)rÎ   r  r¬  ry  r¨  rª  rç   s         €r™   râ   zSubgraphTracer.__init__»  s�  ø€ ô 	‰ÑÔÜ#ŸM™M¨,Ó7ˆÔÜ—X‘X—^‘^Ó%ˆŒ
ð #ˆŒð 9;ˆÔ à=?ˆÔð ˆŒØ*ˆÔØ&ˆÔð :<ˆÔð NPˆÔð >@ˆÔ!àˆŒð
 =BˆÔ9Ø;@ˆÔ8ð */ˆÔ&ð AEˆÔô 3=³,ˆÔð ,1ˆÔ(à:@Ð:L × 2Ñ 2°QÒ 6ÐRSˆÔàˆŒØ/3ˆÔØAEˆÔ Ø04ˆÔ!ð
 �;‰;ÐØ.0ˆDÕ à#'§;¡;×#>Ñ#>Ø—‘×*Ñ*¨=Ó9¸=ÐIðBñ $ˆDÔ ô
 -7«LˆÔð 8:ˆÔ)Ü×*Ñ*Ô,ÜØeóð ô BLÃˆÕ!r›   rá  c                 ó:   — | j                   j                  |«       y rÂ   )rX  r¸   )rÎ   rá  s     r™   Úrecord_proxyable_vtz"SubgraphTracer.record_proxyable_vt"  s   € Ø×!Ñ!×%Ñ% bÕ)r›   r{  rŠ   r¾   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)
rQ  rR  rS  Úcurrent_instructionÚstarts_linerf  r   rü  Ú_COPY_META_FIELDSr/  )rÎ   r{  r¾   ÚlinenoÚnode_idxr/  r   s          r™   rZ  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Ò,ð )ð $ð *ð )ð r›   r%  rÿ  rÙ   rÚ   r  Ú	type_exprÚproxy_factory_fnc           	      ó\  — t        j                  «       }	 | j                  |||||||«      | j                  j                  xj
                  t        j                  «       |z
  z  c_        S # | j                  j                  xj
                  t        j                  «       |z
  z  c_        w xY wrÂ   )rÿ  r   Ú_create_proxyr  rÌ  r  )	rÎ   r%  rÿ  rÙ   rÚ   r  rb  rc  Ú_t0s	            r™   r¡  zSubgraphTracer.create_proxy<  s‹   € ô �l‰l‹nˆð	Ø×%Ñ%Ø�f˜d F¨D°)Ð=Móð ×Ñ×6Ñ6×FÒFÜ—‘“ Ñ$ñÖFøˆD×Ñ×6Ñ6×FÒFÜ—‘“ Ñ$ñÖFús   –A+ Á+A B+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                  �}‰j                  j                  �g|j                   Š|j#                  ‰j                  j                  ¬«      Šdt$        fˆˆˆˆfd„}t&        j)                  dt+        |«      «       ‰| _        d}|j                   | j,                  urÚ t/        j0                  |j                   «      j3                  dd	„ «      «       }t5        |t6        j8                  j:                  «      rld
}|j<                  j>                  D �cg c]  }|j@                  ‘Œ c}| _!        |jD                  | _#        |jH                  jJ                  jL                  | _'        nd | _!        d | _#        d | _'        |jP                  }|r'|jS                  «       ‰jT                  j@                  d<   |dv rÆ‰jT                  jV                  ‰f}|r„tY        ‰jT                  j@                  d   j[                  «       «      d   d   }|j\                  j_                  d«      r3|j\                  j_                  d«      s‰jT                  jV                  |f}| j`                  |gz   ‰jT                  j@                  d<   n¡|dk(  rœ| j                   �tc        dd| jd                  › �dg ¬«       | j`                  ‰jT                  jV                  tg        ˆfd„‰jT                  j@                  d   ji                  «       D «       «      fgz   ‰jT                  j@                  d<   | jk                  |‰jT                  «       |�s!d‰jT                  j@                  vr5|jP                  }|r'|jS                  «       ‰jT                  j@                  d<   d‰jT                  j@                  vr¼|dv r>| j`                  ‰jT                  jV                  ‰fgz   ‰jT                  j@                  d<   nz|dk(  ru| j                   �tc        dddg ¬«       | j`                  ‰jT                  jV                  ‰jT                  j@                  d   ‰   d   fgz   ‰jT                  j@                  d<   d‰jT                  j@                  vrÅg }|r?|jm                  «       s|j	                  |jo                  «       «       tq        |dd «      }|rŒ?|D �cg c]  }|jr                  tu        «       vr|‘Œ }}|jw                  «        tx        jz                  j}                  |«      j                  «       }dj�                  |«      ‰jT                  _A        t6        j„                  j†                  jˆ                  s$t6        j„                  j†                  jŠ                  rD| j                  jŒ                  j�                  | j                  j                  ‰jT                  «       ‰S c c}w c c}w )NrZ  r•  )r`  r“   c                  óv   •— t        ‰‰«      j                  «       } d‰j                  j                  › d‰› d| › �S )NzTRACE FX call z from r�  )rl   Úrstripr¾   r  )ÚlineÚcur_instÚheaderr  Útx_codes    €€€€r™   Úget_trace_call_log_strz<SubgraphTracer._create_proxy.<locals>.get_trace_call_log_str   s9   ø€ Ü5°g¸xÓH×OÑOÓQ�DØ+¨B¯G©G¯L©L¨>¸À¸xÀrÈ$ÈÐPÐPr›   r;  FÚorig_graphmodulec                   ó   — y rÂ   r˜   r˜   r›   r™   rU  z.SubgraphTracer._create_proxy.<locals>.<lambda>«  s   � r›   TÚnn_module_stack>   r–  r`  rw  r,   )ztorch.nn.modulesz	torch.ao.ztorch.nn.modules.containerrT  r—  z4Invoking an nn.Module inside a higher order operatorzHigher order op name: zThis is not supported.r%  c              3   ó\   •K  — | ]#  \  }\  }}|j                  d «      d   ‰k(  r|–— Œ% y­w)ú@r   N)rï  )rY  rå   r½   Útyrÿ  s       €r™   r[  z/SubgraphTracer._create_proxy.<locals>.<genexpr>Ú  s5   øè ø€ ò á&˜A™w  2ØŸ7™7 3›<¨™?¨fÒ4ô ñùs   ƒ),z2Invoking an nn.Module inside a HigherOrderOperatorrn  r\  r¬  )Hr¬  rä  Útree_flattenÚ#maybe_lift_tracked_freevar_to_inputr¶   Útree_unflattenrá   r¡  r  rØ  rS  rT  r]  rH  Ú	positionsr`  ru  Úget_line_of_code_headerrª   Útrace_call_logr€  rt   rP  r>   Úget_contextrf  r³   r´   r   r  r�   rƒ  r/  rQ  Ú_lineno_maprR  rú   Ú__code__r|  rS  rq  r÷   r¾   r  rÒ   r0  r¦   Ú
startswithrT  rE   r¨  r’  rã   rZ  Úis_co_filename_from_nn_modulesÚframe_summaryr�   r  r'   r¶  rÓ   ÚStackSummaryÚ	from_listr‘  r�  r\  r=  r-   r­  Útrack_nodes_for_deduplicationr—  Ú
track_node)rÎ   r%  rÿ  rÙ   rÚ   r  rb  rc  Ú	flat_argsÚ	tree_specÚnew_flat_argsr=  Úmaybe_new_argr{  rn  Úis_retracingÚorig_graphmodule_maybeÚndrq  r»   Úcurrent_nn_moduleÚframe_summariesÚframeÚfiltered_frame_summariesÚmsgsrk  rl  r  rm  rç   s     `                      @@@@€r™   re  zSubgraphTracer._create_proxyP  sç  ý€ ðV �;‰;Ð"Ü#)×#6Ñ#6¸¸f°~Ó#FÑ ˆI�yØˆMØ ò 4�Ø $× HÑ HÈÓ M�Ø×$Ñ$ ]Õ3ð4ô "×0Ñ0°À	ÓJ‰LˆD�&ä‰WÑ!ØØØØØØØó
ˆð ×Ñ×)Ñ)ˆô ×Ñ˜wÒ&¨4ð 4
ñ ,
ð
 ×-Ñ-ˆHà §¡Ñ.Ø×&Ñ&Ð2Ø×&Ñ&×-Ñ-Ð9àŸ)™)�Ø×3Ñ3¸8×;MÑ;M×;TÑ;TÐ3ÓU�ðQ´÷ Qð 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Ø—W‘W—\‘\ 6Ð*ˆEÙô %)¨¯©¯©Ð6GÑ)H×)OÑ)OÓ)QÓ$RÐSUÑ$VØñ%Ð!ð %×/Ñ/×:Ñ:Ø5ôà+×6Ñ6×AÑAØ0ôð  ŸW™WŸ\™\Ð+<Ð=�Eà.2×.BÑ.BÀeÀWÑ.Lˆ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Ð4LÓM×TÑTÓVˆDØ"$§'¡'¨$£-ˆB�G‰GÔô �M‰M× Ñ ×8Ò8Ü�}‰}×#Ñ#×AÒAà×Ñ×,Ñ,×7Ñ7Ø×!Ñ!×,Ñ,¨b¯g©gôð ˆ	ùò[&ùòr(s   Ç#ZÖ	Z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<   | j                  j                  |	j                   «       |	S )Nz2create_node using arg not from this SubgraphTracerrÓ  )r=  r  r¬  rä  Úarg_tree_leavesr³   r´   r   r»  r�   rá   r¤  r¯  r/  rV  r¸   r  )rÎ   r%  rÿ  rÙ   rÚ   r  rb  r…  r=  r¾   rç   s             €r™   r¤  zSubgraphTracer.create_node  sÑ   ø€ ô 	˜t×0Ñ0°$¸ÀÀfÔMØ�;‰;Ð"Ü×.Ñ.°Ð?¸Ñ?ˆIØ ò �Ü! #¤u§x¡x§}¡}Ô5ØØ—y‘y D§J¡JÓ.ð ØHóÐ.ðô ‰wÑ" 4¨°°v¸tÀYÓOˆØ*.×*;Ñ*;×*EÑ*Eˆ�	‰	Ð&Ñ'Ø×Ñ×Ñ˜TŸY™YÔ'Øˆr›   c                 óÂ  — t        |j                  «      dkD  r†g }|j                  D ]S  }|j                  | j                  k7  sŒ|j                  t	        t        |j                  j                  «      «      «       ŒU |D ]  }|j                  j                  |«       Œ | j                  j                  |«       | j                  j                  |j                  d «       y rs  )rõ  r·  r�   rb  ro  rÒ   rƒ  r×  rš  r·   r  )rÎ   r¾   Úuser_graph_nodesÚuserÚother_graph_nodes        r™   r§  zSubgraphTracer.remove_node8  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°Õ5r›   r1  Úbeforerã  c                 ó(  — t        |t        j                  «      r%| j                  j	                  |j
                  «       t        j                  d||�|j                  nd|| j                  |«       |€| j                  €J d|› d|› d�«       ‚| j                  rd| j                  €X|€J ‚t        |d¬«      sG| j                  j                  j                  |g «      j	                  t!        j"                  «       «       t%        || j&                  «      }| j(                  rqt+        t-        | j(                  «      «      }| j(                  |   j.                  }|r| j0                  j3                  |«      }n7| j0                  j5                  |«      }n| j0                  j3                  d «      }|5  | j7                  d|d	i |¬
«      }	t9        |	j.                  |«       | j(                  r>|r<| j(                  j;                  «       \  }
}|	| j(                  |<   || j(                  |
<   n|	| j(                  |<   | j&                  j=                  |«       | j                  }t        j>                  jA                  «       }|s—|s•t        |t        j                  «      r| jC                  ||«       nht        |tD        tF        f«      rRtI        |«      D ]D  \  }}t        |t        j                  «      sŒ!d }|rtK        ||d¬«      }| jC                  ||«       ŒF t        |t        jL                  «      rQt        |j.                  jN                  tP        jR                  «      r#|	| jT                  |j.                  jN                  <   |	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~  r˜   ©rb  F)rë  r5  Úindex_is_slice)+r³   r´   r   r�  r¶   r…  rÅ   r€  r  rO  r¬  ry  r[   r  r´  r  r   r†  ro   rV  rš  r’  ro  r¾   r�   Úinserting_beforeÚinserting_afterr¡  rw   Úpopitemr¸   ÚcompilerÚis_compilingÚ_lift_basic_symbolsrÒ   rN  r€  rX   r$  rÎ  rÏ  rÐ  rŸ  )rÎ   r  rb  r1  r—  rã  Ú	prev_namer¾   Úctxrü  rå   ræ   Úis_strict_exportÚis_non_strict_exportrV  r¸  Úe_sources                    r™   r.  z!SubgraphTracer.create_graph_inputN  s  € ô �m¤U§\¡\Ô2Ø×-Ñ-×4Ñ4°]×5KÑ5KÔLÜ�	‰	ØEØØ!Ð-ˆF�KŠK°8ØØ×ÑØô	
ð ˆ>Ø—;‘;Ð*ð ØBÀ4À&ÈÐVcÐUdÐdwÐxóÐ*ð �>Š>˜dŸk™kÐ1ØÐ%Ð%Ð%Ü'¨ÀÕFØ×!Ñ!×7Ñ7×BÑBÀ6È2ÓN×UÑUÜ"×0Ñ0Ó2ôô # 4¨×)9Ñ)9Ó:ˆØ×#Ò#ÜœX d×&>Ñ&>Ó?Ó@ˆIØ×+Ñ+¨IÑ6×;Ñ;ˆDÙØ—j‘j×1Ñ1°$Ó7‘à—j‘j×0Ñ0°Ó6‘à—*‘*×-Ñ-¨dÓ3ˆCØñ F	Ø×%Ñ% m°T¸2¸rÈYÐ%ÓWˆEÜ˜eŸj™j¨-Ô8Ø×'Ò'©FØ×/Ñ/×7Ñ7Ó9‘��1Ø16�×(Ñ(¨Ñ.Ø./�×(Ñ(¨Ò+à16�×(Ñ(¨Ñ.ð
 ×Ñ× Ñ  Ô&ð@  $Ÿ~™~ÐÜ#(§>¡>×#>Ñ#>Ó#@Ð Ù#Ñ,@Ü˜m¬U¯\©\Ô:Ø×,Ñ,¨]¸FÕCÜ ´´e¨}Ô=Ü )¨-Ó 8ò >™˜˜1Ü)¨!¬U¯\©\Ô:Ø$à#'˜Ù!Ü'4Ø%+Ø&'Ø/4ô(˜Hð ×0Ñ0°°HÕ=ð>ô ˜-¬¯©Ô6¼:Ø×"Ñ"×'Ñ'¬¯©ô<ð ?D�×"Ñ" =×#5Ñ#5×#:Ñ#:Ñ;Ø÷MF	÷ F	ò F	ús   Æ.GNÎNrü  c                 ó¼  — | 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   }t        |t        «      rt        |j                  «      n
t        |«      }| j                  |j                  j                  ||«      }|| j                  |<   |S )NzIlift_tracked_freevar_to_input should not be called on root SubgraphTracerr1  )r¬  r¾   r/  r³   r´   r$  rÎ  rŸ  rF  r‡  Úlift_tracked_freevar_to_inputr   r.  Úreal_objr.  r  )rÎ   rü  r1  rb  Ú	new_proxys        r™   r¨  z,SubgraphTracer.lift_tracked_freevar_to_inputË  s.  € ð �{‰{Ð&ð 	
ØWó	
Ð&ð Ÿ
™
Ÿ™¨Ñ8ˆô �}¤e§l¡lÔ3Ø×"Ñ"×'Ñ'¨4×+=Ñ+=Ñ=à×%Ñ% m×&8Ñ&8×&=Ñ&=Ñ>Ð>ð
 �D×(Ñ(Ñ(Ø×'Ñ'¨Ñ.Ð.ð
 �<‰<˜4Ÿ;™;Ò&Ø�K‰K×5Ñ5°eÔ<àŸ
™
Ÿ™¨Ñ8ˆô ˜-Ô)9Ô:ô �×'Ñ'Ô(ä�mÓ$ð 	ð
 ×+Ñ+¨E¯J©J¯O©O¸YÈÓVˆ	Ø&/ˆ×Ñ˜UÑ#ØÐr›   r=  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Â   )rv  )rY  Úsub_argrÎ   s     €r™   r[  zESubgraphTracer.maybe_lift_tracked_freevar_to_input.<locals>.<genexpr>  s$   øè ø€ ò à#ð ×@Ñ@À×Iñùs   ƒ)
r³   r´   r   r  ÚsliceÚstartÚstopÚstepr‡  r¨  )rÎ   r=  s   ` r™   rv  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Ð6r›   Úe_proxyc                 ó„  ‡ ‡‡— ‰j                   Št        ‰t        «      sJ ‚dt        dt        fˆ fd„}dt        dt        dt        dt
        j                  fˆˆ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+                  «       } ||«      rst        j                  d|‰‰j                  «       t        ‰||d	t        j                  j                   j,                  ‰fi t'        |«      ¬
«      }‰ j)                  ||«       |j.                  t        j0                  u r«t        |j3                  «       «      D ]�  \  }} ||«      sŒt        j                  d|‰|‰j                  «       t        ‰||d	t        j                  j                   j4                  j$                  ‰|fi t'        |«      ¬
«      }‰ j)                  ||«       Œ� �n6|j.                  t        j6                  u rA‰ j)                  |j9                  «       ‰«       ‰ j)                  |j;                  «       ‰«       nÙ|j.                  t        j<                  t        j>                  hv rA‰ j)                  |jA                  «       ‰«       ‰ j)                  |jC                  «       ‰«       nl|j.                  t        jD                  t        jF                  hv r@‰ j)                  |jI                  «       ‰«       ‰ j)                  |jK                  «       ‰«       tM        |«      rC|jO                  «       \  }	}
|	D ]*  }tQ        ||«      }‰ j)                  |tQ        ‰|«      «       Œ, y y t        |t        jR                  «      r/ ||«      r&|jT                  jV                  }‰‰jX                  |<   y y y )Nrñ  r“   c                 óÈ   •— ddl m}  || «      xrR t        | j                  j                  t
        j                  «      xr" | j                  j                  ‰j                  vS )Nr   )r$   )rÛ  r$   r³   r¾   rÎ  rÏ  rÐ  rŸ  )rñ  r$   rÎ   s     €r™   Ú	need_bindz8SubgraphTracer.track_produced_symints.<locals>.need_bind)  sJ   ø€ ÝIñ ˜A“ò :Ü˜qŸv™vŸ{™{¬E¯L©LÓ9ò:à—F‘F—K‘K t×'9Ñ'9Ð9ðr›   r1  rÙ   rÚ   c                 óL  •— t        ‰t        «      r ‰«       n‰Št        ‰t        j                  j                  «      sJ ‚‰j
                  j                  ‰j                  «      5   ‰j                  |i |¤Ž}t        |j                  | «       |cd d d «       S # 1 sw Y   y xY wrÂ   )
r³   r�  r´   r   r  r�   r�  r¾   r¡  rw   )r1  rÙ   rÚ   rü  r²  r‡  s       €€r™   Ú_proxy_with_example_valuezHSubgraphTracer.track_produced_symints.<locals>._proxy_with_example_value2  s‚   ø€ ô
 $.¨g´yÔ#A‘g”iÀwˆGÜ˜g¤u§x¡x§~¡~Ô6Ð6Ð6Ø—‘×-Ñ-¨g¯l©lÓ;ñ Ø+˜×+Ñ+¨TÐ<°VÑ<�Ü! %§*¡*¨mÔ<Ø÷÷ ò ús   Á&*BÂB#z=track_produced_symints %s for %s.size()[%s] at debug_level %sr`  rš  zCtrack_produced_symints %s for %s.storage_offset() at debug_level %sz?track_produced_symints %s for %s.stride()[%s] at debug_level %s)-r‡  r³   r�  r	   r¨   r   r  r´   r   r€  rð  rÅ   r€  rO  r�  Úopsr(  Úsym_sizer  r.  Útrack_produced_symintsÚstorage_offsetÚsym_storage_offsetÚ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$  r¾   rÎ  rŸ  )rÎ   r1  r²  rµ  r·  rV  rñ  Ú
lazy_proxyr»  Úattrsr£  rs  Úinner_trÎ  r‡  s   ` `           @r™   rº  z%SubgraphTracer.track_produced_symints  sµ  ú€ ð  —‘ˆÜ˜&¤.Ô1Ð1Ð1ð	œð 	¤õ 	ð
	Üð
	Ü'*ð
	Ü69ð
	ä�X‰Xö
	ô �m¤U§\¡\Õ2Ü! -×"4Ñ"4Ó"6Ó7ò ?‘��1Ù˜Q•<Ü—I‘IØWØØØØ×*Ñ*ôô "+ØØ1ØØ'ÜŸ	™	Ÿ™×/Ñ/×3Ñ3Ø  !˜ØÜ"& q£'ô	"�Jð ×/Ñ/°°:Õ>ð'?ð* +×9Ñ9Ó;ˆNÙ˜Ô(Ü—	‘	ØYØ"ØØ×&Ñ&ô	ô 'ØØ-Ø"Ø#Ü—I‘I—N‘N×5Ñ5Ø�JØÜ" >Ó2ô	�
ð ×+Ñ+¨N¸JÔGà×#Ñ#¤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Ò*ð (ð 5r›   rZ  c           	      óÀ  ‡ — 	 ddt         t        j                  z  dt        d z  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        j,                  t        j.                  hv rA‰ j'                  |j1                  «       |«       ‰ j'                  |j3                  «       |«       nl|j                  t        j4                  t        j6                  hv r@‰ j'                  |j9                  «       |«       ‰ j'                  |j;                  «       |«       t=        |«      rG|j?                  «       \  }}|D ].  }tA        ||«      }	‰ j'                  |	|�tC        ||«      nd «       Œ0 y y t        |t        j                  «      r
 |||«       y y )	Nrñ  rã  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   r1  )r—  rã  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  rn  r,  )r$   r³   r´   r$  Úlookup_unbound_symbolsrõ  r¬  r¡  rŸ  r¾   r/  r.  rª   r.  rÅ   r€  r  rO  rF  r’  Úiterry   )	rñ  rã  r—  Úself_to_be_boundÚs0Úparent_proxyÚexample_valÚphrÎ   s	           €r™   Ú_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ØØ'-Ð'9˜ŸšÐ?PØ×(Ñ(ô	ð :<�D×(Ñ(¨Ò6ñ#<ô( Ð+Ó,°Ò1ð ðHØHXÐGYÐY]Ð^_Ð]`ðbóÐ1ð Ð)ð Ø! ! ð %WàWXÐVYÐYjðlóÐ)ô
 œ$Ð/Ó0Ó1�Ø×,Ñ,Ü˜“GÜ˜“GØØ!Ø!ð -ó �ô —	‘	ØJØØ#)Ð#5�F—K’KÐ;LØ×$Ñ$ô	ô ,4ØØØ',Ø $Ø#ô,�—‘—‘˜ZÒ(r›   T)r—  r  )"r  r´   r$  r   r¨   r³   r   r€  rð  rb   ra   ÚSIZEr½  r¾  r¿  ÚSTRIDEr»  ÚSTORAGE_OFFSETrÁ  r¡  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  r+   rÌ  r�   rT   )
rÎ   r1  rZ  rÚ  rV  rñ  rÎ  r£  rs  rÏ  s
   `         r™   r¡  z"SubgraphTracer._lift_basic_symbols’  sž  ø€ ð !ñB	Ü”U—\‘\Ñ!ðB	ä˜T‘Mð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Ù#ØØõð 5r›   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Â   )r  )rñ  s    r™   rU  z7SubgraphTracer.lookup_unbound_symbols.<locals>.<lambda>'  s
   € °·±€ r›   )r  )r¾   rÎ  r"   rõ  rŸ  r¶   r³   r�  r´   r   r  r‡  rÁ  )rÎ   rñ  r"   Úto_be_boundrÖ  rü  s         r™   rÓ  z%SubgraphTracer.lookup_unbound_symbols  sÒ   € Ø—v‘v—{‘{×/Ñ/ˆÜˆ|Ó Ò!ØˆIàˆØò 	ˆBØ˜×+Ñ+Ñ+Ø×"Ñ" 2Ô&Øà×&Ñ& rÑ*ˆEÜ˜%¤Ô+Ù›�Ø).�×"Ñ" 2Ñ&Ü˜e¤U§X¡X§^¡^Ô4¸¿¹ÈÒ9Mð Ø& r dÐ*LÐMóÐMð	ô �kÑ'7Ô8Ð8r›   c                 ó  — | j                   }g }g }| j                  j                  D ]i  }|j                  dk(  rW|j                  d   }t        |t        j                  «      sŒ<|j                  |j                  «       |j                  |«       Œi n t        t        ||«      «      D ���cg c]  \  }\  }}||k7  r|‘Œ }	}}}|	r#|	D �cg c]  }||   ‘Œ	 }
}d|
› �}t        d|«      S t        dd«      S c c}}}w c c}w )Nr~  r1  zInput mutation detected at TFrn  )r�  r�   rƒ  r„  r/  r³   r´   r   r¶   r…  r€  r^  r­   )rÎ   Úinput_versions_at_beginningÚinput_nodesÚinput_versions_at_endr¾   r1  rV  Úv1Úv2Úmutated_inputsÚmutated_nodesr¤   s               r™   Úhas_input_mutationz!SubgraphTracer.has_input_mutation)  s  € Ø&*×&GÑ&GÐ#Øˆà "ÐØ—J‘J×$Ñ$ò 	ˆDØ�w‰w˜-Ò'Ø $§	¡	¨/Ñ :�Ü˜m¬U¯\©\Õ:Ø)×0Ñ0°×1GÑ1GÔHØ×&Ñ& tÕ,áð	ô  )ÜÐ/Ð1FÓGó ÷
ð 
á�‘8�B˜ð �RŠxò	 ð
ˆò 
ñ Ø5CÖD°˜[¨›^ÐDˆMÐDØ/°¨Ð?ˆCÜ  cÓ*Ð*ä˜E 2Ó&Ð&ùô
ùò Es   Â,C5Ã
C<c           	      óÞ  — ddl m} ddlm} t	        «       }| j
                  j                  D ]k  }|j                  dk(  rY ||g«      d   }t        |t        j                  «      sŒ9 ||«      D ]&  }||v rd||   › d|› �}t        d|«      c c S |||<   Œ( Œk n t	        «       }| j
                  j                  d¬	«      d   }	t        j                  |	j                  d   «      D ]o  }
|
sŒ ||
g«      d   }t        |t         «      rJ ‚t        |t        j                  «      sŒ? ||«      D ]&  }||v rd
||   › d|
› �}t        d|«      c c S |
||<   Œ( Œq |j#                  «       |j#                  «       z  }t%        |«      dkD  rQ|D �cg c]  }||   ||   f‘Œ }}dj'                  |D ��cg c]  \  }}|› d|› �‘Œ c}}«      }d|› �}t        d|«      S t        dd«      S c c}w c c}}w )Nr   )Úget_tensor_storages)Ú_collect_fake_inputsr~  z*Input-to-input aliasing detected at nodes z and Tr²  r„  z,Output-to-output aliasing detected at nodes z, z+Input-to-output aliasing detected at nodes Frn  )Ú(torch._dynamo.variables.higher_order_opsrë  Útorch._higher_order_ops.utilsrì  rì   r�   rƒ  r„  r³   r´   r   r¢   r…  rä  Útree_leavesrÙ   rÒ   râ  rõ  r�  )rÎ   rë  rì  Úinput_storagesr¾   r1  Ústorager¤   Úoutput_storagesÚ	out_nodesÚout_nodeÚintersected_storagesrñ  ÚaliasedrV  Úos                   r™   r£   zSubgraphTracer.has_aliasingF  s'  € ÝPÝFä>B»fˆà—J‘J×$Ñ$ò 	ˆDØ�w‰w˜-Ò'Ù 4°d°VÓ <¸QÑ ?�Ü˜m¬U¯\©\Õ:Ù#6°}Ó#Eò 7˜Ø" nÑ4à$NÈ~Ð^eÑOfÐNgÐglÐmqÐlrÐ"s˜CÜ#/°°cÓ#:Ô:Ø26˜ wÒ/ñ7ñ ð	ô @D»vˆØ—J‘J×)Ñ)¨XÐ)Ó6°qÑ9ˆ	Ü×*Ñ*¨9¯>©>¸!Ñ+<Ó=ò 
	<ˆHÚÙ 4°h°ZÓ @ÀÑ C�Ü% m´TÔ:Ð:Ð:Ü˜m¬U¯\©\Õ:Ù#6°}Ó#Eò <˜Ø" oÑ5à$PÐQ`ÐahÑQiÐPjÐjoÐpxÐoyÐ"z˜CÜ#/°°cÓ#:Ô:Ø3;˜¨Ò0ñ<ð
	<ð  .×2Ñ2Ó4°×7KÑ7KÓ7MÑMÐÜÐ#Ó$ qÒ(ð BVöØ<=� Ñ" O°AÑ$6Ò7ðˆGð ð —i‘i¸G× D±D°A°q A 3 e¨A¨3¢Ó DÓEˆGØ?À¸yÐIˆCÜ  cÓ*Ð*ä˜E 2Ó&Ð&ùòùó !Es   ÆG$Æ.G)
)NFNN)NNNrl  )FN)(rœ   r¦   r§   rÑ   r   r¨   r(   rª   râ   r~   rZ  r   r»  rZ  r	   r   r  r¡  re  r¤  r§  r   r.  r�  r¨  rv  r´   rº  r$  r   r¡  rÒ   rÏ  rÐ  rÓ  r­   ré  r¢   r£   rï   rð   s   @r™   r�  r�  ³  sZ  ø„ ñð .2ØØ'+Ø"&ñeNà#ðeNð Ð)Ñ*ðeNð ð	eNð
  ‘}ðeNð ˜4‘ZðeNð 
õeNðN* oð *¸$ó *ðCØ-ðCØ57·W±WðCà	óCð8  Ø $ØAEñàðð ðð ð	ð
 ðð �D‰jðð ˜‘:ðð # B§G¡G 9¨b¯h©hÐ#6Ñ7¸$Ñ>ðð 
�‰óð4  Ø $ØAEñLàðLð ðLð ð	Lð
 ðLð �D‰jðLð ˜‘:ðLð # B§G¡G 9¨b¯h©hÐ#6Ñ7¸$Ñ>ðLð 
�‰õLðd ØØØ $ñàðð ðð ð	ð
 ðð �D‰jðð ˜‘:ðð 
�‰õð46 §¡ð 6¨Dó 6ð6 Ø $ñzàðzð ðzð ð	zð
 ðzð ˜‘ðzð 
�‰ózðz)°2·8±8ð )À	ÈBÏHÉHÑ@Tó )ðV7°sð 7¸só 7ð@y5Ø ðy5Ø+4°u·x±x·~±~Ñ+Eðy5à	óy5ðx~Ø"Ÿ\™\¨E¯L©LÑ8ð~Ø?EÈ¹}ð~à	ó~ðD9¨¯©ð 9¸¸e¿l¹lÑ9Kó 9ð*' Ló 'ð:+'˜l÷ +'r›   r�  rÂ   (  rÑ   r¤  rÉ  r÷   r  rÉ  ri  r«  r/   rÜ  ró  rS  rÿ  rÓ   rû  r¤  rE  Úcollections.abcr   r   r   r   r   rM  r   Útypingr	   r
   r   r   r   Útyping_extensionsr   r   rÏ  Útorch._guardsr´   Útorch._loggingÚtorch.distributedÚdistributedr  Útorch.nnÚtorch.utils._pytreerU  rV  rä  r   r   Útorch._C._dynamor   Útorch._dynamo.excr   r   r   r   r   r   r   r   Ú"torch._library.fake_class_registryr   Útorch._library.opaque_objectr   Útorch._subclasses.fake_tensorr   Útorch._utils_internalr   Útorch.export.dynamic_shapesr   re  r    Ú%torch.fx.experimental._backward_stater!   rÛ  r"   r#   r$   r%   r&   r'   Útorch.fx.noder(   Útorch.fx.passes.runtime_assertr)   Útorch.utils._ordered_setr*   Útorch.utils._python_dispatchr+   rn  r-   r.   rÃ   r0   Úbackends.registryr1   r2   rˆ  r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   rš  r?   Úcurrent_scope_idr@   Údevice_interfacerA   rB   rC   rD   rE   rF   rV  rG   rH   Úgraph_deduplicationrI   Úgraph_id_filterrJ   rK   Úgraph_region_trackerrL   rM   rN   Úmutation_guardrO   rq  rP   rQ   rR   rã  rS   rT   rU   rV   rW   rX   rY   rZ   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.builderrx   ry   rz   r{   Úvariables.ctx_managerr|   Úvariables.functionsr}   r~   Úvariables.listsr   Úvariables.miscr€   Úvariables.nn_moduler�   r  r‚   rƒ   r„   Úvariables.torch_functionr…   Úvariables.user_definedr†   rý  rˆ   Útorch._dynamo.packager‰   rò  rŠ   Útorch._inductorr‹   Ú torch.multiprocessing.reductionsrŒ   Ú	getLoggerrœ   rÅ   ré  ÚgetArtifactLoggerÚgraph_tabular_logrc  Úgraph_sizes_logrz  rl  rí   rî   r'  r  r&  r  rì   rª   rŸ   r¢   r­   rÒ   rN  r²   r…  r�   r»  rÀ   ÚcacherÆ   rÈ   rÜ   rÞ   rò   Úobjectr5  r  r  rC  rP  r^  r`  rp  r  r0  r=  r¬  r“  r>  r?  r�  ÚTracerr�  r˜   r›   r™   ú<module>r&     s®  ðñó* Û Û Û Û Û Û Û Û Û 	Û 
Û Û Û Û Û ß 9Ñ 9ß 4Ý ß <Õ <ß 0ã ã Û Ý  Û ß $Ð $ß Ý #ß N÷÷ õ @Ý 7Ý 4Ý 0Ý 9Ý :Ý ?÷÷ õ !Ý JÝ /Ý Fç DÓ Dß 5÷÷ ÷ ñ õ 'Ý Ý -Ý 6÷õ ÷ SÝ :÷õ 5ß /Ý 0ß WÑ W÷÷ ÷ ÷ ó ÷$÷ ÷ ÷ ÷ õ ÷.ó õ ;ß HÝ -Ý (Ý 1÷ñ õ
 CÝ ;ñ ÝAÝ4ÝHÝ4Ý?à€g×Ò˜Ó!€Ø—N’N×4Ò4°X¸wÓGÐ Ø—’×1Ò1°(¸LÓI€Ø—.’.×2Ò2°8¸]ÓK€Ø—’×1Ò1°(¸LÓI€à×*Ò*Ð ð "'§¢§¢×!>Ò!>Ð Ø$)§H¢H§O¢O×$DÒ$DÐ !ðØðØ&*¨3°¨8¡nðàˆc�3ˆhÑóñ& �$Ô÷ð ó ðñ
 �$Ô÷ð ó ðð 6:ñ)Ø˜u U§\¡\°3¸±:Ð%=Ñ>Ñ?ð)à�—’×%Ò%×*Ò*Ñ+¨dÑ2ð)ð 	ˆ�Š×	Ò	×	"Ò	"Ñ#ó)ðX ‡‚ð4�cò 4ó ð4ð ÷-ð -ó ð-ð¨#ð °(¸2¸tÀC¹y¸=Ñ2Ió ô �U—X’X—_’_ô  ÷ !ñ !ðH 	ˆS�&ˆ[Ñ€ð ÷Nð Nó ðNð: ÷<
ð <
ó ð<
ð~ ÷Xð Xó ðXð" ÷'ð 'ó ð'ð, Eð ¨d°3¸°8©nó ô(F"Ð.ô F"ôRU+2Ð#ô U+2÷pV!Vñ !VðJJð ðHØðHØ%(ðHØ25ðHØ=@ðHØJMðHà	óHðV &�i—o’oÓ'Ñ áˆcƒN�ÙˆCƒL�÷2ò 2ô$~'�R—Y’Yö ~'r›   