Ë
    ÃÓ^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mZm Z m!Z! ddl"m#Z#m$Z$m%Z% ddl&Z&ddl'Z(ddl)Z(ddl*m+Z, ddl-Z(ddl.m/c m0Z1 ddl(m2Z2m3Z3 dd	l4m5Z5 dd
l6m7Z7m8Z8 ddl'm9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJ ddlKmLZL ddlMmNZNmOZOmPZPmQZQmRZRmSZS ddlTmUZU ddlVmWZW ddlXmYZY ddlZm[Z[ ddl\m]Z]m^Z^mZ_m`Z` ddlambZbmcZc ddldmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZo ddlpmpZp ddlqmrZr ddlsmtZt ddlumvZv dd l^mwZwmxZxmyZymzZzm{Z{ dd!l|m}Z}m~Z~ dd"lm€Z€ dd#l�m‚Z‚mƒZƒ dd$l„m…Z… dd%l5m†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Þe5�j¾                  Zßeàe(�jÂ                  z  dz  Zâeeâ   Zãed<   Zä G d=„ d>e «      Zå G d?„ d@e «      Zæ G dA„ dBe«      Zçe(�jÐ                  �jÒ                  �jÔ                  Zëe(�jÐ                  �jÒ                  �jØ                  ZídCedDeîeïef   dEedFef   fdG„Zð edH¬I«       G dJ„ dK«      «       Zñ edH¬I«       G dL„ dM«      «       Zò	 dwdNeóeôe(jf                  eïdz  f      dOeõe(�jì                  �jî                  �jð                     dz  dEeõe(�jì                  �jî                  �jð                     fdP„Zùe�jô                  dEefdQ„«       Zûe G dR„ dS«      «       ZüdTedEeg eóe   f   fdU„Zý G dV„ dWe(�jÐ                  �jÒ                  «      Zþ G dX„ dY«      Zÿeîeï�e f   �Ze G dZ„ d[«      «       �Ze G d\„ d]«      «       �Ze G d^„ d_«      «       �Ze G d`„ da«      «       �Zdb�edEeîeïef   fdc„�Z G dd„ de�e«      �Z G df„ dg�e«      �Z G dh„ di«      �Z	dj�Z
dk�edleïdmednedoedEdfdp„�Z e�j                  «       �Z e$dq«      �Z e%dr«      �Z G ds„ dt«      �Z G du„ dve2�j"                  «      �Zy)xa¶  
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ÚLiteralÚ
NamedTupleÚOptionalÚTYPE_CHECKINGÚ	TypedDictÚUnion)ÚNotRequiredÚ	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)Ú	graph_outÚinputÚconstantc                   óB   — e Zd ZU eed<   eed<   ee   ed<   ee   ed<   y)ÚSizesStridesInfoÚsizeÚstrideÚvalues_sizeÚvalues_strideN)Ú__name__Ú
__module__Ú__qualname__ÚTensorMetadataSequenceÚ__annotations__r   © ó    úe/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/output_graph.pyr™   r™   Ð   s&   … Ø
 Ó Ø"Ó"ØÐ3Ñ4Ó4ØÐ5Ñ6Ô6r¤   r™   c                   ó   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eedf   ed	<   eedf   ed
<   eedf   ed<   eed<   eed<   e	e   ed<   eed<   eed<   e	e   ed<   eedf   ed<   eedf   ed<   y)ÚCodeOptionsÚco_argcountÚco_posonlyargcountÚco_kwonlyargcountÚ
co_nlocalsÚco_stacksizeÚco_flagsÚco_code.Ú	co_constsÚco_namesÚco_varnamesÚco_filenameÚco_nameÚco_qualnameÚco_firstlinenoÚco_linetableÚco_exceptiontableÚco_freevarsÚco_cellvarsN)
rž   rŸ   r    Úintr¢   ÚbytesÚtupleÚobjectÚstrr   r£   r¤   r¥   r§   r§   ×   s�   … ØÓØÓØÓØƒOØÓØƒMØƒNØ�V˜S�[Ñ!Ó!Ø�C˜�H‰oÓØ�s˜C�x‘Ó ØÓØƒLØ˜SÑ!Ó!ØÓØÓØ" 5Ñ)Ó)Ø�s˜C�x‘Ó Ø�s˜C�x‘Ô r¤   r§   c                   ó"   — e Zd ZU eed<   eed<   y)ÚOutputReturnInfoÚkindÚvalueN)rž   rŸ   r    ÚOutputReturnKindr¢   r½   r£   r¤   r¥   rÀ   rÀ   ì   s   … Ø
ÓØ„Mr¤   rÀ   Ú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Ä   rÅ   s     €€r¥   Úwrappedz+_wrap_with_inductor_config.<locals>.wrapped  s   ø€ Ù˜2˜~¸nÔMÐMr¤   rž   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ž   rŸ   r    Úboolr¢   r¾   r£   r¤   r¥   rÑ   rÑ     s   … àÓØ	„Hr¤   rÑ   c                   ó:   — e Zd ZU eed<   eed<   dZeedf   ed<   y)ÚMutationInfoÚhas_mutationrÓ   r£   .Úmutated_input_indicesN)	rž   rŸ   r    rÔ   r¢   r¾   rØ   r¼   rº   r£   r¤   r¥   rÖ   rÖ     s    … àÓØ	ƒHØ-/Ð˜5  c ™?Ô/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ð   D  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õ   rt   rà   ©Úselfs    r¥   Ú__post_init__z GraphCompileReason.__post_init__S  s   € Ø×ÒÜ×&Ñ& tÕ,ð r¤   ©rÆ   N)rž   rŸ   r    Ú__doc__r¾   r¢   ÚlistÚ	tracebackÚFrameSummaryrõ   rÔ   rù   r£   r¤   r¥   rò   rò   I  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_valuesY  s+   ø€ Ø<H×IÐIÑ(8¨¨D°&‘�DÐ#˜FÓ#ÔIÐIùÔIs   ˆ )rü   r	   )rÿ   r  s   ` r¥   Ú_get_gen_rand_values_fnr  X  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__b  s6   ø€ Ü‰ÑÔØ×$Ñ$Ó&ò 	 ‰DˆAˆqÜ�D˜!˜QÕñ	 r¤   c                  ó   — y)NzFakeRootModule(...)r£   r÷   s    r¥   Ú__repr__zFakeRootModule.__repr__g  s   € Ø$r¤   c                 óN   — |j                  «       D ]  \  }}t        | ||«       Œ y rì   )r  r  )rø   r	  r  r  s       r¥   Úadd_nn_moduleszFakeRootModule.add_nn_modulesj  s*   € Ø×$Ñ$Ó&ò 	 ‰DˆAˆqÜ�D˜!˜QÕñ	 r¤   )rž   rŸ   r    rû   Údictr¾   rÞ   ÚnnÚModuler  r  r  Ú__classcell__©r  s   @r¥   r  r  _  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__p  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)rh   ÚrestorerÈ   ÚcopyÚdeepcopyr  Ú	candidateÚforwardr1   Úverify_correctnessrj   rz   ÚRuntimeErrorÚ	Exceptionrï   Ú	exception)rø   rÈ   rÉ   Úcopy_gmÚcorrectÚresults         r¥   Ú__call__zWrapperBackend.__call__s  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    r6   r  rÞ   r   ÚGraphModulerü   r   r5   r,  r£   r¤   r¥   r  r  o  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)ro   ÚdataclassesÚfieldsrÌ   ÚnameÚremovesuffixrk   Ú
setdefaultrà   r  Útry_add_event_data)rø   Úchromium_logÚ
event_dataÚfÚns_valÚkeys         r¥   Úreport_and_resetz'BytecodeTracingTimings.report_and_reset£  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û   r0  rº   r¢   r1  r2  r3  rC  r£   r¤   r¥   r/  r/  –  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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j.                  j0                  ed<   eej.                  j2                     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j.                  j0                  fd„«       Ze deej.                  j2                     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ì   )rO  r÷   s    r¥   r   zOutputGraphGuardsState.guards×  s   € à�|‰|Ðr¤   c                 ó   — | j                   S rì   )rP  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)rF  rG  rH  rI  rJ  rK  rL  rM  rN  rT  rQ  rS  rO  rP  rR  )rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rT  rQ  rS  r   r[  rR  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Æ   rE  )%rž   rŸ   r    rû   ÚScoper¢   rü   rÞ   Ú	overridesÚTorchFunctionModerÜ   r   r  r™   rº   Ú
_functorchÚpyfunctorchÚFuncTorchInterpreterÚdeviceÚ_CÚ_dynamor   ÚGlobalStateGuardrO  Ú	GuardsSetÚGuardEnvExprrQ  rÔ   rR  rS  rT  r¾   Úpropertyr)   rX  r[  r]  r£   r¤   r¥   rE  rE  ´  sX  … ñð ÓØÓà# E§O¡O×$EÑ$EÑFÓFØ˜F™Ó#à#'¨Ð0@Ð(@Ñ#AÓAØƒ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¤   rE  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û   rm  rº   r¢   Údc_fieldr  rp  r¾   rü   rq  rr  rs  r¼   r½   rt  ru  r£   r¤   r¥   rl  rl  ô  sÇ   … ñð €IˆsÓÙ#+Øô$€L�$�s˜C�x‘.ó ñ #+¸4Ô"@Ð�d˜3‘iÓ@Ù"*¸4Ô"@Ð�d˜3‘iÓ@Ù;CØô<€N�D˜˜s E¨&°#¨+Ñ$6Ð6Ñ7Ñ8ó ñ '/¸tÔ&DÐ˜$˜s™)ÓDÙ<DØô=€O�T˜%  U¨6°3¨;Ñ%7Ð 7Ñ8Ñ9ô r¤   rl  c                   óÖ  — e Zd ZU  ee¬«      Zeeedz  f   ed<    ee¬«      Z	eee
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)ÚExportMetaDatarn  NÚgraph_input_idx_to_local_sourceÚoutput_return_typeÚout_specÚmodule_call_spec)rž   rŸ   r    rv  r  ry  rº   r   r¢   rz  rÀ   rÞ   ÚutilsÚ_pytreeÚ
_LEAF_SPECr{  ÚTreeSpecÚLeafSpecr|  r¾   r£   r¤   r¥   rx  rx  
  sã   … ñ
 AIØôAÐ# T¨#¨v¸©}Ð*<Ñ%=ó ñ 7?ÈtÔ6TÐ˜˜SÐ"2Ð2Ñ3ÓTð 	�‰×Ñ×&Ñ&ð ˆe�k‰k×!Ñ!×*Ñ*¨U¯[©[×-@Ñ-@×-IÑ-IÑIó ñ 	 Ô&ð �dØØˆS�%—+‘+×%Ñ%×.Ñ.°·±×1DÑ1D×1MÑ1MÑMÐMÑNð	Pñô 'r¤   rx  rG  c                 óH   — | d   }t        |t        «      s|j                  }|S )NÚ__builtins__)rÝ   r  Ú__dict__)rG  Ú
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e
e
e   dz     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_sourcesrX  Úexport_metadataÚtracked_fakes_id_to_sourceÚoutput_pycoderÆ   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 | _        |xs g | _        y rì   )r  r  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rŠ  r)   Ú
_shape_envrx  r‹  rŒ  r�  )rø   r‰  rŠ  rX  r‹  rŒ  r�  r  s          €r¥   r  zOutputGraphCommon.__init__M  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ˆÔà&Ò,¨"ð 	Ô'ð +Ò0¨bˆÕr¤   c                 ó   — | j                   S rì   )r�  r÷   s    r¥   rX  zOutputGraphCommon.shape_envu  s   € à�‰Ðr¤   ró   r  c                 ó   — t         ‚rì   )ÚNotImplementedError©rø   ró   r  s      r¥   Úbypass_packagez OutputGraphCommon.bypass_packagey  s
   € ô "Ð!r¤   )NNNNN©Ú )rž   rŸ   r    rû   rE  r  r¾   r)   rx  rº   rü   r   r  rj  rX  r	   r”  r  r  s   @r¥   rˆ  rˆ  5  sÔ   ø„ ñð4 15Ø%)Ø15ØEIØ7;ñ&1à#9ð&1ð ˜S #˜X™¨Ñ-ð&1ð ˜d‘?ð	&1ð
 (¨$Ñ.ð&1ð %)¨¨d°6©lÐ):Ñ$;¸dÑ$Bð&1ð ˜D ™I¨Ñ,Ñ-°Ñ4ð&1ð 
õ&1ðP ð˜8ò ó ðñ" Sð "¸ð "À÷ "r¤   rˆ  c                   ó€  — e Zd ZU dZeed<   	 d•de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e4eej@                  f   fd9„«       Z5e)de4ejl                  ejn                  f   fd:„«       Z8e)de4e9jt                  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>                  jl                  fd?„Z>d(ed=eddfd@„Z?e@j‚                  	 d˜dAeBdz  dBed-   dCedz  deCdD   fdE„«       ZDe)d›dF„«       ZEe)dejŒ                  jŽ                  fdG„«       ZHe)deIfdH„«       ZJe)dej–                  j˜                  fdI„«       ZMe)de4eef   fdJ„«       ZNe)deej–                  jž                     fdK„«       ZP	 d˜dLe4eee%d'ef   ef   f   dz  ddfdM„ZQdšdN„ZRdœdO„ZSe)dœdP„«       ZTdQedefdR„ZUde/fdS„ZVdefdT„ZWdefdU„ZXdVedej²                  j´                  ez  fdW„Z[d�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jn                  z  ez  d[edaedefdb„Zad1ddeeeb   e4eef   f   fdc„Zcd1ddde/deee   edf   fde„Ze	 džd1ddfefdde/deed   fdg„Zgd1ddhehddfdi„Zid1ddjee   dhehdkeddf
dl„Zjd–dm„ZkdŸdfed=eddfdn„Zlde4eee/ez     f   fdo„ZmdXedefdp„Zne@j‚                  defdq„«       Zod–dr„Zpdsedt   d1dddfdu„Zqdsedt   d1dddfdv„Zrd1ddsee   dwesdeeeb   ee   dz  f   fdx„Zte)deejl                     fdy„«       Zue)deev   fdz„«       Zwd{ejð                  d|ee7   deyfd}„Zzd{ejð                  d|ee7   deyfd~„Z{de4eej>                  jð                  f   fd„Z|dXed€ej>                  jð                  defd�„Z}deejn                     fd‚„Z~d–dƒ„Zd–d„„Z€d–d…„Z�	 d˜d!eeb   d†ee   dz  ddfd‡„Z‚dXedˆeƒj                  d‰e4e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>                  jl                  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Ž   rQ  rS  Úframe_staterF  rG  Úf_coderH  Ú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                  «        tV        jx                  �'dd	l=m>}  || j~                  tV        jx                  «       t�        j‚                  t„        «      | _C        i | _D        t‹        | «      | _F        i | _G        i | _H        t        «       | _I        i | _J        t—        j˜                  «       | _M        t�        tž        t¡        |«      «      | _Q        g | _R        g | _S        d| _T        i | _U        d | _V        g | _W        || _X        || _Y        d | _Z        || _[        i | _\        g | _]        g | _^        d| __        i | _`        t        j                   jÃ                  «       | _b        d| _c        d| _d        t        «       | _e        t        i «      | _f        t        i «      | _g        | jÑ                  «        i | _i        g | _j        d | _k        g | _l        i | _m        i | _n        d | _o        d | _p        | jã                  «       | _r        tç        jè                  «       | _u        tí        «       | _w        | jñ                  «       | _y        i | _z        t÷        «       | _|        tû        «       | _~        i | _        d | _€        y # 1 sw Y   �ŒüxY w)
N)rI  rJ  rK  rL  rM  rN  rO  rP  )Ú	is_export)r³   r²   rµ   F)Ú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)rX  Úallow_non_fake_inputsrQ  )Ú_wire_spec_assumptions)�rE  r  rÜ   rÞ   ÚautogradÚ
forward_adÚ_current_levelra  rb  Ú#retrieve_all_functorch_interpretersr}  Ú_deviceÚCURRENT_DEVICErf  Úconvert_frameÚinitial_global_statere  r   rg  rO  rh  ÚSubgraphTracerÚtracersÚinput_source_to_varÚleaf_var_creation_orderrQ  rS  rœ  Úcleanup_hooksÚnextÚ_compile_id_counterÚ
compile_idÚinstalled_globalsr³   r²   rµ   r¦  Úcudagraph_annotationrP   Úregion_trackerÚ_emit_debugger_breakpointr¢  r)   r1   Ú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Ú_shapes_specÚtorch._dynamo.variables.builderrª  rX  ÚcollectionsÚdefaultdictrü   rŒ  Úparam_name_to_sourcerU   r™  Úvariable_tracker_cacheÚmro_source_cacheÚguarded_mro_absent_keysÚsignature_cacheÚ	itertoolsÚcountÚunique_var_idr
   r§   r  rš  Úoutput_instructionsr�  Ú	timestampÚ_input_mutation_streamsÚ_last_checked_input_versionsÚregister_finalizer_fnsrÄ   r›  Úprofiler_staterž  Ú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_fglobalsrT  Ú
