ó
    EñišÀ ã                   óà	  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKJrJrJr  SSKJrJr  SSKJr  SSKJrJrJrJrJr  SSKJ r J!r!  SSK"r"SSK#r$SSK%r$SSK&J'r(  SSK)r$SSK*J+s  J,r-  SSK$J.r.J/r/  SS	K0J1r1  SS
K2J3r3J4r4  SSK#J5r5J6r6J7r7J8r8J9r9J:r:  SSK;J<r<  SSK=J>r>  SSK?J@r@  SSKAJBrB  SSKCJDrD  SSKEJFrF  SSKGJHrH  SSKIJJrJJKrKJLrLJMrMJNrNJOrO  SSKPJQrQ  SSKRJSrS  SSKTJUrU  SSKVJWrW  SSKXJYrYJZrZJr[J\r\  SSK]J^r^J_r_  SSK`JaraJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrk  SSKlJlrl  SSKmJnrn  SSKoJprp  SSKqJrrr  SS KZJsrsJtrtJuruJvrvJwrw  SS!KxJyryJzrz  SS"K{J|r|  SS#K}J~r~Jr  SS$K€J�r�  SS%K1J‚r‚Jƒrƒ  SS&K„J…r…  SS'K†J‡r‡JˆrˆJ‰r‰  SS(KŠJ‹r‹JŒrŒJ�r�JŽrŽJ�r�J�r�J‘r‘J’r’J“r“J”r”J•r•J–r–J—r—J˜r˜J™r™  SS)K+JšršJ›r›JœrœJ�r�JžržJŸrŸJ r J¡r¡J¢r¢J£r£J¤r¤J¥r¥J¦r¦J§r§J¨r¨J©r©JªrªJ«r«J¬r¬J­r­J®r®  SS*K¯J°r°J±r±J²r²J³r³  SS+K´Jµrµ  SS,K¶J·r·J¸r¸  SS-K¹Jºrº  SS.K»J¼r¼  SS/K½J¾r¾  SS0K¿JÀrÀJÁrÁJÂrÂ  SS1KÃJÄrÄ  SS2KÅJÆrÆ  \(       a  SS3KÇJÈrÈ  SS4KÉJÊrÊ  SS5KËJÌrÌ  SS6KÍJÎrÎ  \GRž                  " \Ð5      rÑ\$GR¤                  GR§                  \ÐS75      rÔ\$GR¤                  GR§                  \ÐS85      rÕ\$GR¤                  GR§                  \ÐS95      rÖ\$GR¤                  GR§                  \ÐS:5      r×\1GR°                  rØ\$GR²                  GR´                  GR¶                  rÜ\$GR²                  GR´                  GRº                  rÞS;\S<\ß\à\4   S=\S>\4   4S? jrá\" S@SA9 " SB SC5      5       râ\" S@SA9 " SD SE5      5       rã SoSF\ä\å\$R^                  \àS-  4      SG\æ\$GRÎ                  GRÐ                  GRÒ                     S-  S=\æ\$GRÎ                  GRÐ                  GRÒ                     4SH jjrê\GRÖ                  S=\4SI j5       rì\ " SJ SK5      5       ríSL\S=\/ \ä\   4   4SM jrî " SN SO\$GR²                  GR´                  5      rï " SP SQ5      rð\ß\à\ñ4   rò\ " SR SS5      5       ró\ " ST SU5      5       rô\ " SV SW5      5       rõ\ " SX SY5      5       röSZ\òS=\ß\à\4   4S[ jr÷ " S\ S]\ô5      rø " S^ S_\ø5      rù " S` Sa5      rúSbrûSc\ùSd\àSe\Sf\Sg\S=S4Sh jrü\GRú                  " 5       rþ\ " Si5      rÿ\!" Sj5      Gr  " Sk Sl5      Gr " Sm Sn\.GR                  5      Grg)pa¶  
Core graph building functionality for PyTorch's Dynamo system. This module contains
the essential components for constructing and managing FX graphs during compilation:

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

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

The module supports key Dynamo features including:
- Higher-order operators through nested SubgraphTracers
- Graph deduplication for optimization
- Symbolic shape handling and propagation
- Side effect tracking and management
- Guard insertion and management
é    N)ÚCallableÚ	GeneratorÚSequence)Ú	dataclassÚfield)ÚCodeType)ÚAnyÚcastÚOptionalÚTYPE_CHECKINGÚUnion)Ú	ParamSpecÚTypeVar)ÚfxÚTensor)Úguards)ÚShortenTracebackÚTensorifyScalarRestartAnalysis)ÚCompileContextÚ	CompileIdÚGlobalContextCheckpointStateÚSourceÚtracingÚTracingContext)ÚFakeScriptObject)Úis_opaque_type)Ú
FakeTensor)Úsignpost_event)Ú_ConstraintTarget)Ú_make_graph_module)ÚBackwardState)Úfree_symbolsÚguard_scalarÚis_symbolicÚShapeEnvÚSpecializationÚuninteresting_files)ÚTarget)Úinsert_deferred_runtime_asserts)Ú
OrderedSet)Úis_traceable_wrapper_subclassé   )ÚconfigÚexcÚloggingÚ	variables)Ú
CompiledFnÚ
CompilerFn)Úcreate_binary_sliceÚcreate_binary_subscrÚcreate_build_tupleÚcreate_call_functionÚcreate_dup_topÚcreate_instructionÚcreate_load_constÚcreate_rot_nÚcreate_swapÚInstructionÚ	unique_id)Úcode_context)Ú	PyCodegen)Úenter_new_scope)Úget_interface_for_device)ÚBackendCompilerFailedÚ!exceptions_allowed_to_be_fallbackÚ	SkipFrameÚunimplementedÚunimplemented_with_warning)Úhas_user_objectsÚindex_to_bytecode_constructor)Úapply_graph_deduplication)Ú#get_backend_override_for_compile_idÚ+get_inductor_config_override_for_compile_id)ÚGraphRegionTracker)ÚGuardBuilderÚinstall_guard)Úis_dynamic_nn_module)ÚAttributeMutationExistingÚSideEffectsÚValueMutationExisting)Ú_get_source_debug_nameÚ
AttrSourceÚBackwardStateSourceÚConstantSourceÚ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)ÚStorageWeakRefÚgraphÚ
graph_codeÚgraph_sizesÚ
trace_callÚcompiler_fnÚconfig_patchesÚreturn.c                 ó‚   ^ ^^• SSK Jm  S[        S[        S[        4U UU4S jjn[        T SS5      Ul        T Ul        U$ )	zO
Wrap a compiler function to apply inductor config patches during compilation.
r   )r-   ÚgmÚexample_inputsr‘   c                 ól   >• TR                  T5         T" X5      sS S S 5        $ ! , (       d  f       g = f©N)Úpatch)r“   r”   r�   r�   Úinductor_configs     €€€ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/output_graph.pyÚwrappedÚ+_wrap_with_inductor_config.<locals>.wrappedÏ   s%   ø€ Ø×"Ñ" >Õ2Ù˜rÓ2÷ 3×2×2ús   “%¥
3Ú__name__z	<wrapped>)Útorch._inductorr-   r	   Úgetattrrœ   Ú__wrapped__)r�   r�   rš   r˜   s   `` @r™   Ú_wrap_with_inductor_configr    Ç   sG   ú€ õ :ð3”Cð 3¬ð 3´÷ 3ñ 3ô
 ˜{¨J¸ÓD€GÔØ%€GÔØ€Nó    T)Úfrozenc                   ó*   • \ rS rSr% \\S'   \\S'   Srg)ÚAliasingInfoéÙ   Úhas_aliasingÚmsg© N©rœ   Ú
