
    IЦi                       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  S SKJrJrJrJrJrJrJrJr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$  S SK%J&r&  S SKJ'r'J(r(J)r)J*r*J+r+  S SK,J-r-  S SK.J/r/  S S	K0J1r1  S S
K2J3r3J4r4J5r5  S SK6J7r7  S SK8J9r9  SSK:J;r;J<r<Jr=J>r>  SSK?J@r@JArA  SSKBJCrCJDrDJErEJFrFJGrG  SSKHJHrH  SSKIJJrJ  SSKKJLrL  SSK<JMrMJNrNJOrOJPrPJQrQ  SSKRJSrS  SSKTJUrU  SSKVJWrWJXrX  SSKYJZrZ  SSK[J\r\J]r]  SSK^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrk  SSK!JlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrtJuruJvrvJwrwJxrxJyryJzrzJ{r{J|r|  SSK}J~r~  SSKJrJrJrJr  SSKJr  SSKJrJr  SS KJr  SS!KJrJrJrJr  SS"KJr  \(       a  S S#KJr  \GR(                  " \5      r\GR.                  GR1                  \S$5      r\GR.                  GR1                  \S%5      r\GR.                  GR1                  \S&5      r\GR.                  GR1                  \S'5      r\" S(S)9 " S* S+5      5       r " S, S-5      r\GR>                  " S5      S. 5       r\ " S/ S05      5       rS1 r " S2 S3\GRF                  GRH                  5      r " S4 S55      r\\\4   r " S6 S75      rS8rS9 r\GRZ                  " 5       r " S: S;5      r " S< S=\$GR`                  5      rg)>    N)	dataclass)
AnyCallablecastDictListOptionalSetTupleTYPE_CHECKINGUnion)fx)TensorifyScalarRestartAnalysis)CompileContext	CompileIdGlobalContextCheckpointStateSourceTracingContext)signpost_event)_make_graph_module)BackwardState)free_symbolsis_symbolicShapeEnv)insert_deferred_runtime_asserts)is_traceable_wrapper_subclass   )configexclogging	variables)
CompiledFn
CompilerFn)create_call_functioncreate_instructioncreate_load_constInstruction	unique_id)code_context)	PyCodegen)enter_new_scope)BackendCompilerFailed!exceptions_allowed_to_be_fallback	SkipFrameunimplementedunimplemented_with_warning)apply_graph_deduplication)GraphRegionTracker)GuardBuilderinstall_guard)is_dynamic_nn_module)AttributeMutationExistingSideEffects)
AttrSourceBackwardStateSourceConstantSourceGetItemSourceGlobalStateSourceis_constant_sourceis_from_local_sourceLocalSourceParamBufferSourceShapeEnvSourceSyntheticLocalSourceTensorPropertyTensorPropertySource)_extract_tensor_dictcheckpoint_paramsCleanupHookclone_inputscount_callscountersdynamo_timedget_instruction_source_311get_locals_to_stealget_static_address_typegraph_break_reasonsincrement_op_countlazy_format_graph_code
LazyStringnn_module_proxysameset_example_value)VariableTracker)BackwardStateGraphArgGraphArgTrackedFakewrap_fx_proxy)BaseListVariable)CellVariableNullVariable)NNModuleVariable)NumpyNdarrayVariableSymNodeVariableTensorVariableUnspecializedPythonVariable)TensorWithTFOverrideVariable)InstructionTranslatorBasegraph
graph_codegraph_sizes
trace_callT)frozenc                   *    \ rS rSr% \\S'   \\S'   Srg)VariableTrackerCacheKey   vt_idsource N)__name__
__module____qualname____firstlineno__int__annotations__r   __static_attributes__ro       Y/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_dynamo/output_graph.pyrk   rk      s    J Nrw   rk   c                   2    \ rS rSrS rS rS rS rS rSr	g)	VariableTrackerCache   c                     0 U l         g Ncacheselfs    rx   __init__VariableTrackerCache.__init__   s	    
rw   c                 j    [        [        U5      U5      nX0R                  ;  a  g U R                  U   $ r}   rk   idr   )r   valuern   keys       rx   lookupVariableTrackerCache.lookup   s-    %bi8jj zz#rw   c                 J    [        [        U5      U5      nX0R                  U'   g r}   r   )r   r   rn   vtr   s        rx   addVariableTrackerCache.add   s    %bi8

3rw   c                 d    [        5       nUR                  R                  U R                  5        U$ r}   )rz   r   update)r   	new_caches     rx   cloneVariableTrackerCache.clone   s&    (*	tzz*rw   c                 8    U R                   R                  5         g r}   )r   clearr   s    rx   r   VariableTrackerCache.clear   s    

rw   r~   N)
rp   rq   rr   rs   r   r   r   r   r   rv   ro   rw   rx   rz   rz      s    rw   rz   c                  6    [         R                  " [        5      $ r}   )torchdynamo_loggingget_step_loggerlogro   rw   rx   _step_loggerr      s    ..s33rw   c                   \    \ rS rSr% Sr\\S'   \\R                     \S'   Sr
\\S'   S rSrg	)
GraphCompileReason   zOStores why a given output graph was compiled; i.e. what caused the graph break.reason
user_stackTgraph_breakc                 T    U R                   (       a  [        R                  " U 5        g g r}   )r   rO   appendr   s    rx   __post_init__ GraphCompileReason.__post_init__   s    &&t, rw   ro   N)rp   rq   rr   rs   __doc__strru   r   	tracebackFrameSummaryr   boolr   rv   ro   rw   rx   r   r      s,    YKY++,, K-rw   r   c                    ^  U 4S jnU$ )Nc            
      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}   ro   )fnargskwargsrandom_callss      rx   _gen_rand_values1_get_gen_rand_values_fn.<locals>._gen_rand_values   s*    <HIL(8&D#F#LIIIs   !ro   )r   r   s   ` rx   _get_gen_rand_values_fnr      s    J rw   c                   t   ^  \ rS rSrSrS\\\R                  R                  4   4U 4S jjr
S\4S jrSrU =r$ )FakeRootModule   z'Trick the constructor of fx.GraphModule
nn_modulesc                 l   > [         TU ]  5         UR                  5        H  u  p#[        XU5        M     g r}   )superr   itemssetattr)r   r   kv	__class__s       rx   r   FakeRootModule.__init__   s-    $$&DADQ 'rw   returnc                     g)NzFakeRootModule(...)ro   r   s    rx   __repr__FakeRootModule.__repr__   s    $rw   ro   )rp   rq   rr   rs   r   r   r   torchnnModuler   r   rv   __classcell__r   s   @rx   r   r      s5    1 4UXX__(<#=  
%# % %rw   r   c                   v    \ rS rSrS\4S jrS\R                  R                  S\	\R                     4S jrSrg)	WrapperBackend   backendc                     Xl         g r}   )r   )r   r   s     rx   r   WrapperBackend.__init__   s    #*rw   gmexample_inputsc                    [        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)rF   restorer   copydeepcopyr   	candidateforwardr   verify_correctnessrH   rT   RuntimeError	Exceptionr   	exception)r   r   r   copy_gmcorrectresults         rx   __call__WrapperBackend.__call__   s   (,--(g>>>!T^^tww%F77??"((>>!	ggoo|N'CDG^^\.%ABF G$$~~ LLN !>tfEFF  	MM78	 LLNs   5AD) D) )!E

E E)r   r   r   r   N)rp   rq   rr   rs   r#   r   r   r   GraphModuler   Tensorr   rv   ro   rw   rx   r   r      s4    +
 +588// ellAS rw   r   c            
         ^  \ rS rSrSrS\\\4   S\\	   S\