contextlibÚ	ExitStackÚcompiler_trace_stackr/  Úbytecode_tracing_timingsÚ+maybe_install_saved_tensors_hooks_subgraphsÚ"saved_tensors_hooks_subgraph_namesrŠ  rx  r‹  r.   Ú"used_inlined_inbuilt_modules_namesÚattr_source_cacheÚ(_cached_replayed_side_effect_source_refs)rø   rš  rÄ   r›  rQ  rS  rœ  rF  rG  r�  rH  rž  rŸ  rX  Ú_configÚ	fake_moderª  s                    r¥   r  zOutputGraph.__init__�  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ˆÔØ× Ñ Ô"ô ×ÑÐ*ÝNá" 4§>¡>´6×3FÑ3FÔGô ×#Ñ#¤DÓ)ð 	Ô'ð ?AˆÔ!Ü'¨Ó-ˆÔð FHˆÔ#ð KMˆÔô
 >A»UˆÔ$à;=ˆÔÜ&Ÿ_™_Ó.ˆÔÜ)-¬k¼4ÀÓ;MÓ)NˆÔØ68ˆÔ Ø57ˆÔð ˆŒð 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÷	ñ 	ús   È$A UÕU(©Úpopulate_export_metadatarý  c          	      óJ  — |s7| j                   j                  s!| j                  �t        | j                  «      S ddlm} g }| j                   j                  «       D �]�  }t        |d«      sŒ|j                  }t        |t        t        f«      sŒ4t        |t        «      �r t        |j                  |«      �r	|�r|j                  €t        d«      ‚|j                  j                   j!                  «       D ]È  \  }}i }|j                   j!                  «       D ]0  \  }	}
|
j#                  «       ||	j$                  j#                  «       <   Œ2 ddgt        |j'                  «       «      k7  r%t        dt        |j'                  «       «      › �«      ‚|| j(                  j*                  |j$                  j#                  «       <   ŒÊ t        |t        «      rt        |j                  |«      r�Œ�|j-                  |«       �Œ  |D �cg c]  }t/        |j0                  «      ‘Œ c}S c c}w )zKReturn Python-side effect sources that Dynamo replays outside the FX graph.r   )Ú_ExportModuleSpecTrackerDictÚmutation_typezvar._base_vt must not be NoneÚin_specr{  z7Expected specs keys to be ['in_spec', 'out_spec'], got )r™  Úid_to_variablerù  rü   Útorch.export._tracerÿ  Ú_get_modified_varsÚhasattrr   rÝ   rT   rV   rŠ   rÂ   Ú_base_vtrV  r  Úas_python_constantÚvtÚkeysr‹  r|  rà   rW   Ú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_refs«  sí  € ñ
 )Ø×%Ñ%×4Ò4Ø×=Ñ=ÐIä˜×EÑEÓFÐFåDà!#ÐØ×$Ñ$×7Ñ7Ó9ó )	;ˆCÜ�s˜OÕ,Ø×,Ñ,�ô ØÔ8Ô:OÐPõô " #Ô'>Õ?ÄJØŸ	™	Ð#?õEò 4Ø"Ÿ|™|Ð3Ü&4Ð5TÓ&UÐ Uð
 !$§¡× 2Ñ 2× 8Ñ 8Ó :ò	*ñ !Ø !Ø !ð
 )+ à34·7±7·=±=³?ò !&¡K F¨Cà(+×(>Ñ(>Ó(@ð %*¨&¯)©)×*FÑ*FÓ*HÒ$Ið!&ð %.¨zÐ#:¼dÀ5Ç:Á:Ã<Ó>PÒ#PÜ*8Ø*aÔbfÐgl×gqÑgqÓgsÓbtÐauÐ(vó+&ð %&ð %*ð !%× 4Ñ 4× EÑ Eà$%§D¡D×$;Ñ$;Ó$=ò!"ð#*ô0 # 3Ô(?Ô@Ü& s§y¡yÐ2NÖOà.×5Ñ5°cÖ:ðS)	;ðV ?UÖU°sÔ& s§z¡zÕ2ÒUÐUùÒUs   ÈH Ú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   r0   )Úsplitrø  rX   )rø   r  r  ÚpartsrB  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¤   rb   c                 ó¢   — |j                  dd«      }t        |«      dk(  rt        ||«      S | j                  ||d   «      }t        ||d   «      S )Nr  r0   r   )ÚrsplitÚlenrb   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 )Nr7  T©Úlog_pt2_compile_eventr   r‹   )ró  Úenter_contextrn   r1   Údynamo_profilerÚtorch._dynamo.dynamo_profilerrŒ   rÛ  r›  r�  Úpushr³   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ô  rC  ró  Úcloser1   r#  rÛ  r$  r+  rá   r&  r'  Ústart_time_nsÚchild_time_nsr,  r-  r.  r  r›  r�  r®   r6  Úrecord_timingrÝ   r¾   Ú
dump_stats)rø   r+  Ústack_entryÚtrace_end_nsr/  r0  Ú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†  rG  Úinstall_global)rø   r…  s     r¥   rð  z-OutputGraph.install_builtins_dict_in_fglobals3  s&   € Ü& t×'8Ñ'8Ó9ˆ
Ø×"Ñ"Ð#6¸
ÓCÐCr¤   ÚhookÚprefixc                 ó°   — |› t        | j                  «      › �}|| j                  v rt        d|› d�«      ‚|| j                  |<   || j                  «       fS )Nzbackward_state hook name 'z' already registered)r  rí  rV  Úget_backward_state_proxy)rø   rE  rF  r:  s       r¥   Úadd_backward_state_hookz#OutputGraph.add_backward_state_hook7  sl   € ð �œ#˜d×1Ñ1Ó2Ð3Ð4ˆØ�4×&Ñ&Ñ&Ü Ø,¨T¨FÐ2FÐGóð ð %)ˆ×Ñ˜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 exportr–  z3Compiled autograd doesn't work with `torch.export`.©Úgb_typeÚcontextÚexplanationÚhintsÚdynamo_backward_state©r
  Úgrapharg)rî  rQ  rI   r%   Úroot_tracerÚcreate_graph_inputrW  rY   r|   rè   ÚmetaÚnew_varrï  )rø   Úexample_values     r¥   rH  z$OutputGraph.get_backward_state_proxyB  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â   rc   Ú
make_guardrQ   Ú	SHAPE_ENVr]   ÚDETERMINISTIC_ALGORITHMSÚ	GRAD_MODEÚDEFAULT_DEVICEÚGLOBAL_STATEÚTORCH_FUNCTION_STATErÞ   re  ra  Úpeek_interpreter_stackÚFUNCTORCH_STACK_MATCHrf  Úcompiled_autogradÚin_compiled_autograd_regionÚAUTOGRAD_SAVED_TENSORS_HOOKS)rø   Úcis     r¥   rÉ  zOutputGraph.init_ambient_guardsW  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                 ó–  — 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k7  rt        d|› d�«      ‚|dk7  rt        d|› d�«      ‚||gS )NÚsaved_tensors_hooks_packÚsaved_tensors_hooks_unpackÚsaved_tensors_hooks_pack_0zEExpected pack_subgraph_name to be 'saved_tensors_hooks_pack_0', got 'ú'Úsaved_tensors_hooks_unpack_0zIExpected unpack_subgraph_name to be 'saved_tensors_hooks_unpack_0', got ')rÞ   rf  rb  rc  ra  Ú_aot_autogradr}  Útop_saved_tensors_hooksÚ"saved_tensors_hooks_are_inlineableÚinstall_subgraphr   r-  r	  r‘   rV  )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_subgraphsu  s3  € Ü�=‰=×*Ñ*×FÒFØä×$Ñ$×2Ñ2×8Ñ8×PÑPˆ	ä×Ñ×*Ñ*×0Ñ0×SÑSð 	ñ “ˆÙ Ô&Øð #Ñˆ�Ø!×2Ñ2Ø&Ü�H‰H× Ñ  §¡°'·-±-Ó@ó
Ðð  $×4Ñ4Ø(Ü�H‰H× Ñ  §¡°)·/±/ÓBó 
Ðð Ð!=Ò=Ü ØWÐXjÐWkÐklÐmóð ð  Ð#AÒAÜ Ø[Ð\pÐ[qÐqrÐsóð ð #Ð$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ì   )r4   ÚConstantVariableÚcreate)Ú.0r  Úsrcs      r¥   ú	<genexpr>z4OutputGraph.synthetic_graph_input.<locals>.<genexpr>«  s6   è ø€ ò á�C˜ð �‘¬I×,FÑ,F×,MÑ,MÈcÓ,RÓRñùs   ‚02F)rV  rC   r›  Úadd_push_nullÚforeachÚzipÚmapr4   r~  r  Úcall_functionr  Ústorerë  ÚextendÚget_instructionsrd   rì  r‚   ÚbuildÚrealizer   ÚgetÚguards_contextÚdynamo_guardsÚremove_guards_with_source)	rø   r  r  rw  rW  Úvarnamer
  r+  r{  s	    `      @r¥   Úsynthetic_graph_inputz!OutputGraph.synthetic_graph_input˜  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_hook¾  s   € Ø×Ñ×!Ñ! "Õ%r¤   c                 óz   — t        | j                  «      D ]	  } |«        Œ | j                  j                  «        y rì   )Úreversedr·  Úclear)rø   rE  s     r¥   Úcall_cleanup_hookszOutputGraph.call_cleanup_hooksÁ  s3   € Ü˜T×/Ñ/Ó0ò 	ˆDÙ�Fð	à×Ñ× Ñ Õ"r¤   r³  c                 ó    — | j                   d   S ©Nr   ©r´  r÷   s    r¥   rS  zOutputGraph.root_tracerÆ  s   € à�|‰|˜A‰Ðr¤   c                 ó    — | j                   d   S ©Néÿÿÿÿr›  r÷   s    r¥   Úcurrent_tracerzOutputGraph.current_tracerÊ  s   € à�|‰|˜BÑÐr¤   c                 ó2   — t        | j                  «      dk(  S )Nr0   )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   ÚplaceholderrW  r0   )r  r¤  Úin_stream_contextrS  rÙ  r  Ú	enumerateÚ_input_versions_at_beginningÚcur_stream_idr‘   ÚnodesÚoprU  r�  rÝ   rÞ   r   Ú_versionrØ  r   Úextract_stack)	rø   r¢  ÚtracerÚcur_stream_indexÚ	input_idxrè   rW  Ú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:
r–  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ì   ©rŸ  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ì   )rŸ  Úinput_name_to_proxyr÷   s    r¥   rÁ  zOutputGraph.input_name_to_proxy   s   € à×"Ñ"×6Ñ6Ð6r¤   c                 ó.   — | j                   j                  S rì   )rŸ  Úreal_value_cacher÷   s    r¥   rÃ  zOutputGraph.real_value_cache$  s   € à×"Ñ"×3Ñ3Ð3r¤   Ú	LazyProxyc                 ó.   — | j                   j                  S rì   )rŸ  Úbound_symbolsr÷   s    r¥   rÆ  zOutputGraph.bound_symbols(  s   € à×"Ñ"×0Ñ0Ð0r¤   r  c                 ó:   —  | j                   j                  |i |¤ŽS rì   )rŸ  Úcreate_proxy©rø   r  r  s      r¥   rÈ  zOutputGraph.create_proxy2  s    € Ø/ˆt×"Ñ"×/Ñ/°Ð@¸Ñ@Ð@r¤   c                 ó:   —  | j                   j                  |i |¤ŽS rì   )rŸ  Úcreate_noderÉ  s      r¥   rË  zOutputGraph.create_node5  ó    € Ø.ˆt×"Ñ"×.Ñ.°Ð?¸Ñ?Ð?r¤   c                 ó:   —  | j                   j                  |i |¤ŽS rì   )rŸ  Úremove_noderÉ  s      r¥   rÎ  zOutputGraph.remove_node8  rÌ  r¤   Úsource_targetÚprior_tracerÚdescription)r³  NNc              #   óì  K  — t        «       }	 |r#|j                  | j                  urt        d«      ‚|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)NzBprior_tracer.parent must be the current tracer to preserve lineage)ÚparentrÏ  r¡  rÑ  )rD   rÓ  rŸ  rV  Ú	__enter__r³  r¡  r´  rà   Ú__exit__rá   )rø   rÏ  rÐ  rÑ  Únew_scope_ctxr®  s         r¥   Ú	subtracerzOutputGraph.subtracer;  sâ   è ø€ ô (Ó)ˆð	Ùà×&Ñ&¨d×.AÑ.AÑAÜ(Ø\óð ð ×#Ñ#Ô%ñ  ñ ä#ØØ×.Ñ.Ø"/Ø"×1Ñ1×;Ñ;Ø +ôð ð �L‰L×Ñ Ô'ØŠLà×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕøð ×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕüs   ‚C4ŽBC Â.C4Ã/C1Ã1C4c                 ó   — | S rì   r£   r÷   s    r¥   ÚoutputzOutputGraph.output\  s   € àˆr¤   c                 óp   — | j                   j                  €t        d«      ‚| j                   j                  S )Nú*tracing_context.fake_mode must not be None)rÅ  rû  rV  r÷   s    r¥   rû  zOutputGraph.fake_mode`  s2   € à×Ñ×)Ñ)Ð1Ü Ð!MÓNÐNØ×#Ñ#×-Ñ-Ð-r¤   c                 óÚ   — | j                   j                  €t        d«      ‚| j                   j                  j                  €t        d«      ‚| j                   j                  j                  S )NrÛ  z4tracing_context.fake_mode.shape_env must not be None)rÅ  rû  rV  rX  r÷   s    r¥   rX  zOutputGraph.shape_envf  s\   € à×Ñ×)Ñ)Ð1Ü Ð!MÓNÐNØ×Ñ×)Ñ)×3Ñ3Ð;Ü Ð!WÓXÐXØ×#Ñ#×-Ñ-×7Ñ7Ð7r¤   c                 óB   — | j                   j                  j                  S rì   )rÅ  rŽ  r�  r÷   s    r¥   r   zOutputGraph.guardsn  s   € à×#Ñ#×2Ñ2×@Ñ@Ð@r¤   c                 óB   — | j                   j                  j                  S rì   )rÅ  Úmodule_contextr	  r÷   s    r¥   r	  zOutputGraph.nn_modulesr  s   € à×#Ñ#×2Ñ2×=Ñ=Ð=r¤   c                 óB   — | j                   j                  j                  S rì   )rÅ  rŽ  r[  r÷   s    r¥   r[  zOutputGraph.aotautograd_guardsv  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¾   r¼   r   r	   rÔ   rÅ  Úglobal_contextÚglobal_staterÞ   Úset_grad_enabledÚis_grad_enabledÚacceleratorÚcurrent_acceleratorrW  Ú	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_statez  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_tx£  s   € Ø×Ñ×Ñ Õ#r¤   c                 ó6   — | j                   j                  «       S rì   )rÝ  rá   r÷   s    r¥   Úpop_txzOutputGraph.pop_tx¦  s   € Ø×Ñ×#Ñ#Ó%Ð%r¤   c                 óP   — | j                   s| j                  S | j                   d   S r�  )rÝ  r›  r÷   s    r¥   Ú
current_txzOutputGraph.current_tx©  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_valuer›  Ú	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ì   )rl   r‘   r÷   s    r¥   rl   zOutputGraph.count_callsº  s   € Ü˜4Ÿ:™:Ó&Ð&r¤   c                 óX   — t        t        | j                  j                  «      «      dk(  S rš  )r  rü   r‘   rª  r÷   s    r¥   Úis_empty_graphzOutputGraph.is_empty_graph½  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_outputsÀ  s5   € Ü˜tŸz™z×/Ñ/ÖD˜!°1·4±4¸8Ó3C’AÒDÓEÈÑIÐIùÒDs
   žA³Ar	  c                 ó¨   — |st        d«      ‚| j                  }|j                  d«      D ]$  }t        |t        «      r||   }Œt        ||«      }Œ& |S )Nzkeys must be a non-empty stringr  )rV  r	  r  rÝ   r  rÌ   )rø   r	  Úobjr  s       r¥   Úget_submodulezOutputGraph.get_submoduleÃ  sV   € ÙÜ Ð!BÓCÐCØ<@¿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)Nr±   rç   )rÜ   rš  r¸  rÕ  )rø   r:  Úexistingr  s       r¥   rV  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 namer°   N)rš  )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È  rs   r{   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rt        d«      ‚‰d   Št        ‰t        «      rt        d‰› �«      ‚t        ‰t        j                  «      r@‰ j                  Š‰ j                  «       s‰ j                  Šdt        dt        fˆˆ ˆˆˆfd„}�nUt        ‰t        j                  j                   «      r�t        ‰t        j                  j                   «      st        dt#        ‰«      › �«      ‚‰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