__module__Ú__qualname__Ú__firstlineno__ÚboolÚ__annotations__ÚstrÚ__static_attributes__r¨   r¡   r™   r¤   r¤   Ù   ó   ‡ àÓØ	†Hr¡   r¤   c                   ó*   • \ rS rSr% \\S'   \\S'   Srg)ÚMutationInfoéß   Úhas_mutationr§   r¨   Nr©   r¨   r¡   r™   r³   r³   ß   r±   r¡   r³   Útensors_with_sourcesÚstop_atc                 ó¨  • Uc
  [        5       n[        5       n/ nU  HH  u  pE[        U[        R                  5      (       d  M&  UR                  nUc  M7  UR                  U5        MJ     U(       ac  UR                  5       nXr;   a  M  Xq;   a  M%  UR                  U5        UR                   H  u  p…Uc  M
  UR                  U5        M     U(       a  Mc  U$ )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‹{ˆØ‹?Ùð ‹?ÙØ�‰�DÔØ×-Ô-‰JˆGØÓ"Ø—‘˜WÖ%ñ .÷ ˆ%ð €Nr¡   c                  ó6   • [         R                  " [        5      $ r–   )Útorchdynamo_loggingÚget_step_loggerÚlogr¨   r¡   r™   Ú_step_loggerrÌ     s   € ä×.Ò.¬sÓ3Ð3r¡   c                   ó`   • \ rS rSr% Sr\\S'   \\R                     \S'   Sr
\\S'   S
S jrS	rg)ÚGraphCompileReasoni  zOStores why a given output graph was compiled; i.e. what caused the graph break.ÚreasonÚ
user_stackTÚgraph_breakNc                 óT   • U R                   (       a  [        R                  " U 5        g g r–   )rÑ   ro   r½   ©Úselfs    r™   Ú__post_init__Ú GraphCompileReason.__post_init__   s   € Ø××Ü×&Ò& tÕ,ð r¡   r¨   ©r‘   N)rœ   rª   r«   r¬   Ú__doc__r¯   r®   ÚlistÚ	tracebackÚFrameSummaryrÑ   r­   rÕ   r°   r¨   r¡   r™   rÎ   rÎ     s,   ‡ áYàƒKØ�Y×+Ñ+Ñ,Ó,ð €K�Ó÷-r¡   rÎ   Úrandom_callsc                 ó2   ^ • S[         [           4U 4S jjnU$ )Nr‘   c            
      óP   >• T V VVs/ s H  u  po " U0 UD6PM     snnn $ s  snnn f r–   r¨   )ÚfnÚargsÚkwargsrÜ   s      €r™   Ú_gen_rand_valuesÚ1_get_gen_rand_values_fn.<locals>._gen_rand_values&  s*   ø€ Ù<HÕIºLÑ(8¨°&��DÐ#˜FÔ#¹LÓIÐIùÔIs   ˆ!)rÙ   r	   )rÜ   râ   s   ` r™   Ú_get_gen_rand_values_fnrä   %  s   ø€ ðJœd¤3™i÷ Jð Ðr¡   c                   ó¼   ^ • \ rS rSrSrS\\\R                  R                  4   SS4U 4S jjr
S\4S jrS\\\R                  R                  4   SS4S jrS	rU =r$ )
ÚFakeRootModulei,  z'Trick the constructor of fx.GraphModuleÚ
nn_modulesr‘   Nc                 ól   >• [         TU ]  5         UR                  5        H  u  p#[        XU5        M     g r–   )ÚsuperÚ__init__ÚitemsÚsetattr)rÔ   rç   ÚkÚvÚ	__class__s       €r™   rê   ÚFakeRootModule.__init__/  s-   ø€ Ü‰ÑÔØ×$Ñ$Ö&‰DˆAÜ�D˜QÖò 'r¡   c                 ó   • g)NzFakeRootModule(...)r¨   rÓ   s    r™   Ú__repr__ÚFakeRootModule.__repr__4  s   € Ø$r¡   c                 óN   • UR                  5        H  u  p#[        XU5        M     g r–   )rë   rì   )rÔ   rç   rí   rî   s       r™   Úadd_nn_modulesÚFakeRootModule.add_nn_modules7  s!   € Ø×$Ñ$Ö&‰DˆAÜ�D˜QÖò 'r¡   r¨   )rœ   rª   r«   r¬   rØ   Údictr¯   r»   ÚnnÚModulerê   rò   rõ   r°   Ú__classcell__©rï   s   @r™   ræ   ræ   ,  sa   ø† Ù1ð  4¨¨U¯X©X¯_©_Ð(<Ñ#=ð  À$÷  ð
%˜#ô %ð ¨¨c°5·8±8·?±?Ð.BÑ)Cð  È÷  ò  r¡   ræ   c                   ó~   • \ rS rSrS\SS4S jrS\R                  R                  S\	\R                     S\4S jrS	rg)
ÚWrapperBackendi<  Úbackendr‘   Nc                 ó   • Xl         g r–   )rþ   )rÔ   rþ   s     r™   rê   ÚWrapperBackend.__init__=  s   € Ø#*�r¡   r“   r”   c                 óÄ  • [        U5      U l        Xl        [        R                  " U R                  5      nU R                  X25      U l        U R                  b#  U R                  U R                  R                  L a  U R                  R                  $ [        R                  (       d  U R                  $  U R                  R                  " [        U5      6 nU R                  " [        U5      6 n[        XE5      (       a  U R                  U R                  5         $ [        SU  35      e! [         a    [        R                  S5        e f = f! U R                  5         f = f)Nzincorrect results of backend zerror in verify_correctness)rc   Úrestorer“   ÚcopyÚdeepcopyrþ   Ú	candidateÚforwardr-   Úverify_correctnessre   ru   ÚRuntimeErrorÚ	ExceptionrË   Ú	exception)rÔ   r“   r”   Úcopy_gmÚcorrectÚresults         r™   Ú__call__ÚWrapperBackend.__call__@  s  € ô )¨Ó,ˆŒØŒÜ—-’- §¡Ó(ˆØŸ™ gÓ>ˆŒà�>‰>Ñ! T§^¡^°t·w±w·±Ò%FØ—7‘7—?‘?Ð"ä×(×(Ø—>‘>Ð!ð	Ø—g‘g—o’o¤|°NÓ'CÐDˆGØ—^’^¤\°.Ó%AÐBˆFô �G×$Ñ$Ø—~‘~ð �L‰L�Nô Ð!>¸t¸fÐEÓFÐFøäó 	Ü�M‰MÐ7Ô8Øð	ûð �L‰L�Nús   Â5AD) ÄD) Ä)!E
Å
E ÅE)rþ   r  r“   r  )rœ   rª   r«   r¬   r2   rê   r»   r   ÚGraphModulerÙ   r   r1   r  r°   r¨   r¡   r™   rý   rý   <  sE   † ð+ 
ð +¨tô +ðØ—(‘(×&Ñ&ðØ8<¸U¿\¹\Ñ8Jðà	÷r¡   rý   c                   ó\   • \ rS rSr% SrSr\\S'   Sr\\S'   Sr	\\S'   Sr
\\S'   SS	 jrS
rg)ÚBytecodeTracingTimingsic  aH  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                 óŒ  • [        5       n0 n[        R                  " U 5       H„  n[        XR                  5      nUS:”  d  M   UR                  R                  S5      nUS-  X% S3'   [        R                  " U/ 5      R                  US-  5        [        XR                  S5        M†     U(       a  UR                  " S0 UD6  gg)zzFlush 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)rj   ÚdataclassesÚfieldsrž   ÚnameÚremovesuffixrf   Ú
setdefaultr½   rì   Útry_add_event_data)rÔ   Úchromium_logÚ
event_dataÚfÚns_valÚkeys         r™   Úreport_and_resetÚ'BytecodeTracingTimings.report_and_resetp  s©   € ô 1Ó2ˆàˆ
Ü×#Ò# DÖ)ˆAÜ˜T§6¡6Ó*ˆFØ˜�zØ—f‘f×)Ñ)¨%Ó0�Ø.4°s©l�
˜U '˜?Ñ+Ü(×3Ò3°C¸Ó<×CÑCÀFÈSÁLÔQÜ˜Ÿf™f aÖ(ñ *ö Ø×+Ò+ÑMÀ*ÓMð r¡   r¨   r×   )rœ   rª   r«   r¬   rØ   r  Úintr®   r  r  r  r&  r°   r¨   r¡   r™   r  r  c  s:   ‡ ñ9ð Ð�sÓØ€O�SÓØ-.Ð% sÓ.Ø$%Ð˜cÓ%÷Nr¡   r  c                   ó¸  • \ rS rSr% Sr\\S'   \\S'   \\R                  R                     \S'   \\   \S'   \\\\\4   4   \S'   \\S'   \\R"                  R$                  R&                     \S	'   \\R*                     \S
'   \R,                  R.                  R0                  R2                  \S'   \R4                  R6                  \S'   \\R4                  R8                     \S'   Sr\\S'   Sr\\S'   Sr \\S'   Sr!\\   \S'   \"S\#4S j5       r$\"S\R4                  R6                  4S j5       r\"S\\R4                  R8                     4S j5       r%SS jr&Sr'g)ÚOutputGraphGuardsStatei�  aZ  
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_layersÚcurrent_deviceÚglobal_state_guardÚ_guardsÚ_aotautograd_guardsFÚexportÚskip_guards_checkÚexport_constraintsNÚ%name_of_builtins_dict_key_in_fglobalsr‘   c                 ó0   • [        S[        U 5       35      e)Nz%shape_env shouldn't be accessed from )ÚAssertionErrorÚtyperÓ   s    r™   Ú	shape_envÚ OutputGraphGuardsState.shape_env   s   € äÐDÄTÈ$ÃZÀLÐQÓRÐRr¡   c                 ó   • U R                   $ r–   )r4  rÓ   s    r™   r   ÚOutputGraphGuardsState.guards¤  s   € à�|‰|Ðr¡   c                 ó   • U R                   $ r–   )r5  rÓ   s    r™   Úaotautograd_guardsÚ)OutputGraphGuardsState.aotautograd_guards¨  s   € à×'Ñ'Ð'r¡   c                 ó\  • [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9$ )N)r+  r,  r-  r.  r/  r0  r1  r2  r3  r9  r6  r8  r4  r5  r7  )r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r9  r6  r8  r   rB  r7  rÓ   s    r™   Údump_guards_stateÚ(OutputGraphGuardsState.dump_guards_state¬  s�   € ä%Ø×(Ñ(Ø×*Ñ*Ø&*×&DÑ&DØ#×6Ñ6Ø*.×*LÑ*LØ—‘Ø!×2Ñ2Ø×.Ñ.Ø#×6Ñ6Ø26×2\Ñ2\Ø—;‘;Ø#×6Ñ6Ø—K‘KØ $× 7Ñ 7Ø"×4Ñ4ñ
ð 	
r¡   r¨   )r‘   r*  )(rœ   rª   r«   r¬   rØ   ÚScoper®   rÙ   r»   Ú	overridesÚTorchFunctionModer¹   r   r÷   r¯   r	   r(  Ú
_functorchÚpyfunctorchÚFuncTorchInterpreterr   ÚdeviceÚ_CÚ_dynamor   ÚGlobalStateGuardr4  Ú	GuardsSetÚGuardEnvExprr6  r­   r7  r8  r9  Úpropertyr%   r=  rB  rE  r°   r¨   r¡   r™   r*  r*  �  s_  ‡ ñð ÓØÓà# E§O¡O×$EÑ$EÑFÓFØ˜F™Ó#à#'¨°°S¸#°X±Ð(>Ñ#?Ó?ØƒOØ˜5×+Ñ+×7Ñ7×LÑLÑMÓMØ˜UŸ\™\Ñ*Ó*ØŸ™×(Ñ(×/Ñ/×@Ñ@Ó@Ø�]‰]×$Ñ$Ó$Ø˜eŸm™m×8Ñ8Ñ9Ó9ð €FˆDÓØ#Ð�tÓ#Ø$Ð˜Ó$Ø;?Ð)¨8°C©=Ó?àðS˜8ó Só ðSð ð˜Ÿ™×/Ñ/ó ó ðð ð( D¨¯©×)CÑ)CÑ$Dó (ó ð(÷
r¡   r*  c                   óü   • \ rS rSr% SrSr\\S'   \" \	S9r
\	\\4   \S'   \" \S9r\\   \S'   \" \S9r\\   \S'   \" \S9r\\\\\S	4   4      \S
'   \" \S9r\\   \S'   \" \S9r\\\\\S	4   4      \S'   Srg)ÚStackLocalsMetadataiÁ  z^
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_argsr¨   N)rœ   rª   r«   r¬   rØ   rV  r(  r®   Údc_fieldr÷   rY  r¯   rÙ   rZ  r[  r\  Útupler	   r]  r^  r°   r¨   r¡   r™   rU  rU  Á  s»   ‡ ñð €IˆsÓÙ#+Øñ$€L�$�s˜C�x‘.ó ñ #+¸4Ñ"@Ð�d˜3‘iÓ@Ù"*¸4Ñ"@Ð�d˜3‘iÓ@Ù8@ÐQUÑ8V€N�D˜˜s E¨#¨s¨(¡OÐ3Ñ4Ñ5ÓVÙ&.¸tÑ&DÐ˜$˜s™)ÓDÙ9AÐRVÑ9W€O�T˜%  U¨3°¨8¡_Ð 4Ñ5Ñ6ÖWr¡   rU  c                   óÞ  • \ rS rSr% \" \S9r\\\S-  4   \	S'   \" \S9r
\\\\\4   4   \	S'   \R                  R                   R"                  r\\R                  R                   R(                  \R                  R                   R*                  4   \	S'   \" \S9r\\\\\\R                  R                   R(                  \R                  R                   R*                  4   4   4   \	S'   Srg)	ÚExportMetaDataiÓ  rW  NÚgraph_input_idx_to_local_sourceÚoutput_return_typeÚout_specÚmodule_call_specr¨   )rœ   rª   r«   r¬   r_  r÷   rc  r(  r   r®   rd  r`  r¯   r	   r»   ÚutilsÚ_pytreeÚ
_LEAF_SPECre  r   ÚTreeSpecÚLeafSpecrf  r°   r¨   r¡   r™   rb  rb  Ó  sô   ‡ ñ
 AIØñAÐ# T¨#¨v¸©}Ð*<Ñ%=ó ñ 6>ÈdÑ5SÐ˜˜S %¨¨S¨¡/Ð1Ñ2ÓSð 	�‰×Ñ×&Ñ&ð ˆe�E—K‘K×'Ñ'×0Ñ0°%·+±+×2EÑ2E×2NÑ2NÐNÑOó ñ 	 Ñ&ð �dØØˆS�%˜Ÿ™×+Ñ+×4Ñ4°e·k±k×6IÑ6I×6RÑ6RÐRÑSÐSÑTð	Vñö 'r¡   rb  r,  c                 óR   • U S   n[        U[        5      (       d  UR                  nU$ )NÚ__builtins__)rº   r÷   Ú__dict__)r,  Ú
f_builtinss     r™   Úget_builtins_dictrp  ê  s,   € ð ˜nÑ-€JÜ�j¤$×'Ñ'Ø×(Ñ(ˆ
ØÐr¡   c                   ó¸   ^ • \ rS rSrSr    SS\S\\\\4      S\\	   S\\
   S\\\\\   4      S	S4U 4S
 jjjr\S	\	4S j5       rSS\S\S	S4S jjrSrU =r$ )ÚOutputGraphCommoniþ  a¡  
A minimal interface for full graph capture. It is intended to be
the target of any tracer that feeds into backends.

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

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

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

The serializable part of this interface is OutputGraphGuardsState.
We do not need to serialize other parts; however it will pay to
be disciplined about what those other parts are, especially since
we want other tracers to be able to meaningfully implement them,
and we should generally try to cut them down when possible.
NÚoutput_graph_guards_stateÚimport_sourcesr=  Úexport_metadataÚtracked_fakes_id_to_sourcer‘   c                 ó  >• [         TU ]  UR                  UR                  UR                  UR
                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                   5        U=(       d    0 U l        U=(       d
    [%        5       U l        U=(       d
    [)        5       U l        U=(       d    0 U l        g r–   )ré   rê   r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  rt  r%   Ú
_shape_envrb  ru  rv  )rÔ   rs  rt  r=  ru  rv  rï   s         €r™   rê   ÚOutputGraphCommon.__init__  sØ   ø€ ô 	‰ÑØ%×1Ñ1Ø%×2Ñ2Ø%×?Ñ?Ø%×8Ñ8Ø%×CÑCØ%×0Ñ0Ø%×6Ñ6Ø%×4Ñ4Ø%×8Ñ8Ø%×-Ñ-Ø%×9Ñ9Ø%×,Ñ,Ø%×7Ñ7Ø%×8Ñ8Ø%×KÑKô	
ð$ -×2°ˆÔð $×1¤x£zˆŒØ.×B´.Ó2BˆÔà&×,¨"ð 	Õ'r¡   c                 ó   • U R                   $ r–   )rx  rÓ   s    r™   r=  ÚOutputGraphCommon.shape_env<  s   € à�‰Ðr¡   rÏ   rá   c                 ó   • [         er–   )ÚNotImplementedError©rÔ   rÏ   rá   s      r™   Úbypass_packageÚ OutputGraphCommon.bypass_package@  s
   € ô "Ð!r¡   )rx  ru  rt  rv  ©NNNN©Ú )rœ   rª   r«   r¬   rØ   r*  r   r÷   r¯   r%   rb  r(  rÙ   r   rê   rS  r=  r	   r  r°   rú   rû   s   @r™   rr  rr  þ  s¿   ø† ñð4 48Ø(,Ø48ØHLñ$
à#9ð$
ð !  c¨3 h¡Ñ0ð$
ð ˜HÑ%ð	$
ð
 " .Ñ1ð$
ð %-¨T°#°t¸F±|Ð2CÑ-DÑ$Eð$
ð 
÷$
ð $
ðL ð˜8ó ó ðñ" Sð "¸ð "À÷ "ó "r¡   rr  c                   óV  • \ rS rSr% Sr\\S'    SˆS\\\	4   S\
\   SSS\S	\\   S
\	S\S\S\S\\R&                  R(                     S\
S   S\SS4S jjrS\S\S\4S jrS\S\SS4S jrS‰S jrS‰S jrS\4S jr SŠS\S\S\\\R>                  R@                  4   4S jjr!S\R>                  R@                  4S  jr"S‰S! jr#S\
\\      4S" jr$S#\%S$\	4   S%\\	S$4   S\4S& jr&S#\%/ \	4   SS4S' jr'S‰S( jr(\)S‹S* j5       r*\)S‹S+ j5       r+S\4S, jr,\)S\R>                  RZ                  4S- j5       r.\.R^                  S.\R>                  RZ                  SS4S/ j5       r.\)S\\\R@                  4   4S0 j5       r0\)S\\Rb                  \Rd                  4   4S1 j5       r3\)S\\4Rj                  \6\R>                  R@                  S24   4   4S3 j5       r7S%\	S4\	S\R>                  R@                  4S5 jr8S%\	S4\	S\R>                  Rb                  4S6 jr9S%\	S4\	SS4S7 jr:\;Rx                   SŒS8\
\=   S9\
S)   S:\
\   S\>S;   4S< jj5       r?\)S�S= j5       r@\)S\R‚                  R„                  4S> j5       rC\)S\D4S? j5       rE\)S\RŒ                  RŽ                  4S@ j5       rH\)S\\\	4   4SA j5       rI\)S\\RŒ                  R”                     4SB j5       rK SŒSC\
\\\\%S$\	4   \4   4      SS4SD jjrLSŽSF jrMS�SG jrN\)S�SH j5       rOS\P4SI jrQS\4SJ jrRS\4SK jrSSL\S\6\R¨                  Rª                  \	4   4SM jrVS�SN\S\4SO jjrWSN\SS4SP jrX\YSQ\	S\4SR j5       rZSS\ST\	S\R@                  4SU jr[SV\6\R¨                  Rª                  \Rd                  \	4   SQ\	SW\	S\4SX jr\SESS\\\]   \\\4   4   4SY jr^SESSZ\PS\\\   \_4   4S[ jr` S‘SESS\\aSZ\PS\\_   4S] jjrbSESS^\cSS4S_ jrdSESS`\\   S^\cSa\SS4
Sb jreS‰Sc jrfS’S\\S4\	SS4Sd jjrgS\\\\6\P\4      4   4Se jrhSN\S\4Sf jri\;Rx                  S\	4Sg j5       rjS‰Sh jrkSi\Sj   SESSS4Sk jrlSESSi\\   Sl\mS\\]   4Sm jrn\)S\\Rb                     4Sn j5       ro\)S\\p   4So j5       rqSp\Rä                  Sq\\2   S\s4Sr jrtSp\Rä                  Sq\\2   S\s4Ss jruS\\\R>                  Rä                  4   4St jrvSN\Su\R>                  Rä                  S\4Sv jrwS\\Rd                     4Sw jrxS‰Sx jryS‰Sy jrzS‰Sz jr{S\\]   SS4S{ jr|SN\S.\	SS4S| jr}S\S.\	S\4S} jr~S\S.\	S\4S~ jrS‰S jr€S€\%\Rä                  /S4   SS4S� jr�S‚\R>                  Rb                  S\	4Sƒ jr‚S„\R¨                  Rª                  S…\SS4S† jrƒS‡r„g)“ÚOutputGraphiG  ac  
Wrapper class to hold outputs of InstructionTranslator.  Mainly the
generated fx.Graph.

OutputGraph is 1:1 with a frame being processed. Each frame is associated
with some root InstructionTranslator. When user code calls a function,
we construct a InliningInstructionTranslator that continues to write into
the root InstructionTranslator's OutputGraph.
Úside_effectsÚcode_optionsr�   Úroot_txr‰   r6  r8  Úframe_stater+  r,  Úf_coder-  Úpackagerˆ   Ú	one_graphr‘   Nc                 ó~	  • [         R                  U UUU
[        5       0 [        R                  R
                  R                  [        R                  R                  R                  5       [        R                  R                  R                  [        R                  R                  R                  =(       d2    [        R                   R                  R"                  R%                  5       [        R&                  R)                  5       / S9  [+        XS9/U l        0 U l        / U l        X@l        XPl        X`l        / U l        [;        [<        5      U l        [        5       U l         U	RB                  U	RD                  U	RF                  S.U l$        [K        5       U l&        / U l'        [Q        U RN                  U=(       d    [R        RT                  U=(       d    [R        RV                  [R        RX                  U RH                  S9nSS K-Js  J)n  UR]                  SS9   [        R^                  Ra                  U[c        U R2                  5      U R2                  S9nS S S 5        [e        W5      U l3        U Rf                  Rh                  Rk                  U	5        U Rf                  Rh                  U l4        [l        Rn                  " 5       U l8        U Rs                  5         [t        Rv                  " [x        5      U l=        0 U l>        [        U 5      U l@        0 U lA        0 U lB        [†        Rˆ                  " 5       U lE        [�        U5      U lG        / U lH        SU lI        / U lJ        X lK        X0lL        S U lM        X°lN        0 U lO        / U lP        / U lQ        SU lR        0 U lS        [        R                   R©                  5       U lU        SU lV        [        5       U lW        [        0 5      U lX        [        0 5      U lY        U Rµ                  5         0 U l[        / U l\        S U l]        / U l^        0 U l_        S U l`        S U la        U RÅ                  5       U lc        [È        RÊ                  " 5       U lf        [Ï        5       U lh        U RÓ                  5       U lj        0 U lk        [Ù        5       U lm        [Ý        5       U lo        0 U lp        g ! , (       d  f       GNb= f)	N)r.  r/  r0  r1  r2  r3  r4  r5  )Ú	is_export)Úco_nameÚco_filenameÚco_firstlineno)Útracked_fakesÚallow_scalar_outputsÚallow_dynamic_output_shape_opsÚ+prefer_deferred_runtime_asserts_over_guardsÚ	co_fieldsr   F©Ú(fake_tensor_allow_unsafe_data_ptr_access)r=  Úallow_non_fake_inputsr6  )qr*  rê   r¹   r»   ÚautogradÚ
forward_adÚ_current_levelrJ  rK  Ú#retrieve_all_functorch_interpretersrg  Ú_deviceÚCURRENT_DEVICErO  Úconvert_frameÚinitial_global_staterN  r   rP  r4  rQ  ÚSubgraphTracerÚtracersÚinput_source_to_varÚleaf_var_creation_orderr6  r8  r‰  Úcleanup_hooksÚnextÚ_compile_id_counterÚ
compile_idÚinstalled_globalsr�  r�  r‘  r–  rL   Úregion_trackerr’  r%   r-   Úcapture_scalar_outputsÚ capture_dynamic_output_shape_opsr•  Útorch._functorch.configr—   Ú_subclassesÚFakeTensorModer­   r   Útracing_contextÚtraced_coder½   r   Úcurrent_compile_idÚdynamo_compile_idÚinit_ambient_guardsÚcollectionsÚdefaultdictrÙ   rv  Úparam_name_to_sourcerQ   r†  Úvariable_tracker_cacheÚsignature_cacheÚ	itertoolsÚcountÚunique_var_idr÷   r‡  Úoutput_instructionsÚ	timestampÚ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Ú!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Úbackward_stateÚbackward_state_proxyÚbackward_state_varÚ!install_builtins_dict_in_fglobalsr9  Ú
contextlibÚ	ExitStackÚcompiler_trace_stackr  Úbytecode_tracing_timingsÚ+maybe_install_saved_tensors_hooks_subgraphsÚ"saved_tensors_hooks_subgraph_namesrt  rb  ru  r*   Ú"used_inlined_inbuilt_modules_namesÚattr_source_cache)rÔ   r‡  r�   rˆ  r6  r8  r‰  r+  r,  rŠ  r-  r‹  rŒ  r=  Ú_configÚ	fake_modes                   r™   rê   ÚOutputGraph.__init__T  s  € ô 	×'Ñ'ØØØØ%Ü"›uØ*,Ü—~‘~×0Ñ0×?Ñ?Ü"×-Ñ-×9Ñ9×]Ñ]Ó_Ü Ÿ;™;×.Ñ.×=Ñ=ä$Ÿ}™}×:Ñ:×OÑO÷  :Ü�x‰x×Ñ×&Ñ&×7Ñ7Ó9ä—M‘M×+Ñ+Ó-Ø "ð 	(ñ 	
ô" ' tÑ>Ð?ˆŒð CEˆÔ ð ?AˆÔ$ØŒØ"4ÔØ&ÔØ68ˆÔä#Ô$7Ó8ˆŒä+.«5ˆÔð
 —~‘~Ø!×-Ñ-Ø$×3Ñ3ñ
ˆŒô 1Ó2ˆÔð 13ˆÔäð ×,Ñ,à!*×!K¬f×.KÑ.KØ+4÷ ,7Ü×6Ñ6Ü8>×8jÑ8jØ—n‘nñ
ˆ	÷& 	2Ð1à�]‰]ÀEˆ]ÒJÜ×)Ñ)×8Ñ8Ø#ä&*¨4¯;©;Ó&7Ø—{‘{ð	 9ð ˆI÷ Kô 0>¸iÓ/HˆÔØ×Ñ×(Ñ(×/Ñ/°Ô7Ø×/Ñ/×;Ñ;ˆÔä×-Ò-Ó/ð 	Ôð 	× Ñ Ô"ô ×#Ò#¤DÓ)ð 	Ô'ð BDˆÔ!Ü'¨Ó-ˆÔð FHˆÔ#à;=ˆÔÜ&Ÿ_š_Ó.ˆÔÜ,0°Ó,>ˆÔØ68ˆÔ ð ˆŒð OQˆÔ#ð 2=ÔØŒð >BˆÔàŒð RTˆÔ"à<>ˆÔØ+-ˆŒØ ˆÔØKMˆÔ ô ,1¯8©8×+SÑ+SÓ+UˆÔ(ð 27ˆÔ.ô PSËuˆÔ,ô >AÀ»WˆÔô ADÀBÃˆÔ!ð 	×ÑÔ ð ACˆÔ-ð ð 	Ôð '+ˆÔð 57ˆÔð ;=ˆÔØ>BˆÔ!Ø15ˆÔð ×2Ñ2Ó4ð 	Ô2ô %/×$8Ò$8Ó$:ˆÔ!ä(>Ó(@ˆÔ%ð ×<Ñ<Ó>ð 	Ô/ð
 /1ˆÔä-Ó/ˆÔô DNÃ<ˆÔ/àGIˆÕ÷c KÖJús   È=R-Ò-
R<ÚbaseÚpathc                 ó0  • UR                  S5      nXS   4nX@R                  ;  a  [        XS   5      U R                  U'   U R                  U   nUSS   H<  nXV4nX@R                  ;  a  [        XV5      U R                  U'   U R                  U   nM>     U$ )NÚ.r   r,   )ÚsplitrÜ  rT   )rÔ   rà  rá  Úpartsr%  r  Úparts          r™   Úget_chained_attr_sourceÚ#OutputGraph.get_chained_attr_source>  sŸ   € Ø—
‘
˜3“ˆØ˜1‘XÐˆØ×,Ñ,Ó,Ü*4°TÀ¹8Ó*DˆD×"Ñ" 3Ñ'Ø×'Ñ'¨Ñ,ˆØ˜!˜"“IˆDØ�.ˆCØ×0Ñ0Ó0Ü.8¸Ó.F�×&Ñ& sÑ+Ø×+Ñ+¨CÑ0ŠFñ	 ð
 ˆr¡   r]   c                 óž   • UR                  SS5      n[        U5      S:X  a  [        X5      $ U R                  XS   5      n[        XCS   5      $ )Nrã  r,   r   )ÚrsplitÚlenr]   rç  )rÔ   rà  rá  rå  Úintermediate_bases        r™   Úget_chained_param_buffer_sourceÚ+OutputGraph.get_chained_param_buffer_sourceK  sO   € ð —‘˜C Ó#ˆÜˆu‹:˜‹?Ü$ TÓ0Ð0Ø ×8Ñ8¸ÀQ¹xÓHÐÜ Ð!2¸!±HÓ=Ð=r¡   c                 ó~  • U R                   R                  [        SSS95        [        R                  (       a…  SSKJn  U R                  c  U" 5       U l        U R                  R                  nU R                  R                  UR                  UR                  UR                  [        R                  " 5       5        g g )Nr  T©Úlog_pt2_compile_eventr   r†   )r×  Úenter_contextri   r-   Údynamo_profilerÚtorch._dynamo.dynamo_profilerr‡   rÁ  rˆ  rŠ  Úpushr�  r�  r‘  ÚtimeÚtime_ns)rÔ   r‡   Úcodes      r™   Úmark_bytecode_tracing_startÚ'OutputGraph.mark_bytecode_tracing_startT  s“   € Ø×!Ñ!×/Ñ/ÜØ"Ø&*ñô	
ô ×!×!ÝIà×"Ñ"Ñ*Ù&9Ó&;�Ô#Ø—<‘<×&Ñ&ˆDØ×Ñ×$Ñ$Ø—‘Ø× Ñ Ø×#Ñ#Ü—’“õ	ð "r¡   c                 óö  • U R                   R                  5         U R                  R                  5         [        R
                  (       Ga/  U R                  Gb   SSKJn  U R                  R                  5       n[        R                  " 5       nUb—  X2R                  -
  nXBR                  -
  nU" UR                  UR                  UR                   UU[#        U R$                  R&                  R(                  5      SS S S UR*                  SS9nU R                  R-                  U5        S n[/        [        R
                  [0        5      (       a  [        R
                  nU R                  R3                  U5        g g g )Nr   )ÚFunctionTraceTimingr¨   )Ú	func_nameÚfilenameÚfirstlinenoÚ
cumtime_nsÚ
tottime_nsÚbytecode_countÚinline_depthÚcaller_func_nameÚcaller_filenameÚcaller_firstlinenoÚis_primitive_callÚ
call_stack)rØ  r&  r×  Úcloser-   ró  rÁ  rô  rü  r¾   rö  r÷  Ústart_time_nsÚchild_time_nsrý  rþ  rÿ  rë  rˆ  rŠ  Úco_coder  Úrecord_timingrº   r¯   Ú
dump_stats)rÔ   rü  Ústack_entryÚtrace_end_nsr   r  ÚtimingÚoutput_files           r™   Úmark_bytecode_tracing_stopÚ&OutputGraph.mark_bytecode_tracing_stopi  s4  € Ø×%Ñ%×6Ñ6Ô8Ø×!Ñ!×'Ñ'Ô)ä×!×!Ð! d×&9Ñ&9Ò&EÝIà×-Ñ-×1Ñ1Ó3ˆKÜŸ<š<›>ˆLØÑ&Ø)×,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Ñ6Ü$×4Ñ4�Ø×Ñ×*Ñ*¨;Õ7ð9 'FÐ!r¡   c                 óP   • [        U R                  5      nU R                  SU5      $ )NÚ__builtins_dict__)rp  r,  Úinstall_global)rÔ   ro  s     r™   rÔ  Ú-OutputGraph.install_builtins_dict_in_fglobals‹  s&   € Ü& t×'8Ñ'8Ó9ˆ
Ø×"Ñ"Ð#6¸
ÓCÐCr¡   ÚhookÚprefixc                 ó”   • U [        U R                  5       3nX0R                  ;  d   eXR                  U'   X0R                  5       4$ r–   )rë  rÑ  Úget_backward_state_proxy)rÔ   r  r  r  s       r™   Úadd_backward_state_hookÚ#OutputGraph.add_backward_state_hook�  sP   € ð �œ#˜d×1Ñ1Ó2Ð3Ð4ˆØ×.Ñ.Ó.Ð.Ð.Ø$(×Ñ˜DÑ!Ø×2Ñ2Ó4Ð4Ð4r¡   c                 óf  • U R                   c™  U R                  (       a  [        SSS/ S9  [        5       nU R                  R                  S[        U5      U[        5       S9U l         [        5       U R                   R                  R                  S'   U R                  5       U l        U R                   $ )Nz&backward_state does not support exportrƒ  z3Compiled autograd doesn't work with `torch.export`.©Úgb_typeÚcontextÚexplanationÚhintsÚdynamo_backward_state©ÚsourceÚgrapharg)rÒ  r6  rE   r!   Úroot_tracerÚcreate_graph_inputr<  rU   rw   rÅ   ÚmetaÚnew_varrÓ  )rÔ   Úexample_values     r™   r  Ú$OutputGraph.get_backward_state_proxy—  s¡   € Ø×$Ñ$Ñ,Ø�{�{ÜØDØØ UØò	ô *›OˆMØ(,×(8Ñ(8×(KÑ(KØ'Ü�]Ó#ØÜ*Ó,ð	 )Lð )ˆDÔ%ô ?TÓ>UˆD×%Ñ%×*Ñ*×/Ñ/°
Ñ;Ø&*§l¡l£nˆDÔ#Ø×(Ñ(Ð(r¡   c                 ó®  • U R                   R                  [        5       R                  [        R
                  5      5        U R                   R                  [        5       R                  [        R                  5      5        U R                   R                  [        5       R                  [        R                  5      5        U R                   R                  [        5       R                  [        R                  5      5        U R                   R                  [        5       R                  [        R                  5      5        U R                   R                  [        5       R                  [        R                  5      5        [        R                  R                  R                  5       nUb@  U R                   R                  [        5       R                  [        R                   5      5        [        R"                  R$                  R&                  (       dA  U R                   R                  [        5       R                  [        R(                  5      5        g g r–   )r   r¿   r^   Ú
make_guardrM   Ú	SHAPE_ENVrX   ÚDETERMINISTIC_ALGORITHMSÚ	GRAD_MODEÚDEFAULT_DEVICEÚGLOBAL_STATEÚTORCH_FUNCTION_STATEr»   rN  rJ  Úpeek_interpreter_stackÚFUNCTORCH_STACK_MATCHrO  Úcompiled_autogradÚin_compiled_autograd_regionÚAUTOGRAD_SAVED_TENSORS_HOOKS)rÔ   Úcis     r™   rµ  ÚOutputGraph.init_ambient_guards¬  sr  € ð 	�‰�‰œÓ(×3Ñ3´L×4JÑ4JÓKÔLà�‰�‰ÜÓ×*Ñ*¬<×+PÑ+PÓQô	
ð 	�‰�‰Ô)Ó+×6Ñ6´|×7MÑ7MÓNÔOà�‰�‰Ô)Ó+×6Ñ6´|×7RÑ7RÓSÔTà�‰�‰Ô)Ó+×6Ñ6´|×7PÑ7PÓQÔRØ�‰�‰ÜÓ×*Ñ*¬<×+LÑ+LÓMô	
ô �X‰X× Ñ ×7Ñ7Ó9ˆØ‰>Ø�K‰K�O‰OÜ!Ó#×.Ñ.¬|×/QÑ/QÓRôô �}‰}×.Ñ.×J×JØ�K‰K�O‰OÜ!Ó#×.Ñ.Ü ×=Ñ=óõð Kr¡   c                 óv  • [         R                  R                  R                  (       a  g [         R                  R
                  R                  R                  n[         R                  R
                  R                  R                  nU" 5       nU" U5      (       d  g Uu  pEU R                  S[         R                  R                  U R                  UR                  5      5      nU R                  S[         R                  R                  U R                  UR                  5      5      nUS:X  d   eUS:X  d   eXg/$ )NÚsaved_tensors_hooks_packÚsaved_tensors_hooks_unpackÚsaved_tensors_hooks_pack_0Úsaved_tensors_hooks_unpack_0)r»   rO  r9  r:  rJ  Ú_aot_autogradrg  Útop_saved_tensors_hooksÚ"saved_tensors_hooks_are_inlineableÚinstall_subgraphr   r  rç   r‹   )rÔ   Ú	get_hooksÚare_inline_hooksÚhooksÚpack_gmÚ	unpack_gmÚpack_subgraph_nameÚunpack_subgraph_names           r™   rÙ  Ú7OutputGraph.maybe_install_saved_tensors_hooks_subgraphsÊ  s  € Ü�=‰=×*Ñ*×F×FØä×$Ñ$×2Ñ2×8Ñ8×PÑPˆ	ä×Ñ×*Ñ*×0Ñ0×SÑSð 	ñ “ˆÙ ×&Ñ&Øð #ÑˆØ!×2Ñ2Ø&Ü�H‰H× Ñ  §¡°'·-±-Ó@ó
Ðð  $×4Ñ4Ø(Ü�H‰H× Ñ  §¡°)·/±/ÓBó 
Ðð "Ð%AÓAÐAÐAØ#Ð'EÓEÐEÐEØ"Ð9Ð9r¡   rß   .rà   c                 ó‚  ^^• T" U6 nU R                  5       n[        U R                  5      mTR                  UU4S j5        TR	                  [        [        R                  R                  U5      5        TR                  [        U5      S5        TR                  U5        U R                  R                  TR                  5       5        [        U5      n[         R"                  " U R                  X55      nUR%                  5       n[&        R(                  " 5       R*                  R,                  R/                  U5        U$ )zM
call fn(*args) before the graph runs and turn the result into a fake input.
c                  óP   >• T R                  TR                  TR                  5      $ r–   )Úload_import_fromrª   rœ   )Úcgrß   s   €€r™   Ú<lambda>Ú3OutputGraph.synthetic_graph_input.<locals>.<lambda>ñ  s   ø€ �B×'Ñ'Ø—‘Ø—‘ôr¡   F)r,  r?   rˆ  Úadd_push_nullÚforeachÚmapr0   ÚConstantVariableÚcreateÚcall_functionrë  ÚstorerÐ  ÚextendÚget_instructionsr_   r}   ÚbuildÚrealizer   ÚgetÚguards_contextÚdynamo_guardsÚremove_guards_with_source)rÔ   rß   rà   r-  Úvarnamer'  r  rR  s    `     @r™   Úsynthetic_graph_inputÚ!OutputGraph.synthetic_graph_inputç  sñ   ù€ ñ ˜D˜	ˆØ—,‘,“.ˆÜ�t—|‘|Ó$ˆØ
×Ñõô	
ð 	�
‰
”3”y×1Ñ1×8Ñ8¸$Ó?Ô@Ø
×Ñœ˜T› EÔ*Ø
�‰�ÔØ×Ñ×%Ñ% b×&9Ñ&9Ó&;Ô<Ü% gÓ.ˆÜ ×&Ò& t§|¡|°]ÓKˆà—‘Ó!ˆÜ×ÒÓ×+Ñ+×9Ñ9×SÑSØô	
ð ˆr¡   c                 ó:   • U R                   R                  U5        g r–   )r¦  r½   )rÔ   rß   s     r™   Úadd_cleanup_hookÚOutputGraph.add_cleanup_hook  s   € Ø×Ñ×!Ñ! "Õ%r¡   c                 ó~   • [        U R                  5       H
  nU" 5         M     U R                  R                  5         g r–   )Úreversedr¦  Úclear)rÔ   r  s     r™   Úcall_cleanup_hooksÚOutputGraph.call_cleanup_hooks  s.   € Ü˜T×/Ñ/Ö0ˆDÙŽFñ 1à×Ñ× Ñ Õ"r¡   r¢  c                 ó    • U R                   S   $ ©Nr   ©r£  rÓ   s    r™   r)  ÚOutputGraph.root_tracer  s   € à�|‰|˜A‰Ðr¡   c                 ó    • U R                   S   $ ©Néÿÿÿÿrq  rÓ   s    r™   Úcurrent_tracerÚOutputGraph.current_tracer  s   € à�|‰|˜BÑÐr¡   c                 ó2   • [        U R                  5      S:H  $ )Nr,   )rë  r£  rÓ   s    r™   Úis_root_tracerÚOutputGraph.is_root_tracer  s   € ä�4—<‘<Ó  AÑ%Ð%r¡   c                 ó.   • U R                   R                  $ r–   ©rv  r‹   rÓ   s    r™   r‹   ÚOutputGraph.graph  s   € à×"Ñ"×(Ñ(Ð(r¡   Úvaluec                 ó$   • XR                   l        g r–   r|  )rÔ   r~  s     r™   r‹   r}    s   € à$)×ÑÕ!r¡   c                 ó.   • U R                   R                  $ r–   )rv  Úinput_name_to_proxyrÓ   s    r™   r�  ÚOutputGraph.input_name_to_proxy   s   € à×"Ñ"×6Ñ6Ð6r¡   c                 ó.   • U R                   R                  $ r–   )rv  Úreal_value_cacherÓ   s    r™   r„  ÚOutputGraph.real_value_cache$  s   € à×"Ñ"×3Ñ3Ð3r¡   Ú	LazyProxyc                 ó.   • U R                   R                  $ r–   )rv  Úbound_symbolsrÓ   s    r™   rˆ  ÚOutputGraph.bound_symbols(  s   € à×"Ñ"×0Ñ0Ð0r¡   rá   c                 ó:   • U R                   R                  " U0 UD6$ r–   )rv  Úcreate_proxy©rÔ   rà   rá   s      r™   r‹  ÚOutputGraph.create_proxy2  s   € Ø×"Ñ"×/Ò/°Ð@¸Ñ@Ð@r¡   c                 ó:   • U R                   R                  " U0 UD6$ r–   )rv  Úcreate_noderŒ  s      r™   r�  ÚOutputGraph.create_node5  ó   € Ø×"Ñ"×.Ò.°Ð?¸Ñ?Ð?r¡   c                 ó:   • U R                   R                  " U0 UD6$ r–   )rv  Úremove_noderŒ  s      r™   r“  ÚOutputGraph.remove_node8  r‘  r¡   Úsource_targetÚprior_tracerÚdescription)r¢  NNc              #   óê  #   • [        5       n U(       a  UR                  U R                  L d   eUR                  5         U(       a  UO*[	        U U R                  UU R                  R
                  US9nU R                  R                  U5        Uv •  UR                  S S S 5        U R                  R                  5         g ! UR                  S S S 5        U R                  R                  5         f = f7f)N)Úparentr•  rŽ  r—  )
r@   r™  rv  Ú	__enter__r¢  rŽ  r£  r½   Ú__exit__r¾   )rÔ   r•  r–  r—  Únew_scope_ctxÚtracers         r™   Ú	subtracerÚOutputGraph.subtracer;  sÕ   é € ô (Ó)ˆð	Þà#×*Ñ*¨d×.AÑ.AÒAÐAÐAØ×#Ñ#Ô%ö  ñ ä#ØØ×.Ñ.Ø"/Ø"×1Ñ1×;Ñ;Ø +ñð ð �L‰L×Ñ Ô'ØŠLà×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕøð ×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕüs   ‚C3ŽBC Â.C3Ã/C0Ã0C3c                 ó   • U $ r–   r¨   rÓ   s    r™   ÚoutputÚOutputGraph.outputY  s   € àˆr¡   c                 ó`   • U R                   R                  c   eU R                   R                  $ r–   )r±  rÞ  rÓ   s    r™   rÞ  ÚOutputGraph.fake_mode]  s,   € à×#Ñ#×-Ñ-Ñ9Ð9Ð9Ø×#Ñ#×-Ñ-Ð-r¡   c                 óº   • U R                   R                  c   eU R                   R                  R                  c   eU R                   R                  R                  $ r–   )r±  rÞ  r=  rÓ   s    r™   r=  ÚOutputGraph.shape_envb  sP   € à×#Ñ#×-Ñ-Ñ9Ð9Ð9Ø×#Ñ#×-Ñ-×7Ñ7ÑCÐCÐCØ×#Ñ#×-Ñ-×7Ñ7Ð7r¡   c                 óB   • U R                   R                  R                  $ r–   )r±  ra  rb  rÓ   s    r™   r   ÚOutputGraph.guardsh  s   € à×#Ñ#×2Ñ2×@Ñ@Ð@r¡   c                 óB   • U R                   R                  R                  $ r–   )r±  Úmodule_contextrç   rÓ   s    r™   rç   ÚOutputGraph.nn_modulesl  s   € à×#Ñ#×2Ñ2×=Ñ=Ð=r¡   c                 óB   • U R                   R                  R                  $ r–   )r±  ra  rB  rÓ   s    r™   rB  ÚOutputGraph.aotautograd_guardsp  s   € à×#Ñ#×2Ñ2×EÑEÐEr¡   Úoutc                 ó@  • [        [        [        [        [        S[
        4   [        4   4   Ub  UOU R                  R                  R                  5      n[        R                  [        R                  " 5       4US'   [        R                  " [        R                  S5      [        R                   " S5      4US'   [        R                  " [        R                  S5      [        R                   " S5      4US'   [        R                  " [        R"                  S5      [        R$                  " S5      4US'   [        R                  " [        R"                  S5      [        R$                  " S5      4US	'   [        R&                  [        R(                  " 5       4US
'   g)zS
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Ú	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¹  s      r™   rÍ  ÚOutputGraph.save_global_statet  s_  € ô Ü””eœH S¬# XÑ.´Ð4Ñ5Ð5Ñ6ð ‘?ñ à×)Ñ)×8Ñ8×EÑEó
ˆô ).×(>Ñ(>Ä×@UÒ@UÓ@WÐ'Xˆ�^Ñ$ô ×Òœe×8Ñ8¸&ÓAÜ×%Ò% fÓ-ð,
ˆÐ'Ñ(ô
 ×Òœe×8Ñ8¸%Ó@Ü×%Ò% eÓ,ð0
ˆÐ+Ñ,ô
 ×Òœe×6Ñ6¸Ó?Ü×$Ò$ VÓ,ð.
ˆÐ)Ñ*ô
 ×Òœe×6Ñ6¸Ó>Ü×$Ò$ UÓ+ð.
ˆÐ)Ñ*ô
 ×,Ñ,Ü×+Ò+Ó-ð2
ˆÐ-Ò.r¡   Útxc                 ó:   • U R                   R                  U5        g r–   )rÃ  r½   )rÔ   rÅ  s     r™   Úpush_txÚOutputGraph.push_txš  s   € Ø×Ñ×Ñ Õ#r¡   c                 ó6   • U R                   R                  5       $ r–   )rÃ  r¾   rÓ   s    r™   Úpop_txÚOutputGraph.pop_tx�  s   € Ø×Ñ×#Ñ#Ó%Ð%r¡   c                 óZ   • U R                   (       d  U R                  $ U R                   S   $ rt  )rÃ  rˆ  rÓ   s    r™   Ú
current_txÚOutputGraph.current_tx   s$   € à#'×#3×#3ˆt�|‰|ÐM¸×9IÑ9IÈ"Ñ9MÐMr¡   c                 ó,   • [        U R                  5      $ r–   )rg   r‹   rÓ   s    r™   rg   ÚOutputGraph.count_calls¤  s   € Ü˜4Ÿ:™:Ó&Ð&r¡   c                 óX   • [        [        U R                  R                  5      5      S:H  $ rp  )rë  rÙ   r‹   ÚnodesrÓ   s    r™   Úis_empty_graphÚOutputGraph.is_empty_graph§  s!   € Ü”4˜Ÿ
™
×(Ñ(Ó)Ó*¨aÑ/Ð/r¡   c                 ó”   • [        U R                  R                   Vs/ s H  oR                  S:X  d  M  UPM     sn5      S:„  $ s  snf )Nr¡  r   )rë  r‹   rÒ  Úop)rÔ   Úxs     r™   Úhas_outputsÚOutputGraph.has_outputsª  s9   € Ü˜tŸz™z×/Ò/ÓDÒ/˜!·4±4¸8Ñ3C—AÑ/ÑDÓEÈÑIÐIùÒDs
   žAµAÚkeysc                 ó¬   • U(       d   eU R                   nUR                  S5       H)  n[        U[        5      (       a  X#   nM  [	        X#5      nM+     U$ ©Nrã  )rç   rä  rº   r÷   rž   )rÔ   rÚ  Úobjrí   s       r™   Úget_submoduleÚOutputGraph.get_submodule­  sH   € ÞˆˆtØBFÇ/Á/ˆØ—‘˜C–ˆAÜ˜#œt×$Ñ$Ø‘f’ä˜c“o’ñ	 !ð
 ˆ
r¡   r  c                 óª   • [        U R                  S   5      n U S[        U R                  5       3nX2;  a  U R                  S==   U4-  ss'   U$ M;  )NÚco_varnamesrÄ   )r¹   r‡  r§  r½  )rÔ   r  ÚexistingÚvars       r™   r,  ÚOutputGraph.new_var·  s^   € Ü�t×(Ñ(¨Ñ7Ó8ˆàØ�F˜!œD ×!3Ñ!3Ó4Ð5Ð6ˆCØÓ"Ø×!Ñ! -Ó0°S°FÑ:Ó0Ø�
ñ	 r¡   c                 óZ   • XR                   S   ;  a  U R                   S==   U4-  ss'   gg)z/Ensure self.code_options.co_names contains nameÚco_namesN)r‡  )rÔ   r  s     r™   Úupdate_co_namesÚOutputGraph.update_co_namesÀ  s0   € à×(Ñ(¨Ñ4Ó4Ø×Ñ˜jÓ)¨d¨WÑ4Ô)ð 5r¡   Únamesc                  ó|  • SR                  [        [        U 5      5      n[        R                  " SSU5      n[        R                  " SSU5      n[        R                  " SSU5      n[        R                  " SS	U5      n[        R                  " S
SU5      nU(       a  US   R                  5       (       d  SU-   nU$ )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)ÚjoinrW  r¯   Úrerë  Úisalpha)ré  r  s     r™   Úmodule_key_nameÚ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                 óp  • [        U[        R                  R                  5      (       a?  U R                  R                  5        H!  u  p4XBL d  M  U R                  SUS0 5      nUs  $    [        XR                  5      nX R                  U'   U R                  SUS0 5      n[        UR                  U5        U$ )NÚget_attrr¨   )
rº   r»   rø   rù   rç   rë   r‹  rn   rv   rÅ   )rÔ   rñ  rò  r  ÚmodÚproxyÚ	attr_names          r™   Ú%register_static_attr_and_return_proxyÚ1OutputGraph.register_static_attr_and_return_proxyÝ  sš   € ô
 �j¤%§(¡(§/¡/×2Ñ2Ø!Ÿ_™_×2Ñ2Ö4‘	�ØÔ$Ø ×-Ñ-¨j¸$ÀÀBÓG�EØ ’Lñ 5ô
 (¨·_±_ÓEˆ	ð &0�‰˜	Ñ"Ø×!Ñ! *¨i¸¸RÓ@ˆÜ˜%Ÿ*™* jÔ1Øˆr¡   ÚtargetÚoptionsc                 óþ  ^ ^^^
^^• [        TT R                  5      (       a"  [        R                  " T R                  T40 TD6$ [        T5      mST;   d   eTS   m[        T[        5      (       a   e[        T[        R                  5      (       aG  T R                  mT R                  5       (       d  T R                  mS[        S[        4UU UUU4S jjnGO
[        T[        R                  R                  5      (       a†  [        T[        R                  R                  5      (       d   eT(       a>  [!        TR#                  [$        R&                  5      5        S[        S[        4UU4S jjnOqS[        S[        4UU4S jjnO[[        T[        R(                  [        R*                  45      (       a  S[        S[        4UU U4S jjnOS[        S[        4U U4S jjnT R,                  R/                  5        H  u  pVUTL d  M  U" U5      s  $    [0        R2                  " U6 m
[5        T
T R,                  T R6                  5      m
TT R,                  T
'   [        T[        R                  R                  5      (       av  S	[        SS 4U
U U4S
 jjn[9        TS5      (       a!  TR;                  5        H  u  p‰U" U5        M     [9        TS5      (       a!  TR=                  5        H  u  p‰U" U5        M     U" T
5      $ )Nr'  Ú
module_keyr‘   c           	      ód  >• TR                   c   eTTR                   U '   TR                  c   eTTR                  R                  R                  ;   a#  TR                  R                  R                  T   $ [	        T5      S:X  a>  [        T[        5      (       d)  [        TR                  [        R                  5      5        O8[        T5      (       d(  [        TR                  [        R                  5      5        [        TR                  TR                  SU S0 5      4ST0TD6nTR                  R                  R                  R                  TU5      nSUR!                  5       R"                  R$                  ;  d   e['        T5      UR!                  5       R"                  R$                  S'   U$ )NÚguardedrô  r¨   r-  Útensor_dict)r¸  rˆ  r¡  r†  rm   rº   r\   rN   r0  rM   ÚID_MATCHrY   ÚTENSOR_MATCHrz   r‹  Útrack_object_existingÚas_proxyrÅ   r+  rb   )rý  Úvtrû  rÔ   r'  rú  r�  s     €€€€€r™   Ú	wrap_nameÚ6OutputGraph.register_attr_or_module.<locals>.wrap_name  sn  ø€ Ø×0Ñ0Ñ<Ð<Ð<Ø8>�×)Ñ)¨*Ñ5ð —|‘|Ñ/Ð/Ð/Ø˜TŸ\™\×0Ñ0×=Ñ=Ó=ØŸ<™<×.Ñ.×;Ñ;¸FÑCÐCä*¨6Ó2°iÓ?Ì
ØÔ-÷Iñ Iô " &×"3Ñ"3´L×4IÑ4IÓ"JÕKÜ+¨F×3Ñ3Ü! &×"3Ñ"3´L×4MÑ4MÓ"NÔOä"Ø—L‘LØ×'Ñ'¨
°JÀÀBÓGñð #)ðð ñ	�ð —\‘\×(Ñ(×5Ñ5×KÑKÈFÐTVÓW�à$¨B¯K©K«M×,>Ñ,>×,CÑ,CÓCÐCÐCä9MÈfÓ9U�—‘“×"Ñ"×'Ñ'¨Ñ6à�	r¡   c                 ó2   >• [        [        T5      U T40 TD6$ r–   )r€   r<  ©rý  rû  rú  s    €€r™   r  r  8  s   ø€ ä+¬D°«L¸*ÀfÑXÐPWÑXÐXr¡   c                 ó2   >• [         R                  " T40 TD6$ r–   )r0   ÚUnspecializedNNModuleVariabler	  s    €€r™   r  r  A  s   ø€ ä$×BÒBÀ6ÑUÈWÑUÐUr¡   c           	      óp   >• [         R                  " TR                  TR                  SU S0 5      4ST0TD6$ )Nrô  r¨   Úsym_num)r‚   rY  rˆ  r‹  )rý  rû  rÔ   rú  s    €€€r™   r  r  M  sE   ø€ Ü&×-Ò-Ø—L‘LØ×%Ñ% j°*¸bÀ"ÓEñð #ðð ñ	ð r¡   c                 ó–   >• TR                   R                  U 5        TTR                  U '   [        R                  " TT[        U S95      $ )N)Úsource_name)r¡  rç  r,  r}   r^  rV   )rý  rÔ   rú  s    €€r™   r  r  X  sF   ø€ Ø—‘×+Ñ+¨JÔ7Ø06�×!Ñ! *Ñ-Ü&×,Ò,ØØÜ"¨zÑ:óð r¡   Ú	leaf_namec                 óø   >• TR                   c   eTR                  TU 5      nT SU  3nUTR                   U'   [        T[        5      (       a-  U TR                  [
        R                  UR                  5      '   g g rÜ  ©r¸  rí  rº   r[   rÎ  r…  rï  r  ©r  Ú
new_sourceÚnew_namer  rÔ   r'  s      €€€r™   Úregister_leaf_nameÚ?OutputGraph.register_attr_or_module.<locals>.register_leaf_namek  s€   ø€ Ø×0Ñ0Ñ<Ð<Ð<Ø!×AÑAÀ&È)ÓT�
Ø"˜V 1 Y KÐ0�Ø6@�×)Ñ)¨(Ñ3Ü˜f¤k×2Ñ2ð "ð ×9Ñ9Ü#×3Ñ3°J·O±OÓDòð 3r¡   Ú_parametersÚ_buffers)rO   r6  r}   r^  rÍ  r÷   rº   r]   r»   r   rv  ry  r)  r¯   rø   rù   rN   r0  rM   Ú	NN_MODULEÚSymIntÚSymFloatrç   rë   r…  rï  rn   r,  ÚhasattrÚnamed_parametersÚnamed_buffers)rÔ   rú  ré  rû  r  rí   rî   r  r  rÄ   r  r'  r�  s   `` `      @@@r™   Úregister_attr_or_moduleÚ#OutputGraph.register_attr_or_moduleð  s  ý€ ô   ¨¯©×4Ñ4ô #×(Ò(¨¯©¸&ÑLÀGÑLÐLä�w“-ˆØ˜7Ó"Ð"Ð"Ø˜Ñ"ˆÜ˜fÔ&7×8Ñ8Ð8Ð8ä�fœeŸl™l×+Ñ+Ø×(Ñ(ˆFØ×&Ñ&×(Ñ(ð ×)Ñ)�ð ¤cð  ¬o÷  õ  ôD ˜¤§¡§¡×0Ñ0Ü˜f¤e§h¡h§o¡o×6Ñ6Ð6Ð6æÜ˜f×/Ñ/´×0FÑ0FÓGÔHðY¬#ð Y´/÷ Yñ YðV¬#ð V´/÷ Vñ Vô ˜¤§¡¬u¯~©~Ð >×?Ñ?ð¤cð ¬o÷ ò ð¤cð ¬o÷ ð ð —O‘O×)Ñ)Ö+‰DˆAØ�FŒ{á  “|Ò#ñ ,ô
 ×*Ò*¨EÐ2ˆÜ" 4¨¯©¸$×:KÑ:KÓLˆØ &ˆ�‰˜ÑÜ�fœeŸh™hŸo™o×.Ñ.ð"¬cð "°d÷ "ñ "ô �v˜}×-Ñ-Ø$*×$;Ñ$;Ö$=‘L�IÙ& yÖ1ñ %>ä�v˜z×*Ñ*Ø$*×$8Ñ$8Ö$:‘L�IÙ& yÖ1ñ %;ñ ˜‹Ðr¡   c                 óX  • U R                   R                  S5      n[        U5      nU(       d  / 0 4$ / n0 n/ UR                  QUR                  R                  5       QU R                  R                  R                  5       QnU(       GaC  UR                  5       n[        U[        5      (       a1  [        UR                  [        5      (       d   eXgR                  -  nM^  XpR                  R                  ;  d  [        UR                  [        5      (       al  [        UR                   ["        5      (       aM  [        UR                   R$                  [&        5      (       a$  UR                   R$                  R(                  U;   d  GM  UR                   R$                  R(                  nX…;  a  / XX'   XX   R+                  U5        U(       a  GMC  0 n	0 n
U R,                   GHG  n[        UR.                  [        5      (       a9  [        UR                   [&        5      (       a  UR                   R(                  U;   d  M^  UR                   R(                  nXÀR0                  S   ;   d   eX\    H·  nUR                   U
;   a  M  UR                   c   eUR                   R2                  nXÙ;  aN  U R5                  U S35      nXéU'   UR7                  [9        SUS9[;        U5      [=        5       [9        SUS9/5        UR                   c   eUR                   n['        X�   5      X¯'   M¹     GMJ     XJ4$ )NrÔ   rá  Ú_refÚ	LOAD_FAST©ÚargvalÚ
STORE_FAST)r+  r`  rl   rÂ   Úsymbolic_localsÚvaluesr†  Ústore_attr_mutationsrÚ  r¾   rº   r~   rë   rÙ   Úmutation_typerP   r'  rW   rà  r[   Ú
local_namer½   Ú	graphargsÚ_exampler‡  Úindexr,  r\  r8   r9   r4   )rÔ   rÅ  Úmaybe_gmÚstolen_list_namesÚalias_instsÚneeds_aliasÚqueuer×  Ústolen_namerÁ   Úoverridden_sourcesÚargÚ	list_nameÚlist_idxÚ
alias_nameÚ
old_sources                   r™   Úhandle_aliases_for_stolen_listsÚ+OutputGraph.handle_aliases_for_stolen_lists€  s²  € ð ×#Ñ#×'Ñ'¨Ó/ˆÜ/°Ó9ÐÞ Ø�r�6ˆMàˆØ8:ˆð
Ø�X‰Xð
à×Ñ×&Ñ&Ó(ð
ð ×Ñ×3Ñ3×8Ñ8Ó:ð
ˆ÷ Ø—	‘	“ˆAÜ˜!Ô-×.Ñ.Ü! !§'¡'¬4×0Ñ0Ð0Ð0ØŸ™Ñ �Ùð ×.Ñ.×CÑCÓCÜ! !§/¡/Ô3L×MÑMä˜qŸx™x¬×7Ñ7Ü˜qŸx™xŸ}™}¬k×:Ñ:Ø—H‘H—M‘M×,Ñ,Ð0AÓAâàŸ(™(Ÿ-™-×2Ñ2ˆKØÓ-Ø+-�Ñ(ØÑ$×+Ñ+¨AÔ.÷+ ‰eð0 ˆØ35ÐØ—>•>ˆCä˜3Ÿ<™<¬×.Ñ.Ü˜sŸz™z¬;×7Ñ7Ø—J‘J×)Ñ)¨[Ó8áð Ÿ
™
×-Ñ-ˆIØ× 1Ñ 1°-Ñ @Ó@Ð@Ð@Ø Ô+�à—8‘8Ð1Ó1Ùð —x‘xÑ+Ð+Ð+ØŸ8™8Ÿ>™>�ØÓ*Ø!%§¡Ø$˜+ TÐ*ó"�Jð )3˜HÑ%à×&Ñ&ä.¨{À9ÑMÜ-¨hÓ7Ü0Ó2Ü.¨|ÀJÑOð	ôð —x‘xÑ+Ð+Ð+ØŸX™X�
Ü1<¸WÑ=NÓ1OÐ"Ó.ô9 ,ñ "ðZ Ð.Ð.r¡   Ú
stack_popsc                 ó¨  • UR                  5         / n[        5       nS[        SS4S jn[        UR                  5       GHN  u  pg[        UR                  5      U-
  U:*  n[        R                  R                  XxS9  [        U[        R                  5      (       d  [        R                  " XW5        U(       a  UR                  U5        M�  [        U[        5      (       a  UR                  R                  U5        OUR                  U5        [        U[        5      (       d  Mæ  UR                   c  SO[#        UR                   5      n	UR$                  R                  [        U5      S-
  U	45        UR&                  R                  U5        GMQ     [        U5      Ul        [+        UR-                  5       UR/                  5       -   5      n
UR0                  R3                  5        GHf  u  p¼[        R                  " X\5        [        UR4                  [6        5      (       a*  UR4                  R8                  U:X  a  XR:                  L a  Me  Xº;   a  Ml  [<        R>                  S:¼  a=  [@        RC                  [        U5      (       a  URD                  R                  U5        M¼  O![@        RC                  [        U5      (       a   e[        URF                  5      URF                  U'   [        U[        5      (       a@  UR                   c  SO[#        UR                   5      n	URH                  R                  X¹45        UR                  U5        GMi     X44$ )	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                 ól   • [         R                  [        R                  U 5      (       a  [	        S5      eg )NzCAttempted to reconstruct WithExitFunctionVariable outside the stack)r<  Ú__instancecheck__r0   ÚWithExitFunctionVariabler;  )rã  s    r™   Úctx_exit_checkÚ@OutputGraph._get_stack_values_to_restore.<locals>.ctx_exit_checkñ  s1   € Ü×%Ñ%¤i×&HÑ&HÈ#×NÑNÜ$ØYóð ð Or¡   )Úallow_lazy_constantr¨   r,   )é   é   )%Úprune_dead_localsrU  r}   Ú	enumeraterÂ   rë  r0   ÚLazyVariableTrackerÚrealize_allrº   rB  Úvisitr½   r   rZ  r{   Útarget_valuesr`  r\  r]  rV  r¹   ÚcellvarsÚfreevarsr(  rë   r'  r[   r,  rˆ  ÚsysÚversion_infor<  rA  r[  rY  r^  )rÔ   rÅ  r>  Ústack_valuesr+  rC  Úir~  rE  rM  Úcell_and_freevarsrí   rî   s                r™   Ú_get_stack_values_to_restoreÚ(OutputGraph._get_stack_values_to_restoreÛ  s«  € ð" 	×ÑÔàˆÜ"Ó$ˆð	¤ð 	°Dô 	ô " "§(¡(×+‰HˆAä"% b§h¡h£-°!Ñ"3°zÑ"AÐÜ×)Ñ)×5Ñ5Øð 6ñ ô ˜e¤Y×%GÑ%G×HÑHÜ×%Ò% nÔ<æ"Ø×#Ñ# EÔ*ÙÜ˜%¤×.Ñ.Ø×%Ñ%×,Ñ,¨QÕ/à×#Ñ# EÔ*Ü˜%Ô!8×9Ó9à×-Ñ-Ñ5‘B¼5À×ATÑATÓ;Uð ð ×#Ñ#×*Ñ*¬C°Ó,=ÀÑ,AÀ=Ð+QÔRØ×)Ñ)×0Ñ0°×3ñ/ ,ô2 ˜\Ó*ˆŒä §¡£°·±³Ñ =Ó>Ðð ×&Ñ&×,Ñ,×.‰DˆAä×!Ò! .Ô4ô ˜1Ÿ8™8¤[×1Ñ1Ø—H‘H×'Ñ'¨1Ó,ØŸ,™,Ò&áàÓ%Ùä×Ñ 7Ó*ô ×)Ñ)¬,¸×:Ñ:Ø×)Ñ)×0Ñ0°Ô3Ùð ;ô
  ×1Ñ1´,À×BÑBÐBÐBÜ#& t×'8Ñ'8Ó#9ˆD×Ñ˜aÑ Ü˜!Ô4×5Ñ5àŸ/™/Ñ1‘B´u¸Q¿_¹_Ó7Mð ð ×$Ñ$×+Ñ+¨QÐ,>Ô?Ø×Ñ ×"ñG /ðJ Ð!Ð!r¡   rÏ   c                 óœ  • U R                   c   e[        R                  (       d  U R                   UL d   eU R                  5         X l        SU l        [        R                  SU5        / n[        R                  S:¼  a�  U R                   R                   Hs  nUR                  S:X  a;  UR                  [        S[        U R                   R                  S   5      S95        MN  UR                  [         R                   " U5      5        Mu     / n/ nUnUb¥  [#        S UR$                   5       5      (       d   eU R'                  XˆUL a  UOS	5      u  pšUR                  U	5        UR                  U
5        [)        UR$                  5       H  nUR+                  X‚R,                  S
9  M     UR.                  nUb  M¥  U R0                  R3                  U5        U R5                  U5        U R6                  (       a  U R8                  (       a   S5       eU R5                  U R6                  5        U R;                  U R                   5      u  pÍU R5                  U5        U R=                  5         U R>                  RA                  5        VVs0 s H  u  pïU[C        U5      _M     nnn[E        U5      nSSK#J$n  [        U RJ                  5      S	:”  aÐ  / nU RM                  S5      U l'        U" [Q        U RJ                  5      SS9nU RS                  SU5      n[U        U R                   UUS9nURW                  URY                  US5      5        URW                  [[        S	S5      5        UR                  UR]                  U RN                  5      5        U R5                  U5        U VVs/ s H  nU  H  nUPM     M     nnnSnSnU R                   UL GaO  U(       GaG  [#        S U 5       5      (       Ga/  [#        S U 5       5      (       Ga  [        [_        U5      5      [        U5      :X  aö  U R0                  Ra                  5       (       a×  URb                  (       dÆ  U Rd                  (       dµ  US   Rf                  (       d¡  US   Rh                  (       d�  [U        U R                   5      nU Rk                  UU5        U R5                  / U Rm                  U[o        [)        U5      5      U5      QURq                  5       Q[s        S5      Q[        S[        U5      S9P5        GO-U RM                  S5      n[U        U R                   UUUS9nU Ru                  UUUS5        0 nURv                  RA                  5        H0  u  nnUS:”  d  M  [y        U[z        [|        45      (       a  M+  SUU'   M2     [U        U R                   UUUUS9n U Ru                  UUU S5        [~        R€                  R                  R‚                  (       Ga`  U(       GaX  [        U5      S:X  GaH  US	   n![…        U![~        R€                  R†                  Rˆ                  5      (       Ga  U!RŠ                  [~        R€                  RŒ                  RŽ                  L GaÝ  U!R@                  S	   n"U!R@                  S   n#[…        U"[~        R€                  R†                  R�                  5      (       d   e0 n$U R’                  R•                  5        HS  n%[…        U%[~        R€                  R–                  R˜                  5      (       d   eU%Rš                  n&U%Rœ                  U$U&'   MU     [Ÿ        U"R@                  5       HÞ  u  n'n!U!U$;   a   SU$U!   4U R                   R¢                  U''   M,  U!R¤                  bV  [§        U!R¤                  SS5      =n((       a8  U(R¨                  (       a'  SU!R¤                  4U R                   R¢                  U''   M�  U!R«                  5       (       a+  SU!R­                  5       4U R                   R¢                  U''   MÏ  [¯        SU! SU' 35      e    U#R­                  5       U R                   lX        / n*[·        U R¸                  5      S	:w  d  [        U R’                  5      S	:w  a‡  U*RW                  U Rm                  UU R»                  5       U5      5        [        U R’                  5      S	:w  a#  U*R                  U R]                  U5      5        SnO+U*R                  [        S&5      5        OU R½                  5         U R5                  U*U Rq                  5       -   5        U R5                  [        S'[        U5      US	   R¾                  -
  S9/5        S	n+S	n,[Ÿ        U5       GHÊ  u  n-n
[        U
RÀ                  5      n.U-S	:w  a  U.U
R¾                  -  n.U.S	:X  a&  U R5                  [        S'S	S9/[s        S5      Q5        O;U,U.-  n,U R5                  [Ã        5       /[Å        U+U,5      Q[s        S5      Q5        U+U.-  n+U-[        U5      S-
  :X  d  M¬  [U        U R                   5      n/0 n0U R                   RÆ                  RA                  5        H‡  u  n1n2[…        U2R¤                  [|        5      (       d  M'  U2R¤                  RÈ                  U1:X  d  MC  U/RË                  U/RÍ                  U15      5        [        U
RÀ                  5      [        U05      -   U0U1'   M‰     U R5                  U/Rq                  5       [        S'[        U05      S9[        S(SS9/-   5        U
RÀ                  RÏ                  U05        GMÍ     U R5                  [        S&5      [        S'[        U5      S9/[Ñ        US	   R¾                  S-   5      Q5        U(       a!  U(       a  U R5                  [        S)US*9/5        [~        R€                  R                  RÒ                  S+;   Ga  S	S,KjJkn3  / n4U R0                  RÙ                  5        GH{  n5[Û        U5S-5      (       d  M  U5RÜ                  n6[…        U6[Þ        [à        45      (       d  M@  […        U5[â        5      (       aâ  […        U5Rä                  U35      (       aÇ  U5R@                  RA                  5        H©  u  n1n20 n7U2R@                  RA                  5        H1  u  n8nUR­                  5       U7U8Ræ                  R­                  5       '   M3     S.S//[o        U7Ré                  5       5      :X  d   eU7U R                   Rê                  U1Ræ                  R­                  5       '   M«     […        U5[â        5      (       a  […        U5Rä                  U35      (       a  GMj  U4R                  U55        GM~     U4 V5s/ s H  n5[í        U5R¤                  5      PM     n9n5U9(       aQ  [~        R€                  R                  RÒ                  S0:X  a  [î        Rð                  " S1U9 35        U$ [ó        S1U9 35      eU$ s  snnf s  snnf ! [²         a  n)[µ        S S!U# 3S"S#S$/U)S%9   Sn)A)GNæSn)A)ff = fs  sn5f )2au  
Compiles the current subgraph, with inputs w.r.t. self.root_tx, and codegens:
    - Call the compiled subgraph
    - Apply side effects
    - Codegen stack and locals
    - Store the locals

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

Returns stack indices and locals keys where we dropped NULLs, and where we found inactive context manager objects.
NTzCOMPILING GRAPH due to %s©rF  é   ÚCOPY_FREE_VARSÚco_freevars©r7  c              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr–   )Úcan_restore)Ú.0Úblocks     r™   Ú	<genexpr>Ú/OutputGraph.compile_subgraph.<locals>.<genexpr>~  s   é € ÐKÒ8J¨u×(Ñ(×*Ð*Ò8Jùó   ‚r   )Úis_graph_breakz)export does not support pregraph_bytecoder,   ©ÚdisableÚrandom_valuesz.do not trace into Dynamo rng recovery function©rÏ   Ú__gen_rand_values)r6  Fc              3   óÔ   #   • U  H^  n[        U[        [        [        45      (       + =(       a2    [        U[        5      =(       a    UR                  5       [        L (       + v •  M`     g 7fr–   )rº   rƒ   r�   r„   r‚   Úpython_typeÚfloat)r_  rî   s     r™   ra  rb  Ø  sa   é € ð ò +�Aô Øä3Ü,Ü4ðóô ÷ Vô $ A¤Ó7×T¸A¿M¹M»OÌuÐ<TÔUôVò +ùs   ‚A&A(c              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr–   )Ú	is_tensor©r_  r×  s     r™   ra  rb  ä  s   é € Ð=Ò+< a—K‘K—M�MÒ+<ùrc  ru  é   ÚUNPACK_SEQUENCEÚ	graph_out)Útempvarsr6  rà  ÚinputÚconstantzEncountered unrecognized type z at output z8nested function with non-constructible closure in outputz as_python_constant for out_spec z£Cannot return a nested function with closure from a compiled function. Dynamo failed to construct the function defined in the compiled region with closure objects.zGDefine the function at module scope instead of inside another function z0Ensure that all closure variables are constants.)r!  r"  r#  r$  Úfrom_excÚPOP_TOPÚ
BUILD_LISTÚLIST_EXTENDÚDELETE_FASTr%  )ÚwarnÚerror)Ú_ExportModuleSpecTrackerDictr+  Úin_specre  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: )zrˆ  r-   Únested_graph_breaksr  Úcompile_subgraph_reasonrÅ  rË   ÚdebugrP  rQ  Úprefix_instsÚopnamer½   r8   rë  r‡  r  ÚallÚblock_stackrU  rk  ÚexitrÑ   r™  r†  Úprune_dead_object_newÚadd_output_instructionsrÐ  r6  r<  Úcleanup_graphrç   rë   rt   ræ   Ú
decoratorsrf  rÜ   r,  rÏ  rä   r  r?   r\  Úload_function_namer6   Úcreate_storer¹   Úis_emptyÚdebug_localsrÑ  rZ  r[  Úcodegen_cellsÚcompile_and_call_fx_graphrÙ   r]  r;   Úcodegen_suffixÚusesrq   r_   r[   r»   rO  Úlog_graph_in_out_metadatarº   r0   ÚNamedTupleVariableÚ	tuple_clsÚfunctional_exportÚExportTracerOutputÚListVariableÚgraph_outputsr)  ÚcodegenÚGraphOutputEntryÚvariabler/  rI  ru  rd  r'  rž   Úis_inputÚis_python_constantÚas_python_constantr;  re  r|   rE   rg   r‹   Úgraph_output_varsÚrun_compiler_collectiverV  rY  r7   r3   r(  r,  Úappend_outputÚcreate_loadÚupdater:   Úside_effect_replay_policyÚtorch.export._tracer}  Ú_get_modified_varsr  r+  rP   rR   r…   r~  r  rÚ  rf  rS   Úwarningsr{  r  ):rÔ   rÅ  rÏ   r>  r‚  ÚinstÚall_stack_valuesÚall_stack_locals_metasÚcur_txrR  r+  r`  r2  r6  r  rõ  Únn_modules_proxiesÚrootrf  Úrandom_calls_instructionsÚrand_fnÚrand_fn_namerš  ÚvalsÚvalÚstack_values_flatÚstored_graph_output_varÚgraph_output_varÚcell_cgÚpass1rs  r¼  Úpass2r  Úflat_returnsre  Úvt_to_graph_out_idxr~  rœ  Úidxr'  Úer¡  Ú	start_idxÚend_idxrS  Ún_valsÚroot_cgÚunmodified_locals_namesrí   rî   r}  Úpotential_side_effectsrã  Úmut_typeÚspecsÚk_specÚside_effect_refss:                                                             r™   Úcompile_subgraphÚOutputGraph.compile_subgraphE  s  € ð* �|‰|Ñ'Ð'Ð'ä×)×)à—<‘< 2Ò%Ð%Ð%ð 	×'Ñ'Ô)à'-Ô$ØˆÔä�	‰	Ð-¨vÔ6ð +-ˆÜ×Ñ˜wÓ&ØŸ™×1Ô1�Ø—;‘;Ð"2Ó2Ø ×'Ñ'Ü*Ø,Ü # D§L¡L×$=Ñ$=¸mÑ$LÓ Mñöð !×'Ñ'¬¯	ª	°$«Ö8ñ 2ð ÐØ!#ÐØ68ˆØÑ äÑK¸×8JÒ8JÓK×KÑKÐKÐKà!%×!BÑ!BØ°¢l™
¸ó"ÑˆLð ×#Ñ# LÔ1Ø"×)Ñ)¨$Ô/ô " &×"4Ñ"4Ö5�Ø—
‘
˜6×2DÑ2D�
ÓEñ 6ð —]‘]ˆFð Ó ð" 	×Ñ×/Ñ/°Ô3à×$Ñ$ \Ô2à×*×*¨t¯{¯{ð 	
Ø7ó	
Ð;ð 	×$Ñ$ T×%;Ñ%;Ô<à*.×*NÑ*NØ�L‰Ló+
Ñ'ˆð 	×$Ñ$ [Ô1à×ÑÔð 9=¿¹×8MÑ8MÔ8Oô
Ú8O©9¨4ˆD”/ #Ó&Ò&Ñ8Oð 	ñ 
ô Ð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ÌÀ#›SÉ™SÑ-=ÐÑNØ"'ÐØÐð �L‰L˜BÓß!Üñ ñ +ó÷ ò ô Ñ=Ñ+<Ó=×=Ò=Ü”CÐ)Ó*Ó+¬sÐ3DÓ/EÓEØ×!Ñ!×*Ñ*×,Ñ,Ø—O—OØ×'×'Ø*¨2Ñ.×?×?Ø*¨2Ñ.×?×?ô   §¡Ó-ˆGØ×Ñ˜r 7Ô+Ø×(Ñ(ðà×3Ñ3ØœD¤Ð*;Ó!<Ó=¸tóðð
 ×-Ñ-Ó/ðô ! “^ðô 'Ð'8¼cÐBSÓ>TÑUðö
ð  $Ÿ|™|¨KÓ8Ðô Ø—‘ØØ Ø#5ñ	ˆEð ×Ñ Ð$5°u¸eÔDð ˆHØ#Ÿj™j×.Ñ.Ö0‘
��Uà˜1•9¤V¨CÔ2FÌÐ1T×%UÓ%Uà$(�H˜S“Mñ	 1ô
 Ø—‘ØØ à!Ø#5ñˆEð ×Ñ Ð$5°u¸dÔCô —‘×$Ñ$×>×>Ð>ß%ÜÐ)Ó*¨aÔ/à& qÑ)�ä˜r¤5§=¡=×#:Ñ#:×#MÑ#M×NÒNØŸ™Ü—}‘}×6Ñ6×IÑIóJð $&§8¡8¨A¡;�LØ!Ÿx™x¨™{�HÜ%Ø$¤e§m¡m×&=Ñ&=×&JÑ&J÷ñ ð ð ð GIÐ'Ø!&×!4Ñ!4×!;Ñ!;Ö!=˜Ü)¨%´·±×1FÑ1F×1WÑ1W×XÑXÐXÐXØ49·N±N˜Ø8=¿¹Ð+¨HÓ5ñ ">ô
 $-¨\×-?Ñ-?Ö#@™˜˜RØÐ!4Ó4à +Ø 3°BÑ 7ðL˜D×0Ñ0×CÑCÀCÓHð
 ŸI™IÑ1Ü+2°2·9±9¸fÀdÓ+KÐ!K Õ!KØ &§§ð !(Ø "§	¡	ðL˜D×0Ñ0×CÑCÀCÓHð  ×2Ñ2×4Ñ4à *Ø "× 5Ñ 5Ó 7ðL˜D×0Ñ0×CÑCÀCÓHô
 #1Ø"@ÀÀÀKÐPSÈuÐ Uó#ð ñ+ $Að0Ø8@×8SÑ8SÓ8U˜×,Ñ,Ô5ð  ˆFÜ˜4Ÿ:™:Ó&¨!Ó+¬s°5×3FÑ3FÓ/GÈ1Ó/LØ—‘Ø×2Ñ2°2°u×7NÑ7NÓ7PÐRVÓWôô �u×*Ñ*Ó+¨qÓ0Ø—M‘M %×"4Ñ"4Ð5EÓ"FÔGØ.2Ñ+à—M‘MÔ"4°YÓ"?Õ@ð ×,Ñ,Ô.Ø×(Ñ(¨°%×2HÑ2HÓ2JÑ)JÔKð 	×$Ñ$ä"Ø ÜÐ-Ó.Ð1GÈÑ1J×1TÑ1TÑTñðô	
ð& ˆ	ØˆÜ Ð!7×8‰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Ó8¸Q¿X¹X×=PÑ=PÐTUÕ=UØ×-Ñ-¨g×.AÑ.AÀ!Ó.DÔEÜ58¸×9JÑ9JÓ5KÌcØ3óOñ 6Ð/°Ó2ñ Að ×,Ñ,Ø×,Ñ,Ó.ä*Ø(¬cÐ2IÓ.Jñô +¨=¸aÑ@ðñô	ð ×!Ñ!×(Ñ(Ð)@×Añ[ 9ðv 	×$Ñ$ä" 9Ó-Ü" <´SÐ9OÓ5PÑQðô Ð4°QÑ7×AÑAÀAÑEÓFðô	
ö" Ö 7Ø×(Ñ(Ü# MÐ:JÑKÐLôô �=‰=×Ñ×9Ñ9Ð=NÔNÝHà%'Ð"Ø×(Ñ(×;Ñ;×=�Ü˜3 ×0Ó0Ø"×0Ñ0�Hä!Ø Ô#<Ô>SÐ"T÷ó ô & cÔ+B×CÑCÌ
ØŸI™IÐ'C÷Iñ Ið ),¯	©	¯©Ö(9¡  1à(* à34·7±7·=±=¶?¡K F¨Cà(+×(>Ñ(>Ó(@ð %*¨&¯)©)×*FÑ*FÓ*HÓ$Iñ 4Cð )2°:Ð'>Ä$ÀuÇzÁzÃ|ÓBTÓ'TÐ TÐ'Tð %*ð !%× 4Ñ 4× EÑ Eà$%§D¡D×$;Ñ$;Ó$=ó!"ñ ):ô  ' sÔ,C×DÑDÜ *¨3¯9©9Ð6R× SÔ Sà2×9Ñ9¸#×>ñ; >ñ> ?Uó Ú>T°sÔ& s§z¡zÖ2Ñ>Tð ð  ö  Ü—=‘=×'Ñ'×AÑAÀVÓKÜ—M’MðXØXhÐWiðkôð &Ð%ô 'ðXØXhÐWiðkóð ð
 &Ð%ùóW
ùóZ Oøô~ 2ó Ü%Ø$^Ø&FÀxÀjÐ$Qð!ð !jØ Rð#ð &'÷ð ûðüò^ s*   ÊxÎxà<x öy	ø
yø)yùyrR  c                 ó&  • U R                   R                  (       aÝ  SnUnUb¼  [        [        UR	                  5       5      5      nU H[  nX@R
                  L a"  UR                  UR                  U5      5        M3  UR                  (       d   eU" UR                  U   5        M]     UR                  [        [        U5      5      5        UR                  nUS-  nUb  M¼  UR                  [        SUS95        g UR                  [        SSS95        g )Nr   r,   rx  r\  )r€  rÑ   r`  ÚsortedrT  rˆ  r¢  Úcreate_load_closureÚpost_prune_cell_and_freevarsr5   rë  r™  r8   )rÔ   rÅ  rR  Útx_cntr¬  rO  Úcells          r™   r�  ÚOutputGraph.codegen_cells  sì   € à×'Ñ'×3×3ØˆFØ:<ˆFØÑ$ô !¤¨×(@Ñ(@Ó(BÓ!CÓD�Û$�DØ§¡Ò-Ø×(Ñ(¨×)?Ñ)?ÀÓ)EÖFà%×B×BÐBÐBÙ˜6×>Ñ>¸tÑDÖEñ %ð × Ñ Ô!3´C¸³MÓ!BÔCØŸ™�Ø˜!‘�ð Ó$ð  ×ÑÔ/°À&ÑIÕJà×ÑÔ/°À!ÑDÕEr¡   rR  Úlog_side_effectsc                 ó`  ^^	• U R                   R                  T5        U R                  (       aˆ  U R                  (       a   eU R                  R	                  5        HW  u  pVT" U5        U R
                  c   eTR                  TR                  U R
                  5      5        TR                  U5        MY     [        R                  (       a  U R                   R                  T5        UR                   Hl  u  m	nTR                  UU	4S j5        U H  nT" U5        M     TR                  [        [!        U5      S5      5        TR                  [#        S5      /5        Mn     U R%                  UT5        TR'                  X!R                  (       + S9  U R                   R)                  TU5        g )Nc                  ó   >• T " T5      $ r–   r¨   )rR  Ú	debug_vars   €€r™   rS  Ú,OutputGraph.codegen_suffix.<locals>.<lambda>A  s	   ø€ ¡R¨	¤]r¡   Frw  )Úvalue_from_source)r†  Úcodegen_save_tempvarsrÑ  r6  rë   rÓ  r¢  r£  Ú
store_attrr-   Úreplay_side_effectsÚcodegen_hooksrŽ  rU  Úextend_outputr6   rë  r8   r�  Úrestore_stackÚcodegen_update_mutated)
rÔ   rÅ  rR  rR  rÑ  r  r³  rà   r7  rÔ  s
      `     @r™   r‘  ÚOutputGraph.codegen_suffix)  sO  ù€ ð 	×Ñ×/Ñ/°Ô3Ø××Ø—{—{Ð"�?Ø!×0Ñ0×6Ñ6Ö8‘	�Ù�3”Ø×.Ñ.Ñ:Ð:Ð:Ø× Ñ  §¡°×0GÑ0GÓ!HÔIØ—‘˜dÖ#ñ	 9ô
 ×%×%Ø×Ñ×+Ñ+¨BÔ/ð  "Ÿœ‰OˆI�tØ×ÑÕ2Ô3Û�Ù�3–ñ à×ÑÔ1´#°d³)¸UÓCÔDØ×ÑÔ0°Ó;Ð<Ö=ñ  /ð 	×Ñ˜2˜rÔ"à
×Ñ˜¿Y¹Y¼ÐÑGØ×Ñ×0Ñ0°Ð5EÕFr¡   c                 ó:  • U R                   (       d   e[        U R                  R                  5      nU H  nUR                  R                  SS5        M!     [        R                  " 5       n[        R                  " U5       GH  u  pEUR                  [        R                  R                  L d  M/  [        UR                  5      U(       + 4:X  d  MP  UR                  (       a  Mc  UR                  S   nUR                  [        R                  R                  L d  M›  [        UR                  5      U(       + 4:X  d  M¼  UR                  (       a  MÏ  UR                  S   nU R                  R!                  U5        U R                  R!                  U5        GM     g)zœ
Remove "creation_timestamp" from node meta

Remove this pattern from the graph:
    torch._C._set_grad_enabled(False)
    torch._C._set_grad_enabled(True)
Úcreation_timestampNr   )rÅ  rÙ   r‹   rÒ  r+  r¾   r»   r»  r»  Úpairwiserú  rN  Ú_set_grad_enabledr`  rà   Ú_erasedÚ
erase_node)rÔ   rÒ  rÅ   r°  Únode1Únode2s         r™   r‰  ÚOutputGraph.cleanup_graphM  s  € ð ××ÐÐÜ�T—Z‘Z×%Ñ%Ó&ˆÛˆDØ�I‰I�M‰MÐ.°Ö5ñ ô ×,Ò,Ó.ˆÜ%×.Ò.¨u×5‰LˆEà—‘¤§¡× :Ñ :Ô:Ü˜%Ÿ*™*Ó%¨lÔ*:Ð)<Õ<ØŸŸ™à$Ÿz™z¨!™}�à—L‘L¤E§H¡H×$>Ñ$>Ô>Ü˜eŸj™jÓ)°,Ô.>Ð-@Õ@Ø!ŸMŸM™Mà#(§:¡:¨a¡=�LØ—J‘J×)Ñ)¨%Ô0Ø—J‘J×)Ñ)¨%×0ò 6r¡   c                 óŠ  ^^• U R                   (       d  g[        R                  R                  R                  (       a*  [        R                  R
                  R                  ST5      e[        R                  ST5        [        R                  R                  SS UU4S jS9  U R                   R                  5         SU l         g)z5
Do not save this output graph to the CompilePackage
NzDetected a package bypass: %sÚartifactc                  ó   • SSS.$ )NÚprecompile_cache_bypassÚjson©r  Úencodingr¨   r¨   r¡   r™   rS  Ú,OutputGraph.bypass_package.<locals>.<lambda>x  s   € Ø1Ø"ò!r¡   c                  ó   >• ST0T E$ )NÚ_reasonr¨   )rá   rÏ   s   €€r™   rS  rï  |  s   ø€ à˜6ð ð ñ r¡   ©Úmetadata_fnÚ
payload_fn)r‹  r»   rO  r-   Ústrict_precompiler.   ÚPackageErrorrË   ÚwarningÚ_loggingÚtrace_structuredÚbypass_current_entryr~  s    ``r™   r  ÚOutputGraph.bypass_packagek  s’   ù€ ð �|�|ØÜ�=‰=×Ñ×1×1Ü—-‘-×#Ñ#×0Ñ0Ø/°óð ô 	�‰Ð3°VÔ<Ü�‰×'Ñ'Øñõð 	(ñ 	
ð 	�‰×)Ñ)Ô+Øˆ�r¡   c                 óz  • 0 nU R                   R                   H™  nUR                  R                  SS 5      n[	        U[
        R                  R                  5      (       d  MJ  UR                  5       nU Vs/ s H%  n[	        U[        5      (       a  UO
[        U5      PM'     snXR                  '   M›     U$ s  snf )Nr-  )r‹   rÒ  r+  r`  rº   r»   r¯  r   Úsizer(  Úreprr  )rÔ   ÚretrÅ   r-  rý  Úss         r™   Úget_graph_sizes_structuredÚ&OutputGraph.get_graph_sizes_structured…  s”   € Ø02ˆØ—J‘J×$Ô$ˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)E×FÓFØ$×)Ñ)Ó+�ÙPTÓ!UÒPTÈ1¤z°!´S×'9Ñ'9¡!¼tÀA»wÒ"FÑPTÑ!U�—I‘I“ñ	 %ð
 ˆ
ùò "Vs   Á7,B8c                 óŒ  • SnUSU S3-  nU R                   R                   GH  nUR                  R                  SS 5      n[	        U[
        R                  R                  5      (       d  MK  UR                  5       nX#R                   S[        U5       S3-  n/ nSnU Ht  n[	        U[        5      (       a  UR                  U5        M+  [	        U[
        R                  5      (       a)  SnUR                  UR                  R                  5        Ms    Mô     U(       d  Mÿ  UUR                   S	[        U5       S3-  nGM      U$ )
NzTRACED GRAPH TENSOR SIZES
z===== z =====
r-  z: Ú
FTz (concrete): )r‹   rÒ  r+  r`  rº   r»   r¯  r   rý  r  r`  r(  r½   r  rÅ   Úhint)	rÔ   r  Úgraph_sizes_strrÅ   r-  rý  Úconcrete_sizeÚ
has_symintÚszs	            r™   Úget_graph_sizesÚOutputGraph.get_graph_sizesŽ  s  € Ø7ˆØ˜V D 6¨Ð2Ñ2ˆØ—J‘J×$Õ$ˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)E×FÓFØ$×)Ñ)Ó+�Ø§i¡i [°´5¸³;°-¸rÐ#BÑB�Ø "�Ø"�
Û�BÜ! "¤c×*Ñ*Ø%×,Ñ,¨RÖ0Ü# B¬¯©×5Ñ5Ø%)˜
Ø%×,Ñ,¨R¯W©W¯\©\Ö:âñ ÷ "�zØ'Ø#Ÿy™y˜k¨´u¸]Ó7KÐ6LÈBÐOñ›ñ# %ð( Ðr¡   c              #   óŒ  #   • U R                   R                  R                  5       n0 nU R                  US9   U R                   R                  R	                  U5        Sv •  U R                   R                  R	                  [        U5      5        g! U R                   R                  R	                  [        U5      5        f = f7f)zZ
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_stateÚ 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   ‚6C¹)B Á"/CÂ0CÃCc                 óv  ^• U R                   nUc   eUR                  =mGbu  TR                  Gcf  TR                  n[        R                  STR                  5        [        R                  R                  SS U4S jS9  UR                  n[        U5      S:X  d%   SR                  SR                  U5      5      5       e[        UR                  5       5      R!                  UR#                  5       [        R$                  R'                  5       -  5         [)        S	S
S9   S /UR+                  5       -  n[,        R.                  " UTR                  US9  UTl        S S S 5        S S S 5        UR0                  R3                  5         [4        R6                  eg g ! , (       d  f       NB= f! , (       d  f       NK= f)Nzcompiler_collective %sré  c                  ó   • SSS.$ )NÚcompiler_collectiveÚstringrí  r¨   r¨   r¡   r™   rS  Ú5OutputGraph.run_compiler_collective.<locals>.<lambda>Â  s   € Ø1Ø (ò%r¡   c                  ó8   >• T R                   R                  5       $ r–   )Úlocal_stateÚrender)Údss   €r™   rS  r  Æ  s   ø€  2§>¡>×#8Ñ#8Ô#:r¡   rò  r,   z&Expect only one device type but got {}Ú+r  Trð  )Úgroup)rˆ  Údistributed_stateÚ
all_statesÚ
compile_pgrË   Úinfor  r»   rø  rù  Ú_device_typesrë  Úformatrì  rA   r¾   rM  ÚrankÚacceleratorÚdevice_countri   rý  ÚdistÚall_gather_objectÚspeculation_logrl  r.   Ú CompileCollectiveRestartAnalysis)rÔ   rÅ  r   Údevice_typesr  r  s        @r™   r¡  Ú#OutputGraph.run_compiler_collective¹  sp  ø€ Ø�\‰\ˆØ‰~Ðˆ~Ø×&Ñ&Ð&ˆBÒ3¸¿¹Ò8MØŸ™ˆJä�H‰HÐ-¨r¯~©~Ô>Ü�N‰N×+Ñ+Øñô ;ð ,ñ ð &×3Ñ3ˆLÜ�|Ó$¨Ó)ð Ø8×?Ñ?ÀÇÁÈÓ@VÓWóÐ)ô )¨×)9Ñ)9Ó);Ó<×CÑCØ—O‘OÓ%¬×(9Ñ(9×(FÑ(FÓ(HÑHõô Ð2È$ÓOà)-¨°·±Ó1BÑ(B�
ä×&Ò& z°2·>±>ÈÒTà *�”÷ P÷ð ×Ñ×$Ñ$Ô&Ü×6Ñ6Ð6ð= 9NÐ3÷( PÕOú÷õ ús$   ÄF*Ä!<FÅF*Æ
F'	Æ#F*Æ*
F8Úrvr}   c                 ó  • U R                   (       d  gSSKJn  U Hã  n[        XC5      (       a  UR                  (       d  M&  UR                  5       R                  R                  R                  S5      n[        U[        R                  R                  R                  5      (       d   eUR                  c  M�  [        US4/5      nX`R                   -  (       d  MÀ  SUR                  l        ["        R$                  " SS9e   g)a:  
Validate that if torch.autograd.grad is used in the graph and outputs
require grad, we trigger AutogradGradRestartAnalysis only if the output is connected
to the autograd.grad computation.

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

See Note [Tracing autograd.grad in dynamo]
Nr,   )ÚTensorVariabler-  Tz3autograd.grad consumed grad_fns of returned tensors)Úrestart_reason)rÊ  Úvariables.tensorr/  rº   Úrequires_gradr  rÅ   r+  r`  r»   r¯  Úfake_tensorr   r¼   rÇ   r)  Úgraph_break_on_autograd_gradr.   ÚAutogradGradRestartAnalysis)rÔ   r-  rÅ  r/  rã  r3  Úreachable_grad_fnss          r™   Ú)_validate_outputs_safe_for_autograd_nodesÚ5OutputGraph._validate_outputs_safe_for_autograd_nodesÜ  sÑ   € ð ×3×3Øå4ãˆCÜ˜c×2Ñ2¸#×:K×:KÙàŸ,™,›.×-Ñ-×2Ñ2×6Ñ6°ÓGˆKÜ˜k¬5×+<Ñ+<×+HÑ+H×+SÑ+S×TÑTÐTÐTØ×"Ñ"Ñ*Ùô "<¸kÈ4Ð=PÐ<QÓ!RÐØ!×$HÑ$H×HÑHàBF�×"Ñ"Ô?Ü×5Ò5Ø#Xñð ò r¡   r®  c                 óÞ  ^ ^!^"^#^$^%• [         R                  R                  R                  5          SSKJn  T R                  (       d   eT R                  5         [        T R                  5      S:X  a  [        U5      S:X  a  / sSSS5        $ [        SSS9n[        U[        5      (       d   e[        U[        5      (       d   eT R                  X!5        T R!                  SST R"                  R%                  ['        S	 U 5       5      5      40 5      nT R)                  5       nUR+                  U5        T R"                  R-                  X5        [.        R0                  (       dÁ  [3        S
5         [5        U5       HO  n[7        X85      n	[        U	[8        R:                  5      (       d  M/  [=        U	T R>                  UT R@                  S9  MQ     T RC                  5         [=        [8        R:                  " UT R                  5      T R>                  UT R@                  S9  SSS5        T RE                  5         [        T R                  5      n
[F        S   S==   U
-  ss'   T RI                  5         T RJ                  RM                  5         [O        UT R                  5      m#SSK(J)n  U" T#5        T RT                  (       a)  T RT                   H  n[W        T#U[7        X<5      5        M     T RX                   H  nU" T#5        M     [[        T#R]                  5       S5      bB  T R_                  S[         R`                  R.                  Rb                  T#Re                  SSSS9S9  T Rf                  b  UT#l4        T Rj                  T#l5        T Rl                  Ro                  5       T#Rp                  S'   T Rr                  T#Rp                  S'   UT#Rp                  S'   [t        Rw                  S[y        UT#SSSS95        [         Rz                  R}                  SU 4S jU#4S jS9  T R                  5         T R€                  R‚                  nUc   eUT lB        T R@                  (       dY  SSKCJDs  Jn  UR‹                  SS9   [         RŒ                  R�                  UR>                  S9nSSS5        WT R€                  lA        T R‘                  5          T R“                  T#T R•                  5       5      m"SSS5        SSKKJLn  [        T"U5      (       d,  [        [7        T"SS5      U5      (       a]  T"Rš                  S :X  aM  [        T"U5      (       a  T"OT"Rœ                  nURŸ                  U5        [        T"U5      (       d  UR                   m"T Rf                  b  T Rf                  R£                  UT"5        U" T"S!S"9m"[F        S   S#==   S-  ss'   UR>                  c   eUR>                  R¤                  =n(       Ga=  / m%0 m$T R¦                   Vs/ s H  nUR¨                  PM     nnU H¼  nUR«                  UR¨                  5      n[¬        R®                  " UR°                  5      R³                  5       n[µ        5       n[¶        R¸                  " UUR°                  U/S5      n[º        Rw                  S$U5        T%R½                  [¾        RÀ                  " U4S% jU5      U45        M¾     [         R`                  R                  S!S"9S&[Â        S'[Â        S([Â        4U"U#U U$U%4S) jj5       nT RÅ                  UU5        OT RÅ                  UT"5        T RÆ                  c   e[É        T RÆ                  5      m![Ë        5       (       aÅ  T!RÍ                  U!4S* j5        / n[Î        RÐ                  " 5        H=  nU" T!5        T RÓ                  5       nT!RÕ                  U5        UR½                  U5        M?     U H#  nT!R×                  T!RÙ                  U5      5        M%     T!RÛ                  [        [Î        5      S5        T!RÝ                  5         [ß        T R¦                  5       H)  u  nn U R¨                  T Rà                  Râ                  U'   M+     T!Rå                  U5        T!Rç                  5       sSSS5        $ ! , (       d  f       GN�= f! , (       d  f       GN= f! , (       d  f       GNç= fs  snf ! , (       d  f       g= f)+z¶
Generate code from self.graph and return the Instruction()s to
call that generated code.

Code is generated w.r.t. self.root_tx.
tx is only used for preserving GraphModule metadata
r,   re  r   NÚ__compiled_fnT)Ú	with_uuidr¡  c              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr–   )r  ro  s     r™   ra  Ú8OutputGraph.compile_and_call_fx_graph.<locals>.<genexpr>"	  s   é € Ð5OÊBÀq·j±j·l°lÊBùrc  r)   )r6  ÚstatsÚcalls_captured)Údce_hop_extra_outputszfGraph contains named parameters: either inline_inbuilt_nn_modules=False or there are static addresses.F©Úprint_outputÚinclude_strideÚinclude_device)Úinline_builtin_nn_modulesr“   rÎ  r´  Ú
backend_idú%s)rC  rD  ÚcoloredÚdynamo_output_graphc                  ó(   >• ST R                  5       0$ )NÚsizes)r  rÓ   s   €r™   rS  Ú7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>y	  s   ø€ ˜ $×"AÑ"AÓ"CÑDr¡   c                  ó&   >• T R                  SSSS9$ )NFTrA  )Úprint_readable)r“   s   €r™   rS  rL  z	  s   ø€  2×#4Ñ#4Ø!&°tÈDð $5ñ $r¡   )rô  r—  )r=  )Ú_LazyGraphModuleÚ__self__Ú_lazy_forwardz"do not trace Dynamo-compiled graphrh  Úunique_graphsz:Compiling backend specialized graph with specialization=%sc                 ó   • U" X   5      $ r–   r¨   )r¼  rà   Úcheck_fns      r™   rS  rL  Ö	  s   € ÁXØ$(¡IôF"r¡   rà   rá   r‘   c                  óÔ  >• T	 H¸  u  p#U" U 5      (       d  M  UT;   a  TU   " U 0 UD6s  $ TR                   R                  UR                  UR                  5         UTR                  S'   [        U 5      n[        TR                  5         TR                  TU5      TU'   S S S 5        S S S 5        TU   " U 0 UD6s  $    T" U 0 UD6$ ! , (       d  f       N-= f! , (       d  f       N6= f)NÚspecialization)	r=  Úpatch_source_specializationr'  rT  r+  rÙ   r   r±  Úcall_user_compiler)
rà   rá   rT  rV  r”   Úcompiled_fnr“   rÔ   Úspecialization_cacheÚspecialization_guardss
        €€€€€r™   Úspecialized_dispatchÚCOutputGraph.compile_and_call_fx_graph.<locals>.specialized_dispatchß	  sò   ø€ ã4IÑ0˜Ù# DŸ>›>Ø-Ð1EÓEØ';¸NÒ'KØ%)ð("Ø-3ñ("ò !"ð "&§¡×!KÑ!KØ .× 5Ñ 5°~×7NÑ7Nõ"ð =K §¡Ð(8Ñ 9Ü?CÀD»z Ü%,¨T×-AÑ-AÕ%Bà(,×(?Ñ(?ÀÀNÓ(Sð %9¸Ñ$H÷ &C÷"ð $8¸Ò#GÈÐ#XÐQWÑ#XÒXñ% 5Jñ& '¨Ð7°Ñ7Ð7÷ &CÕ%Bú÷"õ "ús$   Á0CÂCÂ!CÃ
CÃCÃ
C'	c                  ól   >• T R                  [        R                  R                  R                  S5      $ )NÚstore_user_object_weakrefs)rQ  r»   rO  Úgraph_bytecode_inputsrœ   )rR  s   €r™   rS  rL  
  s&   ø€ ˜B×/Ñ/ÜŸ™×;Ñ;×DÑDØ4ôr¡   )tr»   r4  r   Úclear_framerŠ  rf  rÅ  r¡  rg   r‹   rë  r=   rº   rÙ   ræ   r7  r�  rv  Ú
create_argr`  Ú
dedup_passrõ   Ú_maybe_preserve_original_metar-   Údo_not_emit_runtime_assertsri   Údirrž   r   r  r)   r=  r6  Úremove_unused_get_attr_nodesÚremove_unused_graphargsrh   Ú&remove_tensorify_specialized_graphargsr„  rl  r    Údce_extra_outputsr@  rÚ  rì   rÀ  r§  Ú
parametersr  rO  Úinline_inbuilt_nn_modulesrN  r‹  Ú_backend_idr€  rÎ  r  r+  r´  Úgraph_code_logr�  rr   rø  rù  rm  r±  rÞ  Ú_old_fake_moder®  rJ  r—   r¯  r°  r  rX  r”   Útorch.fx._lazy_graph_modulerO  rœ   rP  Úforce_recompiler  Úadd_backend_idÚspecializationsr-  r'  r/  ÚinspectÚ	getsourcerT  ÚstripÚRootGuardManagerr   ÚLAMBDA_GUARDrË   r½   r¼  r½  r	   Úinstall_global_unsaferˆ  r?   rG   rU  rH   r)  r,  r[  r¢  r£  rZ  Úpop_toprI  ru  rc  Úmake_call_generated_coder]  )&rÔ   rÅ  r-  r®  rf  r  Úoutput_nodeÚsub_gmsÚattrÚsubgraphÚncallsr@  Úsubgraph_nameÚregister_finalizerÚold_fake_moderÝ  Úbackend_fake_moderO  Úlazy_gmrs  ÚaÚsourcesrV  Úsource_indexÚcheck_fn_sourceÚunused_root_guard_managerrT  r\  Útmp_varsÚconstructorÚvar_namer¼  r7  rR  rY  r“   rZ  r[  s&   `                                @@@@@r™   r�  Ú%OutputGraph.compile_and_call_fx_graph 	  s¢  ý€ ô �]‰]×)Ñ)×5Ñ5Õ7Ý+à×#×#Ð#Ð#à×(Ñ(Ô*Ü˜4Ÿ:™:Ó&¨!Ó+´°B³¸1³Ø÷ 8Ñ7ô ˜_¸Ñ=ˆDä˜b¤$×'Ñ'Ð'Ð'Ü˜d¤N×3Ñ3Ð3Ð3ð ×:Ñ:¸2Ô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ØŸ™ØØ#Ÿ{™{ò	÷ Eð& ×(Ñ(Ô*Ü  §¡Ó,ˆFÜ�WÑÐ.Ó/°6Ñ9Ó/à×7Ñ7Ô9ð ×!Ñ!×'Ñ'Ô)ä# D¨$¯*©*Ó5ˆBå@á! "Ô%ð
 ×6×6Ø%)×%LÔ%L�MÜ˜B ¬w°tÓ/KÖLñ &Mð '+×&AÔ&AÐ"Ù" 2Ö&ñ 'Bô �B—M‘M“O TÓ*Ñ6ð ×#Ñ#Ø|Ü.3¯m©m×.BÑ.B×.\Ñ.\Ø×(Ñ(Ø%*¸4ÐPTð )ð ð $ñ ð �|‰|Ñ'Ø!%�”à)-×)EÑ)EˆBÔ&à×5Ñ5×:Ñ:Ó<ð �G‰GÐ6Ñ7ð ,0×+AÑ+AˆB�G‰GÐ'Ñ(Ø$(ˆB�G‰G�LÑ!ä× Ñ ØÜ&Ø˜"¨TÀ$ÐPTñôô �N‰N×+Ñ+Ø%ÜDôð ,ñ ð ×#Ñ#Ô%Ø ×0Ñ0×:Ñ:ˆMØ Ñ,Ð,Ð,à"/ˆDÔØ—;—;ß9Ð9à—]‘]ÈE�]ÒRô ).×(9Ñ(9×(HÑ(HØ"/×"9Ñ"9ð )Ið )Ð%÷ Sð& 2C�×$Ñ$Ô.à×*Ñ*Õ,Ø"×5Ñ5°b¸$×:MÑ:MÓ:OÓP�÷ -õ Eä˜+Ð'7×8Ñ8Üœ7 ;°
¸DÓAÐCS×TÑTØ×(Ñ(¨OÓ;ô " +Ð/?×@Ñ@ñ  à$×-Ñ-ð ð !×0Ñ0°Ô9ä! +Ð/?×@Ñ@à")§/¡/�Kà�|‰|Ñ'Ø—‘×+Ñ+¨D°+Ô>á!ØÐ$HñˆKô �WÑ˜oÓ.°!Ñ3Ó.Ø ×*Ñ*Ñ6Ð6Ð6Ø"/×"9Ñ"9×"IÑ"IÐIˆÖIØ(*Ð%ØSUÐ$Ø-1¯^ª^Ó<ª^¨˜1Ÿ8œ8©^�Ð<Û&5�NØ#*§=¡=°×1FÑ1FÓ#G�LÜ&-×&7Ò&7¸×8OÑ8OÓ&P×&VÑ&VÓ&X�Oä0@Ó0BÐ-Ü%×2Ò2Ø1Ø&×/Ñ/Ø(Ð)Øó	 �Hô —I‘IØTØ'ôð
 *×0Ñ0ä%×-Ò-Ø;Có !"ð !-ó	ð +ðö
ñ# '6ô: —‘×&Ñ&Ð.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Ö-ñ $Jó !)�HØ×$Ñ$ R§^¡^°HÓ%=Ö>ñ !)ð × Ñ ¤Ô%BÓ!CÀUÔKØ—
‘
”ä% d§n¡nÖ5‘��SØLOÏJÉJ�×$Ñ$×DÑDÀSÓIñ 6ð ×'Ñ'¨Ô-Ø×&Ñ&Ó(÷g 8Ñ7÷F EÖDú÷l SÖRú÷* -Ö,üòL =÷i 8Õ7úsq   ¯AcÂC#cÅ/7b#Æ*A3b#ÈIcÑ5(b5Ò)cÓ!cÓ'DcØcØJcâ#
b2	â-câ5
c	â?cã
c	ãcã
c,c                 ó4   • U R                   R                  SS9$ )NÚplaceholder©rÖ  )r‹   Ú
find_nodesrÓ   s    r™   ÚplaceholdersÚOutputGraph.placeholders"
  s   € à�z‰z×$Ñ$¨Ð$Ð6Ð6r¡   c                 ó^   • U R                    Vs/ s H  oR                  S   PM     sn$ s  snf ©Nr(  )r“  r+  ©rÔ   rÅ   s     r™   r-  ÚOutputGraph.graphargs&
  s)   € à26×2CÒ2CÓDÒ2C¨$—	‘	˜*Ô%Ñ2CÑDÐDùÒDs   �*r“   r”   c           	      óv   • [        SSSSSSS9   U R                  X5      sS S S 5        $ ! , (       d  f       g = f)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)ri   Ú_call_user_compiler)rÔ   r“   r”   s      r™   rX  ÚOutputGraph.call_user_compiler*
  s>   € ô Ø,Ø(Ø"&Ø Ø&<Ø%Nó
ð ×+Ñ+¨BÓ?÷
÷ 
÷ 
ús   �*ª
8c                 ó¾  • U R                   c   eSn/ nUR                  R                   H;  nUR                  S;   a  US-  nUR                  S:X  d  M*  UR	                  U5        M=     [        U5        U H6  n[        US5      (       a  M  UR                  S   nUR                  Ul	        M8     U R                  Ul        U R                  Ul        [        U R                  [         R"                  5      =(       d    U R                   n[%        U R                  [         R&                  5      n	U	(       a  [)        X‰5      n[        US5      (       a  UR*                  OSn
 [-        5       " [.        R0                  S	U
 35        [         R2                  (       a  [5        U5      nU" X5      n[-        5       " [.        R0                  S
U
 35        [7        U5      (       d   S5       e [Y        SS0 U RZ                  EU[]        UR                  R                  5      []        U5      S.E5        W$ ! [8        [:        4 a    e [<         a½  nU R>                  (       aD  [A        U R                   U[B        RD                  " 5       5      RG                  URH                  5      S e[K        UU RL                  RN                  SSU
 S[Q        U5       SU RL                  RS                  5        3SU
 S[Q        U5       S3S/S9   S nAGNS nAf[T         a    e [V         aI  n[A        U R                   U[B        RD                  " 5       5      RG                  URH                  5      S eS nAff = f)Nr   ©rZ  Úcall_methodÚcall_moduler,   r�  Ú_dynamo_sourcer(  rœ   z<unknown compiler_fn>zcalling compiler function zdone compiler function z#compiler_fn did not return callablezBackend compiler exceptionz	Backend: z
Exception:z
Traceback:
zBackend compiler `z` failed with z. Adding a graph break.z-Report an issue to the backend compiler repo.r   Údynamorš  )Úop_countÚ
node_countÚinput_count)/r�   r‹   rÒ  rÖ  r½   rp   r  r+  r'  r¨  r¸  Ú_param_name_to_sourcerÂ  Ú_source_to_user_stacksrJ   r´  r-   Údebug_backend_overriderK   Údebug_inductor_config_overrider    rœ   rÌ   r/   ÚINFOr  rý   Úcallabler   r   rC   rÉ  rB   rt  ÚcurrentframeÚwith_tracebackÚ__traceback__rF   rˆ  rŠ  r¯   Úformat_frame_summaryrD   r	  r   r–  rë  )rÔ   r“   r”   Útotr“  rÅ   Úplr7  r�   Úinductor_config_overrider  rY  r½  s                r™   r¢  ÚOutputGraph._call_user_compiler7
  s  € ð ×ÑÑ+Ð+Ð+ØˆØˆØ—H‘H—N”NˆDØ�w‰wÐIÓIØ�q‘�Ø�w‰w˜-Õ'Ø×#Ñ# DÖ)ñ	 #ô
 	˜3ÔÛˆBÜ˜2Ð/×0Ó0Ø—g‘g˜jÑ)�ð %(§J¡J�Ö!ñ ð $(×#<Ñ#<ˆÔ Ø$(×$>Ñ$>ˆÔ!ô 0Ø×&Ñ&¬×(EÑ(Eó÷  ð ×Ñð	 	ô $OØ×"Ñ"¤F×$IÑ$Ió$
Ð ö $Ü4ØóˆKô �{ J×/Ñ/ð × Ò à(ð 	ð
	8ÜŒNœ7Ÿ<™<Ð+EÀdÀVÐ)LÔMÜ×(×(Ü,¨[Ó9�Ù% bÓ9ˆKÜŒNœ7Ÿ<™<Ð+BÀ4À&Ð)IÔJÜ˜K×(Ñ(ÐOÐ*OÓOÑ(ô6 	ØØ,ðØ—.‘.ðàÜ! "§(¡(§.¡.Ó1Ü" <Ó0ò	ô		
ð ÐøôM /Ô0@ÐAó 	ØÜ0ó 	Ø×5×5Ü+Ø×$Ñ$ a¬×)=Ò)=Ó)?óç ‘. §¡Ó1°tð<ô 'ØØ—‘×#Ñ#Ø4Ø# D 6¨´c¸!³f°X¸^ÈDÏLÉL×LmÑLmÓLoÐKpÐqØ0°°°nÄSÈÃVÀHÐLcÐdàCð÷	ð 	ûô ó 	ð Üó 	8Ü'Ø× Ñ  !¤W×%9Ò%9Ó%;óç‰n˜QŸ_™_Ó-°4ð8ûð	8ús'   ÅBH* È*MÉB2K<Ë<MÌAMÍMc                 ón   • [         R                  R                  R                  (       a  [	        U 5      $ 0 $ r–   )r»   rO  r-   Úuse_graph_deduplicationrI   rÓ   s    r™   rc  ÚOutputGraph.dedup_pass“
  s%   € Ü�=‰=×Ñ×7×7Ü,¨TÓ2Ð2àˆIr¡   Úsub_gmc                 óh   • [        XR                  SS9nX2l        SUl        U R	                  X#S S9  U$ )NT)Úrequires_suffixFr&  )rn   rç   rœ   Útorchdynamo_force_dynamicr   )rÔ   r  r¾  Ú	next_names       r™   rF  ÚOutputGraph.install_subgraph™
  s:   € Ü'¨¯o©oÈtÑTˆ	Ø#ŒØ+0ˆÔ(ð 	×$Ñ$ V¸tÐ$ÑDØÐr¡   c                 óZ   • U R                    Vs/ s H  oR                  PM     nnU$ s  snf r–   )r-  Úexample)rÔ   r7  r  s      r™   r”   ÚOutputGraph.example_inputs¢
  s&   € Ø)-¯ªÓ8ª #—+”+©ˆÐ8àˆùò 9s   �(c                 ó¾   • [        U R                  R                  SS9SS9 H8  n[        [	        UR
                  5      5      S:X  d  M'  U R                  U5        M:     g )Nrô  r‘  T)Úreverser   )rË  r‹   r’  rë  rÙ   Úusersr“  r—  s     r™   rg  Ú(OutputGraph.remove_unused_get_attr_nodes§
  sJ   € Ü˜4Ÿ:™:×0Ñ0°JÐ0Ð?ÈÔNˆDÜ”4˜Ÿ
™
Ó#Ó$¨Õ)Ø× Ñ  Ö&ò Or¡   c                 óê  ^ ^^^• T R                   (       d   eS[        R                  R                  S[        4S jnS[        R                  R                  S[        4S jmS[        R
                  S[        4U4S jjnSS	KJn  [        [        T R                  R                  5      5       HØ  n[        [        UR                  5      5      S:X  d  M'  UR                  S
:X  d�  UR                  S:X  a  UR                  [         R"                  L dc  UR                  S:X  a7  UR                  [$        R&                  L a  U" UR(                  S   5      (       d  U" U5      (       d  U" U5      (       d  MÇ  T R+                  U5        MÚ     S[        R
                  S[,        [.        R0                     4S jnS[        R
                  SS 4U 4S jjn[3        5       mS[2        [.        R0                     S[4        [$        R6                  [$        R8                  4   SS 4S jm/ nT R:                   GH  nU" U5      S LnU(       a&  UR                  (       d  UR=                  U5        M9  M;  UR                  (       d,  [?        UR@                  S   [B        5      (       d
  U" U5        Mx  UR@                  S   n	[?        U	[B        5      (       a  Mž  [?        UR@                  S   RD                  [$        RF                  5      (       aÖ  UR@                  S   RD                  n
UR@                  S   RH                  n[$        RJ                  RL                  RO                  U
5      (       ds  [Q        U
RS                  5       5      nU HT  n[U        URV                  U5      n[X        RZ                  " [$        R6                  [$        R8                  4UU4S jU5        MV     GMª  []        [_        UR@                  S   RD                  5      5      (       a  GMÝ  U	R`                  b  U	R`                  OU	RD                  nT" TU5        GM     U H1  nU" U5      nUc  M  UT;  a
  U" U5        M   TRc                  U5        M3     g )NÚb_noder‘   c                 ó  • U SL a  g[        U [        R                  5      (       d  gU R                  R	                  S5      nUc  gUSL a  g[        U[
        R                  5      (       a  UR                  R                  5       =nb  U$ g)NTFr-  )	rº   r   ÚNoder+  r`  r»   ÚSymBoolrÅ   Úmaybe_as_bool)rÌ  ÚbÚrs      r™   Úis_static_trueÚ;OutputGraph.remove_unused_graphargs.<locals>.is_static_trueº
  sw   € Ø˜Š~ØÜ˜f¤b§g¡g×.Ñ.ØØ—‘—‘ Ó0ˆAØ‰yØØ�DŠyØä˜1œeŸm™m×,Ñ,ØŸ&™&×.Ñ.Ó0Ð0�QÑ=à�ð r¡   r†  c                 óÚ   • SSK Jn  [        U [        [        [
        45      (       a  g[        U [        R                  5      (       a%  [        U R                  R                  S5      U5      $ g)Nr   ©ÚSymTypesTr-  F)
Útorch.fx.experimental.sym_noder×  rº   r(  rl  r­   r   rÎ  r+  r`  )r†  r×  s     r™   Úis_symnode_argÚ;OutputGraph.remove_unused_graphargs.<locals>.is_symnode_argÍ
  sJ   € Ý?ä˜!œc¤5¬$Ð/×0Ñ0ØÜ˜!œRŸW™W×%Ñ%Ü! !§&¡&§*¡*¨_Ó"=¸xÓHÐHØr¡   rÅ   c                 ó:  >• SSK Jn  U R                  S:w  a  g[        U R                  R                  S5      U5      (       d  g[        U4S jU R                   5       5      (       d  g[        U4S jU R                  R                  5        5       5      (       d  gg)	Nr   rÖ  rZ  Fr-  c              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr–   r¨   ©r_  r†  rÙ  s     €r™   ra  ÚWOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node.<locals>.<genexpr>ä
  s   øé € Ð<²)¨Q‘~ a×(Ð(²)ùó   ƒc              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr–   r¨   rÝ  s     €r™   ra  rÞ  æ
  s   øé € ÐGÒ2F¨Q‘~ a×(Ð(Ò2Fùrß  T)
rØ  r×  rÖ  rº   r+  r`  r„  rà   rá   r)  )rÅ   r×  rÙ  s     €r™   Úis_symnode_compute_nodeÚDOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_nodeÙ
  sp   ø€ Ý?à�w‰w˜/Ó)Øä˜dŸi™iŸm™m¨OÓ<¸h×GÑGØô Ô<°$·)²)Ó<×<Ñ<ØÜÔG°$·+±+×2DÑ2DÔ2FÓG×GÑGØØr¡   r   )Úis_accessor_noderô  rZ  c                 ó
  • U R                   S   nUR                  n[        U[        R                  5      (       aI  [        UR
                  R                  [        R                  5      (       a  UR
                  R                  $ g r–  )	r+  rÅ  rº   r»   r  rÅ   ÚexprÚsympyÚSymbol)rÅ   r7  rÅ  s      r™   Úplaceholder_binds_symbolÚEOutputGraph.remove_unused_graphargs.<locals>.placeholder_binds_symbolû
  s^   € Ø—)‘)˜JÑ'ˆCØ—k‘kˆGÜ˜'¤5§<¡<×0Ñ0´ZØ—‘×!Ñ!¤5§<¡<÷6ñ 6ð —|‘|×(Ñ(Ð(Ør¡   c                 óè   >• [         R                  SU R                  S   R                  R                  5        U R                  S	 TR                  U 5        TR                  R                  U S 5        g )NzREMOVE UNUSED GRAPHARG %sr(  )rË   r�  r+  r'  r  r“  r„  r¾   )rÅ   rÔ   s    €r™   Úremove_unusedÚ: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                 ó    • U [        U5      -  n g r–   )r"   )rí  rî  s     r™   Úupdate_used_symbolsÚ@OutputGraph.remove_unused_graphargs.<locals>.update_used_symbols  s   € ð œL¨Ó.Ñ.‰Lr¡   r(  c                 ó   >• T" TU 5      $ r–   r¨   )Útrð  rí  s    €€r™   rS  Ú5OutputGraph.remove_unused_graphargs.<locals>.<lambda>1  s   ø€ Ñ.AÀ,ÐPQÔ.Rr¡   )2rÅ  r   rÅ   ÚArgumentr­   rÎ  Ú%torch.fx.experimental.symbolic_shapesrã  rk  rÙ   r‹   rÒ  rë  rÉ  rÖ  rú  ÚoperatorÚgetitemr»   Ú_checkrà   r“  r   ræ  rç  r¹   r   r  r   r“  r½   rº   r+  rw   rÅ  ÚScriptObjectÚexample_strong_refÚ_libraryÚfake_class_registryÚtracing_with_realr÷   Ú__obj_flatten__rž   Úwrapped_objÚpytreeÚtree_map_onlyr   r<  r3  Úremove)rÔ   rÓ  rá  rã  rÅ   rè  rë  Úrecheck_placeholdersÚbinds_symbolr7  Úreal_script_objÚfake_script_objÚ	flat_dictr~  Úfake_attr_valrî  ÚsymbolrÙ  rð  rí  s   `                @@@r™   rh  Ú#OutputGraph.remove_unused_graphargs¬
  sv  û€ ð ××ÐÐð	¤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Ñ8á.¨t×4Ñ4Ù'¨×-Ó-à×$Ñ$ TÖ*ñ 5ð	¬2¯7©7ð 	´xÄÇÁÑ7Mô 	ð	2¤§¡ð 	2¨D÷ 	2ô +.«%ˆð	/ÜœeŸl™lÑ+ð	/Ü38¼¿¹ÄuÇ|Á|Ð9SÑ3Tð	/àô	/ð
  "ÐØ×%Õ%ˆDÙ3°DÓ9ÀÐEˆLæØ—z—zØ(×/Ñ/°Ö5ñ "ð —z—z¬*Ø—I‘I˜jÑ)Ô+@÷+ñ +ñ " $Ö'ð Ÿ)™) JÑ/�CÜ! #Ô'<×=Ñ=Ù Ü! $§)¡)¨JÑ"7×"?Ñ"?Ä×ASÑAS×TÑ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ö!"ñ	 )2ò !Ü%¤d¨4¯9©9°ZÑ+@×+HÑ+HÓ&I×JÑJÚ à+.¯?©?Ñ+F˜ŸšÈCÏKÉKð ñ (¨°d×;ñM &óR )ˆDÙ-¨dÓ3ˆFØÓ!Ø Ó-Ù! $Ö'ð !×'Ñ'¨Ö/ò )r¡   c                 ó¼  • SSK Jn  U R                  R                   GH;  nUR                  R                  S5      n[        U[        5      (       d  M6  UR                  c  ME  [        UR                  R                  R                  S5      (       d  Mv  [        S UR                   5       5      (       d  M™  UR                  UR                  R                  R                  R                  5      (       d  MÙ  [!        UR                  5       H8  nUR#                  [%        UR                  5      5        U R'                  U5        M:     U R'                  U5        GM>     g )Nr   )ÚTensorifyStater-  r  c              3   ó>   #   • U  H  oR                   S :H  v •  M     g7f)ÚitemN)rú  )r_  Úus     r™   ra  ÚEOutputGraph.remove_tensorify_specialized_graphargs.<locals>.<genexpr>]  s   é € Ð?²J¨qŸ™ FÖ*²Jùs   ‚)Útorch._dynamo.symbolic_convertr  r‹   rÒ  r+  r`  rº   r   Ú	item_memor  rÅ   Ú_exprr„  rÉ  Úshould_specializer  rÙ   Úreplace_all_uses_withr#   r“  )rÔ   r  rÅ   r-  r  s        r™   ri  Ú2OutputGraph.remove_tensorify_specialized_graphargsF  sõ   € õ 	Bà—J‘J×$Õ$ˆDØ ŸI™IŸM™M¨/Ó:ˆMä˜=¬*×5Ó5Ø!×+Ñ+Ó7Ü˜M×3Ñ3×8Ñ8×>Ñ>À×GÓGÜÑ?°D·J²JÓ?×?Ó?Ø"×4Ñ4à!×+Ñ+×0Ñ0×6Ñ6×;Ñ;÷ó ô
 ˜dŸj™jÖ)�AØ×+Ñ+¬L¸×9PÑ9PÓ,QÔRØ×$Ñ$ QÖ'ñ *ð × Ñ  ×&ò %r¡   c                 óH   • U R                   R                  U5        SU l        g)z\
We call this on the creation of a new compiled subgraph that is inserted
before user code.
TN)r¾  r\  rÅ  )rÔ   r  s     r™   rˆ  Ú#OutputGraph.add_output_instructionsh  s    € ð
 	× Ñ ×'Ñ'¨Ô/ØˆÕr¡   c                 óÐ   • XR                   ;  d   eU R                   R                  U5        U R                  R                  [        R
                  " U R                  X5      5        g)a0  
WARNING: prefer the safer `install_global_by_id/install_global`.
torch.compile instances should be independent of each other;
one footgun is to have one instance depend on the existence of
a global installed by another instance. This can happen if we mangle
a global the same way across both instances.
N)rª  r¿   rÄ  r½   rd   rY  r,  )rÔ   r  r~  s      r™   ry  Ú!OutputGraph.install_global_unsafep  sO   € ð ×1Ñ1Ó1Ð1Ð1Ø×Ñ×"Ñ" 4Ô(Ø�‰×Ñœ[×/Ò/°×0AÑ0AÀ4ÓOÕPr¡   c                 ó„   • U S[        U5       SU R                   3nX0R                  ;   a  U$ U R                  X25        U$ )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ª  ry  ©rÔ   r  r~  r  s       r™   Úinstall_global_by_idÚ OutputGraph.install_global_by_id|  sG   € ð �˜œ2˜e›9˜+ R¨¯©Ð'8Ð9ˆØ×)Ñ)Ó)ØˆKØ×"Ñ" 4Ô/Øˆr¡   c                 ó>   • [        U5      nU R                  X25        U$ )zf
Installs a global, generating a unique name for it.

Returns the name of the newly installed global.
)r=   ry  r  s       r™   r  ÚOutputGraph.install_global‹  s!   € ô ˜Ó ˆØ×"Ñ" 4Ô/Øˆr¡   c                 óp  • S U l         U R                  R                  5         U R                  R                  5         S U l        U R
                  R                   H"  nSUR                  ;   d  M  UR                  S	 M$     U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                   R                  5         U R"                  R                  5         U R$                  R                  5         U R&                  R                  5         g r–  )rˆ  rç   rl  rÛ  r¸  r‹   rÒ  r+  r„  r�  r†  r¹  rº  rÀ  rÎ  r±  r¤  r¥  rÆ  rÑ  r—  s     r™   ÚcleanupÚOutputGraph.cleanup–  s;  € ð ˆŒØ�‰×ÑÔØ×/Ñ/×5Ñ5Ô7Ø$(ˆÔ!à—J‘J×$Ô$ˆDØ˜TŸY™YÕ&Ø—I‘I˜jÒ)ñ %ð 	×Ñ×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(Ø×Ñ×ÑÔ!Ø×#Ñ#×)Ñ)Ô+Ø×Ñ×"Ñ"Ô$Ø×#Ñ#×)Ñ)Ô+Ø×-Ñ-×3Ñ3Ô5Ø×Ñ×"Ñ"Ô$Ø× Ñ ×&Ñ&Ô(Ø×$Ñ$×*Ñ*Ô,Ø× Ñ ×&Ñ&Ô(Ø×Ñ×!Ñ!Õ#r¡   r‚  c                 ó:   • U R                   R                  U5        g r–   )rÀ  r½   )rÔ   r‚  s     r™   Úadd_graph_finalizerÚOutputGraph.add_graph_finalizer®  s   € ð 	×#Ñ#×*Ñ*Ð+=Õ>r¡   rÅ   c                 óª   • UR                   S:X  a  UR                  S   R                  $ UR                   S:X  d   eU R                  UR                     $ )z#Extract the non-fake example tensorr�  r(  rô  )rÖ  r+  rÅ  rç   rú  r—  s     r™   Úexample_value_from_input_nodeÚ)OutputGraph.example_value_from_input_node³  sH   € à�7‰7�mÓ#Ø—9‘9˜ZÑ(×0Ñ0Ð0Ø�w‰w˜*Ó$Ð$Ð$Ø�‰˜tŸ{™{Ñ+Ð+r¡   Úinlined_moduler'  c                 óŽ  ^ ^^• [         R                  TR                  5      m[        TT R                  T R
                  5      mT R                  R                  T5        S[        SS 4UU U4S jjn[        US5      (       aX  [        UR                  5      (       a>  UR                  R                  [        L a!  UR                  5        H  u  pEU" U5        M     [        US5      (       a[  [        UR                  5      (       a@  UR                  R                  [        L a"  UR                  5        H  u  pEU" U5        M     g g g g )Nr  r‘   c                 óø   >• TR                   c   eTR                  TU 5      nT SU  3nUTR                   U'   [        T[        5      (       a-  U TR                  [
        R                  UR                  5      '   g g rÜ  r  r  s      €€€r™   r  ÚHOutputGraph.add_fqn_info_for_inlined_modules.<locals>.register_leaf_nameÃ  s€   ø€ Ø×,Ñ,Ñ8Ð8Ð8Ø×=Ñ=¸fÀiÓPˆJØ˜˜q  Ð,ˆHØ2<ˆD×%Ñ% hÑ/Ü˜&¤+×.Ñ.ð ð ×5Ñ5Ü×/Ñ/°
·±Ó@òð /r¡   r  r  )r…  rï  r  rn   rÛ  r,  r¿   r¯   r  r²  r  Ú__func__Ú!og_module_named_parameters_fn_ptrr  Úog_module_named_buffers_fn_ptr)rÔ   r-  r'  r  r  rÄ   r  s   ` `   @r™   Ú add_fqn_info_for_inlined_modulesÚ,OutputGraph.add_fqn_info_for_inlined_modulesº  s  ú€ ô ×*Ñ*¨6¯;©;Ó7ˆÜ"Ø�$×9Ñ9¸4×;LÑ;Ló
ˆð 	×/Ñ/×3Ñ3°DÔ9ð	¬#ð 	°$÷ 	ñ 	ô �> =×1Ñ1ä˜×8Ñ8×9Ñ9Ø"×3Ñ3×<Ñ<Ü4ò5ð %3×$CÑ$CÖ$E‘L�IÙ& yÖ1ñ %Fä�> :×.Ñ.ä˜×5Ñ5×6Ñ6Ø"×0Ñ0×9Ñ9Ü1ò2ð %3×$@Ñ$@Ö$B‘L�IÙ& yÖ1ò %Cð2ð 7ð /r¡   )8rÃ  ro  rÜ  rÊ  rÑ  rÒ  rÓ  rØ  r¦  rÄ  r–  r‡  r©  r€  r�   r×  rÌ  r´  rÎ  r6  r8  ru  r‰  rÉ  rt  r¤  rª  r¥  r9  rË  r¾  r‹  r¸  rÐ  rÁ  rÜ   rÏ  r«  rÀ  rˆ  rÚ  rÅ  r†  rº  rÂ  r¿  rÈ  r²  r£  r±  r’  rv  r½  rÆ  rÛ  r¹  ©Fr×   )r  )r‘   r¢  r–   )r‘   r…  )rÅ  r‰   r‘   N)r‘   r‰   )Útmp)r   r‚  )…rœ   rª   r«   r¬   rØ   rQ   r®   r÷   r¯   r	   r   r2   r­   r   r   rG  r   rÙ   r»   rH  rI  rê   r   rT   rç  rí  rù  r  rÔ  r}   r`  r   ÚProxyr  r  rµ  rÙ  r   re  rh  rm  rS  r)  rv  ry  ÚGraphr‹   Úsetterr�  rÎ  r   r„  ræ  rç  r   rˆ  r‹  r�  r“  rÕ  Úcontextmanagerr(   r   rž  r¡  r¯  r°  rÞ  r%   r=  r4  rQ  r   rç   rR  rB  rÍ  rÇ  rÊ  rÍ  r(  rg   rÓ  rØ  rø   rù   rÞ  r,  rç  Ústaticmethodrï  rø  r   r<   r<  rU  rU  rÎ   rÈ  r?   r�  r‘  r‰  r  r  r
  r  r¡  r7  ræ   r�  r“  rx   r-  r  r1   rX  r¢  rc  rF  r”   rg  rh  ri  rˆ  ry  r   r  r%  r(  r+  r4  r°   r¨   r¡   r™   r…  r…  G  s”	  ‡ ñð Óð  ñhJà˜3 ˜8‘nðhJð ˜jÑ)ðhJð -ð	hJð
 ðhJð %Ð%6Ñ7ðhJð ðhJð ðhJð ðhJð ðhJð $(¨¯©×(IÑ(IÑ#JðhJð Ð*Ñ+ðhJð ðhJð 
õhJðT¨Fð ¸#ð À*ô ð>Øð>Ø"%ð>à	ô>ôô* 8ðDD°3ô Dð
 4:ñ5Ø#ð5Ø-0ð5à	ˆs�E—H‘H—N‘NÐ"Ñ	#õ5ð)¨%¯(©(¯.©.ô )ô*ð<:¸XÀdÈ3ÁiÑ=Pô :ð:Ø˜3 ˜8Ñ$ðØ,1°#°s°(©Oðà	ôð8& 8¨B°¨GÑ#4ð &¸ô &ô#ð
 óó ðð ó ó ð ð& ô &ð ð)�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ðð ˜c‘]ð	ð
 
Ð/Ñ	0ôó ðð: óó ðð ð.˜5×,Ñ,×;Ñ;ó .ó ð.ð ð8˜8ó 8ó ð8ð
 ðA˜Ÿ™×/Ñ/ó Aó ðAð ð>˜D  c ™Nó >ó ð>ð ðF D¨¯©×)CÑ)CÑ$Dó Fó ðFð KOñ$
Ø˜D  e¨H°S¸#°XÑ,>ÀÐ,DÑ&EÐ!EÑFÑGð$
à	õ$
ôL$ô&ð óNó ðNð'˜Sô 'ð0 ô 0ðJ˜Tô Jð #ð ¨%°·±·±ÀÐ0DÑ*Eô ñ˜Cð ¨Cõ ð5 Cð 5¨Dô 5ð
 ð ð ¨ó ó ðð.ØðØ,/ðà	�‰ôð&Nà�e—h‘h—o‘o u§|¡|°SÐ8Ñ9ðNð ðNð ð	Nð
 
ôNð`Y/Ø-ðY/à	ˆt�KÑ  $ v¨v ~Ñ"6Ð6Ñ	7ôY/ðvh"Ø-ðh"Ø;>ðh"à	ˆt�OÑ$Ð&9Ð9Ñ	:ôh"ð\ ñ	I&à'ðI&ð #ðI&ð ð	I&ð
 
Ð!Ñ	"õI&ðVFÐ ;ð FÀð FÈtô Fð2"Gà'ð"Gð ˜?Ñ+ð"Gð ð	"Gð
 ð"Gð 
ô"GôH1ñ< Sð ¸ð Àõ ð4¨D°°d¸5ÀÀcÀ¹?Ñ6KÐ1KÑ,Lô ð Cð ¨Cô ð2 ×Ñð có ó ðô"!7ðF"ØÐ(Ñ)ð"Ø/Jð"à	ô"ðH`)à'ð`)ð �Ñ!ð`)ð ð	`)ð
 
ˆkÑ	ô`)ðD	 ð7˜d 2§7¡7™mó 7ó ð7ð ðE˜4 ™>ó Eó ðEð@Ø—.‘.ð@Ø26°v±,ð@à	ô@ðZØ—.‘.ðZØ26°v±,ðZà	ôZðx˜D  e§h¡h×&:Ñ&:Ð!:Ñ;ô ð Sð °%·(±(×2FÑ2Fð È3ô ð  U§\¡\Ñ 2ô ô
'ô
X0ôt 'ðD ¨d°;Ñ.?ð  ÀDô  ð
Q¨#ð 
Q°cð 
Q¸dô 
Qð¨3ð °sð ¸sô ð	 Sð 	°ð 	¸ô 	ô$ð0?Ø"*¨B¯N©NÐ+;¸TÐ+AÑ"Bð?à	ô?ð
,°%·(±(·-±-ð ,ÀCô ,ð$2Ø#Ÿh™hŸo™oð$2Ø7=ð$2à	÷$2r¡   r…  c                   ó¤   • \ rS rSr% \\S'   \\S'   \\   \S'   \\   \S'   \\\	S4      \S'   \
\\	4   \S'    SS
SS\\	   SS	4S jjrSS jrSrg	)ÚDynamoTracerOutputiá  Úerror_on_graph_breakÚis_tracing_resume_prologueÚoutput_graphÚoutput_graph_for_cleanup.ÚclosureÚ	f_globalsNr�  r‰   r|  r‘   c                 óî   • UR                   U l         UR                  U l        UR                  U l        UR                  U l        UR                  U l        U(       a  S U l        g UR                  U l        g r–   )r?  r@  rC  rD  r¡  rB  rA  )rÔ   r�  r|  s      r™   rê   ÚDynamoTracerOutput.__init__ë  s[   € ð %+×$?Ñ$?ˆÔ!Ø*0×*KÑ*KˆÔ'Ø—~‘~ˆŒØ×)Ñ)ˆŒØ(.¯©ˆÔ%ÞØ $ˆDÕà &§¡ˆDÕr¡   c                 óT  • U R                   nU(       a•  UR                   H  nUR                  R                  5         M     UR                  R
                  (       aL  UR                  R
                  R                  (       a&  S UR                  R
                  R                  l        g g g g r–   )rB  r£  r‹   Ú_clear_nodesr±  rÞ  r=  r’  )rÔ   rA  r�  s      r™   Ú_cleanup_output_graphÚ(DynamoTracerOutput._cleanup_output_graphø  s€   € Ø×4Ñ4ˆÞØ&×.Ô.�Ø—‘×)Ñ)Ö+ñ /ð ×,Ñ,×6×6Ø ×0Ñ0×:Ñ:×D×DàQU�×,Ñ,×6Ñ6×@Ñ@ÕNð Eð 7ð r¡   )rC  r?  rD  r@  rA  rB  r–   r×   )rœ   rª   r«   r¬   r­   r®   r   r…  r`  r	   r÷   r¯   rê   rI  r°   r¨   r¡   r™   r>  r>  á  su   ‡ ØÓØ $Ó$Ø˜;Ñ'Ó'ð ' {Ñ3Ó3Ø�e˜C ˜H‘oÑ&Ó&Ø�C˜�H‰~Óð KOñ.Ø1ð.Ø:BÀ3¹-ð.à	õ.÷
Vr¡   r>  a  With the current config, we will graph break (and fall back to eager-mode PyTorch) on all ops that have do not have the 'pt2_compliant_tag'. Please see the following doc for how to mark this op as PT2 compliant https://pytorch.org/tutorials/advanced/custom_ops_landing_page.htmlrA  Úkindrú  rà   rá   c                 ó€  ^ • US:w  a  g S[         R                  R                  SS 4U 4S jjnS[         R                  R                  S[        SS 4U 4S jjn[	        U[         R                  R                  5      (       a?  [         R
                  R                  UR                  ;   a	  U" U5        g U" USU S35        g [	        U[         R                  R                  5      (       Ga*  [        UR                  5       5      n[        U5      S	:X  aM  [        X'S
   5      n[         R
                  R                  UR                  ;   a	  U" U5        g U" USU S35        g [         R                  R                  R                  T R                   X44S5      u  p4 [         R"                  R$                  " UR&                  /UQ70 UD6n	[        UW	5      n[         R
                  R                  UR                  ;   a	  U" U5        g U" USU SU	 S35        g g ! [(         a  n
[+        SS[        U
5      / S9   S n
A
NsS n
A
ff = f)NrZ  rú  r‘   c                 ó^   >• U R                   S;   a  g TR                  R                  U 5        g )N>   ÚatenÚprimÚprims)Ú	namespacerÌ  r¿   )rú  rA  s    €r™   Úencountered_compliant_opÚ8check_pt2_compliant_op.<locals>.encountered_compliant_op  s)   ø€ Ø×ÑÐ8Ó8ØØ×)Ñ)×-Ñ-¨fÕ5r¡   r§   c                 ó”   >• TR                   R                  U 5        [        R                  (       a  [	        SSUS-   [
        -   / S9  g g )Nz Encountered non-PT2-compliant oprƒ  Ú r   )rË  r¿   r-   Úonly_allow_pt2_compliant_opsrE   Úerr_epilogue)rú  r§   rA  s     €r™   Úencountered_non_compliant_opÚ<check_pt2_compliant_op.<locals>.encountered_non_compliant_op  sB   ø€ Ø×&Ñ&×*Ñ*¨6Ô2Ü×.×.ÜØ:ØØ #™I¬Ñ4Øó	ð /r¡   z%Encountered the torch.ops.OpOverload z that is not PT2 compliant.r,   r   z:Encountered the non-overloaded torch.ops.OpOverloadPacket z that is not PT2 compliant. Fz*Error when attempting to resolve op packetrƒ  r   z+Encountered the torch.ops.OpOverloadPacket z! which resolves to the overload (z) that is not PT2 compliant.)r»   Ú_opsÚ
OpOverloadr¯   rº   ÚTagÚpt2_compliant_tagÚtagsÚOpOverloadPacketr`  Ú	overloadsrë  rž   rO  rg  Úget_fake_values_from_nodesrÍ  rN  Ú_jit_resolve_packetÚ_qualified_op_namer  rE   )rA  rK  rú  rà   rá   rR  rX  r`  rÖ  Úoverloadr½  s   `          r™   Úcheck_pt2_compliant_opre    s  ø€ ð ˆÓØð6¬¯©×)>Ñ)>ð 6À4÷ 6ð
¬U¯Z©Z×-BÑ-Bð Ìð ÐQU÷ ô �&œ%Ÿ*™*×/Ñ/×0Ñ0Ü�9‰9×&Ñ&¨&¯+©+Ó5Ù$ VÔ,ØÙ$ØØ3°F°8Ð;VÐWô	
ð 	ä�&œ%Ÿ*™*×5Ñ5×6Ò6Ü˜&×*Ñ*Ó,Ó-ˆ	ô ˆy‹>˜QÓÜ˜¨1¡Ó.ˆBÜ�y‰y×*Ñ*¨b¯g©gÓ5Ù(¨Ô,ØÙ(Øð.Ø.4¨Xð 6.ð/ôð ä—}‘}×*Ñ*×EÑEØ×#Ñ# d ^°Uó
‰ˆð
	Ü—x‘x×3Ò3Ø×)Ñ)ðØ,0òØ4:ñˆHô �V˜XÓ&ˆÜ�9‰9×&Ñ&¨"¯'©'Ó1Ù$ RÕ(á(ØØ=¸f¸Xð F3à3;°*ð =%ð&õðK 7øô0 ó 	ÜØDØÜ ›FØ÷	ûð	ús   Æ.H È
H=ÈH8È8H=ÚPÚRc            
       ór   • \ rS rSrSSS\\\4   S\R                  S\R                  SS4
S	 jr	S\
4S
 jrSrg)r†  ia  r�  r¢  rß   rà   rá   r‘   Nc                 ó4   • Xl         X l        X0l        X@l        g r–   )r�  rß   rà   rá   )rÔ   r�  rß   rà   rá   s        r™   rê   ÚLazyProxy.__init__b  s   € ð ŒàŒØŒ	Ø�r¡   c                 óN   • U R                   " U R                  0 U R                  D6$ r–   )rß   rà   rá   rÓ   s    r™   r  ÚLazyProxy.__call__o  s   € Ø�wŠw˜Ÿ	™	Ð1 T§[¡[Ñ1Ð1r¡   )rà   rß   rá   r�  )rœ   rª   r«   r¬   r   rf  rg  rà   rá   rê   r	   r  r°   r¨   r¡   r™   r†  r†  a  sS   † ðà ðð �Q˜�T‰Nðð �v‰vð	ð
 —(‘(ðð 
ôð2˜#÷ 2r¡   r†  c                   óÎ  ^ • \ rS rSrSr    S.SSS\S    S\S\\   S	\\   S
S4U 4S jjjr	S\
S
S4S jrSSS\R                  S
S4S jr   S/S\S\S\S\S\\   S\\   S\\\R                  /\R"                  4      S
\R"                  4S jjr   S/S\S\S\S\S\\   S\\   S\\\R                  /\R"                  4      S
\R"                  4U 4S jjjr    S0S\S\S\S\S\\   S\\   S
\R                  4U 4S jjjrS\R                  S
S4S jr  S1S\S\S\S\S\\   S
\R"                  4S  jjrS!\R"                  S
\\\R"                  4   4S" jrS#\S
\4S$ jrS\S%\\\R                  R"                  4   S
S4S& jrS\\R<                  \R>                  4   S'\\   S
S4S( jr S)\R<                  S
\!\"RF                     4S* jr$S
\%4S+ jr&S
\'4S, jr(S-r)U =r*$ )2r¢  is  z÷
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.
NrA  r…  r™  rŽ  r•  r—  r‘   c                 óö  >• [         TU ]  5         [        R                  " U5      U l        [
        R                  R                  5       U l        X0l	        0 U l
        0 U l        X l        X@l        XPl        0 U l        0 U l        0 U l        S U l        SU l        SU l        SU l        SU l        Ub  UR.                  S-   OSU l        S U l        S U l        S U l        S U l        U R                  c  / U l        O:U R                  R8                  U R                  R;                  U5      U4/-   U l        [=        5       U l        / U l         [
        RB                  " 5       (       a  [E        S5      e[=        5       U l#        g )NFr,   r   zSInference mode is supposed to be disabled during compilation. Please open an issue.)$ré   rê   Úweakrefrö  rA  r»   r   r9  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Úis_reconstructing_generatorÚdebug_levelÚ	_cur_codeÚ_orig_gm_metaÚ_orig_gm_lineno_mapÚ_orig_gm_firstlinenoÚsource_fn_stackÚ_target_to_strr*   Ú_used_namesÚ_input_versions_at_beginningÚis_inference_mode_enabledr  Útracked_tensor_or_symint_vt)rÔ   rA  r™  rŽ  r•  r—  rï   s         €r™   rê   ÚSubgraphTracer.__init__{  ss  ø€ ô 	‰ÑÔÜ#ŸMšM¨,Ó7ˆÔÜ—X‘X—^‘^Ó%ˆŒ
ð #Œð 9;ˆÔ à=?ˆÔð ŒØ*ÔØ&Ôð :<ˆÔð TVˆÔð >@ˆÔ!àˆŒð
 =BˆÔ9Ø;@ˆÔ8ð */ˆÔ&ð ,1ˆÔ(à:@Ñ:L × 2Ñ 2°QÒ 6ÐRSˆÔàˆŒØ26ˆÔØGKˆÔ Ø37ˆÔ!ð
 �;‰;ÑØ.0ˆDÕ à#'§;¡;×#>Ñ#>Ø—‘×*Ñ*¨=Ó9¸=ÐIðBñ $ˆDÔ ô
 -7«LˆÔð 8:ˆÔ)Ü×*Ò*×,Ñ,ÜØeóð ô ISËˆÕ(r¡   r  c                 ó:   • U R                   R                  U5        g r–   )r�  r¿   )rÔ   r  s     r™   Úrecord_tensor_or_symint_vtÚ)SubgraphTracer.record_tensor_or_symint_vtÚ  s   € Ø×(Ñ(×,Ñ,¨RÕ0r¡   rÅ  r‰   rÅ   c                 óÀ  • U R                   (       aÍ  U R                  (       a»  U R                  (       a©  UR                  R                  nS nUb(  U R                  R                  X0R                  -
  S 5      nUbb  U R                   U   n[        R                  R                   H  nXe;   d  M
  XV   UR                  U'   M     SU;   a  US   UR                  S'   g g g g g g )NÚstack_trace)
ry  rz  r{  Úcurrent_instructionÚstarts_liner`  r   rö  Ú_COPY_META_FIELDSr+  )rÔ   rÅ  rÅ   ÚlinenoÚnode_idxr+  r   s          r™   rd  Ú,SubgraphTracer._maybe_preserve_original_metaÞ  sÖ   € ð ××Ø×(×(Ø×)×)à×+Ñ+×7Ñ7ˆFØˆHØÑ!Ø×3Ñ3×7Ñ7Ø×6Ñ6Ñ6¸ó�ð Ñ#Ø×)Ñ)¨(Ñ3�ÜŸX™X×7Ô7�EØ•}Ø+/©;˜Ÿ	™	 %Ó(ñ 8ð ! DÓ(Ø/3°MÑ/B�D—I‘I˜mÒ,ð )ð $ð *ð )ð r¡   rK  rú  rà   rá   r  Ú	type_exprÚproxy_factory_fnc           	      ó\  • [         R                  " 5       n U R                  XX4XVU5      U R                  R                  =R
                  [         R                  " 5       U-
  -  sl        $ ! U R                  R                  =R
                  [         R                  " 5       U-
  -  sl        f = fr–   )rö  r÷  Ú_create_proxyrA  rØ  r  )	rÔ   rK  rú  rà   rá   r  rŽ  r�  Ú_t0s	            r™   r‹  ÚSubgraphTracer.create_proxyô  s…   € ô �lŠl‹nˆð	Ø×%Ñ%Ø˜d¨DÐ=Móð ×Ñ×6Ñ6×FÒFÜ—’“ Ñ$ñÖFøˆD×Ñ×6Ñ6×FÒFÜ—’“ Ñ$ñÖFús   —A* Á*AB+c           	      óî  >^^^^^• U R                   b^  [        R                  " X445      u  p‰/ n
U H%  nU R                  U5      nU
R	                  U5        M'     [        R
                  " X©5      u  p4[        TU ]  UTUUUUU5      mU R                  R                  n[        R                  S:¼  a«  US;   a¥  UR                  mTU R                  LaŠ  TR                  b}  TR                  R                  bf  UR                   mUR#                  TR                  R                  S9mS[$        4UUUU4S jjn[&        R)                  S[+        U5      5        TU l        SnUR                   U R,                  Laã  [.        R0                  " UR                   5      R3                  SS	 5      " 5       n[5        U[6        R8                  R:                  5      (       ao  S
nUR<                  R>                   Vs/ s H  nUR@                  PM     snU l!        URD                  U l#        URH                  RJ                  RL                  U l'        OS U l!        S U l#        S U l'        URP                  nU(       a'  URS                  5       TRT                  R@                  S'   US;   aÕ  TRT                  RV                  T4nU(       aŽ  [Y        TRT                  R@                  S   R[                  5       5      S   S   nUR\                  R_                  S5      (       a8  UR\                  R_                  S5      (       d  TRT                  RV                  U4nU R`                  U/-   TRT                  R@                  S'   O¡US:X  a›  U R                   b  [c        SSU Rd                   3S/ S9  U R`                  TRT                  RV                  [g        U4S jTRT                  R@                  S   Ri                  5        5       5      4/-   TRT                  R@                  S'   U Rk                  UTRT                  5        U(       Gd+  STRT                  R@                  ;  a:  URP                  nU(       a'  URS                  5       TRT                  R@                  S'   STRT                  R@                  ;  a½  US;   a>  U R`                  TRT                  RV                  T4/-   TRT                  R@                  S'   OyUS:X  as  U R                   b  [c        SSS/ S9  U R`                  TRT                  RV                  TRT                  R@                  S   T   S   4/-   TRT                  R@                  S'   STRT                  R@                  ;  aÜ  / nU(       aJ  URm                  5       (       d  UR	                  URo                  5       5        [q        USS 5      nU(       a  MJ  U Vs/ s H  nURr                  [u        5       ;  d  M  UPM!     nnURw                  5         [x        Rz                  R}                  U5      R                  5       nSR�                  U5      TRT                  lA        [6        R„                  R†                  Rˆ                  (       d)  [6        R„                  R†                  RŠ                  (       aD  U R                  RŒ                  R�                  U R                  R                  TRT                  5        T$ s  snf s  snf )NrX  r¥  )r‹  r‘   c                  óv   >• [        TT5      R                  5       n STR                  R                   ST SU  3$ )NzTRACE FX call z from r  )rk   ÚrstriprÅ   r  )ÚlineÚcur_instÚheaderr-  Útx_codes    €€€€r™   Úget_trace_call_log_strÚ<SubgraphTracer._create_proxy.<locals>.get_trace_call_log_strX  s9   ø€ Ü5°g¸xÓH×OÑOÓQ�DØ+¨B¯G©G¯L©L¨>¸À¸xÀrÈ$ÈÐPÐPr¡   rG  FÚorig_graphmodulec                  ó   • g r–   r¨   r¨   r¡   r™   rS  Ú.SubgraphTracer._create_proxy.<locals>.<lambda>c  s   € ¨Dr¡   TÚnn_module_stack>   r¦  rZ  ru  r,   )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.r   c              3   óf   >#   • U  H&  u  nu  p#UR                  S 5      S   T:X  d  M"  Uv •  M(     g7f)Ú@r   N)rä  )r_  rí   rÄ   Útyrú  s       €r™   ra  Ú/SubgraphTracer._create_proxy.<locals>.<genexpr>“  s4   øé € ð â*Q™J˜A™w ØŸ7™7 3›<¨™?¨fÑ4÷ ™Ú*Qùs   ƒ!1¨	1z2Invoking an nn.Module inside a HigherOrderOperatorrƒ  r‡  r™  )Hr™  r  Útree_flattenÚ#maybe_lift_tracked_freevar_to_inputr½   Útree_unflattenré   r‹  rA  rÍ  rP  rQ  rˆ  rr  Ú	positionsr‹  rŠ  Úget_line_of_code_headerr¯   Útrace_call_logr�  rs   rx  r>   Úget_contextr`  rº   r»   r   r  r‹   rÒ  r+  ry  Ú_lineno_maprz  r  Ú__code__r‘  r{  r   r  rÅ   r  rÙ   r)  rª   Ú
startswithr|  rE   r•  r§  rë   rd  Úis_co_filename_from_nn_modulesÚframe_summaryrž   rþ  r'   rÈ  rÚ   ÚStackSummaryÚ	from_listr#  rì  r‡  rO  r-   r¼  Útrack_nodes_for_deduplicationr«  Ú
track_node)rÔ   rK  rú  rà   rá   r  rŽ  r�  Ú	flat_argsÚ	tree_specÚnew_flat_argsr7  Ú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‘  ÚSubgraphTracer._create_proxy  sï  ý€ ðV �;‰;Ñ"Ü#)×#6Ò#6¸°~Ó#FÑ ˆIØˆMÛ �Ø $× HÑ HÈÓ M�Ø×$Ñ$ ]Ö3ñ !ô "×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Ò*Ü%1×%=Ò%=¸b¿i¹iÓ%H×%LÑ%LØ"¡Lô&ó &Ð"ô Ð0´%·(±(×2FÑ2F×GÑGØ#�à&<×&BÑ&B×&HÒ&Hó&Ú&H �B—G”GÑ&Hñ&�Ô"ð ,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�÷ �"ñ -ó(â,�EØ—>‘>Ô)<Ó)>Ñ>÷ Ù,ð %ð (ð %×,Ñ,Ô.ô ×)Ñ)×3Ñ3Ð4LÓM×TÑTÓVˆDØ"$§'¡'¨$£-ˆB�G‰GÔô �M‰M× Ñ ×8×8Ü�}‰}×#Ñ#×A×Aà×Ñ×,Ñ,×7Ñ7Ø×!Ñ!×,Ñ,¨b¯g©gôð ˆ	ùò_&ùòv(s   Ç0[-×[2×0[2c                 óØ  >• [        U R                  XX45        U R                  bk  [        R                  " U0 UD6nU HO  n[        U[        R                  R                  5      (       d  M.  UR                  U R                  :X  a  MJ   S5       e   [        T
U ]-  XX4XV5      n	U R                  R                  U	R                  S'   U R                  R                  U	R                   5        U	$ )Nz2create_node using arg not from this SubgraphTracerrà  )re  rA  r™  r  Úarg_tree_leavesrº   r»   r   rÎ  r‹   ré   r�  r¿  r+  r~  r¿   r  )rÔ   rK  rú  rà   rá   r  rŽ  rµ  r7  rÅ   rï   s             €r™   r�  ÚSubgraphTracer.create_nodeØ  sÅ   ø€ ô 	˜t×0Ñ0°$ÀÔMØ�;‰;Ñ"Ü×.Ò.°Ð?¸Ñ?ˆIÛ �Ü! #¤u§x¡x§}¡}×5Ñ5ÙØ—y‘y D§J¡JÕ.ð ØHóÐ.ñ !ô ‰wÑ" 4°¸tÓOˆØ*.×*;Ñ*;×*EÑ*Eˆ�	‰	Ð&Ñ'Ø×Ñ×Ñ˜TŸY™YÔ'Øˆr¡   c                 óÐ  • [        UR                  5      S:”  aŒ  / nUR                   HV  nUR                  U R                  :w  d  M  UR                  [	        [        UR                  R                  5      5      5        MX     U H  nUR                  R                  U5        M      U R                  R                  U5        U R                  R                  UR                  S 5        g rp  )rë  rÉ  r‹   r\  rk  rÙ   rÒ  rä  r�  r¾   r  )rÔ   rÅ   Úuser_graph_nodesÚuserÚother_graph_nodes        r™   r“  ÚSubgraphTracer.remove_nodeò  sª   € Üˆt�z‰z‹?˜QÓØ46ÐØŸ
œ
�ð —:‘: §¡Õ+ð %×+Ñ+¬H´T¸$¿*¹*×:JÑ:JÓ5KÓ,LÖMñ #ó %5Ð Ø ×&Ñ&×1Ñ1Ð2BÖCñ %5à�
‰
×Ñ˜dÔ#Ø× Ñ ×$Ñ$ T§Y¡Y°Õ5r¡   r-  Úbeforer'  c           	      ó¸  • [        U[        R                  5      (       a%  U R                  R	                  UR
                  5        [        R                  SUUb  UR                  OSUU R                  U5        Uc  U R                  c   SU SU S35       eU R                  (       ai  U R                  c\  Uc   e[        USS9(       dH  U R                  R                  R                  U/ 5      R	                  [         R"                  " 5       5        [%        XR&                  5      nU R(                  (       av  [+        [-        U R(                  5      5      nU R(                  U   R.                  nU(       a  U R0                  R3                  U5      nO7U R0                  R5                  U5      nOU R0                  R3                  S 5      nU   U R7                  SUS	0 US
9n	[9        U	R.                  U5        U R(                  (       a@  U(       a9  U R(                  R;                  5       u  p«X�R(                  U'   X°R(                  U
'   OX�R(                  U'   U R&                  R=                  U5        U R                  n[        R>                  RA                  5       nU(       d®  U(       d§  [        U[        R                  5      (       a  U RC                  X55        Ov[        U[D        [F        45      (       a[  [I        U5       HL  u  pï[        U[        R                  5      (       d  M&  S nU(       a  [K        UUSS9nU RC                  UU5        MN     [        U[        RL                  5      (       aU  [        UR.                  RN                  [P        RR                  5      (       a"  X�RT                  UR.                  RN                  '   U	sS S S 5        $ ! , (       d  f       g = f)Nz7create_graph_input %s %s %s at debug_level %s before=%sz(none)z0you are required to provide a source for inputs z example_val z on the root tracerT)Úonly_allow_inputr�  r¨   ©rŽ  F)rà  r/  Úindex_is_slice)+rº   r»   r   r  r½   Ú_versionrË   r�  r  rw  r™  rŽ  rZ   rA  rÂ  r  r   Úextract_stackrn   r~  r�  r§  rk  rÅ   r‹   Úinserting_beforeÚinserting_afterr‹  rv   Úpopitemr¿   ÚcompilerÚis_compilingÚ_lift_basic_symbolsrÙ   r`  rI  rW   r  rå  ræ  rç  rˆ  )rÔ   r  rŽ  r-  rÊ  r'  Ú	prev_namerÅ   Úctxrö  rí   rî   Úis_strict_exportÚis_non_strict_exportrS  r½  Úe_sources                    r™   r*  Ú!SubgraphTracer.create_graph_input  s  € ô �m¤U§\¡\×2Ñ2Ø×-Ñ-×4Ñ4°]×5KÑ5KÔLÜ�	‰	ØEØØ!Ñ-ˆF�KŠK°8ØØ×ÑØô	
ð ‰>Ø—;‘;Ñ*ð ØBÀ4À&ÈÐVcÐUdÐdwÐxóÐ*ð �>�>˜dŸk™kÑ1ØÑ%Ð%Ð%Ü'¨À×FØ×!Ñ!×7Ñ7×BÑBÀ6È2ÓN×UÑUÜ"×0Ò0Ó2ôô # 4×)9Ñ)9Ó:ˆØ×#×#ÜœX d×&>Ñ&>Ó?Ó@ˆIØ×+Ñ+¨IÑ6×;Ñ;ˆDÞØ—j‘j×1Ñ1°$Ó7‘à—j‘j×0Ñ0°Ó6‘à—*‘*×-Ñ-¨dÓ3ˆCÚØ×%Ñ% m°T¸2¸rÈYÐ%ÐWˆEÜ˜eŸj™j¨-Ô8Ø×'×'®FØ×/Ñ/×7Ñ7Ó9‘�Ø16×(Ñ(¨Ñ.Ø./×(Ñ(¨Ò+à16×(Ñ(¨Ñ.ð
 ×Ñ× Ñ  Ô&ð@  $Ÿ~™~ÐÜ#(§>¡>×#>Ñ#>Ó#@Ð Þ#Ö,@Ü˜m¬U¯\©\×:Ñ:Ø×,Ñ,¨]ÕCÜ ´´e¨}×=Ñ=Ü )¨-Ö 8™˜Ü)¨!¬U¯\©\×:Ñ:Ù$à#'˜Þ!Ü'4Ø%+Ø&'Ø/4ñ(˜Hð ×0Ñ0°°HÖ=ñ !9ô ˜-¬¯©×6Ñ6¼:Ø×"Ñ"×'Ñ'¬¯©÷<ñ <ð ?D×"Ñ" =×#5Ñ#5×#:Ñ#:Ñ;Ø÷M �S�Sús   Ç	G8OÏ
Orö  c                 óÖ  • U R                   c   S5       eUR                  R                  S   n[        U[        R
                  5      (       aG  UR                  R                  U R                  ;   a#  U R                  UR                  R                     $ XR                  ;   a  U R                  U   $ UR                  U R                   :w  a  U R                   R                  U5        UR                  R                  S   n[        U[        5      (       a  [        UR                  5      O
[        U5      nU R                  UR                  R                  X25      nX@R                  U'   U$ )NzIlift_tracked_freevar_to_input should not be called on root SubgraphTracerr-  )r™  rÅ   r+  rº   r»   r  rå  rˆ  rp  r�  Úlift_tracked_freevar_to_inputr   r<  Úreal_objr*  r  )rÔ   rö  r-  rŽ  Ú	new_proxys        r™   rÞ  Ú,SubgraphTracer.lift_tracked_freevar_to_input…  s.  € ð
 �{‰{Ñ&ð 	
ØWó	
Ð&ð Ÿ
™
Ÿ™¨Ñ8ˆô �}¤e§l¡l×3Ñ3Ø×"Ñ"×'Ñ'¨4×+=Ñ+=Ó=à×%Ñ% m×&8Ñ&8×&=Ñ&=Ñ>Ð>ð
 ×(Ñ(Ó(Ø×'Ñ'¨Ñ.Ð.ð
 �<‰<˜4Ÿ;™;Ó&Ø�K‰K×5Ñ5°eÔ<àŸ
™
Ÿ™¨Ñ8ˆô ˜-Ô)9×:Ñ:ô �×'Ñ'Ô(ä�mÓ$ð 	ð
 ×+Ñ+¨E¯J©J¯O©O¸YÓVˆ	Ø&/×Ñ˜UÑ#ØÐr¡   r7  c                 ó0  ^ • [        U[        R                  R                  5      (       dJ  [        U[        5      (       a3  [	        U 4S jUR
                  UR                  UR                  4 5       6 $ U$ UR                  T :X  a  U$ T R                  U5      $ )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   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr–   )r¦  )r_  Úsub_argrÔ   s     €r™   ra  ÚESubgraphTracer.maybe_lift_tracked_freevar_to_input.<locals>.<genexpr>¿  s&   øé € ð â'F˜Gð ×@Ñ@À×IÐIÚ'Fùs   ƒ!)
rº   r»   r   r8  ÚsliceÚstartÚstopÚstepr�  rÞ  )rÔ   r7  s   ` r™   r¦  Ú2SubgraphTracer.maybe_lift_tracked_freevar_to_input²  s   ø€ ô ˜#œuŸx™xŸ~™~×.Ñ.ô
 ˜#œu×%Ñ%Üôà(+¯	©	°3·8±8¸S¿X¹XÑ'Fóðð ð �
Ø�Z‰Z˜4ÓØˆJØ×1Ñ1°#Ó6Ð6r¡   Úe_proxyc                 óØ  ^ ^^• TR                   m[        T[        5      (       d   eS[        S[        4U 4S jjnS[        S[        S[        S[
        R                  4UU4S jjn[        U[        R                  5      (       Ga’  [        UR                  5       5       H�  u  pVU" U5      (       d  M  [        R                  SUTUTR                  5        [        TUUS	[        R                  R                   R"                  R$                  TU40 ['        U5      S
9nT R)                  Xg5        M‘     UR+                  5       nU" U5      (       ao  [        R                  SUTTR                  5        [        TUUS	[        R                  R                   R,                  T40 ['        U5      S
9nT R)                  X‡5        UR.                  [        R0                  L a®  [        UR3                  5       5       H�  u  pVU" U5      (       d  M  [        R                  SUTUTR                  5        [        TUUS	[        R                  R                   R4                  R$                  TU40 ['        U5      S
9nT R)                  Xg5        M‘     GO;UR.                  [        R6                  L aA  T R)                  UR9                  5       T5        T R)                  UR;                  5       T5        OÝUR.                  [        R<                  [        R>                  1;   aA  T R)                  URA                  5       T5        T R)                  URC                  5       T5        OnUR.                  [        RD                  [        RF                  1;   a@  T R)                  URI                  5       T5        T R)                  URK                  5       T5        [M        U5      (       aC  URO                  5       u  pšU	 H*  n[Q        X5      nT R)                  U[Q        TU5      5        M,     g g [        U[        RR                  5      (       a4  U" U5      (       a&  URT                  RV                  nTTRX                  U'   g g g )Nr   r‘   c                 óÞ   >• SSK Jn  U" U 5      =(       aX    [        U R                  R                  [
        R                  5      =(       a#    U R                  R                  TR                  ;  $ )Nr   )r$   )rö  r$   rº   rÅ   rå  ræ  rç  rˆ  )r   r$   rÔ   s     €r™   Ú	need_bindÚ8SubgraphTracer.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¡   r-  rà   rá   c                 ój  >• [        T[        5      (       a  T" 5       OTm[        T[        R                  R                  5      (       d   eTR
                  R                  TR                  5         TR                  " U0 UD6n[        UR                  U 5        UsS S S 5        $ ! , (       d  f       g = fr–   )
rº   r†  r»   r   r8  r‹   rÒ  rÅ   r‹  rv   )r-  rà   rá   rö  rë  r�  s       €€r™   Ú_proxy_with_example_valueÚHSubgraphTracer.track_produced_symints.<locals>._proxy_with_example_valueî  s}   ø€ ô
 $.¨g´y×#AÑ#A‘g”iÀwˆGÜ˜g¤u§x¡x§~¡~×6Ñ6Ð6Ð6Ø—‘×-Ñ-¨g¯l©lÕ;Ø×+Ò+¨TÐ<°VÑ<�Ü! %§*¡*¨mÔ<Ø÷ <×;×;ús   Á0*B$Â$
B2z=track_produced_symints %s for %s.size()[%s] at debug_level %srZ  rÍ  zCtrack_produced_symints %s for %s.storage_offset() at debug_level %sz?track_produced_symints %s for %s.stride()[%s] at debug_level %s)-r�  rº   r¢  r	   r­   r   r8  r»   r   rI  rý  rË   r�  rw  r†  ÚopsrN  Úsym_sizer(  r<  Útrack_produced_symintsÚstorage_offsetÚsym_storage_offsetÚlayoutÚstridedÚstrideÚ
sym_strideÚ
sparse_cooÚ_indicesÚ_valuesÚ
sparse_csrÚ
sparse_bsrÚcrow_indicesÚcol_indicesÚ
sparse_cscÚ
sparse_bscÚccol_indicesÚrow_indicesr+   Ú__tensor_flatten__rž   r  rÅ   rå  rˆ  )rÔ   r-  rë  rî  rñ  rS  r   Ú
lazy_proxyrö  ÚattrsrØ  r~  Úinner_trå  r�  s   ` `           @r™   rõ  Ú%SubgraphTracer.track_produced_symintsÒ  s¯  ú€ ð  —‘ˆÜ˜&¤.×1Ñ1Ð1Ð1ð	œð 	¤÷ 	ð
	Üð
	Ü'*ð
	Ü69ð
	ä�X‰X÷
	ð 
	ô �m¤U§\¡\×2Ò2Ü! -×"4Ñ"4Ó"6Ö7‘�Ù˜Q—<“<Ü—I‘IØWØØØØ×*Ñ*ôô "+ØØ1ØØ'ÜŸ	™	Ÿ™×/Ñ/×3Ñ3Ø  !˜ØÜ"& q£'ñ	"�Jð ×/Ñ/°Ö>ñ' 8ð* +×9Ñ9Ó;ˆNÙ˜×(Ñ(Ü—	‘	ØYØ"ØØ×&Ñ&ô	ô 'ØØ-Ø"Ø#Ü—I‘I—N‘N×5Ñ5Ø�JØÜ" >Ó2ñ	�
ð ×+Ñ+¨NÔGà×#Ñ#¤u§}¡}Ò4Ü% m×&:Ñ&:Ó&<Ö=‘D�AÙ  —|“|ÜŸ	™	Ø]ØØ#ØØ"×.Ñ.ôô &/Ø"Ø5ØØ+Ü!ŸI™IŸN™N×5Ñ5×9Ñ9Ø$ a˜LØÜ&*¨1£gñ	&˜
ð ×3Ñ3°AÖBó' >ð* ×%Ñ%¬×)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Ü,¨]×;Ñ;Ø*×=Ñ=Ó?‘
�Û!�DÜ% mÓ:�GØ×/Ñ/°¼ÀÈ$Ó9OÖPò "ð <ô
 ˜¤u§|¡|×4Ñ4Ù˜×'Ñ'Ø$×)Ñ)×.Ñ.�Ø-4�×$Ñ$ TÒ*ð (ð 5r¡   Úsrcc           	      óú  ^ •  SS[         [        [        R                  4   S[        [
           S[        SS 4U 4S jjjn[        U[        R                  5      (       Gat  [        UR                  5       5       H+  u  pEU" UUb  [        U[        R                  U5      OS SS9  M-     UR                  [        R                  L a}  [        UR!                  5       5       H+  u  pEU" UUb  [        U[        R"                  U5      OS SS9  M-     U" UR%                  5       Ub  [        U[        R&                  5      OS SS9  GO;UR                  [        R(                  L aA  T R+                  UR-                  5       U5        T R+                  UR/                  5       U5        OÝUR                  [        R0                  [        R2                  1;   aA  T R+                  UR5                  5       U5        T R+                  UR7                  5       U5        OnUR                  [        R8                  [        R:                  1;   a@  T R+                  UR=                  5       U5        T R+                  UR?                  5       U5        [A        U5      (       aF  URC                  5       u  pgU H-  n[E        X5      n	T R+                  X’b  [G        X(5      OS 5        M/     g g [        U[        R                  5      (       a
  U" UU5        g g )	Nr   r'  rÊ  r‘   c           	      óö  >• [        U 5      (       d  g [        U [        R                  5      (       d   eTR	                  U 5      n[        U5      S:X  a  g TR                  bÝ  TR                  R                  X5        U H»  nTR                  R                  U   nUR                  R                  S   n[        U[        R                  5      (       d   eTR                  [        U5      [        U5      UUUS9n[        R                  SUUb  UR                   OSTR"                  5        UTR$                  U'   M½     g [        U5      S:X  d   SU SU  35       eUc   S	U  S
U  S35       e['        [)        U5      5      nTR                  [        U5      [        U 5      U UUS9n[        R                  SU Ub  UR                   OSTR"                  5        [+        UU SS SS9UR                  R                  S'   g )Nr   r-  )rÊ  r'  z4_lift_symbols_in_symint %s from %s at debug_level %szsubgraph inputsr,   zyFor root tracer, we only expect to bind basic symbols (compound symbols should be cached before) but got unbound symbols z in zSource of 'zÕ' is None when lifting it to input of top-level. If it's an unbacked symbol, this could be because it's not tracked with lazy_bind_unbacked_symbols. Otherwise, should provide a source when create_graph_input for `z` at root tracer.F)Úpass_arg_as_tensorr3  rn  r(  )r$   rº   r»   r  Úlookup_unbound_symbolsrë  r™  rÖ  rˆ  rÅ   r+  r*  r¯   r<  rË   r�  r  rw  rp  r§  Úiterrx   )	r   r'  rÊ  Úself_to_be_boundÚs0Úparent_proxyÚexample_valÚphrÔ   s	           €r™   Ú_lift_symbols_in_symintÚCSubgraphTracer._lift_basic_symbols.<locals>._lift_symbols_in_symintU  s  ø€ ô
 ˜q—>‘>Øä˜a¤§¡×.Ñ.Ð.Ð.Ø#×:Ñ:¸1Ó=ÐÜÐ#Ó$¨Ó)Øð �{‰{Ñ&à—‘×/Ñ/°Ô:Û*�BØ#'§;¡;×#<Ñ#<¸RÑ#@�LØ".×"3Ñ"3×"8Ñ"8¸Ñ"I�KÜ% k´5·<±<×@Ñ@Ð@Ð@Ø×0Ñ0Ü˜B›Ü˜[Ó)Ø#Ø%Ø%ð 1ð �Bô —I‘IØNØØ'-Ñ'9˜ŸšÐ?PØ×(Ñ(ô	ð :<�D×(Ñ(¨Ó6ò# +ô( Ð+Ó,°Ó1ð ðHØHXÐGYÐY]Ð^_Ð]`ðbóÐ1ð Ñ)ð Ø! ! ð %WàWXÐVYÐYjðlóÐ)ô
 œ$Ð/Ó0Ó1�Ø×,Ñ,Ü˜“GÜ˜“GØØ!Ø!ð -ð �ô —	‘	ØJØØ#)Ñ#5�F—K’KÐ;LØ×$Ñ$ô	ô ,4ØØØ',Ø $Ø#ñ,�—‘—‘˜ZÒ(r¡   T)rÊ  r6  )$r   r(  r»   r  r   r   r­   rº   r   rI  rý  ra   r`   ÚSIZErø  rù  rú  ÚSTRIDErö  ÚSTORAGE_OFFSETrü  rÖ  rý  rþ  rÿ  r   r  r  r  r  r  r  r+   r  rž   rT   )
rÔ   r-  r  r  rS  r   r	  rØ  r~  r
  s
   `         r™   rÖ  Ú"SubgraphTracer._lift_basic_symbolsN  s˜  ø€ ð !ñB	Ü”Sœ%Ÿ,™,Ð&Ñ'ðB	äœVÑ$ðB	ô ðB	ð ÷	B	ð B	ôH �m¤U§\¡\×2Ò2Ü! -×"4Ñ"4Ó"6Ö7‘�Ù'Øð ™?ô -¨S´.×2EÑ2EÀqÔIà!àôñ 8ð ×#Ñ#¤u§}¡}Ò4Ü% m×&:Ñ&:Ó&<Ö=‘D�AÙ+Øð  #™ô 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Ü,¨]×;Ñ;Ø*×=Ñ=Ó?‘
�Û!�DÜ% mÓ:�GØ×,Ñ,Ø¹/¤¨CÔ!6Ètöò "ð <ô ˜¤u§|¡|×4Ñ4Ù#ØØõð 5r¡   r   c                 óÌ  • UR                   R                  R                  n[        U5      S:X  a  / $ / nU H¡  nX@R                  ;  a  UR                  U5        M%  U R                  U   n[        U[        5      (       a  U" 5       nXPR                  U'   [        U[        R                  R                  5      (       a  UR                  U L a  M˜   SU S35       e   [        US S9$ )Nr   zThe proxy of symbol z" doesn't belong to current tracer.c                 ó   • U R                   $ r–   )r  )r   s    r™   rS  Ú7SubgraphTracer.lookup_unbound_symbols.<locals>.<lambda>ã  s   € °·²r¡   )r%  )rÅ   rå  r"   rë  rˆ  r½   rº   r†  r»   r   r8  r�  rË  )rÔ   r   r"   Úto_be_boundr  rö  s         r™   r  Ú%SubgraphTracer.lookup_unbound_symbolsÐ  sÏ   € Ø—v‘v—{‘{×/Ñ/ˆÜˆ|Ó Ó!ØˆIàˆÛˆBØ×+Ñ+Ó+Ø×"Ñ" 2Ô&Ùà×&Ñ& rÑ*ˆEÜ˜%¤×+Ñ+Ù›�Ø).×"Ñ" 2Ñ&Ü˜e¤U§X¡X§^¡^×4Ñ4¸¿¹ÈÔ9Mð Ø& r dÐ*LÐMóÐMñ ô �kÑ'7Ñ8Ð8r¡   c                 ó(  • U R                   n/ n/ nU R                  R                   Hq  nUR                  S:X  a^  UR                  S   n[        U[        R                  5      (       a.  UR                  UR                  5        UR                  U5        Mo  Mq    O   [        [        X5      5       VVVs/ s H  u  nu  pxXx:w  d  M  UPM     n	nnnU	(       a%  U	 Vs/ s H  obU   PM	     n
nSU
 3n[        SU5      $ [        SS5      $ s  snnnf s  snf )Nr�  r-  zInput mutation detected at TFrƒ  )r  r‹   rÒ  rÖ  r+  rº   r»   r   r½   rÏ  rI  Úzipr³   )rÔ   Úinput_versions_at_beginningÚinput_nodesÚinput_versions_at_endrÅ   r-  rS  Úv1Úv2Úmutated_inputsÚmutated_nodesr§   s               r™   Úhas_input_mutationÚ!SubgraphTracer.has_input_mutationå  s  € Ø&*×&GÑ&GÐ#Øˆà "ÐØ—J‘J×$Ô$ˆDØ�w‰w˜-Ó'Ø $§	¡	¨/Ñ :�Ü˜m¬U¯\©\×:Ñ:Ø)×0Ñ0°×1GÑ1GÔHØ×&Ñ& tÖ,ñ ;ñ ñ %ô  )ÜÐ/ÓGô õ
ò ‘�‘8�Bð ‰x÷	 ñ ð 	ò 
ö Ù5CÓD²^°¨œ^±^ˆMÐDØ/°¨Ð?ˆCÜ  cÓ*Ð*ä˜E 2Ó&Ð&ùô
ùò Es   Â4DÃDÃDc           	      ó  • SSK Jn  SSKJn  [	        5       nU R
                  R                   Ht  nUR                  S:X  aa  U" U/5      S   n[        U[        R                  5      (       a4  U" U5       H&  nXc;   a  SX6    SU 3n[        SU5      s  s  $ XCU'   M(     Mr  Mt    O   [	        5       nU R
                  R                  SS	9S   n	[        R                  " U	R                  S   5       H‚  n
U
(       d  M  U" U
/5      S   n[        U[         5      (       a   e[        U[        R                  5      (       d  MP  U" U5       H&  nXh;   a  S
X†    SU
 3n[        SU5      s  s  $ X¨U'   M(     M„     UR#                  5       UR#                  5       -  n[%        U5      S:”  aT  U Vs/ s H  oÃU   XŒ   4PM     nnSR'                  U VVs/ s H  u  pïU SU 3PM     snn5      nSU 3n[        SU5      $ [        SS5      $ s  snf s  snnf )Nr   )Úget_tensor_storages)Ú_collect_fake_inputsr�  z*Input-to-input aliasing detected at nodes z and Tr¡  r‘  z,Output-to-output aliasing detected at nodes z, z+Input-to-output aliasing detected at nodes 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Ù   rÚ  rë  rì  )rÔ   r.  r/  Úinput_storagesrÅ   r-  Ústorager§   Úoutput_storagesÚ	out_nodesÚout_nodeÚintersected_storagesr   ÚaliasedrS  Úos                   r™   r¦   ÚSubgraphTracer.has_aliasing  s  € ÝPÝFä>B»fˆà—J‘J×$Ô$ˆDØ�w‰w˜-Ó'Ù 4°d°VÓ <¸QÑ ?�Ü˜m¬U¯\©\×:Ñ:Ù#6°}Ö#E˜Ø"Ó4à$NÈ~ÑOfÐNgÐglÐmqÐlrÐ"s˜CÜ#/°°cÓ#:Ô:Ø26 wÓ/ó $Fñ ;ñ ñ %ô @D»vˆØ—J‘J×)Ñ)¨XÐ)Ð6°qÑ9ˆ	Ü×*Ò*¨9¯>©>¸!Ñ+<Ö=ˆHßˆxÙ 4°h°ZÓ @ÀÑ C�Ü% m´T×:Ñ:Ð:Ð:Ü˜m¬U¯\©\×:Ó:Ù#6°}Ö#E˜Ø"Ó5à$PÐQ`ÑQiÐPjÐjoÐpxÐoyÐ"z˜CÜ#/°°cÓ#:Ô:Ø3;¨Ó0ó $Fñ >ð  .×2Ñ2Ó4°×7KÑ7KÓ7MÑMÐÜÐ#Ó$ qÓ(ñ BVóÚAU¸A Ñ" OÑ$6Ó7ÑAUð ð ð —i‘i¹GÔ DºG±D°A A 3 e¨A¨3£¹GÒ DÓEˆGØ?À¸yÐIˆCÜ  cÓ*Ð*ä˜E 2Ó&Ð&ùòùó !Es   Æ(HÇH	
)rx  r  r{  rz  ry  r~  ru  rˆ  rw  r—  rq  r‹   r�  rŽ  rv  rp  rA  r™  rr  r„  r|  r•  rt  r�  rs  )NFNN)NNNr�  )FN)+rœ   rª   r«   r¬   rØ   r   r­   r(   r¯   rê   r}   r„  r   rÎ  rd  r	   r   r8  r‹  r‘  r�  r“  r   r*  r   r†  rÞ  r¦  r»   rõ  r  r   rÖ  rÙ   ræ  rç  r  r³   r+  r¤   r¦   r°   rú   rû   s   @r™   r¢  r¢  s  s…  ø† ñð .2ØØ*.Ø%)ñ]Uà#ð]Uð Ð)Ñ*ð]Uð ð	]Uð
   Ñ'ð]Uð ˜c‘]ð]Uð 
÷]Uð ]Uð~1¨_ð 1Àô 1ðCØ-ðCØ57·W±WðCà	ôCð8 #Ø#'ØDHñàðð ðð ð	ð
 ðð �s‰mðð ˜C‘=ðð # 8¨R¯W©W¨I°r·x±xÐ,?Ñ#@ÑAðð 
�‰õð4 #Ø#'ØDHñNàðNð ðNð ð	Nð
 ðNð �s‰mðNð ˜C‘=ðNð # 8¨R¯W©W¨I°r·x±xÐ,?Ñ#@ÑAðNð 
�‰÷Nð Nðh ØØ"Ø#'ñàðð ðð ð	ð
 ðð �s‰mðð ˜C‘=ðð 
�‰÷ð ð46 §¡ð 6¨Dô 6ð6 Ø#'ñzàðzð ðzð ð	zð
 ðzð ˜Ñ ðzð 
�‰õzðz+Ø—X‘Xð+à	ˆy˜"Ÿ(™(Ð"Ñ	#ô+ðZ7°sð 7¸sô 7ð@y5Ø ðy5Ø+0°¸E¿H¹H¿N¹NÐ1JÑ+Kðy5à	ôy5ðx~Ø" 5§<¡<°·±Ð#=Ñ>ð~ØEMÈfÑEUð~à	ô~ðD9¨¯©ð 9¸¸e¿l¹lÑ9Kô 9ð*' Lô 'ð:+'˜l÷ +'ò +'r¡   r¢  r–   (  rØ   r¶  rÕ  r  r  r¼  rt  r»  r/   r÷  rí  rP  rö  rÚ   r¨  ro  Úcollections.abcr   r   r   r   r   r_  Útypesr   Útypingr	   r
   r   r   r   Útyping_extensionsr   r   ræ  Útorch._guardsr»   Útorch._loggingÚtorch.distributedÚdistributedr'  Útorch.nnÚtorch.utils._pytreerg  rh  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   rp  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ƒ  r-   r.   rÉ   r0   Úbackends.registryr1   r2   Úbytecode_transformationr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   rš  r?   Úcurrent_scope_idr@   Údevice_interfacerA   rB   rC   rD   rE   rF   r`  rG   rH   Úgraph_deduplicationrI   Úgraph_id_filterrJ   rK   Úgraph_region_trackerrL   rM   rN   Úmutation_guardrO   r†  rP   rQ   rR   r'  rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   Úvariables.builderrw   rx   ry   rz   Úvariables.ctx_managerr{   Úvariables.functionsr|   r}   Úvariables.listsr~   Úvariables.miscr   Úvariables.nn_moduler€   r1  r�   r‚   rƒ   Úvariables.torch_functionr„   Úvariables.user_definedr…   rô  r‡   Útorch._dynamo.packagerˆ   r  r‰   Ú torch.multiprocessing.reductionsrŠ   Ú	getLoggerrœ   rË   rø  ÚgetArtifactLoggerÚgraph_tabular_logrn  Úgraph_sizes_logrª  rw  rø   rù   r  r3  r  r2  r÷   r¯   r    r¤   r³   rÙ   r`  r¹   rš  r‹   rÎ  rÇ   ÚcacherÌ   rÎ   rä   ræ   rý   ÚobjectrG  r  r*  rU  rb  rp  rr  r…  r>  rW  re  r¼  r¨  rf  rg  r†  ÚTracerr¢  r¨   r¡   r™   Ú<module>rk     s¤  ðñó* Û Û Û Û Û Û Û Û Û 	Û 
Û Û Û Û ß 9Ñ 9ß 4Ý ß <Õ <ß 0ã ã Û Ý  Û ß $Ð $ß Ý #ß N÷÷ õ @Ý 7Ý 4Ý 0Ý 9Ý :Ý ?÷÷ õ !Ý JÝ /Ý Fç DÓ Dß 5÷÷ ÷ ñ õ 'Ý Ý -Ý 6÷õ ÷ SÝ :÷õ 5ß /Ý 0ß WÑ W÷÷ ÷ ÷ ñ ÷"÷ ÷ ÷ ÷ õ ÷.ó õ ;ß HÝ -Ý (Ý 1÷ñ õ
 CÝ ;ö ÝAÝ4ÝHÝ?à×Ó˜Ó!€Ø—N’N×4Ò4°X¸wÓGÐ Ø—’×1Ò1°(¸LÓI€Ø—.’.×2Ò2°8¸]ÓK€Ø—’×1Ò1°(¸LÓI€à×*Ò*Ð ð "'§¢§¢×!>Ò!>Ð Ø$)§H¢H§O¢O×$DÒ$DÐ !ðØðØ&*¨3°¨8¡nðàˆc�3ˆhÑôñ$ �$Ñ÷ð ó ðñ
 �$Ñ÷ð ó ðð 6:ñ)Ø˜u U§\¡\°3¸±:Ð%=Ñ>Ñ?ð)à�—’×%Ò%×*Ò*Ñ+¨dÑ2ð)ð 	ˆ�Š×	Ò	×	"Ò	"Ñ#õ)ðX ‡‚ð4�có 4ó ð4ð ÷-ð -ó ð-ð¨#ð °(¸2¸tÀC¹y¸=Ñ2Iô ô �U—X’X—_’_ô  ÷ !ñ !ðH 	ˆS�&ˆ[Ñ€ð ÷Nð Nó ðNð: ÷<
ð <
ó ð<
ð~ ÷Xð Xó ðXð" ÷'ð 'ó ð'ð, Eð ¨d°3¸°8©nô ô(F"Ð.ô F"ôRW&2Ð#ô W&2÷tL!Vñ !VðJJð ðJØðJØ%(ðJØ25ðJØ=@ðJØJMðJà	ôJðZ  —o“oÓ'Ð áˆcƒN€ÙˆCƒL�÷2ò 2ô$z'�R—Y’Yö z'r¡   