S\S\4
U 4S jjrS	 rSRS
\4S jjrS rS rS rS\/ \4   4S jrS r\S 5       r\S 5       rS r\S 5       r\R6                  S 5       r\S 5       r\S 5       r\S 5       rS rS r S r!\"RF                  S 5       r$\S 5       r%\S 5       r&\S  5       r'\S!\(RR                  RT                  4S" j5       r+\S!\\\4   4S# j5       r,SSS% jr-S& r.S' r/\S( 5       r0S) r1S* r2S+ r3STS, jr4S- r5\6S. 5       r7S/\8\(Rr                  Rt                  \(Rv                  \4   4S0 jr<S1 r= SUS2\\>   4S3 jjr?S4 r@S5 rAS6 rBS7\4S8 jrC\"RF                  S9 5       rDS: rES; rF\S!\G\HR                     4S< j5       rJ\S!\G\K   4S= j5       rLS>\HR                  S!\N4S? jrOS>\HR                  S!\N4S@ jrPSA rQSB rRS!\G\(Rv                     4SC jrSSVSD jrTSE\G\U   S!S$4SF jrVSVSG jrWS!\4SH jrXS!\4SI jrYSVSJ jrZSK\
S!S$4SL jr[SM\\HR                  /S$4   S!S$4SN jr\SO\(R                  R                  4SP jr]SQr^U =r_$ )WOutputGraph   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.
code_optionscompiler_fnexportlocal_scopeglobal_scopec           	        > [         TU ]  5         [        XS9/U l        0 U l        X@l        XPl        X`l        0 U l        / U l	        [        [        5      U l        [        5       U l        U	R                  U	R                   U	R"                  S.U l        ['        5       U l        / U l        [-        U R*                  [.        R0                  [.        R2                  [.        R4                  [.        R6                  U R$                  S9nSS KJs  Jn  UR=                  SS9   [>        R@                  RC                  UU R
                  (       a  SOSU R
                  S9nS S S 5        [E        W5      U l#        [H        RJ                  " 5       U l&        U RO                  5         [P        RR                  " [T        5      U l+        0 U l,        [[        U 5      U l.        [_        5       U l0        [b        Rd                  " 5       U l3        [i        U5      U l5        / U l6        SU l7        / U l8        X l9        Xl:        Xpl;        X0l<        0 U l=        / U l>        / U l?        SU l@        0 U lA        [>        R                  R                  5       U lD        [>        R                  R                  5       U lF        XlG        SU lH        [        0 5      U lI        [        0 5      U lJ        U R                  5         0 U lL        / U lM        S U lN        / U lO        0 U lP        S U lQ        S U lR        U R                  5       U lT        [        5       U lU        g ! , (       d  f       GN= f)	N)	is_export)co_nameco_filenameco_firstlineno)tracked_fakesallow_scalar_outputsallow_dynamic_output_shape_ops+prefer_deferred_runtime_asserts_over_guards'allow_complex_guards_as_runtime_asserts	co_fieldsr   F(fake_tensor_allow_unsafe_data_ptr_accessT)	shape_envallow_non_fake_inputsr   )Vr   r   SubgraphTracertracersinput_source_to_varr   export_constraintsframe_stateinput_source_to_sizes_stridescleanup_hooksnext_compile_id_counter
compile_idsetinstalled_globalsr   r   r   r   r2   region_trackerr   r   r   capture_scalar_outputs capture_dynamic_output_shape_opsr   r   torch._functorch.config
_functorchpatchr   _subclassesFakeTensorModer   tracing_contextr   current_compile_iddynamo_compile_idinit_ambient_guardscollectionsdefaultdictlisttracked_fakes_id_to_sourceparam_name_to_sourcer7   side_effectsrz   variable_tracker_cache	itertoolscountunique_var_iddictr   output_instructions	timestampregister_finalizer_fnsr   r   r   root_txsource_to_user_stacks_current_txcleanupsshould_exitunspec_variable_map_C_is_torch_function_enabledtorch_function_enabled_is_torch_function_mode_enabledtorch_function_mode_enabledtorch_function_mode_stack!has_user_defined_allowed_in_graphnon_compliant_opscompliant_custom_opssave_global_state dynamo_flat_name_to_original_fqnr   random_values_varpregraph_bytecodebackward_statebackward_state_proxybackward_state_var!install_builtins_dict_in_fglobals%name_of_builtins_dict_key_in_fglobalsguard_on_key_order)r   r   r   r  r   r   r   r   r   f_coder*  r   _config	fake_moder   s                 rx   r   OutputGraph.__init__  s    	&t>? CE "4&KM*68#$78+.5
 ~~!--$33
 12 13 ,,!'!>!>+1+R+R8>8j8j4:4b4bnn
	$ 	21]]E]J))88#.2kkdu{{	 9 I K 0>i/H --/ 	 	  " ##D) 	' BD!'- ';&<#&__. .68   OQ# 2=(& RT"<>+- KM  ',hh&I&I&K#+088+S+S+U()B& 27. >AW ADB! 	  AC-  	 "& 57 ;=>B!15 224 	2 -0Ee KJs   =L11
M c                     U R                   S   n[        U[        5      (       d  UR                  nU R	                  SU5      $ )N__builtins____builtins_dict__)r   
isinstancer  __dict__install_global)r   
f_builtinss     rx   r5  -OutputGraph.install_builtins_dict_in_fglobals  s@     &&~6
*d++#,,J""#6
CCrw   hookc                     U [        U R                  5       3nX0R                  ;  d   eXR                  U'   X0R                  5       4$ r}   )lenr2  get_backward_state_proxy)r   rD  prefixnames       rx   add_backward_state_hook#OutputGraph.add_backward_state_hook  sN    #d11234.....$(D!22444rw   c                 d   U R                   c  U R                  (       a  [        S5        [        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 exportdynamo_backward_statern   grapharg)r3  r   r/   r   root_tracercreate_graph_inputtyper9   rW   nodemetanew_varr4  )r   example_values     rx   rG  $OutputGraph.get_backward_state_proxy  s    $$,{{FG)OM(,(8(8(K(K']#*,	 )L )D% ?T>UD%%**//
;&*llnD#(((rw   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        [        R                  R                  R                  5       nUbA  U R                   R                  [        5       R                  [        R                  5      5        g g r}   )guardsr   rA   
make_guardr3   	SHAPE_ENVr<   DETERMINISTIC_ALGORITHMS	GRAD_MODEDEFAULT_DEVICETORCH_FUNCTION_STATEr   r%  r	  peek_interpreter_stackFUNCTORCH_STACK_MATCH)r   cis     rx   r  OutputGraph.init_ambient_guards  s    	(33L4J4JKL**<+P+PQ	
 	)+66|7M7MNO)+66|7R7RST**<+L+LM	
 XX  779>KKOO!#..|/Q/QR rw   c                 b  ^^ 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[$        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_fromrq   rp   )cgr   s   rx   <lambda>3OutputGraph.synthetic_graph_input.<locals>.<lambda>  s    B''rw   F)rU  r*   r  add_push_nullforeachmapr!   ConstantVariablecreatecall_functionrF  storer1  extendget_instructionsrB   rV   buildr   getguards_contextdynamo_guardsremove_guards_with_source)r   r   r   rV  varnamern   r   rg  s    `     @rx   synthetic_graph_input!OutputGraph.synthetic_graph_input  s     D	,,.t||$
	
 	

3y1188$?@
TE*
%%b&9&9&;<%g. &&t||]K++99SS	
 rw   r   c                 :    U R                   R                  U5        g r}   )r   r   )r   r   s     rx   add_cleanup_hookOutputGraph.add_cleanup_hook  s    !!"%rw   c                 ~    [        U R                  5       H
  nU" 5         M     U R                  R                  5         g r}   )reversedr   r   )r   rD  s     rx   call_cleanup_hooksOutputGraph.call_cleanup_hooks  s.    T//0DF 1  "rw   c                      U R                   S   $ Nr   r   r   s    rx   rP  OutputGraph.root_tracer  s    ||Arw   c                      U R                   S   $ Nr  r   s    rx   current_tracerOutputGraph.current_tracer  s    ||Brw   c                 2    [        U R                  5      S:H  $ )Nr   )rF  r   r   s    rx   is_root_tracerOutputGraph.is_root_tracer!  s    4<< A%%rw   c                 .    U R                   R                  $ r}   r  re   r   s    rx   re   OutputGraph.graph%  s    ""(((rw   c                 $    XR                   l        g r}   r  )r   r   s     rx   re   r  *  s    $)!rw   c                 .    U R                   R                  $ r}   )r  input_name_to_proxyr   s    rx   r  OutputGraph.input_name_to_proxy.  s    ""666rw   c                 .    U R                   R                  $ r}   )r  real_value_cacher   s    rx   r  OutputGraph.real_value_cache2  s    ""333rw   c                 .    U R                   R                  $ r}   )r  bound_symbolsr   s    rx   r  OutputGraph.bound_symbols6  s    ""000rw   c                 :    U R                   R                  " U0 UD6$ r}   )r  create_proxyr   r   r   s      rx   r  OutputGraph.create_proxy@  s    ""//@@@rw   c                 :    U R                   R                  " U0 UD6$ r}   )r  create_noder  s      rx   r  OutputGraph.create_nodeC      ""..???rw   c                 :    U R                   R                  " U0 UD6$ r}   )r  remove_noder  s      rx   r  OutputGraph.remove_nodeF  r  rw   c              #     #    [        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
                  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)parentsource_targetr   )
r+   r  r  	__enter__r   r   r   r   __exit__pop)r   r  prior_tracernew_scope_ctxtracers        rx   	subtracerOutputGraph.subtracerI  s     ')	#**d.A.AAAA##%   #.."/"11;;	  LL'L""4t4LL ""4t4LLs   C2BC  .C2 /C//C2c                     U $ r}   ro   r   s    rx   outputOutputGraph.outputa  s    rw   c                 .    U R                   R                  $ r}   )r  r:  r   s    rx   r:  OutputGraph.fake_modee  s    ##---rw   c                 B    U R                   R                  R                  $ r}   )r  r:  r   r   s    rx   r   OutputGraph.shape_envi  s    ##--777rw   r   c                 B    U R                   R                  R                  $ r}   )r  ru  rv  r   s    rx   rY  OutputGraph.guardsm  s    ##22@@@rw   c                 B    U R                   R                  R                  $ r}   )r  module_contextr   r   s    rx   r   OutputGraph.nn_modulesq  s    ##22===rw   Nc                 v   [        [        [        [        [        S[
        4   [        4   4   Ub  UOU R                  R                  R                  5      nU R                  U R                  4US'   [        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.
.Nr'  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_stateset_torch_function_stater'  r   set_grad_enabledis_grad_enabled	functoolspartialset_autocast_enabledis_autocast_enabledset_autocast_dtypeget_autocast_dtypeset_autocast_cache_enabledis_autocast_cache_enabled)r   outr  s      rx   r.  OutputGraph.save_global_stateu  s~    eHS#X.4556 %%44AA	
 ))''2