„}net1        t#        ‰«      «      r>‰ j                  Š‰ j                  «       s‰ j                  Šdt        dt        fˆˆ ˆˆfd„}ndt        dt        fˆ ˆfd„}‰ j2                  j5                  «       D ]  \  }}|‰u sŒ ||«      c S  t7        j8                  |Ž Š
t;        ‰
‰ j2                  ‰ j<                  «      Š
‰‰ j2                  ‰
<   t        ‰t        j                  j                   «      rhdt        dd fˆ
ˆ ˆfd„}t?        ‰d«      r ‰jA                  «       D ]  \  }}	 ||«       Œ t?        ‰d«      r ‰jC                  «       D ]  \  }}	 ||«       Œ  |‰
«      S )Nr
  z$'source' must be provided in optionsz,source must not be a ParamBufferSource, got Ú
module_keyrÆ   c           	      óx  •— ‰j                   €t        d«      ‚‰‰j                   | <   ‰j                  €t        d«      ‚‰‰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 rt        d«      ‚t)        ‰«      |j#                  «       j$                  j&                  d<   |S )	Nú%param_name_to_source must not be Noneúroot_tx must not be NoneÚguardedr  r£   rW  Útensor_dictz/'tensor_dict' already exists in proxy node meta)rÎ  rV  r›  rÙ  r™  rr   rÝ   ra   rR   rY  rQ   ÚID_MATCHr^   ÚTENSOR_MATCHr   rÈ  Útrack_object_existingÚas_proxyrè   rU  rg   )r&  r  r$  rø   r
  r#  r®  s     €€€€€r¥   Ú	wrap_namez6OutputGraph.register_attr_or_module.<locals>.wrap_name+  s~  ø€ Ø×,Ñ,Ð4Ü(Ð)PÓQÐQØ8>�×)Ñ)¨*Ñ5ð —<‘<Ð'Ü(Ð)CÓDÐDØ˜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×$6Ñ$6×$;Ñ$;Ñ;Ü(ØIóð ô :NÈfÓ9U�—‘“×"Ñ"×'Ñ'¨Ñ6à�	r¤   z&target must be a torch.nn.Module, got c                 ó2   •— t        t        ‰«      | ‰fi ‰¤ŽS rì   )r…   rW  ©r&  r$  r#  s    €€r¥   r0  z6OutputGraph.register_attr_or_module.<locals>.wrap_name[  s   ø€ ä+¬D°«L¸*ÀfÑXÐPWÑXÐXr¤   c                 ó0   •— t        j                  ‰fi ‰¤ŽS rì   )r4   ÚUnspecializedNNModuleVariabler2  s    €€r¥   r0  z6OutputGraph.register_attr_or_module.<locals>.wrap_named  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‡   r  r›  rÈ  )r&  r$  rø   r#  s    €€€r¥   r0  z6OutputGraph.register_attr_or_module.<locals>.wrap_namep  sE   ø€ Ü&×-Ñ-Ø—L‘LØ×%Ñ% j°*¸bÀ"ÓEñð #ðð ñ	ð r¤   c                 óV  •— t         j                  j                  j                  ‰j                  ‰«      }‰j                  d| di «      }t        |j                  |«       t        j                  j                  j                  j                  j                  ||fd‰j                  i‰¤ŽS )Nr  r£   r¢  )rÞ   Ú_libraryÚfake_class_registryÚmaybe_to_fake_objrû  rÈ  r{   rè   rf  r4   Úscript_objectÚTorchScriptObjectVariabler  r›  )r&  Úfake_script_objr   r$  rø   r#  r®  s      €€€€r¥   r0  z6OutputGraph.register_attr_or_module.<locals>.wrap_name‚  sŽ   ø€ Ü"'§.¡.×"DÑ"D×"VÑ"VØ—N‘N Fó#�ð ×+Ñ+¨J¸
ÀBÈÓK�Ü! %§*¡*¨oÔ>Ü—}‘}×.Ñ.×<Ñ<×VÑV×]Ñ]Ø˜?ñØ/3¯|©|ðØ?Fñð r¤   c                 óš   •— ‰j                   j                  | «       ‰‰j                  | <   t        j                  ‰‰t        | ¬«      «      S )N)Úsource_name)rÙ  r  rG  r‚   r‹  rZ   )r&  rø   r#  s    €€r¥   r0  z6OutputGraph.register_attr_or_module.<locals>.wrap_name�  sF   ø€ Ø—‘×+Ñ+¨JÔ7Ø06�×!Ñ! *Ñ-Ü&×,Ñ,ØØÜ"¨zÔ:óð r¤   Ú	leaf_namec                 óþ   •— ‰j                   €t        d«      ‚‰j                  ‰| «      }‰› d| › �}|‰j                   |<   t        ‰t        «      r-| ‰j
                  t        j                  |j                  «      <   y y ©Nr(  r  ©	rÎ  rV  r  rÝ   r`   ré  r˜  r  r:  ©r@  Ú
new_sourceÚnew_namer:  rø   r
  s      €€€r¥   Úregister_leaf_namez?OutputGraph.register_attr_or_module.<locals>.register_leaf_name£  sƒ   ø€ Ø×,Ñ,Ð4Ü(Ð)PÓQÐQØ!×AÑAÀ&È)ÓT�
Ø"˜V 1 Y KÐ0�Ø6@�×)Ñ)¨(Ñ3Ü˜f¤kÔ2ð "ð ×9Ñ9Ü#×3Ñ3°J·O±OÓDòð 3r¤   Ú_parametersÚ_buffers)"rS   rQ  r‚   r‹  r   r  rV  rÝ   rb   rÞ   r   rŸ  r¡  rS  r¾   r  r  rW  rR   rY  rQ   Ú	NN_MODULEÚSymIntÚSymFloatr    r	  r  r˜  r  rs   rG  r  Únamed_parametersÚnamed_buffers)rø   r#  r  r$  r0  r  r  rG  r@  rç   r:  r
  r®  s   `` `      @@@r¥   Úregister_attr_or_modulez#OutputGraph.register_attr_or_module  sÚ  ý€ ô   ¨¯©Ô4ô #×(Ñ(¨¯©¸&ÑLÀGÑLÐLä�w“-ˆØ˜7Ñ"Ü Ð!GÓHÐHØ˜Ñ"ˆÜ�fÔ/Ô0Ü Ø>¸v¸hÐGóð ô �fœeŸl™lÔ+Ø×(Ñ(ˆFØ×&Ñ&Ô(ð ×)Ñ)�ð%¤cð %¬o÷ %ó %ôN ˜¤§¡§¡Ô0Ü˜f¤e§h¡h§o¡oÔ6Ü$Ø<¼TÀ&»\¸NÐKóð ñ Ü˜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                 ób  — | j                   j                  d«      }t        |«      }|sg i fS g }i }g |j                  ¢|j                  j                  «       ¢| j                  j                  j                  «       ¢}|�r@|j                  «       }t        |t        «      rKt        |j                  t        «      s!t        dt        |j                  «      › �«      ‚||j                  z  }Œn|| 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 }
| j0                  D �]Y  }t        |j2                  t        «      r2t        |j$                  t*        «      r|j$                  j,                  |v sŒQ|j$                  j,                  }|| j4                  d   vrt        d|› d�«      ‚||   D ]Ë  }|j$                  |
v rŒ|j$                  €t        d«      ‚|j$                  j6                  }||	vrU| j9                  |› d�«      }||	|<   |j;                  t=        d|¬	«      t?        |«      tA        «       t=        d
|¬	«      g«       |j$                  €t        d«      ‚|j$                  }t+        |	|   «      |
|<   ŒÍ �Œ\ ||
fS )Nrø   zx.items must be a list, got r±   rj  z' not found in co_varnameszx.source must not be NoneÚ_refÚ	LOAD_FAST©ÚargvalÚ
STORE_FAST)!rF  r�  rq   rå   Úsymbolic_localsÚvaluesr™  Ústore_attr_mutationsr	  rá   rÝ   rƒ   r  rü   rV  rW  r   rT   r
  r\   r  r`   Ú
local_namerà   Ú	graphargsÚ_examplerš  ÚindexrV  r‰  r<   r=   r8   )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Ü(Ð+GÌÈQÏWÉWËÀÐ)WÓXÐXØ˜Ÿ™Ñ �Øð ˜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Ô.ó- ð2 ˆØ35ÐØ—>‘>ó *	PˆCä˜3Ÿ<™<¬Ô.Ü˜sŸz™z¬;Ô7Ø—J‘J×)Ñ)¨[Ñ8àð Ÿ
™
×-Ñ-ˆIØ × 1Ñ 1°-Ñ @Ñ@Ü$ q¨¨Ð3MÐ%NÓOÐOØ  Ñ+ò P�à—8‘8Ð1Ñ1Øð —8‘8Ð#Ü(Ð)DÓEÐEØŸ8™8Ÿ>™>�Ø 7Ñ*Ø!%§¡Ø$˜+ TÐ*ó"�Jð )3�G˜HÑ%à×&Ñ&ä.¨{À9ÔMÜ-¨hÓ7Ü0Ó2Ü.¨|ÀJÔOð	ôð —8‘8Ð#Ü(Ð)DÓEÐEØŸX™X�
Ü1<¸WÀXÑ=NÓ1OÐ" :Ò.ò=Pð*	Pð` Ð.Ð.Ð.r¤   Ú
stack_popsc                 óZ  — |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 �]T  \  }}t        j                  ||«       t        |j4                  t6        «      r(|j4                  j8                  |k(  r|| j:                  u rŒ_||
v rŒdt<        j>                  dk\  r6t@        jC                  t        |«      rA|jD                  j                  |«       Œ­t@        jC                  t        |«      rtG        d	«      ‚t        |jH                  «      |jH                  |<   t        |t        «      r@|j                   €dnt#        |j                   «      }	|jJ                  j                  ||	f«       |j                  |«       �ŒW ||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)rW  Ú__instancecheck__r4   ÚWithExitFunctionVariablerV  )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£   r0   )é   é   z.variable should never be NULL in Python < 3.12)&Úprune_dead_localsrl  r‚   r§  rå   r  r4   ÚLazyVariableTrackerÚrealize_allrÝ   rn  Úvisitrà   r„   rq  r€   Útarget_valuesr¼   rs  rt  rm  rÜ   ÚcellvarsÚfreevarsrV  r  r
  r`   rY  r›  ÚsysÚversion_inforW  rm  rr  rV  rp  ru  )rø   r¢  rj  Ústack_valuesrU  ro  ÚirÂ   rp  rw  Ú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Øô ×)Ñ)¬,¸Ô:Ü(ØHóð ô $' t×'8Ñ'8Ó#9ˆD×Ñ˜aÑ Ü˜!Ô4Ô5àŸ/™/Ð1‘B´u¸Q¿_¹_Ó7Mð ð ×$Ñ$×+Ñ+¨Q°Ð,>Ô?Ø×Ñ Ö"ðM&	#ðP ˜TÐ!Ð!r¤   ró   c           
      ó|  — | j                   €t        d«      ‚t        j                  �ddlm}  || j                  «       t        j                  s| j                   |urt        d«      ‚| 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t        d«      ‚| j1                  |	|	|u r|nd«      \  }
}|j#                  |
«       |j#                  |«       t3        |	j.                  «      D ]  }|j5                  |	|j6                  ¬«       Œ! |	j8                  }	|	�Œª| j:                  j=                  |«       | j?                  |«       | j@                  r#ddl!m"} | j?                   |«       «       d| _         | jF                  r| jH                  rt        d«      ‚| j?                  | jF                  «       | jK                  | j                   «      \  }}| j?                  |«       | jM                  «        | jN                  jQ                  «       D ��ci c]  \  }}|tS        |«      “Œ }}}tU        |«      }ddl+m,} t'        | jZ                  «      dkD  rÖg }| j]                  d«      | _/         |ta        | jZ                  «      d¬«      }| jc                  d|«      }te        | j                   ||¬«      }|jg                  |ji                  |d«      «       |jg                  tk        dd«      «       |j#                  |jm                  | j^                  «      «       | j?                  |«       |D ��cg c]  }|D ]  }|‘Œ Œ }}}d}d}| j                   |u �r0|�r-t-        d„ |D «       «      �rt-        d„ |D «       «      �rt'        to        |«      «      t'        |«      k(  rç| j:                  jq                  «       rÍ|jr                  sÁ| jt                  sµ|d   jv                  s¦|d   jx                  s—te        | j                   «      }| j{                  ||«       | j}                  |t        t3        |«      «      |«      \  }} | j?                  g |¢|j�                  «       ¢tƒ        d«      ¢t%        dt'        |«      ¬«      ‘| ¬«       �n+| j]                  d«      }te        | j                   |||¬«      }!| j…                  |||!d«       i }"|!j†                  jQ                  «       D ]'  \  }}#|#dkD  sŒt‰        |tŠ        tŒ        f«      rŒ#d|"|<   Œ) te        | j                   |||"|¬ «      }$| j…                  |||$d«       tŽ        j�                  j                  j’                  �rC|�r@t'        |«      dk(  �r1|d   }%t•        |%tŽ        j�                  j–                  j˜                  «      �rý|%jš                  tŽ        j�                  jœ                  jž                  u �rÌ|%jP                  d   }&|%jP                  d   }'t•        |&tŽ        j�                  j–                  j                   «      st        d!«      ‚i }(|$j¢                  j¥                  «       D ]b  })t•        |)tŽ        j�                  j¦                  j¨                  «      st        d"t«        |)«      › �«      ‚|)j¬                  }*|)j®                  |(|*<   Œd | j°                  j²                  }+tµ        |&jP                  «      D ]¦  \  },}%|%|(v rt·        d|(|%   «      |+|,<   Œ|%j¸                  �@t»        |%j¸                  d#d«      x}-r't»        |-d$d«      rt·        d%|%j¸                  «      |+|,<   Œi|%j½                  «       rt·        d&|%j¿                  «       «      |+|,<   Œ—t        d'|%› d(|,› �«      ‚ 	 |'j¿                  «       | j°                  _`        g }/d}0tÇ        | jÈ                  «      dk7  st'        |$j¢                  «      dk7  r‹| j}                  ||$jË                  «       |«      \  }}0|/jg                  |«       t'        |$j¢                  «      dk7  r#|/j#                  |$jm                  |«      «       d}n+|/j#                  t%        d/«      «       n| jÍ                  «        | j?                  |/|0¬«       | j?                  |$j�                  «       |$jÏ                  «       ¬«       | j?                  t%        d0t'        |«      |d   jÐ                  z
  ¬«      g«       d}1d}2tµ        |«      D �]Ä  \  }3}t'        |jÒ                  «      }4|3dk7  r|4|jÐ                  z  }4|4dk(  r)| j?                  t%        d0d¬«      gtƒ        d«      ¢«       n;|2|4z  }2| j?                  tÕ        «       gt×        |1|2«      ¢tƒ        d«      ¢«       |1|4z  }1|3t'        |«      dz
  k(  sŒ«te        | j                   «      }5i }6| j                   jØ                  jQ                  «       D ]~  \  }7}8t•        |8j¸                  tŒ        «      sŒ!|8j¸                  jÚ                  |7k(  sŒ;|5jÝ                  |5jß                  |7«      «       t'        |jÒ                  «      t'        |6«      z   |6|7<   Œ€ | j?                  |5j�                  «       t%        d0t'        |6«      ¬«      t%        d1d¬«      gz   «       |jÒ                  já                  |6«       �ŒÇ | j?                  t%        d/«      t%        d0t'        |«      ¬«      gtã        |d   jÐ                  dz   «      ¢«       |r|r| j?                  t%        d2|¬3«      g«       tŽ        j�                  j                  jä                  d4v rc| jç                  d¬5«      }9|9rOtŽ        j�                  j                  jä                  d6k(  rté        jê                  d7|9› �«       |S tí        d7|9› �«      ‚|S c c}}w c c}}w # tÂ        $ r }.tÅ        d)d*|'› �d+d,d-g|.¬.«       Y d}.~.�ŒEd}.~.ww xY w)8aÍ  
        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.
        Nr)  r   )Ú_finalize_spec_wiringz7root_tx must be tx when nested_graph_breaks is disabledTzCOMPILING GRAPH due to %s©rq  é   ÚCOPY_FREE_VARSr¸   ©rd  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrì   )Úcan_restore)r€  Úblocks     r¥   r‚  z/OutputGraph.compile_subgraph.<locals>.<genexpr>Ë  s   è ø€ ÒK¨u�u×(Ñ(×*ÑKùó   ‚z3all blocks in cur_tx.block_stack must be restorable)Úis_graph_breakr0   )Úcreate_breakpointFz)export does not support pregraph_bytecode©ÚdisableÚrandom_valuesz.do not trace into Dynamo rng recovery function©ró   Ú__gen_rand_values)rc  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)r€  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©r€  r  s     r¥   r‚  z/OutputGraph.compile_subgraph.<locals>.<genexpr>9  s   è ø€ Ò= a�A—K‘K—MÑ=ùr‰  rž  é   ÚUNPACK_SEQUENCE)Úpycoder•   )Útempvarsrc  z#flat_returns must be a ListVariablez3graph output value must be a GraphOutputEntry, got r  Úis_inputr–   r—   z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.)rL  rM  rN  rO  Úfrom_excÚPOP_TOPÚ
BUILD_LISTÚLIST_EXTENDÚDELETE_FASTrS  )Ú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: )wr›  rV  r1   rÊ  rË  r�  rX  Únested_graph_breaksrA  Úcompile_subgraph_reasonrß  rï   Údebugrz  r{  Úprefix_instsÚopnamerà   r<   r  rš  r!  ÚallÚblock_stackr  r–  Úexitrõ   rÓ  r™  Úprune_dead_object_newÚadd_output_instructionsr¾  Úbytecode_transformationr‹  rë  rQ  ri  Úcleanup_graphr	  r  ry   r  Ú
decoratorsr�  rÿ   rV  rê  r  rD  rC   r‰  Úload_function_namer:   Úcreate_storerÜ   Úis_emptyÚdebug_localsrí  rq  rr  Úcodegen_cellsÚcompile_and_call_fx_graphrü   rŠ  r?   Úcodegen_suffixÚusesrv   rd   r`   rÞ   rf  Úlog_graph_in_out_metadatarÝ   r4   ÚNamedTupleVariableÚ	tuple_clsÚfunctional_exportÚExportTracerOutputÚListVariableÚgraph_outputsrW  ÚcodegenÚGraphOutputEntryrW  Úvariabler\  r‹  rz  r§  rÀ   r
  rÌ   Úis_python_constantr  r{  r�   rI   rl   r‘   Úgraph_output_varsÚrun_compiler_collectiveÚ
get_pycoderm  rp  r;   r7   rV  rY  Úappend_outputÚcreate_loadÚupdater>   Úside_effect_replay_policyr  Úwarningsr¡  r&  ):rø   r¢  ró   rj  r�  r¦  ÚinstÚall_stack_valuesÚall_stack_locals_metasÚcur_txr|  rU  rˆ  r‹  r_  rc  r:  r  Únn_modules_proxiesÚrootr�  Úrandom_calls_instructionsÚrand_fnÚrand_fn_namer¿  Úvalsr  Ústack_values_flatÚstored_graph_output_varÚgraph_output_varÚcell_cgÚinstructionsr™  Úpass1rš  rÔ  Úpass2r  Úflat_returnsr{  Úvt_to_graph_out_idxrÂ   rÁ  rz  Úidxr
  ÚerÙ  Úsubgraph_pycodeÚ	start_idxÚend_idxr}  Ún_valsÚroot_cgÚunmodified_locals_namesr  r  Úside_effect_refss:                                                             r¥   Úcompile_subgraphzOutputGraph.compile_subgraph…  si  € ð* �<‰<ÐÜ Ð!;Ó<Ð<ô
 ×ÑÐ*ÝMá! $§.¡.Ô1ä×)Ò)à�|‰| 2Ñ%Ü$ØMóð ð
 	×'Ñ'Ô)à'-ˆÔ$ØˆÔä�	‰	Ð-¨vÔ6ð +-ˆÜ×Ñ˜wÒ&ØŸ™×1Ñ1ò 	9�Ø—;‘;Ð"2Ò2Ø ×'Ñ'Ü*Ø,Ü # D§L¡L×$=Ñ$=¸mÑ$LÓ Môõð !×'Ñ'¬¯	©	°$«Õ8ð	9ð Ðà!#ÐØ35ˆØÐ äÑK¸×8JÑ8JÔKÔKÜ$ØIóð ð "&×!BÑ!BØ f°¡l™
¸ó"ÑˆL˜$ð ×#Ñ# LÔ1Ø"×)Ñ)¨$Ô/ô " &×"4Ñ"4Ó5ò F�Ø—
‘
˜6°&×2DÑ2D�
ÕEðFð —]‘]ˆFð# Ñ ð( 	×Ñ×/Ñ/°Ô3à×$Ñ$ \Ô2à×)Ò)ÝBà×(Ñ(Ñ):Ó)<Ô=Ø-2ˆDÔ*à×!Ò! d§k¢kÜ Ð!LÓMÐMØ×$Ñ$ 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Ô+Ø#'×#AÑ#AØ”DœÐ"3Ó4Ó5°tó$Ñ ˆL˜&ð ×(Ñ(ðà!ðð ×-Ñ-Ó/ðô ! “^ð	ô
 'Ð'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ôô -Ð-RÓSÐSàFHÐ'Ø!&×!4Ñ!4×!;Ñ!;Ó!=ò D˜Ü)Ø!¤5§=¡=×#8Ñ#8×#IÑ#Iô ô #1Ø"UÔVZÐ[`ÓVaÐUbÐ có#ð ð 5:·N±N˜Ø8=¿¹Ð+¨HÒ5ðDð *.×)=Ñ)=×)PÑ)PÐ&Ü#,¨\×-?Ñ-?Ó#@ò ™˜˜RØÐ!4Ñ4Ü6FØ +Ð-@ÀÑ-Dó7Ð.¨sÒ3ð ŸI™IÐ1Ü+2°2·9±9¸fÀdÓ+KÐ!K Ð!KÜ '¨°
¸EÔ Bä6FØ '¨¯©ó7Ð.¨sÒ3ð  ×2Ñ2Ô4Ü6FØ *¨B×,AÑ,AÓ,Có7Ð.¨sÒ3ô #1Ø"@ÀÀÀKÐPSÈuÐ Uó#ð ð%ð*Ø8@×8SÑ8SÓ8U˜×,Ñ,Ô5ð  ˆFØ"ˆOÜ˜4Ÿ:™:Ó&¨!Ò+¬s°5×3FÑ3FÓ/GÈ1Ò/LØ04×0NÑ0NØ˜×/Ñ/Ó1°4ó1Ñ-�˜oð —‘˜lÔ+ä�u×*Ñ*Ó+¨qÒ0Ø—M‘M %×"4Ñ"4Ð5EÓ"FÔGØ.2Ñ+à—M‘MÔ"4°YÓ"?Õ@ð ×,Ñ,Ô.Ø×(Ñ(¨¸Ð(ÔHØ×(Ñ(Ø×&Ñ&Ó(°×1AÑ1AÓ1Cð )ô ð 	×$Ñ$ä"Ø ÜÐ-Ó.Ð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óð ð
 &Ð%ùóe

ùóZ OøôF 2ò Ü%Ø$^Ø&FÀxÀjÐ$Qð!ð !jØ Rð#ð &'÷ó ûðús$   Ë$rÐrár ò	r;òr6ò6r;r{  c                 ó$  — | j                   j                  rÞd}|}|�»t        t        |j	                  «       «      «      }|D ]]  }|| j
                  u r!|j                  |j                  |«      «       Œ2|j                  st        d«      ‚ ||j                  |   «       Œ_ |j                  t        t        |«      «      «       |j                  }|dz  }|�Œ»|j                  t        d|¬«      «       y |j                  t        dd¬«      «       y )Nr   zAcur_tx.post_prune_cell_and_freevars must be set for nested framesr0   rž  r…  )r¤  rõ   r¼   Úsortedr~  r›  rÆ  Úcreate_load_closureÚpost_prune_cell_and_freevarsrV  r9   r  rÓ  r<   )rø   r¢  r{  Útx_cntrÎ  ry  Úcells          r¥   r´  zOutputGraph.codegen_cellsL	  s  € à×'Ñ'×3Ò3ØˆFØ79ˆFØÐ$ô !¤¨×(@Ñ(@Ó(BÓ!CÓD�Ø$ò F�DØ §¡Ñ-Ø×(Ñ(¨×)?Ñ)?ÀÓ)EÕFà%×BÒBÜ"0Ø có#ð ñ ˜6×>Ñ>¸tÑDÕEðFð × Ñ Ô!3´C¸³MÓ!BÔCØŸ™�Ø˜!‘�ð% Ñ$ð& ×ÑÔ/°À&ÔIÕJà×ÑÔ/°À!ÔDÕEr¤   r|  Úlog_side_effectsc                 óX  ‡‡	— | j                   j                  ‰«       | j                  r“| j                  rt	        d«      ‚| j                  j                  «       D ]_  \  }} ‰|«       | j                  €t	        d«      ‚‰j                  ‰j                  | j                  «      «       ‰j                  |«       Œa 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 )Nz.backward_state is not supported in export modez>backward_state_var must not be None when backward_state is setc                  ó   •—  ‰ ‰«      S rì   r£   )r{  Ú	debug_vars   €€r¥   r|  z,OutputGraph.codegen_suffix.<locals>.<lambda>„	  s   ø€ ¡R¨	£]€ r¤   Fr�  )Úvalue_from_source)r™  Úcodegen_save_tempvarsrí  rQ  rV  r  rï  rÆ  rÇ  Ú
store_attrr1   Úreplay_side_effectsÚcodegen_hooksr³  rƒ  Úextend_outputr:   r  r<   r´  Úrestore_stackÚcodegen_update_mutated)
rø   r¢  r|  r{  rî  r:  r  r  rd  rñ  s
      `     @r¥   r¶  zOutputGraph.codegen_suffixh	  su  ù€ ð 	×Ñ×/Ñ/°Ô3Ø×ÒØ�{Š{Ü$Ð%UÓVÐVØ!×0Ñ0×6Ñ6Ó8ò $‘	��cÙ�3”Ø×*Ñ*Ð2Ü(ØXóð ð × Ñ  §¡°×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t        d«      ‚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)
        z-should_exit must be True before cleanup_graphÚcreation_timestampNr   )rß  rV  rü   r‘   rª  rU  rá   rÞ   rî  rÓ  Úpairwiser#  re  Ú_set_grad_enabledr¼   r  Ú_erasedÚ
erase_node)rø   rª  rè   rã  Únode1Únode2s         r¥   r®  zOutputGraph.cleanup_graph�	  s#  € ð ×ÒÜ Ð!PÓQÐQÜ�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¥   r|  z,OutputGraph.bypass_package.<locals>.<lambda>¼	  s   € Ø1Ø"ñ!€ r¤   c                  ó   •— d‰i‰ ¥S )NÚ_reasonr£   )r  ró   s   €€r¥   r|  z,OutputGraph.bypass_package.<locals>.<lambda>À	  s   ø€ à˜6ð ð ð € r¤   ©Úmetadata_fnÚ
payload_fn)rž  rÞ   rf  r1   Ústrict_precompiler2   ÚPackageErrorrï   ÚwarningÚ_loggingÚtrace_structuredÚbypass_current_entryr“  s    ``r¥   r”  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 )NrW  )r‘   rª  rU  r�  rÝ   rÞ   rÃ  r!   Úshaperº   Úreprr:  )rø   Úretrè   rW  rš   Úss         r¥   Úget_graph_sizes_structuredz&OutputGraph.get_graph_sizes_structuredÉ	  sŽ   € Ø*,ˆØ—J‘J×$Ñ$ò 	VˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)EÕFØ$×*Ñ*�ØPTÖ!UÈ1¤z°!´SÔ'9¡!¼tÀA»wÑ"FÒ!U��D—I‘I’ð		Vð
 ˆ
ùò "Vs   Á-$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 =====
rW  z: r¶  FTz (concrete): )r‘   rª  rU  r�  rÝ   rÞ   rÃ  r!   r  r:  r¼   rº   rà   rK  rè   Úhint)	rø   r:  Úgraph_sizes_strrè   rW  rš   Úconcrete_sizeÚ
has_symintÚszs	            r¥   Úget_graph_sizeszOutputGraph.get_graph_sizesÒ	  s  € Ø7ˆØ˜V D 6¨Ð2Ñ2ˆØ—J‘J×$Ñ$ò 	ˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)EÕFØ$×*Ñ*�Ø d§i¡i [°´5¸³;°-¸rÐ#BÑB�Ø "�Ø"�
Øò �BÜ! "¤cÔ*Ø%×,Ñ,¨RÕ0Ü# B¬¯©Ô5Ø%)˜
Ø%×,Ñ,¨R¯W©W¯\©\Õ:áðò "Ø'Ø#Ÿy™y˜k¨´u¸]Ó7KÐ6LÈBÐOñšð#	ð( Ð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_stateë	  s¦   è ø€ ð
 "×1Ñ1×@Ñ@×PÑPÓRÐØ<>ÐØ×ÑÐ#7ÐÔ8ð	à× Ñ ×/Ñ/×BÑBÐCUÔVÛð × Ñ ×/Ñ/×BÑBÜ,Ð-AÓBõøˆD× Ñ ×/Ñ/×BÑBÜ,Ð-AÓBõüs   ‚9C¼)B Á%/CÂ0CÃCc                 ó‚  ‡— | j                   }|€t        d«      ‚|j                  xŠ��~‰j                  �€p‰j                  }t
        j                  d‰j                  «       t        j                  j                  dd„ ˆfd„¬«       |j                  }t        |«      dk7  r)t        dj                  d	j                  |«      «      «      ‚t        |j!                  «       «      j#                  |j%                  «       t        j&                  j)                  «       z  «      5  t+        d
d¬«      5  d g|j-                  «       z  }t/        j0                  |‰j                  |¬«       |‰_        d d d «       d d d «       |j2                  j5                  «        t6        j8                  ‚y y # 1 sw Y   Œ=xY w# 1 sw Y   ŒAxY w)Nr)  zcompiler_collective %sr  c                  ó   — dddœS )NÚcompiler_collectiveÚstringr  r£   r£   r¤   r¥   r|  z5OutputGraph.run_compiler_collective.<locals>.<lambda>
  s   € Ø1Ø (ñ%€ r¤   c                  ó8   •— ‰ j                   j                  «       S rì   )Úlocal_stateÚrender)Údss   €r¥   r|  z5OutputGraph.run_compiler_collective.<locals>.<lambda>
  s   ø€  2§>¡>×#8Ñ#8Ó#:€ r¤   r  r0   z&Expect only one device type but got {}ú+r)  Tr   )Úgroup)r›  rV  Údistributed_stateÚ
all_statesÚ
compile_pgrï   Úinfor,  rÞ   r  r  Ú_device_typesr  r¸  r·  rE   rá   rd  Úrankrï  Údevice_countrn   rš   ÚdistÚall_gather_objectÚspeculation_logr—  r2   Ú CompileCollectiveRestartAnalysis)rø   r¢  r3  Údevice_typesr2  r.  s        @r¥   rÄ  z#OutputGraph.run_compiler_collectiveý	  s‡  ø€ Ø�\‰\ˆØˆ:Ü Ð!;Ó<Ð<Ø×&Ñ&Ð&ˆBÑ3¸¿¹Ñ8MØŸ™ˆJä�H‰HÐ-¨r¯~©~Ô>Ü�N‰N×+Ñ+Øñó ;ð ,ô ð &×3Ñ3ˆLÜ�<Ó  AÒ%Ü$Ø<×CÑCØŸ™ Ó.óóð ô )¨×)9Ñ)9Ó);Ó<×CÑCØ—O‘OÓ%¬×(9Ñ(9×(FÑ(FÓ(HÑHóñ
+ô Ð2È$ÔOñ	
+ð *.¨°·±Ó1BÑ(B�
ä×&Ñ& z°2·>±>ÈÕTà *�”÷
+÷ 
+ð ×Ñ×$Ñ$Ô&Ü×6Ñ6Ð6ðC 9NÐ3÷&
+ð 
+ú÷ 
+ð 
+ús$   Ä!F5Ä/>F)Å-F5Æ)F2	Æ.F5Æ5F>Ú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t        dt        |«      › �«      ‚|j                  €Œ¢t!        |dfg«      }|| j                   z  sŒÀ|j"                  rt%        |j"                  «      n|j&                  j                  j(                  }|j*                  j,                  j/                  |«       �Œ( |j*                  j,                  r'd|j*                  _        t3        j4                  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]
        Nr0   ©ÚTensorVariablerW  z/expected example_value to be a FakeTensor, got Tz3autograd.grad consumed grad_fns of returned tensors©Úrestart_reason)rå  Úvariables.tensorr@  rÝ   Úrequires_gradr/  rè   rU  r�  rÞ   rÃ  Úfake_tensorr!   rV  rW  rß   rê   r
  r¾   r   r:  r:  Úautograd_grad_leaked_tensorsrà   Úgraph_break_on_autograd_gradr2   ÚAutogradGradRestartAnalysis)rø   r=  r¢  r@  r  rE  Ú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Ü$ØEÄdÈ;ÓFWÐEXÐYóð ð ×"Ñ"Ð*Øô "<¸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.
        r0   r?  Nc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrì   r£   )r€  ÚinpÚtainted_nodess     €r¥   r‚  zHOutputGraph._check_requires_grad_intermediate_outputs.<locals>.<genexpr>i
  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.rK  Tz:source-less requires_grad_() intermediate leaked as outputrA  )rC  r@  rÜ   r¶  rÝ   r
  râ   r/  rè   r‘   rª  ÚanyÚall_input_nodesrD  rŸ  rI   r:  Úgraph_break_on_requires_grad_r2   ÚRequiresGradRestartAnalysis)	rø   r=  r¢  r@  r  rè   r  rÓ   rO  s	           @r¥   Ú)_check_requires_grad_intermediate_outputsz5OutputGraph._check_requires_grad_intermediate_outputsP
  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t        d«      ‚‰ j                  «        t        ‰ j                  «      dk(  rt        |«      dk(  rg dfcddd«       S t        dd¬«      }t        |t        «      st        d	t        |«      › �«      ‚t        |t         «      st        d
t        |«      › �«      ‚‰ j#                  ||«       ‰ j%                  ||«       ‰ j'                  dd‰ j(                  j+                  t-        d„ |D «       «      «      fi «      }‰ j/                  «       }|j1                  |«       ‰ j(                  j3                  ||«       t4        j6                  s¿t9        d«      5  t;        |«      D ]L  }t=        ||«      }	t        |	t>        j@                  «      sŒ*tC        |	‰ jD                  |‰ jF                  ¬«       ŒN ‰ jI                  «        tC        t?        j@                  |‰ j                  «      ‰ jD                  |‰ jF                  ¬«       ddd«       ‰ jK                  «        t        ‰ j                  «      }
tL        d   dxx   |
z  cc<   ‰ jO                  «        ‰ jP                  jS                  «        tU        |‰ j                  «      Š$ddl+m,}  |‰$«       ‰ jZ                  r(‰ jZ                  D ]  }t]        ‰$|t=        ||«      «       Œ ‰ j^                  D ]
  } |‰$«       Œ ta        ‰$jc                  «       d«      �%‰ je                  d‰$jg                  ddd¬«      ¬«       ‰ jh                  �|‰$_5        ‰ jl                  ‰$_6        ‰ jn                  jq                  «       ‰$jr                  d<   ‰ jt                  ‰$jr                  d<   |‰$jr                  d<   ‰ jv                  �‰ jv                  ‰$jr                  d<   tx        j{                  dt}        |‰$ddd¬«      «       t         j~                  j�                  dˆ fd„ˆ$fd„¬«       ‰ jƒ                  «        ‰ j„                  j†                  }|€t        d «      ‚|‰ _D        ‰ jF                  s_ddlEmFc m} |j�                  d¬!«      5  t         j�                  j“                  |jD                  ¬"«      }ddd«       ‰ j„                  _C        ‰$j                  j•                  «        ‰ j—                  «       5  ‰ j™                  ‰$‰ j›                  «       «      Š#ddd«       dd#lNmO} t        ‰#|«      s&t        t=        ‰#d$d«      |«      rR‰#j                   d%k(  rCt        ‰#|«      r‰#n‰#j¢                  }|j¥                  |«       t        ‰#|«      s|j¦                  Š#‰ jF                  s|j¨                  j«                  «        ‰ jh                  �‰ jh                  j­                  |‰#«       ‰ j®                  r	‰#Š%ˆ%fd&„}|Š# |‰#d'¬(«      Š#tL        d   d)xx   dz  cc<   |jD                  €t        d*«      ‚|jD                  j°                  x}�r5g Š'i Š&‰ j²                  D �cg c]  }|j´                  ‘Œ }}|D ]·  }|j·                  |j´                  «      }t¹        jº                  |j¼                  «      j¿                  «       }tÁ        «       }tÃ        jÄ                  ||j¼                  |gd«      }tÆ        j{                  d+|«       ‰'jÉ                  tË        jÌ                  |fd,„|«      |f«       Œ¹ t         jÎ                  j                  d'¬(«      d-tÐ        d.tÐ        d/tÐ        fˆ#ˆ$ˆ ˆ&ˆ'fd0„«       }‰ jÓ                  ||«       n‰ jÓ                  |‰#«       ‰ jÔ                  €t        d1«      ‚t×        ‰ jÔ                  «      Š"tÙ        «       r¿‰"jÛ                  ˆ"fd2„«       g }tÝ        jÞ                  «       D ]<  } |‰"«       ‰ já                  «       }‰"jã                  |«       |jÉ                  |«       Œ> |D ]"  }‰"jå                  ‰"jç                  |«      «       Œ$ ‰"jé                  t        tÜ        «      d«       ‰"jë                  «        tí        ‰ j²                  «      D ](  \  } }!|!j´                  ‰ jî                  jð                  | <   Œ* ‰"jó                  |«       ‰"jõ                  «       ‰"j÷                  «       fcddd«       S # 1 sw Y   �ŒÛx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)3až  
        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

        Returns a tuple of (instructions, pycode) where pycode is a string
        representation of the generated Python code if generate_pycode_prologue
        is enabled, otherwise None.
        r0   rŒ  z2should_exit must be True before call_user_compilerr   NÚ__compiled_fnT)Ú	with_uuidzrv must be a list, got z#root must be a FakeRootModule, got rÙ  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrì   )r/  r–  s     r¥   r‚  z8OutputGraph.compile_and_call_fx_graph.<locals>.<genexpr>À
  s   è ø€ Ò5OÀq°a·j±j·lÑ5Oùr‰  r-   )rQ  Ú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)r^  r_  ÚcoloredÚdynamo_output_graphc                  ó(   •— d‰ j                  «       iS )NÚsizes)r  r÷   s   €r¥   r|  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>  s   ø€ ˜ $×"AÑ"AÓ"CÐD€ r¤   c                  ó,   •— ‰ j                  ddd¬«      S )NFTr\  )Úprint_readabler`  s   €r¥   r|  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>  s   ø€  2×#4Ñ#4Ø!&°tÈDð $5ó $€ r¤   )r  zold_fake_mode must not be Noner§  )rX  )Ú_LazyGraphModuleÚ__self__Ú_lazy_forwardc                  ó|   •— t         j                  j                  «       5   ‰| i |¤Žcd d d «       S # 1 sw Y   y xY wrì   )rÞ   re  ÚDisableTorchFunctionSubclass)r  r  Úreal_compiled_fns     €r¥   Ú_tf_disabled_wrapperzCOutputGraph.compile_and_call_fx_graph.<locals>._tf_disabled_wrapperk  s9   ø€ ÜŸ™×>Ñ>Ó@ñ AÙ/°Ð@¸Ñ@÷A÷ Aò Aús    2²;z"do not trace Dynamo-compiled graphr�  Úunique_graphsz(old_fake_mode.shape_env must not be Nonez:Compiling backend specialized graph with specialization=%sc                 ó   —  |||    «      S rì   r£   )rÞ  r  Úcheck_fns      r¥   r|  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)	rX  Úpatch_source_specializationr
  rr  rU  rü   r   rÅ  Úcall_user_compiler)
r  r  rr  rt  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	r)  c                  ól   •— ‰ j                  t        j                  j                  j                  d«      S )NÚstore_user_object_weakrefs)rz  rÞ   rf  Úgraph_bytecode_inputsrž   )r{  s   €r¥   r|  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>Á  s(   ø€ ˜B×/Ñ/ÜŸ™×;Ñ;×DÑDØ4ó€ r¤   )|rÞ   rO  r   Úclear_framer¯  r�  rß  rV  rÄ  rl   r‘   r  rA   rÝ   rü   rW  r  rT  rK  rË  rŸ  Ú
create_argr¼   Ú
dedup_passr  Ú_maybe_preserve_original_metar1   Údo_not_emit_runtime_assertsrn   ÚdirrÌ   r   r-  r-   rX  rQ  Úremove_unused_get_attr_nodesÚremove_unused_graphargsrm   Ú&remove_tensorify_specialized_graphargsrÃ  r—  r$   Údce_extra_outputsr[  rö  r  rÚ  r¸  Ú
parametersr”  rh  rž  Ú_backend_idr¤  ré  r!  rU  rÈ  r¼  Úgraph_code_logr¥  rw   r  r  r˜  rÅ  rû  Ú_old_fake_moderÁ  ra  rÂ  rÃ  rÄ  Úlintr&  rv  rÉ   Útorch.fx._lazy_graph_moduleri  rž   rj  Úforce_recompiler$  Úfake_tensor_converterÚclear_non_cpu_constantsÚadd_backend_idrã  ÚspecializationsrZ  r
  r\  ÚinspectÚ	getsourcerr  ÚstripÚRootGuardManagerr   ÚLAMBDA_GUARDrï   rà   rñ  rò  rf  r	   Úinstall_global_unsafer›  rC   rK   rƒ  rL   rW  rV  rˆ  rÆ  rÇ  r‡  Úpop_topr§  r‹  ry  Úmake_call_generated_coderŠ  rÅ  )(rø   r¢  r=  rÐ  r�  r:  Úoutput_nodeÚsub_gmsÚattrÚsubgraphÚncallsr[  Úsubgraph_nameÚregister_finalizerÚold_fake_moderú  Úbackend_fake_moderi  Úlazy_gmro  r’  ÚaÚsourcesrt  Úsource_indexÚcheck_fn_sourceÚunused_root_guard_managerrr  rz  Útmp_varsÚconstructorÚvar_namerÞ  rd  r{  rw  rÈ   rn  rx  ry  s(   `                                 @@@@@@r¥   rµ  z%OutputGraph.compile_and_call_fx_graph�
  s–  þ€ ô" �]‰]×)Ñ)×5Ñ5Ó7ñ {	:Ý+à×#Ò#Ü$ØHóð ð ×(Ñ(Ô*Ü˜4Ÿ:™:Ó&¨!Ò+´°B³¸1²Ø˜4�x÷{	:ñ {	:ô ˜_¸Ô=ˆDä˜b¤$Ô'Ü$Ð'>¼tÀB»x¸jÐ%IÓJÐJÜ˜d¤NÔ3Ü$Ð'JÌ4ÐPTË:È,Ð%WÓXÐXð
 ×:Ñ:¸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ØÐ$Ü$Ð%EÓFÐFà"/ˆDÔØ—;’;ß9Ð9à—]‘]ÈE�]ÓRñ ô ).×(9Ñ(9×(HÑ(HØ"/×"9Ñ"9ð )Ió )Ð%÷ð& 2C�×$Ñ$Ô.à�H‰H�M‰MŒOØ×*Ñ*Ó,ñ QØ"×5Ñ5°b¸$×:MÑ:MÓ:OÓP�÷Qõ Eä˜+Ð'7Ô8Üœ7 ;°
¸DÓAÐCSÔTØ×(Ñ(¨OÒ;ô " +Ð/?Ô@ñ  à$×-Ñ-ð ð !×0Ñ0°Ô9ä! +Ð/?Ô@à")§/¡/�Kà—;’;ð
 ×3Ñ3×KÑKÔMà�|‰|Ð'Ø—‘×+Ñ+¨D°+Ô>ð ×3Ò3Ø#.Ð ôAð 3�á!ØÐ$HôˆKô �WÑ˜oÓ.°!Ñ3Ó.Ø×&Ñ&Ð.Ü$Ð%OÓPÐPØ"/×"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ð ×'Ñ'¨Ô-à×&Ñ&Ó(¨"¯-©-«/Ð9÷w	{	:ñ {	:÷Zñ ú÷vñ ú÷,Qñ Qüòx =÷u{	:ð {	:úsr   °AeÂDeÆ&5d+ÇA6d+ÉI eÒ2+d8ÓAeÔ !eÕEeÚeÚJeä+d5	ä0eä8e	ä=eåe	å
eåe 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 ©NrR  )r°  rU  ©rø   rè   s     r¥   rZ  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)rn   Ú_call_user_compiler)rø   rÈ   rÉ   s      r¥   rv  zOutputGraph.call_user_compileræ  sI   € ô Ø,Ø(Ø"&Ø Ø&<Ø%Nô
ñ 	@ð ×+Ñ+¨B°Ó?÷	@÷ 	@ò 	@ús   ’.®7c                 óø  — | j                   €t        d«      ‚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	}
dd
lm}m} t"        j0                  r	 ||«      }nt"        j2                  r ||«      }	  t5        «       t6        j8                  d|
› �«       t"        j:                  rt=        |«      } |||«      } t5        «       t6        j8                  d|
› �«       t?        |«      st        d«      ‚	 tc        ddi | jd                  ¥|tg        |j                  j                  «      tg        |«      dœ¥«       S # t@        tB        tD        f$ r ‚ tF        $ rº}| jH                  rCtK        | j                   |tM        jN                  «       «      jQ                  |jR                  «      d ‚tU        || jV                  jX                  dd|
› dt[        |«      › d| jV                  j]                  «       › �d|
› dt[        |«      › d�dg¬«       Y d }~�Œd }~wt^        $ r ‚ t`        $ rH}tK        | j                   |tM        jN                  «       «      jQ                  |jR                  «      d ‚d }~ww xY w)Nzcompiler_fn must not be Noner   ©r‡  Úcall_methodÚcall_moduler0   r¥  Ú_dynamo_sourcerR  rž   z<unknown compiler_fn>)Úinline_invoke_subgraphÚ!inline_single_use_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.rK  Údynamorµ  )Úop_countÚ
node_countÚinput_count)4rÄ   rV  r‘   rª  r«  rà   ru   r  rU  r
  rÂ  rÎ  Ú_param_name_to_sourcerÜ  Ú_source_to_user_stacksrN   rÈ  r1   Údebug_backend_overriderO   Údebug_inductor_config_overriderÎ   rž   Ú5torch._higher_order_ops.passes.inline_invoke_subgraphrÃ  rÄ  rð   r3   ÚINFOr%  r  Úcallabler   r   Ú