-. ).(>(>@U@U@W'X^$ e88&A%%f-,
'(
 e88%@%%e,0
+,
 e66?$$V,.
)*
 e66>$$U+.
)*
 ,,++-2
-.rw   c                 :    U R                   R                  U5        g r}   )r!  r   )r   txs     rx   push_txOutputGraph.push_tx  s    #rw   c                 6    U R                   R                  5       $ r}   )r!  r  r   s    rx   pop_txOutputGraph.pop_tx  s    ##%%rw   c                 Z    U R                   (       d  U R                  $ U R                   S   $ r  )r!  r  r   s    rx   
current_txOutputGraph.current_tx  s$    #'#3#3t||M9I9I"9MMrw   c                 ,    [        U R                  5      $ r}   )rI   re   r   s    rx   rI   OutputGraph.count_calls  s    4::&&rw   c                 X    [        [        U R                  R                  5      5      S:H  $ r  )rF  r  re   nodesr   s    rx   is_empty_graphOutputGraph.is_empty_graph  s!    4

(()*a//rw   c                     U(       d   eU R                   nUR                  S5       H)  n[        U[        5      (       a  X#   nM  [	        X#5      nM+     U$ N.)r   splitr?  r  getattr)r   keysobjr   s       rx   get_submoduleOutputGraph.get_submodule  sH    tBF//CA#t$$fco	 !
 
rw   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_varnames_)r  r   r   r  )r   rI  existingvars       rx   rU  OutputGraph.new_var  s^    t((78F!D!3!3456C"!!-0SF:0
	 rw   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   rI  s     rx   update_co_namesOutputGraph.update_co_names  s0    ((44j)dW4) 5rw   c                     SR                  [        [        U 5      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  z^[GL]\['?(.*?)'?\]$z\1z	\[(\d+)\]z_\g<1>z[^a-zA-Z0-9]r   sub)joinrl  r   rer  isalpha)namesrI  s     rx   module_key_nameOutputGraph.module_key_name  sp     xxC(vv,eT:vvlIt4vvosD147??,,4<Drw   targetc                   ^ ^^^^^ [        TT R                  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      (       a8  T R                  mT R                  5       (       d  T R                  mUU UUU4S jnO[        T[        R                  R                  5      (       aj  [        T[        R                  R                  5      (       d   eT(       a0  [!        TR#                  [$        R&                  5      5        UU4S jnOGUU4S jnO?[        T[        R(                  [        R*                  45      (       a	  UU U4S jnOU U4S jnT R,                  R/                  5        H  u  pVUTL d  M  U" U5      s  $    [0        R2                  " U6 mTn[4        R6                  " 5        H  nTT R,                  ;  a  TT R8                  ;  a  TT R,                  T'   [        T[        R                  R                  5      (       al  UU U4S jn	[;        TS5      (       a!  TR=                  5        H  u  pU	" U
5        M     [;        TS	5      (       a!  TR?                  5        H  u  pU	" U
5        M     U" T5      s  $ U S
U 3mM     [A        S5      e)Nrn   c           	        > TR                   c   eTTR                   U '   TTR                  R                  R                  ;   a#  TR                  R                  R                  T   $ [	        T5      S:X  a)  [        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                  R                  R                   ;  d   e[#        T5      UR                  R                  R                   S'   U$ )Nguardedget_attrro   rV  tensor_dict)r  r  r  r  rN   r4   rZ  r3   ID_MATCHr=   TENSOR_MATCHrZ   r  track_object_existingproxyrS  rT  rE   )
module_keyr   optionsr   rn   r   r  s     rx   	wrap_name6OutputGraph.register_attr_or_module.<locals>.wrap_name  s@   00<<<8>))*5 T\\00===<<..;;FCC*62i?!&"3"3L4I4I"JK+F33!&"3"3L4M4M"NO"LL''
JBG #) 	 \\((55KKFTVW$BHHMM,>,>>>>4H4P""=1	rw   c                 2   > [        [        T5      U T40 TD6$ r}   )r^   rR  r
  r  r   s    rx   r  r    s    +DL*fXPWXXrw   c                 2   > [         R                  " T40 TD6$ r}   )r!   UnspecializedNNModuleVariabler  s    rx   r  r  %  s    $BB6UWUUrw   c           	      \   > [         R                  " TTR                  SU S0 5      4ST0TD6$ )Nr  ro   sym_num)r`   rn  r  )r
  r  r   r   s    rx   r  r  0  sA    &--%%j*b"E # 	 rw   c                    > TR                   R                  U 5        TTR                  U '   [        R                  " TT[        U S95      $ )N)source_name)r  r  r   rV   rs  r:   )r
  r   r   s    rx   r  r  ;  sD    ++J706!!*-&,,&.Z"H rw   c                    > TR                   c   e[        TU 5      nT SU  3nUTR                   U'   [        T[        5      (       a1  U TR                  [
        R                  UR                  5       5      '   g g r  )r  r@   r?  r?   r/  r   r  rI  )	leaf_name
new_sourcenew_namerI  r   rn   s      rx   register_leaf_name?OutputGraph.register_attr_or_module.<locals>.register_leaf_nameO  s}    #88DDD%6vy%I
&*V1YK#8>H11(;%fk:: !* !AA + ; ;JOO<M N ;rw   _parameters_buffersr  unreachable)!r5   r  r   rV   rs  r  r  r?  r@   r   r   r  r  rP  r   r   r4   rZ  r3   	NN_MODULESymIntSymFloatr   r   r   r  r  r  r   hasattrnamed_parametersnamed_buffersAssertionError)r   r   r  r  r  r   r   baseir  r  r  rI  rn   r  s   `` `        @@@rx   register_attr_or_module#OutputGraph.register_attr_or_module  sK     (;(;<< #((&LGLLw-7""""f&78888fell++((F&&(( )) < 00fehhoo6666f//0F0FGHYV u~~ >??  OO))+DAF{ |# ,
 **E2"A4??*t4;L;L/L(.%fehhoo66* v}55,2,C,C,ELI.y9 -Fvz22,2,@,@,BLI.y9 -C !&V1QC=D3 #6 ]++rw   c                    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H*  n[        UR.                  [0        5      (       a9  [        UR                   [&        5      (       a  UR                   R(                  U;   d  M^  UR                   R(                  nXR2                  S   ;   d   eX\    H  nUR                   U
;   a  M  UR                   R4                  nX;  aO  U R7                  U S35      nXU'   UR9                  [;        SUS9[=        U5      [;        S5      [;        SUS9/5        UR                   n['        X   5      X'   M     GM-     XJ4$ )Nr   r  _ref	LOAD_FASTargvalBINARY_SUBSCR
STORE_FAST)r   rt  rM   stacksymbolic_localsvaluesr  store_attr_mutationsr  r  r?  r[   r   r   mutation_typer6   rn   r;   r&  r?   
local_namer   	graphargs_exampler  r   indexrU  rq  r%   r&   )r   r  maybe_gmstolen_list_namesalias_instsneeds_aliasqueuexstolen_namevisitedoverridden_sourcesarg	list_namelist_idx
alias_name
old_sources                   rx   handle_aliases_for_stolen_lists+OutputGraph.handle_aliases_for_stolen_listsg  s   ##''//9 r6M8:
XX
&&(
 3388:
 		A!-..!!''40000  ..CCC!!//3LMMqxx77qxx}}k::HHMM,,0AA((--22K-+-($++A.+ e. 35>>C3<<..szz;77JJ))[8 

--I 1 1- @@@@ +8811 88>>*!%$+T*"J )3H%&&.{9M-h7.?.|JO	 XX
1<W=N1O".5 , "V ..rw   r   c                   ^ ^! Uc   eSSK Jn  UT l        UT l        ST l        [
        R                  SU5        [        S UR                   5       5      (       d  [        S5        / m![        R                  S:  a  UR                   H  nUR                  S	:X  a%  T!R                  [        S	UR                   S
95        M8  UR                  S:X  a1  T!R                  [        S[#        UR$                  S   5      S95        My  T!R                  [&        R&                  " U5      5        M     T R(                  (       a  T R*                  (       a   S5       eT!R-                  T R(                  5        T R/                  U5      u  pgT!R-                  U5        U!U 4S jn[1        UR                  5       H  n	U	R3                  XR4                  S9  M     T R7                  5         UR9                  5         [;        UR<                  5      n
U
 H  nUR?                  5         M     T RA                  5       nT RB                  RE                  5        VVs0 s H  u  pU[G        U5      _M     nnn[I        U5      n/ n0 nURJ                  RE                  5        H  u  nn[M        URN                  [P        5      (       a  URN                  RR                  U:X  a  MA  [M        U[T        5      (       a  URR                  U:X  a  Mh  [        R                  S:  a"  [V        RY                  [Z        U5      (       a  M  O![V        RY                  [Z        U5      (       a   eUU;  a  / UU'   UU   R                  U5        M     UR]                  5        H8  nUR-                  UU   5        U
R-                  U/[#        UU   5      -  5        M:     [#        T R^                  5      S:  a  U" 5         / nT Ra                  S5      T l1        U" [e        T R^                  5      5      nT Rg                  SU5      n[i        UUUS9nUR-                  URk                  US5      5        UR-                  [m        SS5      5        UR                  URo                  URp                  Rb                  5      5        T Rs                  U5        U
(       Ga,  [        S U
 5       5      (       Ga  [        S U
 5       5      (       a  [#        [u        U
5      5      [#        U
5      :X  a  T Rv                  Ry                  5       (       a  [#        URz                  5      S:w  d  T R|                  (       d  U" 5         T Rs                  T R                  U[;        [1        U
5      5      UU5      [        S[#        U
5      S9/-   5        T Rs                  [1        U5       Vs/ s H  n[i        XS9Ro                  U5      PM     sn5        gT Ra                  S5      n[i        UUUUS9nT R                  XU5        [i        UUUUR                  RE                  5        VVs0 s H  u  nnUS:  d  M  US_M     snnUS9nT R                  XU5        Sn/ n [        T R                  5      S:w  d  [#        UR                  5      S:w  a  U R-                  T R                  UUR                  5       UU5      5        [#        UR                  5      S:w  a#  U R                  URo                  U5      5        SnO,U R                  [        S5      5        OT R                  U5        U" 5         T Rs                  U UR                  5       -   5        T Rs                  [1        U5       Vs/ s H  n[i        XS9Ro                  U5      PM     sn5        U(       a)  T Rs                  [i        XS9R                  U5      /5        ggs  snnf s  snf s  snnf s  snf )z_
Generate a subgraph to continue execution on user code.
Automatically restore live variables.
Nr   disableTzCOMPILING GRAPH due to %sc              3   @   #    U  H  oR                  5       v   M     g 7fr}   )can_restore).0blocks     rx   	<genexpr>/OutputGraph.compile_subgraph.<locals>.<genexpr>  s     CN5$$&&N   z&compile_subgraph with block_depth != 0      	MAKE_CELLr-  COPY_FREE_VARSco_freevars)rC  z)export does not support pregraph_bytecodec                  H   > TR                  T 5        T R                  5         g r}   )add_output_instructionsr   )prefix_instsr   s   rx   append_prefix_insts9OutputGraph.compile_subgraph.<locals>.append_prefix_insts  s    ((6 rw   )is_graph_break)rU     r   random_values__gen_rand_values)rB  Fc              3      #    U  H^  n[        U[        [        [        45      (       + =(       a2    [        U[        5      =(       a    UR                  5       [        L (       + v   M`     g 7fr}   )r?  rb   r_   rc   r`   python_typefloat)rO  r   s     rx   rQ  rR  8  sa       &A 3,4  V $A7TAMMOu<TUV &s   A&A(c              3   B   #    U  H  n[        U[        5      v   M     g 7fr}   )r?  ra   rO  r?  s     rx   rQ  rR  D  s     H<aJq.11<s   UNPACK_SEQUENCE	graph_out)tempvarsrB  POP_TOP)I
decoratorsrL  partial_convertcompile_subgraph_reasonr#  r   debugallblock_stackr/   sysversion_infor\  opnamer   r%   r.  rF  r   r   r1  r   rq  rH  r  exitr   cleanup_graphprune_dead_localsr  r1  realize
dedup_passr   r   rS   r   r2  r?  rn   r?   r6  r\   rR  __instancecheck__r]   r  r   rU  r0  r   rA  r*   load_function_namer$   create_storer  r[  r  r  is_emptydebug_localsr2  compile_and_call_fx_graphcodegen_suffixusesrI   re   graph_outputsgraph_output_varsrun_compiler_collectiverr  create_delete)"r   r  rm  r   rL  instr<  rB  r]  rP  stack_valuesr   output_replacementsrI  modnn_modules_proxiesrootrestore_varsval_to_namesr   r   random_calls_instructionsrand_fnrand_fn_namecodegenr  graph_output_varpass1valr  pass2stored_graph_output_varr  r\  s"   `                                @rx   compile_subgraphOutputGraph.compile_subgraph  s    !!!'.'-$		-v6CBNNCCCBC*,w&;;+- ''*;t{{K [[$44 ''*,#boom6T2U !''		$8 ( ""t{{	76	7 
 	D223*.*N*Nr*R'K(	! bnn-EJJr*<*<J= . 	
BHH~ "EMMO " #oo/ 9=8M8M8O
8O94D/#&&8O 	 
 01"$9; &&,,.DAq !((K00QXX5H5HA5M!\**q||q/@7*)),:: ;  11,BBBB$"$QO""1%) /* ""$AQ0c,q/&: :; %
 t  !A%!(*%%)\\/%BD"5d6G6GHIG../BGLLD=OPG%,,**<> &,,-A!U-KL%,,$$RYY%@%@A (()BC   &   H<HHHC%&#l*;;!!**,,(A-''!((..Xl34d<O &&7S=NOPQ ((
  (5	  6 bHUU  6	  $||K8D*?QE %8  6;jj6F6F6HV6H
UETUI)#t)6HV#5E %8&+#F4::&!+s53F3F/G1/L22E335t=P u**+q0MM%"4"45E"FG.2+MM"4Y"?@ ,,R0!((%2H2H2J)JK ((
  (5	  6 bHUU  6	 ',,!'-(89 'W
h& W8s   _5"_3__4"_c                   ^^ U R                   R                  T5        U R                  (       ay  U R                  (       a   eU R                  R	                  5        HH  u  pET" U5        TR                  TR                  U R                  5      5        TR                  U5        MJ     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     TR!                  X!R                  (       + S9  U R                   R#                  T5        g )Nc                     > T " T5      $ r}   ro   )rg  	debug_vars   rx   rh  ,OutputGraph.codegen_suffix.<locals>.<lambda>  s	    R	]rw   Frk  )value_from_source)r  codegen_save_tempvarsr2  r   r   append_outputcreate_loadr4  
store_attrcodegen_hooksr~  rj  extend_outputr$   rF  r%   restore_stackcodegen_update_mutated)	r   r  r  rg  rI  r  r   rC  r  s	      `    @rx   r  OutputGraph.codegen_suffix  s!    	//3{{"?!00668	3  0G0G!HId# 9 	''+  "OIt233 1#d)UCD0;<=  / 	YYG004rw   c                 *   U R                   (       d   e[        U R                  R                  5      nU H  nUR                  R                  SS5        M!     [        R                  " 5       n[        XSS 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  re   r  rT  r  r   r  zipr   r%  _set_grad_enabledtupler   _erased
erase_node)r   r  rS  r  node1node2s         rx   rv  OutputGraph.cleanup_graph  s    TZZ%%&DIIMM.5  ,,.QRy1LE : ::%**%l*:)<<$zz!}LLEHH$>$>>ejj),.>-@@!MMM#(::a=LJJ))%0JJ))%0 2rw   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 )NrV  )re   r  rT  rt  r?  r   r  
FakeTensorsizert   reprrI  )r   retrS  rV  r  ss         rx   get_graph_sizes_structured&OutputGraph.get_graph_sizes_structured  s    JJ$$D IIMM/4@M-):):)E)EFF$))+PT!UPT1z!S'9'9!tAw"FPT!UII	 %
 
 "Vs   7,B8rI  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 =====
rV  z: 
FTz (concrete): )re   r  rT  rt  r?  r   r  r  r  rI  r  rt   r   r   rS  hint)	r   rI  graph_sizes_strrS  rV  r  concrete_size
has_symintszs	            rx   get_graph_sizesOutputGraph.get_graph_sizes  s   7VD622JJ$$D IIMM/4@M-):):)E)EFF$))+ii[5;-r#BB ""
B!"c**%,,R0#B55%)
%,,RWW\\:  "z'#yyku]7K6LBO# %( rw   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      rx   restore_global_state OutputGraph.restore_global_state  s     
 "11@@PPR<>#78	  //BBCUV   //BB,-ABD  //BB,-ABs   6C)B "/C0CCc                 z  ^ UR                   =mGb  TR                  Gc
  TR                  n[        R	                  STR
                  5        [        R                  R                  SS U4S jS9  [        R                  R                  UR                  5       [        R                  R                  5       -  5         S /UR                  5       -  n[        R                  " UTR
                  US9  UTl        S S S 5        UR                   R#                  5         [$        R&                  eg g ! , (       d  f       N:= f)Nzcompiler_collective %sartifactc                      SSS.$ )Ncompiler_collectivestring)rI  encodingro   ro   rw   rx   rh  5OutputGraph.run_compiler_collective.<locals>.<lambda>  s    1 (%rw   c                  8   > T R                   R                  5       $ r}   )local_staterender)dss   rx   rh  r    s    2>>#8#8#:rw   )metadata_fn
payload_fn)group)distributed_state
all_states
compile_pgr   infor  r   _loggingtrace_structuredr  devicerankdevice_countr  distall_gather_objectspeculation_logr   r    CompileCollectiveRestartAnalysis)r   r  r  r  r  s       @rx   r  #OutputGraph.run_compiler_collective  s    &&&B38MJHH-r~~>NN++ ; ,  "":??#4uzz7N7N7P#PQ"Vjoo&77
&&z2>>T * R $$&666% 9N3 RQs   <<D,,
D:c                   ^ ^ [         R                  R                  R                  5          SSKJn  T R                  (       d   eT R                  U5        [        S5      n[        U[        5      (       d   e[        U[        5      (       d   eT R                  SST R                  R                  [        S U 5       5      5      40 5      nUR!                  5        H  u  pUR#                  U	5        M     UR$                  R                  R'                  X5        [(        R*                  (       d?  [-        [.        R0                  " UT R2                  5      T R4                  UT R6                  S9  T R9                  5         [;        T R2                  5      n
[<        S   S==   U
-  ss'   T R>                  RA                  5         [C        UT R2                  5      mT RD                   H  nU" T5        M     T RF                  Tl#        T RH                  RK                  5       TRL                  S	'   T RN                  TRL                  S
'   [P        RS                  S[U        UTSSSS95        [         RV                  RY                  SU 4S jU4S jS9  T R[                  5         T R\                  R^                  nT R6                  (       dY  SSK0J1s  Jn  URe                  SS9   [         Rf                  Ri                  UR4                  S9nSSS5        WT R\                  l/        T Rk                  5          T Rm                  T5      nSSS5        SSK7J8n  [        WU5      (       d,  [        [s        USS5      U5      (       a]  URt                  S:X  aM  [        UU5      (       a  UOURv                  nURy                  U5        [        UU5      (       d  URz                  nU" U5      n[<        S   S==   S-  ss'   T R}                  Xo5        [        U5      nUR                  U5        UR                  5       sSSS5        $ ! , (       d  f       GN<= f! , (       d  f       GN= f! , (       d  f       g= f)zZ
Generate code from self.graph and return the Instruction()s to
call that generated code.
r   rK  __compiled_fnr  c              3   @   #    U  H  oR                  5       v   M     g 7fr}   )as_proxyrg  s     rx   rQ  8OutputGraph.compile_and_call_fx_graph.<locals>.<genexpr>'  s     5OBqjjllBrS  )r   statscalls_capturedr/  r  %sT)include_strideinclude_devicecoloreddynamo_output_graphc                  (   > ST R                  5       0$ )Nsizes)r  r   s   rx   rh  7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>Q  s    $"A"A"CDrw   c                  &   > T R                  SSSS9$ )NFT)print_outputr  r  )print_readable)r   s   rx   rh  r  R  s    2#4#4!&tD $5 $rw   )r  r   NFr   )r   )_LazyGraphModule__self___lazy_forwardunique_graphs)Br   _guardsr   clear_framerl  rL  r#  r  r(   r?  r  r   r  r  
create_argr  r   replace_all_uses_withr  _maybe_preserve_original_metar   do_not_emit_runtime_assertsr   r   r   re   r   r   remove_unused_graphargsrI   rJ   r  r   r   r  rn  r/  r   rT  r  graph_code_logro  rQ   r  r  r  r  r:  r  r	  r
  r  r  r  call_user_compilertorch.fx._lazy_graph_moduler  r  rp   r  force_recompiler   install_global_unsafer*   make_call_generated_coderr  )r   r  rvr  replaced_outputsrL  rI  output_nodeold_nodenew_nodencallsregister_finalizerold_fake_moder9  backend_fake_modecompiled_fnr  lazy_gmrg  r   s   `                  @rx   r  %OutputGraph.compile_and_call_fx_graph  s   
 ]]))557+####((,_-Db$''''dN3333**$$//5OB5O0OPR	K '7&<&<&>"..x8 '? II$$BB2S55/NN44NN;;	 ((* ,FW./69/ !!'')#D$**5B&*&A&A""2& 'B *.)E)EB& 55::< GG2 ,0+A+ABGG'(  &"T$PT NN++%D ,  ##% 00::M;;99]]E]R(-(9(9(H(H"/"9"9 )I )% S 2C$$.**,"55b9 - E+'7887;
DACSTT((O; "+/?@@  $--  !009!+/?@@")//K!+.KWo.!3.&&t92B''-&&(_ 87F SR -,[ 87s=   J1Q(P9)Q-Q?C0Q9
Q	Q
Q	Q
Q+c                 4    U R                   R                  SS9$ )Nplaceholder)op)re   
find_nodesr   s    rx   placeholdersOutputGraph.placeholders  s    zz$$$66rw   c                 ^    U R                    Vs/ s H  oR                  S   PM     sn$ s  snf NrO  )r  rT  r   rS  s     rx   r7  OutputGraph.graphargs  s)    262C2CD2C$		*%2CDDDs   *r   c                 r    [        SSSSS9   U R                  U5      sS S S 5        $ ! , (       d  f       g = f)NOutputGraph.call_user_compilerbackend_compileT'aot_autograd_cumulative_compile_time_us)
phase_namelog_pt2_compile_eventdynamo_compile_column_us)rK   _call_user_compiler)r   r   s     rx   r  OutputGraph.call_user_compiler  s6    ,("&%N	
 ++B/
 
 
s   (
6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 H#  nUR                  S   nUR                  Ul        M%     U R                  Ul
        U R                  Ul         [        U R                   S5      (       a  U R                   R                  OSn[        5       " [         R"                  SU 35        U R                   n[$        R&                  (       a  [)        U5      nU" XR+                  5       5      n	[        5       " [         R"                  S	U 35        [-        U	5      (       d   S
5       e [G        SS0 U RH                  EU[K        UR                  R                  5      [K        U5      S.E5        W	$ ! [.         a    e [0         a  n
U R2                  (       a0  [5        U R                   U
5      R7                  U
R8                  5      S eSU R:                  R=                  5        S3n[?        XR:                  R@                  U5         S n
A
NS n
A
f[B         a  n
U
eS n
A
f[D         a5  n
[5        U R                   U
5      R7                  U
R8                  5      S eS n
A
ff = f)Nr   ro  call_methodcall_moduler   r  rO  rp    zcalling compiler function zdone compiler function z#compiler_fn did not return callablez9Backend compiler failed with a fake tensor exception at 
zAdding a graph break.dynamor  )op_count
node_countinput_count)&r   re   r  r  r   rP   rT  rn   _dynamo_sourcer  _param_name_to_sourcer   _source_to_user_stacksr"  rp   r   r    INFOr   r   r   r   callabler   r-   r+  r,   with_traceback__traceback__r  format_frame_summaryr0   r8  r.   r   r   r   rF  )r   r   totr  rS  plrC  rI  r   r  emsgs               rx   r%  OutputGraph._call_user_compiler  sv   +++HHNNDwwIIqww-'##D)	 #
 	3B''*%C #

B 
 $(#<#< $($>$>!!	 4++Z88   )) 
 N7<<+EdV)LM**K((,[9%b*=*=*?@KN7<<+B4&)IJK((O*OO(. 	,..!"((..1"<0			
 C . 	0 
	D55+D,<,<a@OOOO M<<4467'( 
 'q,,*=*=sCC 	 G 	'(8(8!<KK	s2    CG K,A?I00K=I??K0J<<Kc                 ~    [         R                  R                  R                  (       a  [	        U 5      $ [        5       $ r}   )r   _dynamor   use_graph_deduplicationr1   r  r   s    rx   ry  OutputGraph.dedup_pass  s'    ==77,T226Mrw   c                     S nSnU(       d'  U SU 3nXPR                   ;   a  US-  nOUnU(       d  M'  X2l        SUl        U R                  X#S S9  U$ )Nr   r  r   FrN  )r   rp   torchdynamo_force_dynamicr(  )r   rI  sub_gm	next_namer'  r   s         rx   install_subgraphOutputGraph.install_subgraph  sg    	&!IOO+Q%	 ) $+0( 	$$Vt$Drw   c                 Z    U R                    Vs/ s H  oR                  PM     nnU$ s  snf r}   )r7  example)r   rC  r   s      rx   r   OutputGraph.example_inputs  s&    )-8#++8 9s   (c                   ^ ^^^ T R                   (       d   eS[        R                  R                  4S jnS[        R                  R                  4S jmU4S 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
 nU 4S jn[)        5       mS[*        [         R,                  [         R.                  4   4S jm/ nT R0                   GH  nU" U5      S LnU(       a&  UR                  (       d  UR3                  U5        M9  M;  UR                  (       d,  [5        UR6                  S   [8        5      (       d
  U" U5        Mx  UR6                  S   n	[5        U	[8        5      (       a  M  [5        UR6                  S   R:                  [         R<                  5      (       a  UR6                  S   R:                  n
UR6                  S   R>                  n[         R@                  RB                  RE                  U
5      (       d  [G        U
RI                  5       5      nURK                  5        HT  n[M        URN                  U5      n[P        RR                  " [         R,                  [         R.                  4UU4S jU5        MV     GM  U	RT                  b  U	RT                  OU	R:                  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RW                  U5        M3     g )Nb_nodec                    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)NTFrV  )	r?  r   NoderT  rt  r   SymBoolrS  maybe_as_bool)rK  brs      rx   is_static_true;OutputGraph.remove_unused_graphargs.<locals>.is_static_true  sw    ~fbgg..0AyDy1emm,,&&..00Q= rw   ac                     SSK Jn  [        U [        [        [
        45      (       a  g[        U [        R                  5      (       a%  [        U R                  R                  S5      U5      $ g)Nr   SymTypesTrV  F)
torch.fx.experimental.sym_noderW  r?  rt   re  r   r   rM  rT  rt  )rT  rW  s     rx   is_symnode_arg;OutputGraph.remove_unused_graphargs.<locals>.is_symnode_arg  sJ    ?!c5$/00!RWW%%!!&&**_"=xHHrw   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   rV  ro  FrV  c              3   4   >#    U  H  nT" U5      v   M     g 7fr}   ro   rO  rT  rY  s     rx   rQ  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}   ro   r]  s     rx   rQ  r^  0  s     G2FQ~a((2Fr_  T)
rX  rW  r  r?  rT  rt  rp  r   r   r3  )rS  rW  rY  s     rx   is_symnode_compute_nodeDOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node#  sp    ?ww/)diimmO<hGG <$))<<<G$++2D2D2FGGGrw   r   )is_accessor_noder  ro  c                 
   U R                   S   nUR                  n[        U[        R                  5      (       aI  [        UR
                  R                  [        R                  5      (       a  UR
                  R                  $ g r  )	rT  rH  r?  r   r   rS  exprsympySymbol)rS  rC  rH  s      rx   placeholder_binds_symbolEOutputGraph.remove_unused_graphargs.<locals>.placeholder_binds_symbolE  s^    ))J'CkkG'5<<00Z!!5<<6 6 ||(((rw   c                    > [         R                  SU R                  S   R                  R	                  5       5        U R                  S	 TR                  U 5        TR                  R                  U S 5        g )NzREMOVE UNUSED GRAPHARG %srO  )r   ro  rT  rn   rI  r  r  r  )rS  r   s    rx   remove_unused:OutputGraph.remove_unused_graphargs.<locals>.remove_unusedN  s\    II1499Z3H3O3O3T3T3VW 		*%T"!!%%dD1rw   fakec                      U [        U5      -  n g r}   )r   )used_symbolsrm  s     rx   update_used_symbols@OutputGraph.remove_unused_graphargs.<locals>.update_used_symbolsX  s    L..Lrw   rO  c                    > T" TU 5      $ r}   ro   )trp  ro  s    rx   rh  5OutputGraph.remove_unused_graphargs.<locals>.<lambda>y  s    .A,PQ.Rrw   ),r#  r   rS  Argument%torch.fx.experimental.symbolic_shapesrc  r  r  re   r  rF  usersr  r   operatorgetitemr   _checkr   r  r  r   r   r   r  r   r?  rT  rW   rH  ScriptObjectexample_strong_ref_libraryfake_class_registrytracing_with_realr  __obj_flatten__r  r  wrapped_objpytreetree_map_onlyfake_tensorremove)r   rR  ra  rc  rS  rh  rk  recheck_placeholdersbinds_symbolrC  real_script_objfake_script_obj	flat_dictattrfake_attr_valrm  symbolrY  rp  ro  s   `                @@@rx   r  #OutputGraph.remove_unused_graphargs  s    	277#3#3 	&	bgg.. 		" 	KT$**"2"234D4

#$)GGz)?2t{{hFVFV7V?2 KK5<<7*499Q<88.t44'--$$T* 5		2 +.%	/E%,,:T4U 	/  "%%D3D9ELzz(//5 " zz*IIj)+@+ + "$' ))J/C!#'<== !$))J"7"?"?ASASTT*.))J*?*G*G*.))J*?*R*R$~~AASS+    )-_-L-L-N(OI(1(807$3$?$?1" !' 4 4%*\\5<<$@$R$1!"	 )9 !+.??+FCKK  (d;I &N )D-d3F!-!$' !''/ )rw   rH  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  rq  r#  )r   rH  s     rx   r[  #OutputGraph.add_output_instructions  s     
 	  ''/rw   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   rG   rn  r   )r   rI  r   s      rx   r  !OutputGraph.install_global_unsafe  sO     11111""4([//0A0A4OPrw   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)r   r  r  r  r   rH  r   rI  s       rx   install_global_by_id OutputGraph.install_global_by_id  sG     2e9+R'89)))K""4/rw   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(   r  r  s       rx   rA  OutputGraph.install_global  s!      ""4/rw   c                    S U l         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         g r  )r  r   r   r  re   r  rT  r  r  r  r  r  r/  r  r   r$  r2  r  s     rx   cleanupOutputGraph.cleanup  s    $(!JJ$$DTYY&IIj) % 	##%  &&(!##))+##))+--335""$  &&(  &&(!!#rw   enabledc                     Xl         g r}   )r'  )r   r  s     rx   r  $OutputGraph.set_torch_function_state  s    &-#rw   r  c                 :    U R                   R                  U5        g r}   )r  r   )r   r  s     rx   add_graph_finalizerOutputGraph.add_graph_finalizer  s     	##**+=>rw   rS  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  rO  r  )r  rT  rH  r   r   r  s     rx   example_value_from_input_node)OutputGraph.example_value_from_input_node  sH    77m#99Z(000ww*$$$t{{++rw   )1r!  r2  r3  r4  r   r"  r   r   r  rn  r   r-  r  r/  r   r   r   r   r7  r+  r   r   r  r   r6  r,  r  r  rm  r1  r   r0  r  r  r  r#  r  r   r  r'  r)  r*  r   r  r   r  r  r$  r  )rD  r}   )tmpFN)r   N)`rp   rq   rr   rs   r   r   r   r   r	   r#   r   Scoper   r5  rV   rJ  rG  r  ry  r   r|  r  propertyrP  r  r  re   setterr  r  r  r  r  r  
contextlibcontextmanagerr  r  r:  r   r   r  	GuardsSetrY  r   r.  r  r  r  rI   r  r  rU  r  staticmethodr  r   r   r   r   r(  rH  r   r  r  rv  r  r  r  r  r  r   r   rM  r  rX   r7  r   r"   r  r%  ry  rE  r   r  r'   r[  r  r  rA  r  r  r  r  rv   r   r   s   @rx   r   r      s   t238nt2 j)t2
 t2 t2 t2lD&5O 5) .0&8BG#4 &#
      & ) ) \\* * 7 7 4 4 1 1A@@  .   . . 8 8 A// A A >DcN > >*
X$& N N'05
  L,ehhoou||S89L,\T/n QUU19:L1MUn501<C 2  "7*t)l 7d277m 7 7 E4> E E0R^^ 0
 0@bnn @ @D"U\\ 2 S0j d;.?  D  
QS 	s 	$*. . .?"*BNN+;T+A"B?	?
,%((-- , ,rw   r   a  With the current config, we will graph break (and fall back to eager-mode PyTorch) on all ops that have do not have the 'pt2_compliant_tag'. Please see the following doc for how to mark this op as PT2 compliant https://pytorch.org/tutorials/advanced/custom_ops_landing_page.htmlc                   ^  US:w  a  g U 4S jnU 4S 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
[)        [+        U
5      5         S n
A
NrS n
A
ff = f)Nro  c                 ^   > U R                   S;   a  g TR                  R                  U 5        g )N>   atenprimprims)	namespacer-  r   )r   output_graphs    rx   encountered_compliant_op8check_pt2_compliant_op.<locals>.encountered_compliant_op  s)    88))--f5rw   c                    > TR                   R                  U 5        [        R                  (       a  [	        US-   [
        -   5        g g )N )r,  r   r   only_allow_pt2_compliant_opsr/   err_epilogue)r   r;  r  s     rx   encountered_non_compliant_op<check_pt2_compliant_op.<locals>.encountered_non_compliant_op  s6    &&**62..#)l23 /rw   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+Encountered the torch.ops.OpOverloadPacket z! which resolves to the overload (z) that is not PT2 compliant.)r?  r   _ops
OpOverloadTagpt2_compliant_tagtagsOpOverloadPacketr  	overloadsrF  r  r>  utilsget_fake_values_from_nodesr  r%  _jit_resolve_packet_qualified_op_namer   r/   r   )r  kindr   r   r   r  r  r  r  overloadr:  s   `          rx   check_pt2_compliant_opr    s   6
4
 &%**//0099&&&++5$V,$3F8 <) *	

 	&%**5566&**,-	 y>Q1.Byy**bgg5(,(..4X 6./ }}**EE##d^U
	"xx33)),04:H VX&99&&"''1$R((=fX F33;* =%&? 70  	"#a&!!	"s   .G 
G:G55G:c                        \ rS rSrS rS rSrg)	LazyProxyi+  c                 4    Xl         X l        X0l        X@l        g r}   )r  r   r   r   )r   r  r   r   r   s        rx   r   LazyProxy.__init__,  s    	rw   c                 N    U R                   " U R                  0 U R                  D6$ r}   )r   r   r   r   s    rx   r   LazyProxy.__call__2  s    ww		1T[[11rw   )r   r   r   r  N)rp   rq   rr   rs   r   r   rv   ro   rw   rx   r  r  +  s    2rw   r  c                   F  ^  \ rS rSrSrSU 4S jjrS r   SU 4S jjr SU 4S jjrS r	 SS jr
S	 rS
 rS\\\R                   R"                  4   4S jrS\\R&                  \R(                  4   S\\   4S jrS\R&                  S\\R4                     4S jrSrU =r$ )r   i6  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.
c                    > [         TU ]  5         [        R                  " U5      U l        [
        R                  R                  5       U l        X0l	        0 U l
        0 U l        X l        0 U l        0 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        g U R                  R.                  U R                  R1                  U5      U4/-   U l        g )NFr   r   )r   r   weakrefr	  r  r   r   Graphre   r   r  r  r  lifted_freevarsr  	prev_instunder_activation_checkpoint#allow_side_effects_under_checkpointdebug_level	_cur_code_orig_gm_meta_orig_gm_lineno_map_orig_gm_firstlinenosource_fn_stack_target_to_str)r   r  r  r   r  r   s        rx   r   SubgraphTracer.__init__>  s   #MM,7XX^^%
 # 9; =?   " TV ,1(
 490:@:L 2 2Q 6RS!#' $(!
 ;;#%D #';;#>#>**=9=IB $D rw   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)
r  r  r  current_instructionstarts_linert  r   r	  _COPY_META_FIELDSrT  )r   r  rS  linenonode_idxrT  fields          rx   r  ,SubgraphTracer._maybe_preserve_original_meta  s    (())++77FH!3377666 #))(3XX77E}+/;		%( 8 !D(/3M/BDIIm, ) $ * ) rw   c           	      ,  >^^^^^ U R                   b^  [        R                  " X445      u  p/ n
U H%  nU R                  U5      nU
R	                  U5        M'     [        R
                  " X5      u  p4[        TU ]  UTX4XVU5      mU R                  R                  n[        R                  S:  a  US;   a  UR                  mTU R                  La  TR                  bu  TR                  R                  b^  UR                   mUR#                  TR                  R                  S9mUUUU4S jn[$        R'                  S[)        U5      5        TU l        SnUR                   U R*                  La  [,        R.                  " UR                   5      R1                  SS 5      " 5       n[3        U[4        R6                  R8                  5      (       ao  S	nUR:                  R<                   Vs/ s H  nUR>                  PM     snU l         URB                  U l"        URF                  RH                  RJ                  U l&        OS U l         S U l"        S U l&        URN                  nU(       a'  URQ                  5       TRR                  R>                  S
'   US;   a>  U RT                  TRR                  RV                  T4/-   TRR                  R>                  S'   OUS:X  a  U R                   b  [Y        S5        U RT                  TRR                  RV                  [[        U4S jTRR                  R>                  S
   R]                  5        5       5      4/-   TRR                  R>                  S'   U R_                  UTRR                  5        U(       Gd*  S
TRR                  R>                  ;  a:  URN                  nU(       a'  URQ                  5       TRR                  R>                  S
'   STRR                  R>                  ;  a  US;   a>  U RT                  TRR                  RV                  T4/-   TRR                  R>                  S'   OxUS:X  ar  U R                   b  [Y        S5        U RT                  TRR                  RV                  TRR                  R>                  S
   T   S   4/-   TRR                  R>                  S'   STRR                  R>                  ;  a  / nU(       aJ  URa                  5       (       d  UR	                  URc                  5       5        [e        USS 5      nU(       a  MJ  URg                  5         [h        Rj                  Rm                  U5      Ro                  5       nSRq                  U5      TRR                  l9        [4        Rt                  Rv                  Rx                  (       d)  [4        Rt                  Rv                  Rz                  (       aD  U R                  R|                  R                  U R                  R                  TRR                  5        T$ s  snf )NrT  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  )rL   rstriprS  rI  )linecur_instheaderr  tx_codes    rx   get_trace_call_log_str;SubgraphTracer.create_proxy.<locals>.get_trace_call_log_str  s9    5gxHOOQD+BGGLL>xr$PPrw   r  Forig_graphmodulec                      g r}   ro   ro   rw   rx   rh  -SubgraphTracer.create_proxy.<locals>.<lambda>  s    Drw   Tnn_module_stack>   r)  ro  r  r*  z0Invoking an nn.Module inside HigherOrderOperatorc              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  )rO  r   r  tyr   s       rx   rQ  .SubgraphTracer.create_proxy.<locals>.<genexpr>  s4      *QJAw773<?f4 *Qs   !1	1r   r  r  r+  )@r  r  tree_flatten#maybe_lift_tracked_freevar_to_inputr   tree_unflattenr   r  r  r  rr  rs  r  r  	positionsr  r8  get_line_of_code_headertrace_call_logro  rR   r  r)   get_contextrt  r?  r   r   r   re   r  rT  r  _lineno_mapr  r   __code__r   r  r  r   rS  r  rI  r/   r   r   r  is_co_filename_from_nn_modulesframe_summaryr  reverser   StackSummary	from_listformatr  r  r>  r   r?  track_nodes_for_deduplicationr  
track_node)r   r  r   r   r   rI  	type_exprproxy_factory_fn	flat_args	tree_specnew_flat_argsrC  maybe_new_argr  r  is_retracingorig_graphmodule_maybendr  frame_summariesmsgsr  r  r  r  r   s     `                  @@@@rx   r  SubgraphTracer.create_proxy  s   V ;;"#)#6#6~#F IM  $ H H M$$]3 ! "00JLDW!&$9I

 )) w&4 4
 ,

 --H.&&2&&--9))338;M;M;T;T3UQ Q $$T:6L+MN!) 99DNN*%1%=%=bii%H%L%L"L& &" 0%((2F2FGG#&<&B&B&H&H&&HBGG&H&" ,B+M+M(*22;;JJ ) &*"+/(,0),,.=.B.B.DBGGLL*+33.2.B.Bv&F /BGGLL*+ ]"{{&PQ.2.B.BGGLL *,'',,7H*I*O*O*Q 	F 	/BGGLL*+ 	**2rww7 4"$"4"4"6E6J6J6LBGGLL!23 4;;6:6J6Jv.N 7BGGLL!23 ]*{{.%N 7;6J6JGGLLGGLL):;FCAFN 7BGGLL!23 ,<>O 88::#**2+;+;+=>R40 " ##% ))33ODKKMD"$''$-BGG MM  88}}##AA,,77!!,,bgg 	e&s   &X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	$ )Nz2create_node using arg not from this SubgraphTracerr  )r  r  r  r  arg_tree_leavesr?  r   r   rM  re   r   r  r  rT  )r   r  r   r   r   rI  r  r  rC  rS  r   s             rx   r  SubgraphTracer.create_node@  s     	t00"dK;;"..??I !#uxx}}55II+HGH+	 ! w"2tTM*.*;*;*E*E		&'rw   c                    [        UR                  5      S:  a  / nUR                  R                  5        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 r  )rF  rw  r  re   rq  r  r  r  r  r  r  rI  )r   rS  user_graph_nodesuserother_graph_nodes        rx   r  SubgraphTracer.remove_nodeS  s    tzz?Q46

) ::+ %++HT$**:J:J5K,LM * %5  &&112BC %5

d#  $$TYY5rw   c           	      j   [         R                  SUUb  UR                  5       OSUU R                  U5        Uc  U R                  c   SU SU S35       eU R
                  (       ad  U R                  cW  [        USS9(       dH  U R                  R                  R                  U/ 5      R                  [        R                  " 5       5        XR                  ;   a6  [        R                  " 5        H  nU SU 3nXpR                  ;  d  M  Un  O   U R                  (       av  [!        [#        U R                  5      5      nU R                  U   R$                  n	U(       a  U R&                  R)                  U	5      n
O7U R&                  R+                  U	5      n
OU R&                  R)                  S 5      n
U
   U R-                  S	US
0 US9n[/        UR$                  U5        U R                  (       a@  U(       a9  U R                  R1                  5       u  pXR                  U'   XR                  U'   OXR                  U'   U R
                  n[2        R4                  R7                  5       nU(       d7  U(       d0  [9        U[2        R:                  5      (       a  U R=                  X55        [9        U[2        R>                  5      (       aU  [9        UR$                  R@                  [B        RD                  5      (       a"  XRF                  UR$                  R@                  '   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  ro   r  )$r   ro  rI  r  r  r   r>   r  r   
setdefaultr   r   extract_stackr  r  r  r   r  rS  re   inserting_beforeinserting_afterr  rU   popitemr   compileris_compilingr?  r   _lift_basic_symbolsr   re  rf  rg  r  )r   rI  r  rV  beforern   r'  candidate_name	prev_namerS  ctxr	  r   r   is_strict_exportis_non_strict_exports                   rx   rQ  !SubgraphTracer.create_graph_inputi  s    			E#/FKKMX	
 >'xA$}UbTccvwx' >>dkk1'F!!77BB62NUU"002
 +++__&$(61#!)A)AA)D	 ' ##Xd&>&>?@I++I6;;Djj11$7jj006**--d3C%%mT2rY%WEejj-8''F//77916((../((+16((.2  $~~#(>>#>#>#@ $,}ell;;((? -66:""''< < ?D""=#5#5#:#:;_ SSs   4E&L$$
L2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 R                  UR                  R                  [        U5      U5      nX0R                  U'   U$ )NzIlift_tracked_freevar_to_input should not be called on root SubgraphTracerrV  )r  rS  rT  r?  r   r   re  r  r  r  lift_tracked_freevar_to_inputrQ  rI  rR  )r   r	  rV  	new_proxys       rx   r4  ,SubgraphTracer.lift_tracked_freevar_to_input  s    KK#	WV	W# 

8 }ell33""''4+=+==%%m&8&8&=&=>>
 (((''..
 <<4;;&KK55e<

8++JJOOT-0-
	 '0U#rw   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  )rO  sub_argr   s     rx   rQ  ESubgraphTracer.maybe_lift_tracked_freevar_to_input.<locals>.<genexpr> 	  s&      'FG @@II'Fs   !)
r?  r   r   Proxyslicestartstopstepr  r4  )r   rC  s   ` rx   r  2SubgraphTracer.maybe_lift_tracked_freevar_to_input  s     #uxx~~..
 #u%%(+		388SXX'F  
ZZ4J11#66rw   e_proxyc                 b  ^ ^ UR                   m[        T[        5      (       d   eS[        4U 4S jjnU4S jn[        U[        R
                  5      (       Ga  [        UR                  5       5       H  u  pVU" U5      (       d  M  [        R                  SUUUTR                  5        [        TUUS[        R                  R                  R                  R                  X%40 [!        U5      S9nT R#                  Xg5        M     UR$                  [        R&                  L a  [        UR)                  5       5       H  u  pVU" U5      (       d  M  [        R                  SUUUTR                  5        [        TUUS[        R                  R                  R*                  R                  X%40 [!        U5      S9nT R#                  Xg5        M     GO;UR$                  [        R,                  L aA  T R#                  UR/                  5       U5        T R#                  UR1                  5       U5        OUR$                  [        R2                  [        R4                  1;   aA  T R#                  UR7                  5       U5        T R#                  UR9                  5       U5        OnUR$                  [        R:                  [        R<                  1;   a@  T R#                  UR?                  5       U5        T R#                  URA                  5       U5        [C        U5      (       aB  URE                  5       u  pU H)  n
[G        X5      nT R#                  U[G        X*5      5        M+     g g [        U[        RH                  5      (       a4  U" U5      (       a&  URJ                  RL                  nUTRN                  U'   g g g )Nr   c                 ^  > SSK Jn  U" U 5      =(       a    [        U R                  R                  [
        R                  5      =(       ac    U R                  R                  R                  U R                  R                  5      =(       a#    U R                  R                  TR                  ;  $ )Nr   )r   )
rv  r   r?  rS  re  rf  rg  r   is_unbacked_symintr  )r  r   r   s     rx   	need_bind8SubgraphTracer.track_unbacked_symbols.<locals>.need_bind%	  sq    I A :qvv{{ELL9:FF$$77D: FFKKt'9'99	rw   c                 X   > TR                   " U0 UD6n[        UR                  U 5        U$ r}   )r  rU   rS  )rV  r   r   r	  r  s       rx   _proxy_with_example_valueHSubgraphTracer.track_unbacked_symbols.<locals>._proxy_with_example_value/	  s+    ''88Eejj-8Lrw   z>_track_unbacked_symbols %s for %s.size()[%s] at debug_level %sro  r#  z@_track_unbacked_symbols %s for %s.stride()[%s] at debug_level %s)(r  r?  r   r   r   r   	enumerater  r   ro  r  r  opsr  sym_sizert   rR  track_unbacked_symbolslayoutstridedstride
sym_stride
sparse_coo_indices_values
sparse_csr
sparse_bsrcrow_indicescol_indices
sparse_csc
sparse_bscccol_indicesrow_indicesr   __tensor_flatten__r  r   rS  re  r  )r   rV  rA  rE  rH  r'  r  
lazy_proxyattrsr/  r  inner_tre  r  s   `            @rx   rM  %SubgraphTracer.track_unbacked_symbols	  s     &.1111	D 		
 mU\\22!-"4"4"67Q<<IIX** "+1'		//33 "&q'	"J //>' 8* ##u}}4%m&:&:&<=DA ||		^#".. &/"5+!IINN5599$L&*1g	&
 33AB' >* %%)9)99++M,B,B,DgN++M,A,A,CW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* ( 5rw   rV  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        OU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+                  Xb  [G        X(5      OS 5        M/     g g [        U[        R                  5      (       a
  U" UU5        g g )	Nr  rn   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!                  5       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!                  5       OSTR"                  5        [+        UU SS SS9UR                  R                  S'   g )Nr   rV  )r,  rn   z4_lift_symbols_in_symint %s from %s at debug_level %szsubgraph inputsr   zyFor root tracer, we only expect to bind basic symbols (compound symbols should be cached before) but got unbound symbols z in zSource of 'z' is None when lifting it to input of top-level. If it's an unbacked symbol, this could be because it's not tracked with lazy_bind_unbacked_symbols. Otherwise, should provide a source when create_graph_input for `z` at root tracer.F)pass_arg_as_tensorr  	is_tensorrO  )r   r?  r   r   lookup_unbound_symbolsrF  r  r+  r  rS  rT  rQ  r   rR  r   ro  rI  r  r  r   iterrX   )	r  rn   r,  self_to_be_bounds0parent_proxyexample_valphr   s	           rx   _lift_symbols_in_symintCSubgraphTracer._lift_basic_symbols.<locals>._lift_symbols_in_symint|	  s   
 q>>a....#::1=#$) {{&//:*B#';;#<#<R#@L"."3"3"8"8"IK%k5<<@@@@00B[)#%% 1 B IIN)/);AR((	 :<D((6# +( +,1 HHXGYY]^_]`b1 ) !! %WWXVYYjl)
 $/01,,GG!! -  		J%+%7FKKM=N$$	 ,4', $#,Z(rw   T)r,  )F)$r   rt   r   r   r	   r   r   r?  r   rJ  r  rD   rC   SIZErN  rO  rP  STRIDEstorage_offsetSTORAGE_OFFSETrR  r+  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r   r]  r  r8   )
r   rV  rb  rn  r'  r  r_  r/  r  r`  s
   `         rx   r+  "SubgraphTracer._lift_basic_symbolsu	  s    !B	S%,,&'B	V$B	 B	 	B	 B	H mU\\22!-"4"4"67' ? -S.2E2EqI! 8 ##u}}4%m&:&:&<=DA+  # 1n6K6KQO!%# > (!002 ? -S.2O2OP! %%)9)99(()?)?)A3G(()>)>)@#F%%%*:*:E<L<L)MM(()C)C)EsK(()B)B)DcJ%%%*:*:E<L<L)MM(()C)C)EsK(()B)B)DcJ,];;*==?
!D%m:G,,/C!6t " < u||44# 5rw   r  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}   )rI  )r  s    rx   rh  7SubgraphTracer.lookup_unbound_symbols.<locals>.<lambda>

  s    rw   )r   )rS  re  r   rF  r  r   r?  r  r   r   r;  r  sorted)r   r  r   to_be_boundrj  r	  s         rx   rg  %SubgraphTracer.lookup_unbound_symbols	  s    vv{{//|!IB+++""2&&&r*E%++).""2&5%((..11elld6JM%bT)KLMJ  k'788rw   )r  r  r  r  r  r  r  re   r  r   r  r  r  r  r  r  r  )NFN)NNN)NNNNr  )rp   rq   rr   rs   r   r   r  r  r  r  rQ  r4  r  r   r  r   r   r;  rM  r   r   r	   r   r+  r   rf  rg  rg  rv   r   r   s   @rx   r   r   6  s    >BC4 k\ HL&6. DH_D&P7>`5&+Iuxx~~,E&F`5F~"5<<#=>~EMfEU~D9 9ell9K 9 9rw   r   )r  r  r   r  r  r    rx  r  rr  r   r  dataclassesr   typingr   r   r   r   r   r	   r
   r   r   r   rf  torch._guardsr   torch._loggingtorch.distributeddistributedr  torch.nntorch.utils._pytreer  _pytreer  r   torch._dynamo.excr   r   r   r   r   r   torch._utils_internalr   r  r   %torch.fx.experimental._backward_stater   rv  r   r   r   torch.fx.passes.runtime_assertr   torch.utils._python_dispatchr   r+  r   r   r   r!   backends.registryr"   r#   bytecode_transformationr$   r%   r&   r'   r(   r)   r  r*   current_scope_idr+   r,   r-   r.   r/   r0   graph_deduplicationr1   graph_region_trackerr2   rY  r3   r4   mutation_guardr5   r  r6   r7   rn   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   variables.baserV   variables.builderrW   rX   rY   rZ   variables.listsr[   variables.miscr\   r]   variables.nn_moduler^   variables.tensorr_   r`   ra   rb   variables.torch_functionrc   torch._dynamo.symbolic_convertrd   	getLoggerrp   r   r  getArtifactLoggergraph_tabular_logr  graph_sizes_logr  rk   rz   	lru_cacher   r   r   r   r   r   r   r   objectr  r   r  r  r  r  r  Tracerr   ro   rw   rx   <module>r     sV          	 
   !         $ $  <  1 : ? U U J F D D 5  '  -  ; 4 / 0 @       & ,  . 6 1  C H !NN44XwG 11(LI..228]K11(LI $   0 T4 4 - - -	%UXX__ 	%   F 	S&[d, d,P/J =@  oo' 2 2T9RYY T9rw   