IndexErrorrG   rä  rF   r“  ÚcurrentframeÚwith_tracebackÚ__traceback__rJ   r›  r�  r¾   Úformat_frame_summaryrH   r'  r"   r¦  r  )rø   rÈ   rÉ   Útotr°  rè   Úplrd  rÄ   Úinductor_config_overrider:  rÃ  rÄ  rw  rß  s                  r¥   r½  zOutputGraph._call_user_compileró  sM  € ð ×ÑÐ#Ü Ð!?Ó@Ð@ØˆØˆØ—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Ü×5Ò5Ù2°2Ó6ˆBð"	8ØŒL‹Nœ7Ÿ<™<Ð+EÀdÀVÐ)LÔMÜ×(Ò(Ü,¨[Ó9�Ù% b¨.Ó9ˆKØŒL‹Nœ7Ÿ<™<Ð+BÀ4À&Ð)IÔJÜ˜KÔ(Ü$Ð%JÓKÐKð )ô< 	ØØ,ðØ—.‘.ðàÜ! "§(¡(§.¡.Ó1Ü" <Ó0ò	ô		
ð ÐøôQ /Ô0@Ä*ÐMò 	ð Ü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>I
 É
M9É'B/LÌM9Ì1AM4Í4M9c                 ód   — t         j                  j                  j                  rt	        | «      S i S rì   )rÞ   rf  r1   Úuse_graph_deduplicationrM   r÷   s    r¥   r€  zOutputGraph.dedup_pass]  s%   € Ü�=‰=×Ñ×7Ò7Ü,¨TÓ2Ð2àˆIr¤   Úsub_gmc                 óz   — t        || j                  d¬«      }||_        d|_        | j	                  ||d ¬«       |S )NT)Úrequires_suffixFrQ  )rs   r	  rž   Útorchdynamo_force_dynamicrO  )rø   r:  rÚ  Ú	next_names       r¥   ro  zOutputGraph.install_subgraphc  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ì   )rZ  Úexample)rø   rd  r+  s      r¥   rÉ   zOutputGraph.example_inputsl  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_nodesq  sN   € Ü˜4Ÿ:™:×0Ñ0°JÐ0Ó?ÈÔNò 	'ˆDÜ”4˜Ÿ
™
Ó#Ó$¨Ó)Ø× Ñ  Õ&ñ	'r¤   c                 ó$  ‡ ‡‡‡— ‰ j                   st        d«      ‚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.        j0                  d z  fd„}dt        j                  dd fˆ fd„}t3        «       Šdt2        t.        j0                     dt&        j4                  t&        j6                  z  dd fd„Šg }‰ j8                  D �]×  } ||«      d u}|r|j                  rŒ|j;                  |«       Œ/|j                  s&t=        |j>                  d   t@        «      s	 ||«       Œa|j>                  d   }	t=        |	t@        «      rŒ�t=        |j>                  d   jB                  t&        jD                  «      rÌ|j>                  d   jB                  }
|j>                  d   jF                  }t&        jH                  jJ                  jM                  |
«      sotO        |
jQ                  «       «      }|D ]Q  }tS        |jT                  |«      }tW        jX                  t&        j4                  t&        j6                  fˆˆfd„|«       ŒS �Œ~t[        t]        |j>                  d   jB                  «      «      r�Œ«|	j^                  �|	j^                  n|	jB                  } ‰‰|«       �ŒÚ |D ]+  } ||«      }|€Œ|‰vr	 ||«       Œ‰ja                  |«       Œ- y )Nz(should_exit must be True before finalizeÚ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)NTFrW  )	rÝ   r   ÚNoderU  r�  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   ©ÚSymTypesTrW  F)
Útorch.fx.experimental.sym_noderï  rÝ   rº   r“  rÔ   r   rç  rU  r�  )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‡  FrW  c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrì   r£   ©r€  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Ý   rU  r�  r¨  r  r  rW  )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²  )	rU  rà  rÝ   rÞ   rK  rè   ÚexprÚsympyÚSymbol)rè   rd  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 %srR  )rï   r¥  rU  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¤   rR  c                 ó   •—  ‰‰| «      S rì   r£   )Útr  r   s    €€r¥   r|  z5OutputGraph.remove_unused_graphargs.<locals>.<lambda>ü  s   ø€ Ñ.AÀ,ÐPQÓ.R€ r¤   )1rß  rV  r   rè   ÚArgumentrÔ   rç  Ú%torch.fx.experimental.symbolic_shapesrø  r–  rü   r‘   rª  r  rã  r«  r#  ÚoperatorÚgetitemrÞ   Ú_checkr  rÎ  rû  rü  rÜ   rK  r   r°  rà   rÝ   rU  r|   rà  ÚScriptObjectÚexample_strong_refr8  r9  Útracing_with_realr  Ú__obj_flatten__rÌ   Úwrapped_objÚpytreeÚtree_map_onlyr    rW  rE  Úremove)rø   rì  r÷  rø  rè   rý  rÿ  Úrecheck_placeholdersÚbinds_symbolrd  Úreal_script_objr=  Ú	flat_dictr�  Úfake_attr_valr  Úsymbolrñ  r  r   s   `                @@@r¥   r…  z#OutputGraph.remove_unused_graphargsv  sh  û€ ð ×ÒÜ Ð!KÓLÐLð	¤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   )ÚTensorifyStaterW  r:  c              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)ÚitemN)r#  )r€  Úus     r¥   r‚  zEOutputGraph.remove_tensorify_specialized_graphargs.<locals>.<genexpr>(  s   è ø€ Ò?¨q˜Ÿ™ FÕ*Ñ?ùs   ‚)Útorch._dynamo.symbolic_convertr  r‘   rª  rU  r�  rÝ   r!   Ú	item_memor  rè   Ú_exprr¨  rã  Úshould_specializer:  rü   Úreplace_all_uses_withr'   rÎ  )rø   r  rè   rW  r  s        r¥   r†  z2OutputGraph.remove_tensorify_specialized_graphargs  sñ   € õ 	Bà—J‘J×$Ñ$ó 	'ˆDØ ŸI™IŸM™M¨/Ó:ˆMä˜=¬*Õ5Ø!×+Ñ+Ñ7Ü˜M×3Ñ3×8Ñ8×>Ñ>ÀÕGÜÑ?°D·J±JÔ?Õ?Ø"×4Ñ4à!×+Ñ+×0Ñ0×6Ñ6×;Ñ;õô
 ˜dŸj™jÓ)ò (�AØ×+Ñ+¬L¸×9PÑ9PÓ,QÔRØ×$Ñ$ QÕ'ð(ð × Ñ  Ö&ñ	'r¤   r™  c                 óÊ   — | j                   j                  |«       t        |t        t	        d«      f«      st        d«      ‚| j                  j                  |«       d| _        y)a>  
        We call this on the creation of a new compiled subgraph that is inserted
        before user code.
        An optional pycode argument can be passed to add python codegen along with
        the bytecode. The generated python code should match the bytecode behavior
        from the `prefix` argument.
        Nz,pycode must be a list of python code or NoneT)	rÖ  r‰  rÝ   rü   rW  rV  r�  rà   rß  )rø   rF  r™  s      r¥   r¬  z#OutputGraph.add_output_instructions3  sS   € ð 	× Ñ ×'Ñ'¨Ô/Ü˜&¤4¬¨d«Ð"4Ô5Ü Ð!OÓPÐPØ×Ñ×!Ñ! &Ô)ØˆÕ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_fnS  s   ø€ ô ×)Ñ)¨$°	¸4ÀÀwÓOÐOr¤   N)r¸   r¼   r'  ÚCellTyper(  r˜  )rø   r:  r(  r  r)  s    ``` r¥   Úinstall_resume_function_globalz*OutputGraph.install_resume_function_globalC  so   ú€ ð ×ÒðPÜœuŸ~™~¨sÐ2Ñ3ðPä×#Ñ#÷Pð
 ×&Ñ& t¨XÕ6à×&Ñ&ØÜ×"Ñ" 4¨°DÓ9õr¤   c                 óè   — || j                   v rt        d|› d�«      ‚| 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.
        zglobal 'z' is already installedN)r»  rV  râ   rÞ  rà   ri   r  rG  )rø   r:  rÂ   s      r¥   r˜  z!OutputGraph.install_global_unsafe_  sb   € ð �4×)Ñ)Ñ)Ü  8¨D¨6Ð1GÐ!HÓIÐIØ×Ñ×"Ñ" 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»  r˜  ©rø   rF  rÂ   r:  s       r¥   Úinstall_global_by_idz OutputGraph.install_global_by_idl  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.
        )rA   r˜  r0  s       r¥   rD  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²  )r›  r	  r—  r÷  rÎ  r‘   rª  rU  rÃ  rÁ  r¼   r  rù  r™  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¤   r¡  c                 ó:   — | j                   j                  |«       y rì   )rÚ  rà   )rø   r¡  s     r¥   Úadd_graph_finalizerzOutputGraph.add_graph_finalizer£  s   € ð 	×#Ñ#×*Ñ*Ð+=Õ>r¤   rè   c                 óÔ   — |j                   dk(  r|j                  d   j                  S |j                   dk7  rt        d|j                   › d�«      ‚| j                  |j
                     S )z#Extract the non-fake example tensorr¥  rR  r  z(expected node.op to be 'get_attr', got 'rj  )r«  rU  rà  rV  r	  r#  r³  s     r¥   Úexample_value_from_input_nodez)OutputGraph.example_value_from_input_node¨  s\   € à�7‰7�mÒ#Ø—9‘9˜ZÑ(×0Ñ0Ð0Ø�7‰7�jÒ Ü Ð#KÈDÏGÉGÈ9ÐTUÐ!VÓ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                   €t        d«      ‚‰j                  ‰| «      }‰› d| › �}|‰j                   |<   t        ‰t        «      r-| ‰j
                  t        j                  |j                  «      <   y y rB  rC  rD  s      €€€r¥   rG  zHOutputGraph.add_fqn_info_for_inlined_modules.<locals>.register_leaf_name¹  sƒ   ø€ Ø×(Ñ(Ð0Ü$Ð%LÓMÐMØ×=Ñ=¸fÀiÓPˆJØ˜˜q  Ð,ˆHØ2<ˆD×%Ñ% hÑ/Ü˜&¤+Ô.ð ð ×5Ñ5Ü×/Ñ/°
·±Ó@òð /r¤   rH  rI  )r˜  r  r:  rs   r÷  rG  râ   r¾   r  rÏ  rM  Ú__func__Ú!og_module_named_parameters_fn_ptrrN  Úog_module_named_buffers_fn_ptr)rø   r9  r
  rG  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ú   )rE  rì   )rÆ   r³  )r¢  rŽ   rÆ   N)rÆ   r˜  )rÆ   rŽ   )Útmp)r   r•  )Œrž   rŸ   r    rû   rU   r¢   r§   r6   rÔ   r   r#   r	   r^  r   rü   rÞ   r_  r`  r   r  r¾   r  r   rX   r  r  r)  rA  rð  r‚   r¼   r   ÚProxyrI  rH  rÉ  rõ  r   r’  r”  r˜  rj  rS  rŸ  r¡  r³  r¹  rº   r¼  ÚGraphr‘   Úsetterr  rÁ  rç  r   rÃ  rû  rü  r   rÆ  rÈ  rË  rÎ  rñ  Úcontextmanagerr,   r   r×  rÙ  rÃ  rÄ  rû  r)   rX  rO  rh  r   r	  ri  r[  rè  rü  rþ  r   r  rl   r
  r  r  r  r  rV  r  Ústaticmethodr  r"  rO  r@   ri  rl  r  rò   rç  rC   r´  r¶  r®  r”  r  r   r&  rÄ  rK  rT  r  rµ  r°  r}   rZ  r-  r5   rv  r½  r€  ro  rÉ   r„  r…  r†  r¬  r'  r+  r˜  r1  rD  r4  r6  r8  r?  r£   r¤   r¥   r˜  r˜  €  sš
  … ñð Óð  ñ\Uà!ð\Uð   $Ñ&ð\Uð -ð	\Uð
 ð\Uð %Ð%6Ñ7ð\Uð ð\Uð ð\Uð ð\Uð ð\Uð $(¨¯©×(IÑ(IÑ#Jð\Uð Ð*Ñ+ð\Uð ð\Uð 
ó\Uð~ 38ò9VØ+/ð9Và	ˆc‰ó9Vðv¨Fð ¸#ð À*ó ð>Øð>Ø"%ð>à	ó>óó* 8ðDD°3ó Dð
 4:ñ	5Ø#ð	5Ø-0ð	5à	ˆs�E—H‘H—N‘NÐ"Ñ	#ó	5ð)¨%¯(©(¯.©.ó )ó*ð<!:¸TÀ#¹YÈÑ=Mó !:ðN >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ð
 ð ð ¨ò ó ðð.ØðØ,/ðà	�‰óð&pà—‘—‘ %§,¡,Ñ.°Ñ4ðpð ðpð ð	pð
 
ópðd]/Ø-ð]/à	ˆt�KÑ  $ v¨v ~Ñ"6Ð6Ñ	7ó]/ð~k"Ø-ðk"Ø;>ðk"à	ˆt�OÑ$Ð&9Ð9Ñ	:ók"ðb ñ	E&à'ðE&ð #ðE&ð ð	E&ð
 
Ð!Ñ	"óE&ðNFÐ ;ð FÀð FÈtó Fð8&Gà'ð&Gð ˜?Ñ+ð&Gð ð	&Gð
 ð&Gð 
ó&GóP1ñ> Sð ¸ð Àó ð4¨D°°d¸3À¹9±oÐ1EÑ,Fó ð Cð ¨Có ð2 ×Ñð cò ó ðó"%7ðN*ØÐ(Ñ)ð*Ø/Jð*à	ó*ðX>ØÐ(Ñ)ð>Ø/Jð>à	ó>ð@L:à'ðL:ð �Ñ!ðL:ð ð	L:ð
 
ˆt�KÑ  $ s¡)¨dÑ"2Ð2Ñ	3óL:ð\
 ð7˜d 2§7¡7™mò 7ó ð7ð ðE˜4 ™>ò Eó ðEð@Ø—.‘.ð@Ø26°v±,ð@à	ó@ðhØ—.‘.ðhØ26°v±,ðhà	óhðT˜D  e§h¡h×&:Ñ&:Ð!:Ñ;ó ð Sð °%·(±(×2FÑ2Fð È3ó ð  U§\¡\Ñ 2ó ó
'ó
Y0óv 'ðF EIñ Ø˜;Ñ'ð Ø15°c±¸TÑ1Að à	ó ð àðð �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¤   r˜  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ì   )rI  rJ  r%  r  rÙ  rL  rK  )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ì   )rL  r´  r‘   Ú_clear_nodesrÅ  rû  rX  r¢  )rø   rK  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¢   r˜  r¼   r	   r  r¾   r  rP  r£   r¤   r¥   rH  rH  Ø  su   … ØÓØ $Ó$Ø Ñ$Ó$ð *¨DÑ0Ó0Ø�3˜�8‰_˜tÑ#Ó#Ø�C˜�H‰~Óð HLñ.Ø1ð.Ø:=À¹*ð.à	ó.ô
Vr¤   rH  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.htmlrK  rÁ   r#  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#  rK  s    €r¥   Úencountered_compliant_opz8check_pt2_compliant_op.<locals>.encountered_compliant_op  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 opr–  ú rK  )ræ  râ   r1   Úonly_allow_pt2_compliant_opsrI   Úerr_epilogue)r#  rÓ   rK  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.r0   r   z:Encountered the non-overloaded torch.ops.OpOverloadPacket z that is not PT2 compliant. Fz*Error when attempting to resolve op packetr–  rK  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ÚOpOverloadPacketr¼   Ú	overloadsr  rÌ   rf  r}  Úget_fake_values_from_nodesr   re  Ú_jit_resolve_packetÚ_qualified_op_namer&  rI   )rK  rÁ   r#  r  r  rW  r\  rc  r«  Úoverloadrß  s   `          r¥   Úcheck_pt2_compliant_oprh    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__W  s    € ð ˆŒàˆŒØˆŒ	Øˆ�r¤   c                 óN   —  | j                   | j                  i | j                  ¤ŽS rì   )r  r  r  r÷   s    r¥   r,  zLazyProxy.__call__d  s    € Øˆt�w‰w˜Ÿ	™	Ð1 T§[¡[Ñ1Ð1r¤   )rž   rŸ   r    r   ri  rj  r  r  r  r	   r,  r£   r¤   r¥   rÄ  rÄ  V  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.
    NrK  r˜  rÓ  r¡  rÏ  rÑ  rÆ   c                 óZ  •— 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>                  d d  | _        n:| j                  j>                  | j                  jA                  |«      |fgz   | _        t/        «       | _!        g | _"        t        jF                  «       rtI        d«      ‚t/        «       | _%        y )NFr0   r   zSInference mode is supposed to be disabled during compilation. Please open an issue.)&r  r  Úweakrefr   rK  rÞ   r   rC  r‘   r¡  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ø   rK  rÓ  r¡  rÏ  rÑ  r  s         €r¥   r  zSubgraphTracer.__init__p  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Õ ØÐ"Ø#'§;¡;×#>Ñ#>¹qÐ#AˆDÕ à#'§;¡;×#>Ñ#>Ø—‘×*Ñ*¨=Ó9¸=ÐIðBñ $ˆDÔ ô
 -7«LˆÔð 8:ˆÔ)Ü×*Ñ*Ô,ÜØeóð ô BLÃˆÕ!r¤   r  c                 ó:   — | j                   j                  |«       y rì   )rƒ  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)
r|  r}  r~  Úcurrent_instructionÚstarts_liner�  r   r   Ú_COPY_META_FIELDSrU  )rø   r¢  rè   ÚlinenoÚnode_idxrU  r   s          r¥   r�  z,SubgraphTracer._maybe_preserve_original_metaÝ  sá   € ð ×ÒØ×(Ò(Ø×)Ò)à×+Ñ+×7Ñ7ˆFØˆHØÐ!Ø×3Ñ3×7Ñ7Ø˜T×6Ñ6Ñ6¸ó�ð Ð#Ø×)Ñ)¨(Ñ3�ÜŸX™X×7Ñ7ò 7�EØ ’}Ø+/°©;˜Ÿ	™	 %Ò(ð7ð ! DÑ(Ø/3°MÑ/B�D—I‘I˜mÒ,ð )ð $ð *ð )ð 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_proxyrK  rô  r1  )	rø   rÁ   r#  r  r  r:  r�  rŽ  Ú_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 )Nr‚  r¿  )r‹  rÆ   c                  óv   •— t        ‰‰«      j                  «       } d‰j                  j                  › d‰› d| › �S )NzTRACE FX call z from r¶  )rp   Úrstriprè   r:  )ÚlineÚcur_instÚheaderr=  Útx_codes    €€€€r¥   Úget_trace_call_log_strz<SubgraphTracer._create_proxy.<locals>.get_trace_call_log_strW  s9   ø€ Ü5°g¸xÓH×OÑOÓQ�DØ+¨B¯G©G¯L©L¨>¸À¸xÀrÈ$ÈÐPÐPr¤   rb  FÚorig_graphmodulec                   ó   — y rì   r£   r£   r¤   r¥   r|  z.SubgraphTracer._create_proxy.<locals>.<lambda>b  s   � r¤   TÚnn_module_stack>   rÀ  r‡  rž  r0   )ztorch.nn.modulesz	torch.ao.ztorch.nn.modules.containerr  rÁ  z4Invoking an nn.Module inside a higher order operatorzHigher order op name: zThis is not supported.rK  c              3   ó\   •K  — | ]#  \  }\  }}|j                  d «      d   ‰k(  r|–— Œ% y­w)ú@r   N)r  )r€  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 HigherOrderOperatorr–  r‡  rÓ  )HrÓ  r  Útree_flattenÚ#maybe_lift_tracked_freevar_to_inputrà   Útree_unflattenr  rÈ  rK  r   rz  r{  rˆ  rs  Ú	positionsr‹  r�  Úget_line_of_code_headerr¾   Útrace_call_logr¥  rx   r{  rB   Úget_contextr�  rÝ   rÞ   r   r-  r‘   rª  rU  r|  Ú_lineno_mapr}  r$  Ú__code__rµ   r~  rœ  r!  rè   r:  rü   rW  rŸ   Ú
startswithr  rI   rÏ  r¸  r  r�  Úis_co_filename_from_nn_modulesÚframe_summaryrÌ   r-  r+   râ  rý   ÚStackSummaryÚ	from_listr¸  r·  r‡  rf  r1   rÙ  Útrack_nodes_for_deduplicationr½  Ú
track_node)rø   rÁ   r#  r  r  r:  r�  rŽ  Ú	flat_argsÚ	tree_specÚnew_flat_argsrd  Úmaybe_new_argr¢  r™  Úis_retracingÚorig_graphmodule_maybeÚndrœ  rå   Úcurrent_nn_moduleÚframe_summariesÚframeÚfiltered_frame_summariesÚmsgsr–  r—  r=  r˜  r  s     `                      @@@@€r¥   r�  zSubgraphTracer._create_proxy  sç  ý€ ðV �;‰;Ð"Ü#)×#6Ñ#6¸¸f°~Ó#FÑ ˆI�yØˆMØ ò 4�Ø $× HÑ HÈÓ M�Ø×$Ñ$ ]Õ3ð4ô "×0Ñ0°À	ÓJ‰LˆD�&ä‰WÑ!ØØØØØØØó
ˆð ×Ñ×)Ñ)ˆô ×Ñ˜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                  �et        j                  |i |¤Ž}|D ]K  }t        |t        j                  j                  «      sŒ(|j                  | j                  k7  sŒBt        d«      ‚ t        ‰
| �1  ||||||«      }	| j                  j                  |	j                  d<   | j                  j!                  |	j"                  «       |	S )Nz2create_node using arg not from this SubgraphTracerrû  )rh  rK  rÓ  r  Úarg_tree_leavesrÝ   rÞ   r   rç  r‘   rV  r  rË  r×  rU  r�  râ   r:  )rø   rÁ   r#  r  r  r:  r�  r°  rd  rè   r  s             €r¥   rË  zSubgraphTracer.create_nodeÕ  sÑ   ø€ ô 	˜t×0Ñ0°$¸ÀÀfÔMØ�;‰;Ð"Ü×.Ñ.°Ð?¸Ñ?ˆIØ ò �Ü! #¤u§x¡x§}¡}Ô5ØØ—9‘9 §
¡
Ó*Ü(ØLóð ð	ô ‰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 rš  )r  rã  r‘   r‰  r–  rü   rª  rÿ  rÁ  rá   r:  )rø   rè   Úuser_graph_nodesÚuserÚother_graph_nodes        r¥   rÎ  zSubgraphTracer.remove_nodeð  s¸   € Üˆt�z‰z‹?˜QÒØ46ÐØŸ
™
ò N�ð —:‘: §¡Ó+ð %×+Ñ+¬H´T¸$¿*¹*×:JÑ:JÓ5KÓ,LÕMðNð %5ò DÐ Ø ×&Ñ&×1Ñ1Ð2BÕCðDà�
‰
×Ñ˜dÔ#Ø× Ñ ×$Ñ$ T§Y¡Y°Õ5r¤   rW  Úbeforer
  c                 óB  — t        |t        j                  «      r%| j                  j	                  |j
                  «       t        j                  d||�|j                  nd|| j                  |«       |€| j                  €t        d|› d|› d�«      ‚| j                  rm| j                  €a|€t        d«      ‚t        |d¬«      sG| j                  j                  j!                  |g «      j	                  t#        j$                  «       «       t'        || j(                  «      }| j*                  rqt-        t/        | j*                  «      «      }| j*                  |   j0                  }|r| j2                  j5                  |«      }n7| j2                  j7                  |«      }n| j2                  j5                  d «      }|5  | j9                  d	|d
i |¬«      }	t;        |	j0                  |«       | j*                  r>|r<| j*                  j=                  «       \  }
}|	| j*                  |<   || j*                  |
<   n|	| j*                  |<   | j(                  j?                  |«       | j                  }t        j@                  jC                  «       }|s—|s•t        |t        j                  «      r| jE                  ||«       nht        |tF        tH        f«      rRtK        |«      D ]D  \  }}t        |t        j                  «      sŒ!d }|rtM        ||d¬«      }| jE                  ||«       ŒF t        |t        jN                  «      rQt        |j0                  jP                  tR        jT                  «      r#|	| jV                  |j0                  jP                  <   |	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 tracerz5source must not be None for export root tracer inputsT)Úonly_allow_inputr¥  r£   ©r�  F)r  r\  Úindex_is_slice),rÝ   rÞ   r   r¨  rà   r¬  rï   r¥  r:  rz  rÓ  rV  r¡  r_   rK  rÜ  r<  r   r­  rs   r�  rÁ  r¸  r–  rè   r‘   Úinserting_beforeÚinserting_afterrÈ  r{   Úpopitemrâ   ÚcompilerÚis_exportingÚ_lift_basic_symbolsrü   r¼   r§  r\   rK  rú  rû  rü  rÆ  )rø   r:  r�  rW  rÂ  r
  Ú	prev_namerè   Úctxr   r  r  Úis_strict_exportÚis_non_strict_exportr}  rß  Úe_sources                    r¥   rT  z!SubgraphTracer.create_graph_input  s"  € ô �m¤U§\¡\Ô2Ø×-Ñ-×4Ñ4°]×5KÑ5KÔLÜ�	‰	ØEØØ!Ð-ˆF�KŠK°8ØØ×ÑØô	
ð ˆ>Ø�{‰{Ð"Ü$ØFÀtÀfÈMÐZgÐYhÐh{Ð|óð ð �>Š>˜dŸk™kÐ1Øˆ~Ü$ØKóð ô (¨ÀÕ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Øñ I	Ø×%Ñ% 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×#:Ñ#:Ñ;Ø÷SI	÷ I	ò I	ús   Æ;GNÎNr   c                 óv  — | j                   €t        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                  |«       t	        |t
        j                  «      r?t        |«      r4|j                  | j                   u 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 SubgraphTracerrW  )rÓ  rV  rè   rU  rÝ   rÞ   rK  rú  rÆ  rq  r®  Úlift_tracked_freevar_to_inputr   r/   Útrack_produced_symintsr   rW  Úreal_objrT  r:  )rø   r   rW  r�  Ú	new_proxys        r¥   rÓ  z,SubgraphTracer.lift_tracked_freevar_to_inputŠ  sj  € ð �;‰;ÐÜ Ø[óð ð Ÿ
™
Ÿ™¨Ñ8ˆô �}¤e§l¡lÔ3Ø×"Ñ"×'Ñ'¨4×+=Ñ+=Ñ=à×%Ñ% m×&8Ñ&8×&=Ñ&=Ñ>Ð>ð
 �D×(Ñ(Ñ(Ø×'Ñ'¨Ñ.Ð.ð
 �<‰<˜4Ÿ;™;Ò&Ø�K‰K×5Ñ5°eÔ<ô �}¤e§l¡lÔ3Ü-¨mÔ<Ø—‘ §¡Ñ+à�K‰K×.Ñ.¨}¸eÔDàŸ
™
Ÿ™¨Ñ8ˆô ˜-Ô)9Ô:ô �×'Ñ'Ô(ä�mÓ$ð 	ð
 ×+Ñ+¨E¯J©J¯O©O¸YÈÓVˆ	Ø&/ˆ×Ñ˜UÑ#ØÐr¤   rd  c                 ó  ‡ — t        |t        j                  j                  «      sDt        |t        «      r2t	        ˆ fd„|j
                  |j                  |j                  fD «       Ž S |S |j                  ‰ k(  r|S ‰ j                  |«      S )z£
        If arg is a free variable, then lift it to be an input.
        Returns the new lifted arg (if arg was a freevar), else the
        original arg.
        c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrì   )r¡  )r€  Úsub_argrø   s     €r¥   r‚  zESubgraphTracer.maybe_lift_tracked_freevar_to_input.<locals>.<genexpr>Í  s$   øè ø€ ò à#ð ×@Ñ@À×Iñùs   ƒ)
rÝ   rÞ   r   rB  ÚsliceÚstartÚstopÚstepr®  rÓ  )rø   rd  s   ` r¥   r¡  z2SubgraphTracer.maybe_lift_tracked_freevar_to_inputÀ  sy   ø€ ô ˜#œuŸx™xŸ~™~Ô.ô
 ˜#œuÔ%Üóà(+¯	©	°3·8±8¸S¿X¹XÐ'Fôðð ð �
Ø�Z‰Z˜4ÒØˆJØ×1Ñ1°#Ó6Ð6r¤   Úe_proxyc                 ó®  ‡ ‡‡— ‰j                   Št        ‰t        «      st        dt	        ‰«      › �«      ‚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+                  ||«       |j0                  t        j2                  u r«t        |j5                  «       «      D ]�  \  }} ||«      sŒt        j                  d|‰|‰j                  «       t!        ‰||d
t        j"                  j$                  j6                  j(                  ‰|fi t	        |«      ¬«      }‰ j+                  ||«       Œ� �n6|j0                  t        j8                  u rA‰ j+                  |j;                  «       ‰«       ‰ j+                  |j=                  «       ‰«       nÙ|j0                  t        j>                  t        j@                  hv rA‰ j+                  |jC                  «       ‰«       ‰ j+                  |jE                  «       ‰«       nl|j0                  t        jF                  t        jH                  hv r@‰ j+                  |jK                  «       ‰«       ‰ j+                  |jM                  «       ‰«       tO        |«      rC|jQ                  «       \  }	}
|	D ]*  }tS        ||«      }‰ j+                  |tS        ‰|«      «       Œ, y y t        |t        jT                  «      r/ ||«      r&|jV                  jX                  }‰‰jZ                  |<   y y y )Nz%tracer must be a SubgraphTracer, got r  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¤   rW  r  r  c                 óv  •— t        ‰t        «      r ‰«       n‰Št        ‰t        j                  j                  «      st        dt        ‰«      › �«      ‚‰j                  j                  ‰j                  «      5   ‰j                  |i |¤Ž}t        |j                  | «       |cd d d «       S # 1 sw Y   y xY w)Nz!e_proxy must be an fx.Proxy, got )rÝ   rÄ  rÞ   r   rB  rV  rW  r‘   rÈ  rè   rÈ  r{   )rW  r  r  r   rÞ  r®  s       €€r¥   Ú_proxy_with_example_valuezHSubgraphTracer.track_produced_symints.<locals>._proxy_with_example_valueý  s™   ø€ ô
 $.¨g´yÔ#A‘g”iÀwˆGÜ˜g¤u§x¡x§~¡~Ô6Ü$Ø7¼¸W»°ÐGóð ð —‘×-Ñ-¨g¯l©lÓ;ñ Ø+˜×+Ñ+¨TÐ<°VÑ<�Ü! %§*¡*¨mÔ<Ø÷÷ ò ús   Á;*B/Â/B8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³  rV  rW  r	   rÔ   r   rB  rÞ   r   r§  rš   rï   r¥  rz  rÄ  ÚopsrS  Úsym_sizerº   rÔ  Ústorage_offsetÚsym_storage_offsetÚlayoutÚstridedr›   Ú
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Ì   rK  rè   rú  rÆ  )rø   rW  rÞ  rá  rã  r}  r  Ú
lazy_proxyræ  ÚattrsrÎ  r�  Úinner_trú  r®  s   ` `           @r¥   rÔ  z%SubgraphTracer.track_produced_symintsà  sÆ  ú€ ð  —‘ˆÜ˜&¤.Ô1Ü Ð#HÌÈfËÈÐ!WÓXÐXð	œð 	¤õ 	ð	Üð	Ü'*ð	Ü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¤   r�  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t	        dt        | «      › �«      ‚‰j                  | «      }t        |«      dk(  ry ‰j                  �î‰j                  j                  | |«       |D ]Ì  }‰j                  j                  |   }|j                  j                  d   }t        |t        j                  «      st	        dt        |«      › �«      ‚‰j                  t        |«      t        |«      |||¬«      }t        j!                  d||�|j"                  nd‰j$                  «       |‰j&                  |<   ŒÎ y t        |«      dk7  rt	        d	|› d
| › �«      ‚|€t	        d| › d| › d�«      ‚t)        t+        |«      «      }‰j                  t        |«      t        | «      | ||¬«      }t        j!                  d| |�|j"                  nd‰j$                  «       t-        || dd d¬«      |j                  j                  d<   y )Nzs must be a SymInt, got r   rW  z"example_val must be a SymInt, got )rÂ  r
  z4_lift_symbols_in_symint %s from %s at debug_level %szsubgraph inputsr0   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_tensorrE  r•  rR  )r(   rÝ   rÞ   rK  rV  rW  Úlookup_unbound_symbolsr  rÓ  rÌ  rÆ  rè   rU  rT  r¾   rï   r¥  r:  rz  rq  r¸  Úiterr}   )	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_symintg  sA  ø€ ô
 ˜q”>Øä˜a¤§¡Ô.Ü$Ð'?ÄÀQÃ¸yÐ%IÓJÐJØ#×:Ñ:¸1Ó=ÐÜÐ#Ó$¨Ò)Øð �{‰{Ð&à—‘×/Ñ/°°6Ô:Ø*ò <�BØ#'§;¡;×#<Ñ#<¸RÑ#@�LØ".×"3Ñ"3×"8Ñ"8¸Ñ"I�KÜ% k´5·<±<Ô@Ü,Ø@ÄÀkÓARÐ@SÐTóð ð ×0Ñ0Ü˜B›Ü˜[Ó)Ø#Ø%Ø%ð 1ó �Bô —I‘IØNØØ'-Ð'9˜ŸšÐ?PØ×(Ñ(ô	ð :<�D×(Ñ(¨Ò6ñ)<ô. Ð'Ó(¨AÒ-Ü(ðLØL\ÐK]Ð]aÐbcÐadðfóð ð �>Ü(Ø% a Sð )[à[\ÐZ]Ð]nðpóð ô
 œ$Ð/Ó0Ó1�Ø×,Ñ,Ü˜“GÜ˜“GØØ!Ø!ð -ó �ô —	‘	ØJØØ#)Ð#5�F—K’KÐ;LØ×$Ñ$ô	ô ,4ØØØ',Ø $Ø#ô,�—‘—‘˜ZÒ(r¤   T)rÂ  r@  )"rº   rÞ   rK  r   rÔ   rÝ   r   r§  rš   rf   re   ÚSIZErè  ré  r›   ÚSTRIDEræ  ÚSTORAGE_OFFSETrë  rÌ  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  r/   rö  rÌ   rX   )
rø   rW  r�  r  r}  r  rø  rÎ  r�  rù  s
   `         r¥   rÌ  z"SubgraphTracer._lift_basic_symbols`  sž  ø€ ð !ñH	Ü”U—\‘\Ñ!ðH	ä˜T‘MðH	ô ðH	ð õ	H	ôT �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sŒ‹t        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¥   r|  z7SubgraphTracer.lookup_unbound_symbols.<locals>.<lambda>ü  s
   € °·±€ r¤   )rB  )rè   rú  r&   r  rÆ  rà   rÝ   rÄ  rÞ   r   rB  r®  rV  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¸¿¹ÈDÒ8PÜ$Ø*¨2¨$Ð.PÐQóð ð	ô �kÑ'7Ô8Ð8r¤   c                 ón  ‡— | j                   }g }g Šg }t        | j                  j                  «      D ]}  \  }}|j                  dk(  rh|j
                  d   }t        |t        j                  «      sŒ?|j                  |j                  «       |j                  |«       ‰j                  |«       Œ} n t        t        ||«      «      D ���	cg c]  \  }\  }}	||	k7  r|‘Œ }
}}}	|
r8|
D �cg c]  }||   ‘Œ	 }}t        ˆfd„|
D «       «      }d|› �}t        d||«      S t        ddd«      S c c}	}}w c c}w )	Nr¥  rW  c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrì   r£   )r€  r}  Útensor_placeholder_indicess     €r¥   r‚  z4SubgraphTracer.has_input_mutation.<locals>.<genexpr>  s   øè ø€ ò *Ø23Ð*¨1Õ-ñ*ùs   ƒzInput mutation detected at TFr–  r£   )r¨  r§  r‘   rª  r«  rU  rÝ   rÞ   r   rà   r¬  r…  r¼   rÖ   )rø   Úinput_versions_at_beginningÚinput_nodesÚinput_versions_at_endÚplaceholder_idxrè   rW  r}  Úv1Úv2Úmutated_inputsÚmutated_nodesrØ   rÓ   r  s                 @r¥   Úhas_input_mutationz!SubgraphTracer.has_input_mutationþ  sP  ø€ Ø&*×&GÑ&GÐ#ØˆØ%'Ð"à "ÐÜ%.¨t¯z©z×/?Ñ/?Ó%@ò 	Ñ!ˆO˜TØ�w‰w˜-Ò'Ø $§	¡	¨/Ñ :�Ü˜m¬U¯\©\Õ:Ø)×0Ñ0°×1GÑ1GÔHØ×&Ñ& tÔ,Ø.×5Ñ5°oÕFáð	ô  )ÜÐ/Ð1FÓGó ÷
ð 
á�‘8�B˜ð �RŠxò	 ð
ˆò 
ñ Ø5CÖD°˜[¨›^ÐDˆMÐDÜ$)ó *Ø7Eô*ó %Ð!ð 0°¨Ð?ˆCÜ  cÐ+@ÓAÐAä˜E 2 rÓ*Ð*ùô!
ùò Es   ÃD+Ã*D2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 ]x  }
|
sŒ ||
g«      d   }t        |t         «      rt#        d
«      ‚t        |t        j                  «      sŒH ||«      D ]&  }||v rd||   › d|
› �}t        d|«      c c S |
||<   Œ( Œz |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 example_value must not be a listz,Output-to-output aliasing detected at nodes z, z+Input-to-output aliasing detected at nodes Fr–  )Ú(torch._dynamo.variables.higher_order_opsr  Útorch._higher_order_ops.utilsr  r  r‘   rª  r«  rÝ   rÞ   r   rÑ   r¯  r  Útree_leavesr  rü   rV  r	  r  r·  )rø   r  r  Úinput_storagesrè   rW  ÚstoragerÓ   Úoutput_storagesÚ	out_nodesÚout_nodeÚintersected_storagesr  Úaliasedr}  Úos                   r¥   rÒ   zSubgraphTracer.has_aliasing   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Ô2Ü(Ð)KÓLÐLÜ˜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-Æ7G2
)NFNN)NNN)NNNN)FN)(rž   rŸ   r    rû   r   rÔ   r,   r¾   r  r‚   r…  r   rç  r�  r	   r   rB  rÈ  r�  rË  rÎ  r   rT  rÄ  rÓ  r¡  rÞ   rÔ  rK  r   rÌ  rü   rû  rü  rý  rÖ   r  rÑ   rÒ   r  r  s   @r¥   r³  r³  h  s[  ø„ ñð .2ØØ'+Ø"&ñgNà#ðgNð Ð)Ñ*ðgNð ð	gNð
  ‘}ðgNð ˜4‘ZðgNð 
õgNðR* 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ðð ˜‘:ðð 
�‰õð66 §¡ð 6¨Dó 6ð6 Ø $ñAàðAð ðAð ð	Að
 ðAð ˜‘ðAð 
�‰óAðH4°2·8±8ð 4À	ÈBÏHÉHÑ@Tó 4ðl7°sð 7¸só 7ð@}5Ø ð}5Ø+4°u·x±x·~±~Ñ+Eð}5à	ó}5ð@DØ"Ÿ\™\¨E¯L©LÑ8ðDØ?EÈ¹}ðDà	óDðP9¨¯©ð 9¸¸e¿l¹lÑ9Kó 9ð, + Ló  +ðD,'˜l÷ ,'r¤   r³  rì   (  rû   rÌ  rñ  r!  r8  rñ  r“  rÓ  r3   r  r  rz  r&  rý   r'  rÊ  rp  Úcollections.abcr   r   r   r   r   rv  r   Útypingr	   r
   r   r   r   r   r   r   Útyping_extensionsr   r   r   rû  Útorch._guardsrÞ   Útorch._loggingÚtorch.distributedÚdistributedr8  Útorch.nnÚtorch.utils._pytreer}  r~  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#   r�  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/   r–  r1   r2   rí   r4   Úbackends.registryr5   r6   r­  r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   r¿  rC   Úcurrent_scope_idrD   Údevice_interfacerE   rF   rG   rH   rI   rJ   r}  rK   rL   Úgraph_deduplicationrM   Úgraph_id_filterrN   rO   Úgraph_region_trackerrP   rQ   rR   Úmutation_guardrS   r™  rT   rU   rV   r
  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   rx   ry   rz   r{   Úvariables.builderr|   r}   r~   r   Úvariables.ctx_managerr€   Úvariables.functionsr�   r‚   Úvariables.listsrƒ   Úvariables.miscr„   Úvariables.nn_moduler…   rC  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_logrŠ  Úgraph_sizes_logr¥  r–  rº   rK  ÚTensorMetadataDimr¡   rÃ   r™   r§   rÀ   r  r  rN  r>  rM  r=  r  r¾   rÎ   rÑ   rÖ   rü   r¼   rÜ   r«  r‘   rç  rê   Úcacherð   rò   r  r  r  r½   r^  r/  rE  rl  rx  r†  rˆ  r˜  rH  r[  rh  rÔ  r¹  ri  rj  rÄ  ÚTracerr³  r£   r¤   r¥   ú<module>rS     s	  ðñó* Û Û Û Û Û Û Û Û Û 	Û 
Û Û Û Û Û ß 9Ñ 9ß 4Ý ÷	÷ 	ó 	÷ >Ñ =ã ã Û Ý  Û ß $Ð $ß Ý #ß 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€à×*Ò*Ð à˜%Ÿ,š,Ñ&¨Ñ-Ð Ø!Ð"3Ñ4Ð ØÐ;Ñ<Ð ô7�yô 7ô!�)ô !ô*�zô ð "'§¢§¢×!>Ò!>Ð Ø$)§H¢H§O¢O×$DÒ$DÐ !ðØðØ&*¨3°¨8¡nðàˆc�3ˆhÑóñ& �$Ô÷ð ó ðñ
 �$Ô÷0ð 0ó ð0ð 6:ñ)Ø˜u U§\¡\°3¸±:Ð%=Ñ>Ñ?ð)à�—’×%Ò%×*Ò*Ñ+¨dÑ2ð)ð 	ˆ�Š×	Ò	×	"Ò	"Ñ#ó)ðX ‡‚ð4�cò 4ó ð4ð ÷-ð -ó ð-ð¨#ð °(¸2¸tÀC¹y¸=Ñ2Ió ô �U—X’X—_’_ô  ÷ !ñ !ðH 	ˆS‘&ˆ[Ñ�ð ÷Nð Nó ñNð: ÷<
ð <
ó ñ<
ð~ ÷ð ó ñð* ÷'ð 'ó ñ'ð,¡Eð ¨d°3¸°8©nô ô(H"Ñ.õ H"ôVU-2Ñ#õ U-2÷pZ!Vò !VðJJñ ðHÙðHØ%(ðHØ25ðHØ=@ðHØJMðHà	ôHðV &�i—o’oÓ'Ñ áˆcƒN�ÙˆCƒL�÷2ò 2ô$d'�R—Y’Yö d'r¤   