Ë
    P/æj£\ ã                   óˆ  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZd dlmZ d dlZd dl m!c m"Z# d dlm$Z$ d dlm%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d d	l.m/Z/m0Z0m1Z1 d d
l2m3Z3 d dl4m5Z5 ddl6m7Z7m8Z8mZ9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZB ddlCmCZC ddlDmEZE ddlFmGZG ddl8mHZHmIZImJZJmKZKmLZL ddlMmNZNmOZO ddlPmQZQ ddlRmSZSmTZT ddlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb ddl!mcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZt ddlumvZv ddlwmxZxmyZymzZzm{Z{m|Z| ddl}m~Z~ ddlm€Z€ ddl�m‚Z‚ ddlƒm„Z„m…Z…m†Z†m‡Z‡ ddlˆm‰Z‰ erd d lŠm‹Z‹  e�j                  e�«      ZŽe�j                  �j!                  e�d!«      Z‘e�j                  �j!                  e�d"«      Z’e�j                  �j!                  e�d#«      Z“e�j                  �j!                  e�d$«      Z” ed%¬&«       G d'„ d(«      «       Z• G d)„ d*«      Z– e�j.                  d«      d+„ «       Z˜e G d,„ d-«      «       Z™d.„ Zš G d/„ d0e�j6                  �j8                  «      Z� G d1„ d2«      ZžeeŸe f   Z¡ G d3„ d4«      Z¢d5Z£d6„ Z¤ e�jJ                  «       Z¦ G d7„ d8e$�jN                  «      Z¨y)9é    N)Ú	dataclass)	ÚAnyÚCallableÚDictÚListÚOptionalÚSetÚTupleÚTYPE_CHECKINGÚUnion)Úfx)Ú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ÚInstructionÚ	unique_id)Úcode_context)Ú	PyCodegen)Úenter_new_scope)ÚBackendCompilerFailedÚ!exceptions_allowed_to_be_fallbackÚ	SkipFrameÚunimplementedÚunimplemented_with_warning)Ú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Úget_torch_function_mode_stackÚgraph_break_reasonsÚincrement_op_countÚlazy_format_graph_codeÚ
LazyStringÚnn_module_proxyÚsameÚset_example_value)ÚVariableTracker)ÚBackwardStateGraphArgÚGraphArgÚTrackedFakeÚVariableBuilderÚwrap_fx_proxy)ÚBaseListVariable)ÚNullVariable)ÚNNModuleVariable)ÚNumpyNdarrayVariableÚSymNodeVariableÚTensorVariableÚUnspecializedPythonVariable)ÚTensorWithTFOverrideVariable)ÚInstructionTranslatorBaseÚgraphÚ
graph_codeÚgraph_sizesÚ
trace_callT)Úfrozenc                   ó"   — e Zd ZU eed<   eed<   y)ÚVariableTrackerCacheKeyÚvt_idÚsourceN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__r   © ó    ú]/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/output_graph.pyre   re   y   s   … àƒJð „Nrn   re   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚVariableTrackerCachec                 ó   — i | _         y ©N)Úcache©Úselfs    ro   Ú__init__zVariableTrackerCache.__init__ƒ   s	   € Øˆ�
rn   c                 óh   — t        t        |«      |«      }|| j                  vry | j                  |   S rs   ©re   Úidrt   )rv   Úvaluerg   Úkeys       ro   ÚlookupzVariableTrackerCache.lookup†   s/   € Ü%¤b¨£i°Ó8ˆØ�d—j‘jÑ ØØ�z‰z˜#‰Ðrn   c                 óL   — t        t        |«      |«      }|| j                  |<   y rs   ry   )rv   r{   rg   Úvtr|   s        ro   ÚaddzVariableTrackerCache.addŒ   s   € Ü%¤b¨£i°Ó8ˆØˆ�
‰
�3Šrn   c                 ód   — t        «       }|j                  j                  | j                  «       |S rs   )rq   rt   Úupdate)rv   Ú	new_caches     ro   ÚclonezVariableTrackerCache.clone�   s&   € ä(Ó*ˆ	Ø�‰×Ñ˜tŸz™zÔ*ØÐrn   c                 ó8   — | j                   j                  «        y rs   )rt   Úclearru   s    ro   r†   zVariableTrackerCache.clear–   s   € Ø�
‰
×ÑÕrn   N)rh   ri   rj   rw   r}   r€   r„   r†   rm   rn   ro   rq   rq   ‚   s   „ òòòòórn   rq   c                  ó4   — t        j                  t        «      S rs   )Útorchdynamo_loggingÚget_step_loggerÚlogrm   rn   ro   Ú_step_loggerr‹   š   s   € ä×.Ñ.¬sÓ3Ð3rn   c                   óT   — e Zd ZU dZeed<   eej                     ed<   dZ	e
ed<   d„ Zy)ÚGraphCompileReasonzOStores why a given output graph was compiled; i.e. what caused the graph break.ÚreasonÚ
user_stackTÚgraph_breakc                 óH   — | j                   rt        j                  | «       y y rs   )r�   rI   Úappendru   s    ro   Ú__post_init__z GraphCompileReason.__post_init__©   s   € Ø×ÒÜ×&Ñ& tÕ,ð rn   N)rh   ri   rj   Ú__doc__Ústrrl   r   Ú	tracebackÚFrameSummaryr�   Úboolr“   rm   rn   ro   r�   r�   Ÿ   s,   … áYàƒKØ�Y×+Ñ+Ñ,Ó,ð €K�Óó-rn   r�   c                 ó   ‡ — ˆ fd„}|S )Nc            
      óN   •— ‰D � ��cg c]  \  } }} | |i |¤Ž‘Œ c}}} S c c}}} w rs   rm   )ÚfnÚargsÚkwargsÚrandom_callss      €ro   Ú_gen_rand_valuesz1_get_gen_rand_values_fn.<locals>._gen_rand_values¯   s+   ø€ Ø<H×IÐIÑ(8¨¨D°&‘�DÐ#˜FÓ#ÔIÐIùÔIs   ˆ rm   )rž   rŸ   s   ` ro   Ú_get_gen_rand_values_fnr    ®   s   ø€ ôJð Ðrn   c                   ó`   ‡ — e Zd ZdZdeeej                  j                  f   fˆ fd„Z	d„ Z
ˆ xZS )ÚFakeRootModulez'Trick the constructor of fx.GraphModuleÚ
nn_modulesc                 ól   •— t         ‰| �  «        |j                  «       D ]  \  }}t        | ||«       Œ y rs   )Úsuperrw   ÚitemsÚsetattr)rv   r£   ÚkÚvÚ	__class__s       €ro   rw   zFakeRootModule.__init__¸   s6   ø€ Ü‰ÑÔØ×$Ñ$Ó&ò 	 ‰DˆAˆqÜ�D˜!˜QÕñ	 rn   c                  ó   — y)NzFakeRootModule(...)rm   ru   s    ro   Ú__repr__zFakeRootModule.__repr__½   s   € Ø$rn   )rh   ri   rj   r”   r   r•   ÚtorchÚnnÚModulerw   r¬   Ú__classcell__©rª   s   @ro   r¢   r¢   µ   s)   ø„ Ù1ð  4¨¨U¯X©X¯_©_Ð(<Ñ#=õ  ö
%rn   r¢   c                   ój   — e Zd Zdefd„Zdej                  j                  deej                     fd„Z
y)ÚWrapperBackendÚbackendc                 ó   — || _         y rs   )r´   )rv   r´   s     ro   rw   zWrapperBackend.__init__Â   s	   € Ø#*ˆ�rn   ÚgmÚexample_inputsc                 ó®  — t        |«      | _        || _        t        j                  | j                  «      }| j                  ||«      | _        | j                  �"| j                  | j                  j                  u r| j                  j                  S t        j                  s| j                  S 	  | j                  j                  t        |«      Ž } | j                  t        |«      Ž }t        ||«      r| j                  | j                  «        S t        d| › �«      ‚# t        $ r t        j                  d«       ‚ w xY w# | j                  «        w xY w)Nzincorrect results of backend zerror in verify_correctness)r?   Úrestorer¶   ÚcopyÚdeepcopyr´   Ú	candidateÚforwardr   Úverify_correctnessrA   rN   ÚRuntimeErrorÚ	ExceptionrŠ   Ú	exception)rv   r¶   r·   Úcopy_gmÚcorrectÚresults         ro   Ú__call__zWrapperBackend.__call__Å   s
  € Ü(¨Ó,ˆŒØˆŒÜ—-‘- §¡Ó(ˆØŸ™ g¨~Ó>ˆŒà�>‰>Ð! T§^¡^°t·w±w·±Ñ%FØ—7‘7—?‘?Ð"ä×(Ò(Ø—>‘>Ð!ð	Ø%�d—g‘g—o‘o¤|°NÓ'CÐDˆGØ#�T—^‘^¤\°.Ó%AÐBˆFô �G˜VÔ$Ø—~‘~ð �L‰L�Nô Ð!>¸t¸fÐEÓFÐFøô ò 	Ü�M‰MÐ7Ô8Øð	ûð �L‰L�Nús   Â/AD ÄD Ä D?Ä?E ÅEN)rh   ri   rj   r   rw   r­   r   ÚGraphModuler   ÚTensorrÅ   rm   rn   ro   r³   r³   Á   s4   „ ð+ 
ó +ð˜5Ÿ8™8×/Ñ/ð ÀÀeÇlÁlÑASô rn   r³   c            
       óZ  ‡ — e Zd ZdZdeeef   dee   de	de
de
f
ˆ fd„Zd„ ZdOd	efd
„Zd„ Zd„ Zd„ Zdeg ef   fd„Zd„ Zed„ «       Zed„ «       Zd„ Zed„ «       Zej4                  d„ «       Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Ze jB                  d„ «       Z"ed„ «       Z#ed„ «       Z$ed„ «       Z%ede&jN                  jP                  fd „«       Z)edeeef   fd!„«       Z*dPd#„Z+d$„ Z,d%„ Z-ed&„ «       Z.d'e/fd(„Z0d)„ Z1d*„ Z2d+„ Z3dQd,„Z4d-„ Z5e6d.„ «       Z7d/e8e&jr                  jt                  e&jv                  ef   fd0„Z<d1„ Z=	 dRd2ee>   fd3„Z?d4„ Z@d5„ ZAd6„ ZBd7efd8„ZCe jB                  d9„ «       ZDd:„ ZEd;„ ZFedeGeHj’                     fd<„«       ZJedeGe/   fd=„«       ZKd>eHj˜                  deMfd?„ZNd>eHj˜                  deMfd@„ZOdeGe&jv                     fdA„ZPdSdB„ZQdCeGeR   dd"fdD„ZSdSdE„ZTdefdF„ZUdefdG„ZVdSdH„ZWdIe	dd"fdJ„ZXdKeeHj˜                  gd"f   dd"fdL„ZYdMe&j�                  j’                  fdN„ZZˆ xZ[S )TÚOutputGrapha  
    Wrapper class to hold outputs of InstructionTranslator.  Mainly the
    generated fx.Graph.

    OutputGraph is 1:1 with a frame being processed. Each frame is associated
    with some root InstructionTranslator. When user code calls a function,
    we construct a InliningInstructionTranslator that continues to write into
    the root InstructionTranslator's OutputGraph.
    Úcode_optionsÚcompiler_fnÚexportÚlocal_scopeÚglobal_scopec
                 ór  •— t         ‰| �  «        t        | |¬«      g| _        i | _        || _        || _        || _        i | _        g | _	        t        t        «      | _        t        «       | _        |	j                  |	j                   |	j"                  dœ| _        g | _        t        «       | _        t+        | j&                  t,        j.                  t,        j0                  t,        j2                  t,        j4                  | j$                  ¬«      }
dd lmc m} |j;                  d¬«      5  t<        j>                  jA                  |
| j
                  rdnd| j
                  ¬«      }d d d «       tC        «      | _"        | jG                  «        tI        jJ                  tL        «      | _'        i | _(        tS        «       | _*        tW        «       | _,        t[        j\                  «       | _/        ta        |«      | _1        g | _2        d| _3        g | _4        || _5        || _6        || _7        || _8        i | _9        g | _:        g | _;        d| _<        i | _=        t<        j|                  j                  «       | _@        t<        j|                  jƒ                  «       | _B        t‡        «       | _D        d| _E        t        i «      | _F        t        i «      | _G        | j‘                  «        i | _I        g | _J        d | _K        g | _L        i | _M        d | _N        d | _O        | j¡                  «       | _Q        t        «       | _R        y # 1 sw Y   �ŒÌxY w)	N)Úexport_root)Ú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Ì   )Sr¥   rw   Ú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Ù   rÔ   Úbound_symbolsr   r   Úcapture_scalar_outputsÚ capture_dynamic_output_shape_opsr×   rØ   Útorch._functorch.configÚ
_functorchÚpatchr­   Ú_subclassesÚFakeTensorModer   Útracing_contextÚinit_ambient_guardsÚcollectionsÚdefaultdictÚlistÚtracked_fakes_id_to_sourceÚparam_name_to_sourcer0   Úside_effectsrq   Ú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_enabledrH   Ú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)rv   rÊ   rË   r  rÌ   rá   râ   rÍ   rÎ   Úf_coderÜ   Ú_configÚ	fake_moderª   s                €ro   rw   zOutputGraph.__init__ò   só  ø€ ô 	‰ÑÔÜ& t¸Ô@ÐAˆŒð CEˆÔ ØˆŒØ"4ˆÔØ&ˆÔàKMˆÔ*Ø68ˆÔä#Ô$7Ó8ˆŒä+.«5ˆÔð
 —~‘~Ø!×-Ñ-Ø$×3Ñ3ñ
ˆŒð 13ˆÔô 14³ˆÔäð ×,Ñ,Ü!'×!>Ñ!>Ü+1×+RÑ+RÜ8>×8jÑ8jÜ4:×4bÑ4bØ—n‘nô
ˆ	÷$ 	2Ð1à�]‰]ÀEˆ]ÓJñ 	Ü×)Ñ)×8Ñ8Ø#à.2¯kªk¡d¸uØ—{‘{ð	 9ó ˆI÷	ô 0>¸iÓ/HˆÔØ× Ñ Ô"ô ×#Ñ#¤DÓ)ð 	Ô'ð BDˆÔ!Ü'›MˆÔô ';Ó&<ˆÔ#Ü&Ÿ_™_Ó.ˆÔÜ  Ó.ˆÔØ68ˆÔ ð ˆŒð OQˆÔ#ð 2=ˆÔØ(ˆÔØ&ˆÔØˆŒð RTˆÔ"à<>ˆÔØ+-ˆŒØ ˆÔØKMˆÔ ô ',§h¡h×&IÑ&IÓ&KˆÔ#ä+0¯8©8×+SÑ+SÓ+UˆÔ(ä)FÓ)HˆÔ&ð 27ˆÔ.ô >AÀ»WˆÔô ADÀBÃˆÔ!ð 	×ÑÔ ð ACˆÔ-ð ð 	Ôð "&ˆÔð 57ˆÔð ;=ˆÔØ>BˆÔ!Ø15ˆÔð ×2Ñ2Ó4ð 	Ô2ô -0«EˆÕ÷_	ñ 	ús   Ä';L,Ì,L6c                 ó|   — | j                   d   }t        |t        «      s|j                  }| j	                  d|«      S )NÚ__builtins__Ú__builtins_dict__)rÎ   Ú
isinstancerþ   Ú__dict__Úinstall_global)rv   Ú
f_builtinss     ro   r  z-OutputGraph.install_builtins_dict_in_fglobals¦  s=   € ð ×&Ñ& ~Ñ6ˆ
Ü˜*¤dÔ+Ø#×,Ñ,ˆJØ×"Ñ"Ð#6¸
ÓCÐCrn   Úhookc                 ó–   — |› t        | j                  «      › �}|| j                  vsJ ‚|| j                  |<   || j                  «       fS rs   )Úlenr  Úget_backward_state_proxy)rv   r%  ÚprefixÚnames       ro   Úadd_backward_state_hookz#OutputGraph.add_backward_state_hook¹  sT   € Ø�œ#˜d×1Ñ1Ó2Ð3Ð4ˆØ˜4×.Ñ.Ñ.Ð.Ð.Ø$(ˆ×Ñ˜DÑ!Ø�T×2Ñ2Ó4Ð4Ð4rn   c                 óŽ  — | j                   €®| j                  rt        d«       | j                  j	                  dt
        t        «       ¬«      | _         t        «       | j                   j                  j                  d<   t        | j                   j                  t        «       «       | j                  «       | _        | j                   S )Nz&backward_state does not support exportÚdynamo_backward_state)rg   Úgrapharg)r  rÌ   r*   Úroot_tracerÚcreate_graph_inputr   r2   rQ   ÚnodeÚmetarO   Únew_varr  ru   s    ro   r(  z$OutputGraph.get_backward_state_proxy¿  sœ   € Ø×$Ñ$Ð,Ø�{Š{ÜÐFÔGØ(,×(8Ñ(8×(KÑ(KØ'¬Ô?RÓ?Tð )Ló )ˆDÔ%ô ?TÓ>UˆD×%Ñ%×*Ñ*×/Ñ/°
Ñ;Ü˜d×7Ñ7×<Ñ<¼m»oÔNØ&*§l¡l£nˆDÔ#Ø×(Ñ(Ð(rn   c                 óZ  — | j                   j                  t        «       j                  t        j
                  «      «       | j                   j                  t        «       j                  t        j                  «      «       | j                   j                  t        «       j                  t        j                  «      «       | j                   j                  t        «       j                  t        j                  «      «       | j                   j                  t        «       j                  t        j                  «      «       t        j                  j                  j                  «       }|�A| j                   j                  t        «       j                  t        j                  «      «       y y rs   )Úguardsr€   r:   Ú
make_guardr,   Ú	SHAPE_ENVr5   ÚDETERMINISTIC_ALGORITHMSÚ	GRAD_MODEÚDEFAULT_DEVICEÚTORCH_FUNCTION_STATEr­   r  rî   Úpeek_interpreter_stackÚFUNCTORCH_STACK_MATCH)rv   Úcis     ro   ró   zOutputGraph.init_ambient_guardsÌ  s  € ð 	�‰�‰œÓ(×3Ñ3´L×4JÑ4JÓKÔLà�‰�‰ÜÓ×*Ñ*¬<×+PÑ+PÓQô	
ð 	�‰�‰Ô)Ó+×6Ñ6´|×7MÑ7MÓNÔOà�‰�‰Ô)Ó+×6Ñ6´|×7RÑ7RÓSÔTà�‰�‰ÜÓ×*Ñ*¬<×+LÑ+LÓMô	
ô �X‰X× Ñ ×7Ñ7Ó9ˆØˆ>Ø�K‰K�O‰OÜ!Ó#×.Ñ.¬|×/QÑ/QÓRõð rn   c                 óT  ‡‡—  ‰|Ž }| j                  «       }t        | j                  «      Š‰j                  ˆˆfd„«       ‰j	                  t        t        j                  j                  |«      «       ‰j                  t        |«      d«       ‰j                  |«       | j                  j                  ‰j                  «       «       t        |«      } t!        | j                  |«      |«      }t#        j$                  «       j&                  j(                  j+                  |«       |S )z]
        call fn(*args) before the graph runs and turn the result into a fake input.
        c                  óP   •— ‰ j                  ‰j                  ‰j                  «      S rs   )Úload_import_fromri   rh   )Úcgr›   s   €€ro   ú<lambda>z3OutputGraph.synthetic_graph_input.<locals>.<lambda>ë  s    ø€ �B×'Ñ'Ø—‘Ø—‘ó€ rn   F)r3  r%   r  Úadd_push_nullÚforeachÚmapr   ÚConstantVariableÚcreateÚcall_functionr'  Ústorer  ÚextendÚget_instructionsr;   rT   r   ÚgetÚguards_contextÚdynamo_guardsÚremove_guards_with_source)rv   r›   rœ   Úexample_valueÚvarnamerg   rÄ   rB  s    `     @ro   Úsynthetic_graph_inputz!OutputGraph.synthetic_graph_inputã  sæ   ù€ ñ ˜D˜	ˆØ—,‘,“.ˆÜ�t—|‘|Ó$ˆØ
×Ñôô	
ð 	�
‰
”3”y×1Ñ1×8Ñ8¸$Ó?Ô@Ø
×Ñœ˜T› EÔ*Ø
�‰�ÔØ×Ñ×%Ñ% b×&9Ñ&9Ó&;Ô<Ü% gÓ.ˆØ6” §¡¨vÓ6°}ÓEˆÜ×ÑÓ×+Ñ+×9Ñ9×SÑSØô	
ð ˆrn   r›   c                 ó:   — | j                   j                  |«       y rs   )rä   r’   )rv   r›   s     ro   Úadd_cleanup_hookzOutputGraph.add_cleanup_hookû  s   € Ø×Ñ×!Ñ! "Õ%rn   c                 óz   — t        | j                  «      D ]	  } |«        Œ | j                  j                  «        y rs   )Úreversedrä   r†   )rv   r%  s     ro   Úcall_cleanup_hookszOutputGraph.call_cleanup_hooksþ  s3   € Ü˜T×/Ñ/Ó0ò 	ˆDÙ�Fð	à×Ñ× Ñ Õ"rn   c                 ó    — | j                   d   S ©Nr   ©rß   ru   s    ro   r/  zOutputGraph.root_tracer  s   € à�|‰|˜A‰Ðrn   c                 ó    — | j                   d   S ©Néÿÿÿÿr[  ru   s    ro   Úcurrent_tracerzOutputGraph.current_tracer  s   € à�|‰|˜BÑÐrn   c                 ó2   — t        | j                  «      dk(  S )Nr   )r'  rß   ru   s    ro   Úis_root_tracerzOutputGraph.is_root_tracer  s   € ä�4—<‘<Ó  AÑ%Ð%rn   c                 ó.   — | j                   j                  S rs   ©r_  r_   ru   s    ro   r_   zOutputGraph.graph  s   € à×"Ñ"×(Ñ(Ð(rn   c                 ó&   — || j                   _        y rs   rc  )rv   r{   s     ro   r_   zOutputGraph.graph  s   € à$)ˆ×ÑÕ!rn   c                 ó.   — | j                   j                  S rs   )r_  Úinput_name_to_proxyru   s    ro   rf  zOutputGraph.input_name_to_proxy  s   € à×"Ñ"×6Ñ6Ð6rn   c                 ó.   — | j                   j                  S rs   )r_  Úreal_value_cacheru   s    ro   rh  zOutputGraph.real_value_cache  s   € à×"Ñ"×3Ñ3Ð3rn   c                 ó:   —  | j                   j                  |i |¤ŽS rs   )r_  Úcreate_proxy©rv   rœ   r�   s      ro   rj  zOutputGraph.create_proxy&  s    € Ø/ˆt×"Ñ"×/Ñ/°Ð@¸Ñ@Ð@rn   c                 ó:   —  | j                   j                  |i |¤ŽS rs   )r_  Úcreate_noderk  s      ro   rm  zOutputGraph.create_node)  ó    € Ø.ˆt×"Ñ"×.Ñ.°Ð?¸Ñ?Ð?rn   c                 ó:   —  | j                   j                  |i |¤ŽS rs   )r_  Úremove_noderk  s      ro   rp  zOutputGraph.remove_node,  rn  rn   c              #   ó®  K  — t        «       }	 |r|j                  | j                  u sJ ‚|j                  «        |r|nt	        | | j                  |¬«      }| j
                  j                  |«       |–— |j                  d d d «       | j
                  j                  «        y # |j                  d d d «       | j
                  j                  «        w xY w­w)N)ÚparentÚsource_target)	r&   rr  r_  Ú	__enter__rÞ   rß   r’   Ú__exit__Úpop)rv   rs  Úprior_tracerÚnew_scope_ctxÚtracers        ro   Ú	subtracerzOutputGraph.subtracer/  sÀ   è ø€ ä'Ó)ˆð	Ùà#×*Ñ*¨d×.AÑ.AÑAÐAÐAØ×#Ñ#Ô%ñ  ñ ä#Ø ×!4Ñ!4ÀMôð ð �L‰L×Ñ Ô'ØŠLà×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕøð ×"Ñ" 4¨¨tÔ4Ø�L‰L×ÑÕüs   ‚CŽA'B# Á5.CÂ#/CÃCc                 ó   — | S rs   rm   ru   s    ro   ÚoutputzOutputGraph.outputD  s   € àˆrn   c                 ó.   — | j                   j                  S rs   )rò   r  ru   s    ro   r  zOutputGraph.fake_modeH  s   € à×#Ñ#×-Ñ-Ð-rn   c                 óB   — | j                   j                  j                  S rs   )rò   r  rÜ   ru   s    ro   rÜ   zOutputGraph.shape_envL  s   € à×#Ñ#×-Ñ-×7Ñ7Ð7rn   Úreturnc                 óB   — | j                   j                  j                  S rs   )rò   rN  rO  ru   s    ro   r5  zOutputGraph.guardsP  s   € à×#Ñ#×2Ñ2×@Ñ@Ð@rn   c                 óB   — | j                   j                  j                  S rs   )rò   Úmodule_contextr£   ru   s    ro   r£   zOutputGraph.nn_modulesT  s   € à×#Ñ#×2Ñ2×=Ñ=Ð=rn   Nc                 óþ  — |�|n| j                   j                  j                  }| j                  | j                  f|d<   t
        j                  t        j                  «       f|d<   t        j                  t
        j                  d«      t        j                  d«      f|d<   t        j                  t
        j                  d«      t        j                  d«      f|d<   t        j                  t
        j                  d«      t        j                  d«      f|d<   t        j                  t
        j                  d«      t        j                  d«      f|d	<   t
        j                  t        j                  «       f|d
<   y)zc
        Saves to out if it is provided. Else saves to the tracing context's global_state.
        Nr
  Úgrad_enabledÚcudaÚautocast_enabledÚcpuÚautocast_cpu_enabledÚautocast_gpu_dtypeÚautocast_cpu_dtypeÚautocast_cache_enabled)rò   Ú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)rv   Úoutr�  s      ro   r  zOutputGraph.save_global_stateX  sU  € ð
 �?‰C¨×(<Ñ(<×(KÑ(K×(XÑ(Xð 	ð ×)Ñ)Ø×'Ñ'ð2
ˆÐ-Ñ.ô ).×(>Ñ(>Ä×@UÑ@UÓ@WÐ'Xˆ�^Ñ$ô ×Ñœe×8Ñ8¸&ÓAÜ×%Ñ% fÓ-ð,
ˆÐ'Ñ(ô
 ×Ñœe×8Ñ8¸%Ó@Ü×%Ñ% eÓ,ð0
ˆÐ+Ñ,ô
 ×Ñœe×6Ñ6¸Ó?Ü×$Ñ$ VÓ,ð.
ˆÐ)Ñ*ô
 ×Ñœe×6Ñ6¸Ó>Ü×$Ñ$ UÓ+ð.
ˆÐ)Ñ*ô
 ×,Ñ,Ü×+Ñ+Ó-ð2
ˆÐ-Ò.rn   c                 ó:   — | j                   j                  |«       y rs   )r  r’   )rv   Útxs     ro   Úpush_txzOutputGraph.push_tx�  s   € Ø×Ñ×Ñ Õ#rn   c                 ó6   — | j                   j                  «       S rs   )r  rv  ru   s    ro   Úpop_txzOutputGraph.pop_tx„  s   € Ø×Ñ×#Ñ#Ó%Ð%rn   c                 óP   — | j                   s| j                  S | j                   d   S r]  )r  r  ru   s    ro   Ú
current_txzOutputGraph.current_tx‡  s$   € à#'×#3Ò#3ˆt�|‰|ÐM¸×9IÑ9IÈ"Ñ9MÐMrn   Úargc                 ó�   ‡ ‡‡— ‰ j                   ry |j                  €J ‚ˆ fd„Šˆˆfd„Š ‰|j                  |j                  «       y )Nc                 ó*  •— t        | «      r.t        | j                  j                  t        j
                  «      sy | j                  j                  }|‰j                  v ry ‰j                  j                  |«       t        j                  d| |j                  «       «       ‰j                  j                  t        |«      t        j                  d|¬«      }t!        |j                  | «       t#        || dd d¬«      |j                  j$                  d<   y )Nzbind_symint %s %sT)Úbeforerg   F)Úpass_arg_as_tensorÚfake_tensorÚ	is_tensorr.  )r   r!  r1  ÚexprÚsympyÚSymbolrê   r€   rŠ   Údebugr*  r/  r0  r•   r­   ÚSymIntrO   rR   r2  )ÚsÚpropÚs0Úproxyrv   s       €ro   Úbind_symintz4OutputGraph.add_symbol_bindings.<locals>.bind_symint—  sÒ   ø€ Ü ”N¤z°!·&±&·+±+¼u¿|¹|Ô'LØØ—‘—‘ˆBØ�T×'Ñ'Ñ'ØØ×Ñ×"Ñ" 2Ô&Ü�I‰IÐ)¨1¨d¯i©i«kÔ:ð ×$Ñ$×7Ñ7Ü�B“Ü—‘ØØð	 8ó ˆEô ˜eŸj™j¨!Ô,Ü*2ØØØ#(Ø Øô+ˆE�J‰J�O‰O˜JÒ'rn   c           	      ó6  •— t        | j                  «       «      D ]'  \  }} ‰|t        |t        j                  |«      «       Œ) | j
                  t        j                  u rtt        | j                  «       «      D ]'  \  }} ‰|t        |t        j                  |«      «       Œ)  ‰| j                  «       t        |t        j                  «      «       �n | j
                  t        j                  u r/ ‰	| j                  «       |«        ‰	| j                  «       |«       nµ| j
                  t        j                  t        j                   hv r/ ‰	| j#                  «       |«        ‰	| j%                  «       |«       nZ| j
                  t        j&                  t        j(                  hv r. ‰	| j+                  «       |«        ‰	| j-                  «       |«       t/        | «      r:| j1                  «       \  }}|D ]!  }t3        | |«      } ‰	|t5        ||«      «       Œ# y y rs   )Ú	enumerateÚsizer=   r<   ÚSIZEÚlayoutr­   ÚstridedÚstrideÚSTRIDEÚstorage_offsetÚSTORAGE_OFFSETÚ
sparse_cooÚ_indicesÚ_valuesÚ
sparse_csrÚ
sparse_bsrÚcrow_indicesÚcol_indicesÚ
sparse_cscÚ
sparse_bscÚccol_indicesÚrow_indicesr   Ú__tensor_flatten__Úgetattrr1   )
ÚtÚsrcÚir­  ÚattrsÚctxÚattrÚinner_tr±  Úhandle_tensors
           €€ro   rÐ  z6OutputGraph.add_symbol_bindings.<locals>.handle_tensor°  s©  ø€ Ü! !§&¡&£(Ó+ò R‘��1Ù˜AÔ3°C¼×9LÑ9LÈaÓPÕQðRà�x‰xœ5Ÿ=™=Ñ(Ü% a§h¡h£jÓ1ò X‘D�A�qÙ Ô#7¸¼^×=RÑ=RÐTUÓ#VÕWðXáØ×$Ñ$Ó&Ü(¨¬n×.KÑ.KÓLöð —‘œU×-Ñ-Ñ-Ù˜aŸj™j›l¨CÔ0Ù˜aŸi™i›k¨3Õ/Ø—‘œe×.Ñ.´×0@Ñ0@ÐAÑAÙ˜aŸn™nÓ.°Ô4Ù˜aŸm™m›o¨sÕ3Ø—‘œe×.Ñ.´×0@Ñ0@ÐAÑAÙ˜aŸn™nÓ.°Ô4Ù˜aŸm™m›o¨sÔ3Ü,¨QÔ/Ø×1Ñ1Ó3‘
��sØ!ò B�DÜ% a¨Ó.�GÙ! '¬:°c¸4Ó+@ÕAñBð 0rn   )rÌ   r¦  rg   )rv   r¡  r±  rÐ  s   ` @@ro   Úadd_symbol_bindingszOutputGraph.add_symbol_bindings‹  s>   ú€ ð �;Š;Øà�‰Ð*Ð*Ð*ô	õ2	Bñ2 	�c—o‘o s§z¡zÕ2rn   c                 ó,   — t        | j                  «      S rs   )rB   r_   ru   s    ro   rB   zOutputGraph.count_callsË  s   € Ü˜4Ÿ:™:Ó&Ð&rn   c                 óX   — t        t        | j                  j                  «      «      dk(  S rZ  )r'  rö   r_   Únodesru   s    ro   Úis_empty_graphzOutputGraph.is_empty_graphÎ  s!   € Ü”4˜Ÿ
™
×(Ñ(Ó)Ó*¨aÑ/Ð/rn   c                 ó–   — |sJ ‚| j                   }|j                  d«      D ]$  }t        |t        «      r||   }Œt	        ||«      }Œ& |S ©Nú.)r£   Úsplitr!  rþ   rÈ  )rv   ÚkeysÚobjr¨   s       ro   Úget_submodulezOutputGraph.get_submoduleÑ  sN   € ÙˆˆtØBFÇ/Á/ˆØ—‘˜C“ò 	&ˆAÜ˜#œtÔ$Ø˜!‘f‘ä˜c 1“o‘ð		&ð
 ˆ
rn   c                 ó¦   — t        | j                  d   «      }	 |› dt        | j                  «      › �}||vr| j                  dxx   |fz  cc<   |S Œ9)NÚco_varnamesÚ_)rè   rÊ   rå   rý   )rv   r*  ÚexistingÚvars       ro   r3  zOutputGraph.new_varÛ  s`   € Ü�t×(Ñ(¨Ñ7Ó8ˆàØ�F˜!œD ×!3Ñ!3Ó4Ð5Ð6ˆCØ˜(Ñ"Ø×!Ñ! -Ó0°S°FÑ:Ó0Ø�
ð	 rn   c                 óX   — || j                   d   vr| j                   dxx   |fz  cc<   yy)z/Ensure self.code_options.co_names contains nameÚco_namesN)rÊ   )rv   r*  s     ro   Úupdate_co_nameszOutputGraph.update_co_namesä  s2   € à�t×(Ñ(¨Ñ4Ñ4Ø×Ñ˜jÓ)¨d¨WÑ4Ô)ð 5rn   c                  ó  — dj                  t        t        | «      «      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|r|d   j                  «       sd|z   }|S )	Nrß  z^[GL]\['?(.*?)'?\]$z\1z	\[(\d+)\]z_\g<1>z[^a-zA-Z0-9]r   Úsub)ÚjoinrF  r•   Úreræ  Úisalpha)Únamesr*  s     ro   Úmodule_key_namezOutputGraph.module_key_nameé  sm   € ð �x‰xœœC ›Ó(ˆä�v‰vÐ,¨e°TÓ:ˆä�v‰v�l I¨tÓ4ˆä�v‰v�o s¨DÓ1ˆá˜4 ™7Ÿ?™?Ô,Ø˜4‘<ˆDàˆrn   Útargetc                 ó  ‡ ‡‡‡‡‡— t        ‰‰ j                  j                  «      r t        ‰ j                  fi ‰¤Ž‰«      S t        ‰«      Šd‰v sJ ‚‰d   Št        ‰t        «      rJ ‚t        ‰t        j                  «      r2‰ j                  Š‰ j                  «       s‰ j                  Šˆˆ ˆˆˆfd„}nºt        ‰t        j                  j                  «      r^t        ‰t        j                  j                  «      sJ ‚‰r/t        ‰j!                  t"        j$                  «      «       ˆˆfd„}n?ˆˆfd„}n8t        ‰t        j&                  t        j(                  f«      rˆˆ ˆfd„}nˆ ˆfd„}‰ j*                  j-                  «       D ]  \  }}|‰u sŒ ||«      c S  t/        j0                  |Ž Š‰}t3        j4                  «       D ]³  }‰‰ j*                  vrœ‰‰ j*                  ‰<   t        ‰t        j                  j                  «      r_ˆˆ ˆfd„}	t7        ‰d«      r ‰j9                  «       D ]  \  }
} |	|
«       Œ t7        ‰d	«      r ‰j;                  «       D ]  \  }
} |	|
«       Œ  |‰«      c S |› d
|› �ŠŒµ t=        d«      ‚)Nrg   c           	      óö  •— ‰j                   €J ‚‰‰j                   | <   ‰‰j                  j                  j                  v r#‰j                  j                  j                  ‰   S t	        ‰«      dk(  r)t        ‰j                  t        j                  «      «       n3t        ‰«      s(t        ‰j                  t        j                  «      «       t        ‰j                  ‰j                  d| di «      fd‰i‰¤Ž}‰j                  j                  j                  j                  ‰|«      }d|j                  j                  j                   vsJ ‚t#        ‰«      |j                  j                  j                   d<   |S )NÚguardedÚget_attrrm   rQ  Útensor_dict)rø   r  r|  rù   rG   r-   r6  r,   ÚID_MATCHr6   ÚTENSOR_MATCHrU   rj  Útrack_object_existingr°  r1  r2  r>   )Ú
module_keyr   Úoptionsrv   rg   rì  ry  s     €€€€€ro   Ú	wrap_namez6OutputGraph.register_attr_or_module.<locals>.wrap_name  s=  ø€ Ø×0Ñ0Ð<Ð<Ð<Ø8>�×)Ñ)¨*Ñ5ð ˜TŸ\™\×0Ñ0×=Ñ=Ñ=ØŸ<™<×.Ñ.×;Ñ;¸FÑCÐCä*¨6Ó2°iÒ?Ü! &×"3Ñ"3´L×4IÑ4IÓ"JÕKÜ+¨FÔ3Ü! &×"3Ñ"3´L×4MÑ4MÓ"NÔOä"Ø—L‘LØ×'Ñ'¨
°JÀÀBÓGñð #)ðð ñ	�ð —\‘\×(Ñ(×5Ñ5×KÑKÈFÐTVÓW�à$¨B¯H©H¯M©M×,>Ñ,>Ñ>Ð>Ð>Ü4HÈÓ4P�—‘—‘×"Ñ" =Ñ1à�	rn   c                 ó2   •— t        t        ‰«      | ‰fi ‰¤ŽS rs   )rX   Útype©rõ  rö  rì  s    €€ro   r÷  z6OutputGraph.register_attr_or_module.<locals>.wrap_name=  s   ø€ Ü+¬D°«L¸*ÀfÑXÐPWÑXÐXrn   c                 ó0   •— t        j                  ‰fi ‰¤ŽS rs   )r   ÚUnspecializedNNModuleVariablerú  s    €€ro   r÷  z6OutputGraph.register_attr_or_module.<locals>.wrap_nameE  s   ø€ Ü$×BÑBÀ6ÑUÈWÑUÐUrn   c           	      óZ   •— t        j                  ‰‰j                  d| di «      fd‰i‰¤ŽS )Nrð  rm   Úsym_num)rZ   rH  rj  )rõ  rö  rv   rì  s    €€€ro   r÷  z6OutputGraph.register_attr_or_module.<locals>.wrap_nameP  sA   ø€ Ü&×-Ñ-ØØ×%Ñ% j°*¸bÀ"ÓEñð #ðð ñ	ð rn   c                 ó�   •— ‰j                   j                  | «       ‰‰j                  | <    t        ‰t	        | ¬«      «      ‰«      S )N)Úsource_name)r|  rä  rÎ   rT   r3   )rõ  rv   rì  s    €€ro   r÷  z6OutputGraph.register_attr_or_module.<locals>.wrap_name[  sC   ø€ Ø—‘×+Ñ+¨JÔ7Ø06�×!Ñ! *Ñ-ØT” t¬^È
Ô-SÓTØóð rn   c                 óè   •— ‰j                   €J ‚t        ‰| «      }‰› d| › �}|‰j                   |<   t        ‰t        «      r1| ‰j                  t
        j                  |j                  «       «      <   y y r×  )rø   r9   r!  r8   r  rÉ   rë  r*  )Ú	leaf_nameÚ
new_sourceÚnew_namer*  rv   rg   s      €€€ro   Úregister_leaf_namez?OutputGraph.register_attr_or_module.<locals>.register_leaf_nameo  sz   ø€ Ø#×8Ñ8ÐDÐDÐDÜ%6°v¸yÓ%I˜
Ø&* V¨1¨Y¨KÐ#8˜Ø>H˜×1Ñ1°(Ñ;Ü% f¬kÔ:ð !*ð !×AÑAÜ +× ;Ñ ;¸J¿O¹OÓ<MÓ Nòð ;rn   Ú_parametersÚ_buffersrß  Úunreachable)r.   r  rÌ   rT   r   rþ   r!  r9   r­   rÇ   r_  ra  r/  r®   r¯   r-   r6  r,   Ú	NN_MODULEr¬  ÚSymFloatr£   r¦   rÉ   rë  rû   rü   ÚhasattrÚnamed_parametersÚnamed_buffersÚAssertionError)rv   rì  rê  rö  r÷  r¨   r©   ÚbaserË  r  r  rß  r*  rg   ry  s   `` `        @@@ro   Úregister_attr_or_modulez#OutputGraph.register_attr_or_moduleù  s2  ý€ ô   ¨¯©×(;Ñ(;Ô<ð ?”? 4§?¡?Ñ>°gÑ>¸vÓFÐFä�w“-ˆØ˜7Ñ"Ð"Ð"Ø˜Ñ"ˆÜ˜fÔ&7Ô8Ð8Ð8ä�fœeŸl™lÔ+Ø×(Ñ(ˆFØ×&Ñ&Ô(ð ×)Ñ)�÷ñ ô< ˜¤§¡§¡Ô0Ü˜f¤e§h¡h§o¡oÔ6Ð6Ð6áÜ˜f×/Ñ/´×0FÑ0FÓGÔHöYöVô ˜¤§¡¬u¯~©~Ð >Ô?÷õð —O‘O×)Ñ)Ó+ò 	$‰DˆAˆqØ�FŠ{á  “|Ò#ð	$ô
 ×*Ñ*¨EÐ2ˆàˆÜ—‘Ó"ò 	!ˆAØ˜4Ÿ?™?Ñ*Ø(.�—‘ Ñ%Ü˜f¤e§h¡h§o¡oÔ6ö*ô ˜v }Ô5Ø,2×,CÑ,CÓ,Eò :™L˜I qÙ.¨yÕ9ð:ä˜v zÔ2Ø,2×,@Ñ,@Ó,Bò :™L˜I qÙ.¨yÕ9ð:ñ ! “Ò&Ø�V˜1˜Q˜C�=‰Dð3	!ô6 ˜]Ó+Ð+rn   c                 ó<  — | j                   j                  d«      }t        |«      }|sg S g }i }g |j                  ¢|j                  j                  «       ¢| j                  j                  j                  «       ¢}|�r|j                  «       }t        |t        «      r,t        |j                  t        «      sJ ‚||j                  z  }ŒOt        |t        t        f«      r`t        |j                   t"        «      rFt        |j                   j$                  t&        «      r"|j                   j$                  j(                  |v sŒÆ|j                   j$                  j(                  }||vrg ||<   ||   j+                  |«       |r�Œi }	| j,                  D �]  }
t        |
j.                  t0        «      r2t        |
j                   t&        «      r|
j                   j(                  |v sŒQ|
j                   j(                  }|| j2                  d   v sJ ‚||   D ]‡  }|j                   j4                  }||	vrX| j7                  |› d�«      }||	|<   |j9                  t;        d|¬«      t;        d|¬«      t;        d«      t;        d|¬«      g«       t'        |	|   «      |_        Œ‰ �Œ |S )	Nrv   rÞ  Ú_refÚ	LOAD_FAST©ÚargvalÚ
LOAD_CONSTÚBINARY_SUBSCRÚ
STORE_FAST)rÍ   rM  rF   ÚstackÚsymbolic_localsÚvaluesrù   Ústore_attr_mutationsrÚ  rv  r!  rV   r¦   r   rP   r/   rg   r4   r  r8   Ú
local_namer’   Ú	graphargsÚ_examplerö   rÊ   Úindexr3  rK  r!   )rv   r›  Úmaybe_gmÚstolen_list_namesÚalias_instsÚneeds_aliasÚqueueÚxÚstolen_nameÚvisitedr¡  Ú	list_nameÚlist_idxÚ
alias_names                 ro   Úhandle_aliases_for_stolen_listsz+OutputGraph.handle_aliases_for_stolen_lists‡  sc  € à×#Ñ#×'Ñ'¨Ó/ˆÜ/°Ó9ÐÙ ØˆIàˆð ð 	ð
Ø�X‰Xð
à×Ñ×&Ñ&Ó(ð
ð ×Ñ×3Ñ3×8Ñ8Ó:ð
ˆò Ø—	‘	“ˆAÜ˜!Ô-Ô.Ü! !§'¡'¬4Ô0Ð0Ð0Ø˜Ÿ™Ñ �Øô ˜1œÔ0IÐJÔKÜ˜qŸx™x¬Ô7Ü˜qŸx™xŸ}™}¬kÔ:Ø—H‘H—M‘M×,Ñ,Ð0AÑAààŸ(™(Ÿ-™-×2Ñ2ˆKØ +Ñ-Ø+-�˜KÑ(Ø˜Ñ$×+Ñ+¨AÔ.ó% ð( ˆØ—>‘>ó 	:ˆCä˜3Ÿ<™<¬Ô.Ü˜sŸz™z¬;Ô7Ø—J‘J×)Ñ)¨[Ñ8àð Ÿ
™
×-Ñ-ˆIØ × 1Ñ 1°-Ñ @Ñ@Ð@Ð@Ø  Ñ+ò :�ØŸ8™8Ÿ>™>�Ø 7Ñ*Ø!%§¡Ø$˜+ TÐ*ó"�Jð )3�G˜HÑ%à×&Ñ&ä.¨{À9ÔMÜ.¨|ÀHÔMÜ.¨Ó?Ü.¨|ÀJÔOð	ôô ' w¨xÑ'8Ó9�•ò':ð	:ð@ Ðrn   rŽ   c                 ó¬  ‡ ‡— |€J ‚ddl m} |‰ _        |‰ _        d‰ _        t
        j                  d|«       t        d„ |j                  D «       «      st        d«       g Št        j                  dk\  r­|j                  D ]ž  }|j                  d	k(  r'‰j                  t        d	|j                   ¬
«      «       Œ9|j                  dk(  r3‰j                  t        dt#        |j$                  d   «      ¬«      «       Œ{‰j                  t'        j&                  |«      «       Œ  ‰ j(                  r‰ j*                  rJ d«       ‚‰j-                  ‰ j(                  «       ‰j-                  ‰ j/                  |«      «       ˆˆ fd„}t1        |j                  «      D ]  }|j3                  |«       Œ ‰ j5                  «        |j7                  «        t9        |j:                  «      }|D ]  }	|	j=                  «        Œ ‰ j>                  jA                  «       D �
�ci c]  \  }
}|
tC        |«      “Œ }}
}tE        |«      }g }i }|rg ||d   <   |jF                  jA                  «       D ]   \  }}tI        |jJ                  tL        «      r|jJ                  jN                  |k(  rŒ:t        j                  dk\  rtP        jS                  tT        |«      rŒhtP        jS                  tT        |«      rJ ‚||vrg ||<   ||   j                  |«       Œ¢ |jW                  «       D ]7  }|j-                  ||   «       |j-                  |gt#        ||   «      z  «       Œ9 t#        ‰ jX                  «      dkD  rÙ |«        g }‰ j[                  d«      ‰ _.         |t_        ‰ jX                  «      «      }‰ ja                  d|«      }tc        ||«      }|j-                  |je                  |d«      «       |j-                  tg        dd«      «       |j                  |ji                  |jj                  j\                  «      «       ‰ jm                  |«       |�rt        d„ |D «       «      �rt        d„ |D «       «      ròt#        to        |«      «      t#        |«      k(  rÒ‰ jp                  js                  «       r¸t#        |jt                  «      dk7  s ‰ jv                  s” |«        ‰ jm                  ‰ jy                  |t9        t1        |«      «      |«      t        dt#        |«      ¬«      gz   «       ‰ jm                  t1        |«      D �cg c]  }tc        |«      ji                  |«      ‘Œ c}«       y‰ j[                  d«      }tc        |||«      }‰ j{                  |||«       tc        ||||j|                  jA                  «       D ��ci c]  \  }}|dkD  sŒ|d“Œ c}}¬«      }‰ j{                  |||«       d}g }t        ‰ j€                  «      dk7  st#        |j‚                  «      dk7  r†|j-                  ‰ jy                  ||j…                  «       |«      «       t#        |j‚                  «      dk7  r#|j                  |ji                  |«      «       d}n,|j                  t        d«      «       n‰ j‡                  |«        |«        ‰ jm                  ||j‰                  «       z   «       ‰ jm                  t1        |«      D �cg c]  }tc        |«      ji                  |«      ‘Œ c}«       |r+‰ jm                  tc        |«      j‹                  |«      g«       yyc c}}
w c c}w c c}}w c c}w )zw
        Generate a subgraph to continue execution on user code.
        Automatically restore live variables.
        Nr   ©ÚdisableTzCOMPILING GRAPH due to %sc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrs   )Úcan_restore)Ú.0Úblocks     ro   ú	<genexpr>z/OutputGraph.compile_subgraph.<locals>.<genexpr>á  s   è ø€ ÒC¨5�5×$Ñ$×&ÑCùó   ‚z&compile_subgraph with block_depth != 0©é   é   Ú	MAKE_CELLr  ÚCOPY_FREE_VARSÚco_freevars)r¡  z)export does not support pregraph_bytecodec                  óH   •— ‰j                  ‰ «       ‰ j                  «        y rs   )Úadd_output_instructionsr†   )Úprefix_instsrv   s   €€ro   Úappend_prefix_instsz9OutputGraph.compile_subgraph.<locals>.append_prefix_instsú  s   ø€ Ø×(Ñ(¨Ô6Ø×ÑÕ rn   r^  )r7  é   r   Úrandom_valuesÚ__gen_rand_valuesFc              3   óª   K  — | ]K  }t        |t        t        t        f«       xr) t        |t        «      xr |j                  «       t        u  –— ŒM y ­wrs   )r!  r\   rY   r]   rZ   Úpython_typeÚfloat)r2  r©   s     ro   r4  z/OutputGraph.compile_subgraph.<locals>.<genexpr>H  s`   è ø€ ò ð ô Øä3Ü,Ü4ðóð ò Vô $ A¤Ó7ÒT¸A¿M¹M»OÌuÐ<TÐUóVñùs   ‚AAc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrs   )r!  r[   ©r2  r&  s     ro   r4  z/OutputGraph.compile_subgraph.<locals>.<genexpr>T  s   è ø€ ÒH°a”J˜q¤.×1ÑHùr5  ÚUNPACK_SEQUENCEÚ	graph_out)ÚtempvarsÚPOP_TOP)FÚ
decoratorsr/  Úpartial_convertÚcompile_subgraph_reasonr  rŠ   r«  ÚallÚblock_stackr*   ÚsysÚversion_infor>  Úopnamer’   r!   r  r'  rÊ   rº   r  rÌ   rK  r,  rW  ÚexitÚcleanup_graphÚprune_dead_localsrö   r  Úrealizer£   r¦   rM   r¢   r  r!  rg   r8   r  rù  Ú__instancecheck__rW   rÚ  rž   r3  r  r    r#  r%   Úload_function_namer    Úcreate_storer|  r=  rè   rù   Úis_emptyÚdebug_localsr  Úcompile_and_call_fx_graphÚcodegen_suffixÚusesrB   r_   Úgraph_outputsÚgraph_output_varsÚrun_compiler_collectiverL  Úcreate_delete)rv   r›  rM  rŽ   r/  Úinstr?  r3  Ústack_valuesr{   r*  Ú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   `                             @ro   Úcompile_subgraphzOutputGraph.compile_subgraphÐ  sŠ  ù€ ð Ð!Ð!Ð!å'à.ˆÔØ'-ˆÔ$ØˆÔä�	‰	Ð-¨vÔ6äÑC°B·N±NÔCÔCÜÐBÔCà*,ˆÜ×Ñ˜wÒ&àŸ™ò 9�Ø—;‘; +Ò-Ø ×'Ñ'Ü*¨;¸t¿{¹{ÔKõð —[‘[Ð$4Ò4Ø ×'Ñ'Ü*Ø,´#°b·o±oÀmÑ6TÓ2Uôõð !×'Ñ'¬¯	©	°$«Õ8ð9ð ×"Ò" t§{¢{ð	7à6ó	7ð 
ð 	×Ñ˜D×2Ñ2Ô3Ø×Ñ˜D×@Ñ@ÀÓDÔEõ	!ô ˜bŸn™nÓ-ò 	ˆEØ�J‰J�r�Nð	ð 	×ÑÔØ
×ÑÔÜ˜BŸH™H“~ˆð "ò 	ˆEØ�M‰M�Oð	ð 9=¿¹×8MÑ8MÓ8O÷
Ù+4¨4°ˆD”/ #Ó&Ñ&ð
Ðñ 
ô Ð0Ó1ˆàˆØ9;ˆÙØ-/ˆL˜ bÑ)Ñ*ð ×&Ñ&×,Ñ,Ó.ò 	&‰DˆAˆqô ˜!Ÿ(™(¤KÔ0°Q·X±X×5HÑ5HÈAÒ5MØä×Ñ 7Ò*ä×)Ñ)¬,¸Ô:Øô  ×1Ñ1´,ÀÔBÐBÐBØ˜Ñ$Ø"$�˜Q‘Ø˜‰O×"Ñ" 1Õ%ð%	&ð& ×"Ñ"Ó$ò 	<ˆAØ×Ñ ¨Q¡Ô0Ø×Ñ  ¤c¨,°q©/Ó&:Ñ :Õ;ð	<ô
 ˆt× Ñ Ó! AÒ%ÙÔ!Ø(*Ð%Ø%)§\¡\°/Ó%BˆDÔ"ÙÔ5°d×6GÑ6GÓHÓIˆGØ×.Ñ.Ð/BÀGÓLˆLÜ  DÓ)ˆGØ%×,Ñ,Ø×*Ñ*¨<¸Ó>ôð &×,Ñ,Ô-AÀ!ÀUÓ-KÔLØ%×,Ñ,Ø×$Ñ$ R§Y¡Y×%@Ñ%@ÓAôð ×(Ñ(Ð)BÔCò Üñ ð &ôõ ô ÑH¸<ÔHÔHÜ”C˜Ó%Ó&¬#¨lÓ*;Ò;Ø×!Ñ!×*Ñ*Ô,Ü˜Ÿ™Ó(¨AÒ-Ø×'Ò'áÔ!à×(Ñ(Ø×.Ñ.¨r´4¼ÀÓ8NÓ3OÐQUÓVÜ%Ð&7¼SÀÓ=NÔOÐPñQôð
 ×(Ñ(Ü<DÀ\Ó<RÖS°S”˜2“×+Ñ+¨CÕ0ÒSõð  $Ÿ|™|¨KÓ8ÐÜ˜b $Ð(8Ó9ˆEØ×Ñ  L°%Ô8ô ØØØ Ø6;·j±j×6FÑ6FÓ6H×V©
¨¨UÈEÐTUËI˜#˜t™)ÓVô	ˆEð ×Ñ  L°%Ô8à&+Ð#ØˆFÜ˜4Ÿ:™:Ó&¨!Ò+¬s°5×3FÑ3FÓ/GÈ1Ò/LØ—‘Ø×2Ñ2°2°u×7NÑ7NÓ7PÐRVÓWôô �u×*Ñ*Ó+¨qÒ0Ø—M‘M %×"4Ñ"4Ð5EÓ"FÔGØ.2Ñ+à—M‘MÔ"4°YÓ"?Õ@ð ×,Ñ,¨RÔ0ÙÔ!Ø×(Ñ(¨°%×2HÑ2HÓ2JÑ)JÔKð ×(Ñ(Ü<DÀ\Ó<RÖS°S”˜2“×+Ñ+¨CÕ0ÒSôñ 'Ø×,Ñ,Ü˜r“]×0Ñ0Ð1AÓBÐCõð 'ùóu
ùòd Tùó Wùò2 Ts   È] Ô0!]Ö/]Ö=]Û*!]c                 óÒ  ‡‡— | j                   rs| j                  rJ ‚| j                   j                  «       D ]H  \  }} ‰|«       ‰j                  ‰j	                  | j
                  «      «       ‰j                  |«       ŒJ | j                  j                  ‰«       | j                  j                  ‰«       |j                  D ]h  \  Š}‰j                  ˆˆfd„«       |D ]
  } ‰|«       Œ ‰j                  t        t        |«      d«      «       ‰j                  t        d«      g«       Œj ‰j!                  ||j                   ¬«       | j                  j#                  ‰«       y )Nc                  ó   •—  ‰ ‰«      S rs   rm   )rB  Ú	debug_vars   €€ro   rC  z,OutputGraph.codegen_suffix.<locals>.<lambda>›  s   ø€ ¡R¨	£]€ rn   FrK  )Úvalue_from_source)r  rÌ   r¦   Úappend_outputÚcreate_loadr  Ú
store_attrrù   Úcodegen_hooksÚcodegen_save_tempvarsr\  rD  Úextend_outputr    r'  r!   Úrestore_stackÚcodegen_update_mutated)	rv   r›  re  rB  r*  rq  rœ   r¡  rw  s	      `    @ro   r^  zOutputGraph.codegen_suffix�  s2  ù€ Ø×ÒØ—{’{Ð"�?Ø!×0Ñ0×6Ñ6Ó8ò $‘	��cÙ�3”Ø× Ñ  §¡°×0GÑ0GÓ!HÔIØ—‘˜dÕ#ð$ð 	×Ñ×'Ñ'¨Ô+Ø×Ñ×/Ñ/°Ô3ð  "Ÿ™ò 	>‰OˆI�tØ×ÑÔ2Ô3Øò �Ù�3•ðà×ÑÔ1´#°d³)¸UÓCÔDØ×ÑÔ0°Ó;Ð<Õ=ð	>ð 	×Ñ˜¸R¿Y¹Y¸ÐÔGØ×Ñ×0Ñ0°Õ4rn   c                 óÞ  — | j                   sJ ‚t        | j                  j                  «      }|D ]  }|j                  j                  dd«       Œ  t        j                  «       }t        ||dd «      D ]÷  \  }}|j                  t        j                  j                  u sŒ-t        |j                  «      | fk(  sŒH|j                  rŒU|j                  d   }|j                  t        j                  j                  u sŒ‹t        |j                  «      | fk(  sŒ¦|j                  rŒ³|j                  d   }| j                  j                  |«       | j                  j                  |«       Œù y)zÄ
        Remove "creation_timestamp" from node meta

        Remove this pattern from the graph:
            torch._C._set_grad_enabled(False)
            torch._C._set_grad_enabled(True)
        Úcreation_timestampNr   r   )r  rö   r_   rÔ  r2  rv  r­   r�  Úziprì  r  Ú_set_grad_enabledÚtuplerœ   Ú_erasedÚ
erase_node)rv   rÔ  r1  r„  Únode1Únode2s         ro   rU  zOutputGraph.cleanup_graph¤  s  € ð ×ÒÐÐÜ�T—Z‘Z×%Ñ%Ó&ˆØò 	6ˆDØ�I‰I�M‰MÐ.°Õ5ð	6ô ×,Ñ,Ó.ˆÜ  u¨Q¨R yÓ1ò 	1‰LˆE�5à—‘¤§¡× :Ñ :Ò:Ü˜%Ÿ*™*Ó%¨lÐ*:Ð)<Ó<ØŸ›à$Ÿz™z¨!™}�à—L‘L¤E§H¡H×$>Ñ$>Ò>Ü˜eŸj™jÓ)°,Ð.>Ð-@Ó@Ø!ŸM›Mà#(§:¡:¨a¡=�LØ—J‘J×)Ñ)¨%Ô0Ø—J‘J×)Ñ)¨%Õ0ñ	1rn   c                 ó\  — i }| j                   j                  D ]‹  }|j                  j                  dd «      }t	        |t
        j                  j                  «      sŒD|j                  «       }|D �cg c]  }t	        |t        «      r|n
t        |«      ‘Œ! c}||j                  <   Œ� |S c c}w )NrQ  )r_   rÔ  r2  rM  r!  r­   rð   Ú
FakeTensorr´  rk   Úreprr*  )rv   Úretr1  rQ  r´  r­  s         ro   Úget_graph_sizes_structuredz&OutputGraph.get_graph_sizes_structuredÂ  s‘   € ØˆØ—J‘J×$Ñ$ò 	VˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)EÕFØ$×)Ñ)Ó+�ØPTÖ!UÈ1¤z°!´SÔ'9¡!¼tÀA»wÑ"FÒ!U��D—I‘I’ð		Vð
 ˆ
ùò "Vs   Á1$B)r*  c                 óV  — d}|d|› d�z  }| j                   j                  D �]  }|j                  j                  dd «      }t	        |t
        j                  j                  «      sŒE|j                  «       }||j                  › dt        |«      › d�z  }g }d}|D ]g  }t	        |t        «      r|j                  |«       Œ%t	        |t
        j                  «      r(d}|j                  |j                  j                  «       Œg Œâ |sŒæ||j                  › d	t        |«      › d�z  }�Œ |S )
NzTRACED GRAPH TENSOR SIZES
z===== z =====
rQ  z: ú
FTz (concrete): )r_   rÔ  r2  rM  r!  r­   rð   r‹  r´  r*  r…  rk   r’   r¬  r1  Úhint)	rv   r*  Úgraph_sizes_strr1  rQ  r´  Úconcrete_sizeÚ
has_symintÚszs	            ro   Úget_graph_sizeszOutputGraph.get_graph_sizesË  s  € Ø7ˆØ˜V D 6¨Ð2Ñ2ˆØ—J‘J×$Ñ$ó 	ˆDØ ŸI™IŸM™M¨/¸4Ó@ˆMÜ˜-¬×):Ñ):×)EÑ)EÕFØ$×)Ñ)Ó+�Ø d§i¡i [°´5¸³;°-¸rÐ#BÑB�Ø "�Ø"�
Øò �BÜ! "¤cÔ*Ø%×,Ñ,¨RÕ0Ü# B¬¯©Ô5Ø%)˜
Ø%×,Ñ,¨R¯W©W¯\©\Õ:áðò "Ø'Ø#Ÿy™y˜k¨´u¸]Ó7KÐ6LÈBÐOñšð#	ð( Ðrn   c              #   ó’  K  — | j                   j                  j                  «       }i }| j                  |¬«       	 | j                   j                  j	                  |«       d–— | j                   j                  j	                  t        |«      «       y# | j                   j                  j	                  t        |«      «       w xY w­w)zj
        Momentarily restores the global state to what it was prior to tracing the current output
        )r™  N)rò   rŒ  Úcopy_graphstater  Úrestore_graphstater   )rv   Úprior_global_stateÚcurrent_global_states      ro   Úrestore_global_statez OutputGraph.restore_global_stateä  s¦   è ø€ ð
 "×1Ñ1×@Ñ@×PÑPÓRÐØ<>ÐØ×ÑÐ#7ÐÔ8ð	à× Ñ ×/Ñ/×BÑBÐCUÔVÛð × Ñ ×/Ñ/×BÑBÜ,Ð-AÓBõøˆD× Ñ ×/Ñ/×BÑBÜ,Ð-AÓBõüs   ‚9C¼)B Á%/CÂ0CÃCc                 ót  ‡— |j                   xŠ��‰j                  �€‰j                  }t        j	                  d‰j
                  «       t        j                  j                  dd„ ˆfd„¬«       t        j                  j                  |j                  «       t        j                  j                  «       z  «      5  d g|j                  «       z  }t        j                  |‰j
                  |¬«       |‰_        d d d «       |j                   j#                  «        t$        j&                  ‚y y # 1 sw Y   Œ5xY w)Nzcompiler_collective %sÚartifactc                  ó   — dddœS )NÚcompiler_collectiveÚjson)r*  Úencodingrm   rm   rn   ro   rC  z5OutputGraph.run_compiler_collective.<locals>.<lambda>ü  s   € Ø1Ø &ñ%€ rn   c                  óh   •— t        j                  t        j                  ‰ j                  «      «      S rs   )r¡  ÚdumpsÚdataclassesÚasdictÚlocal_state)Údss   €ro   rC  z5OutputGraph.run_compiler_collective.<locals>.<lambda>   s"   ø€ ¤4§:¡:Ü×&Ñ& r§~¡~Ó6ó$€ rn   )Ú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)rv   r›  r®  r­  r¨  s       @ro   rb  z#OutputGraph.run_compiler_collectiveö  sø   ø€ Ø×&Ñ&Ð&ˆBÑ3¸¿¹Ñ8MØŸ™ˆJÜ�H‰HÐ-¨r¯~©~Ô>Ü�N‰N×+Ñ+Øñóð ,ô 	ô —‘×"Ñ" :§?¡?Ó#4´u·z±z×7NÑ7NÓ7PÑ#PÓQñ +Ø"˜V j§o¡oÓ&7Ñ7�
Ü×&Ñ& z°2·>±>ÈÕTØ *�”÷+ð ×Ñ×$Ñ$Ô&Ü×6Ñ6Ð6ð) 9NÐ3÷+ð +ús   Â<>D.Ä.D7c                 óÚ  ‡ ‡— t         j                  j                  j                  «       5  ddlm} ‰ j                  sJ ‚‰ j                  |«       t        d«      }t        |t        «      sJ ‚t        |t        «      sJ ‚‰ j                  dd‰ j                  j                  t        d„ |D «       «      «      fi «      }|j                   j                  j#                  ||«       t$        j&                  s5t)        t+        j,                  |‰ j.                  «      ‰ j0                  |«       ‰ j3                  «        t5        ‰ j.                  «      }t6        d   dxx   |z  cc<   ‰ j8                  j;                  «        t=        |‰ j.                  «      Š‰ j>                  D ]
  } |‰«       Œ ‰ j@                  ‰_         ‰ jB                  jE                  «       ‰jF                  d<   tH        jK                  d	tM        |‰d
d
d
¬«      «       t         jN                  jQ                  dˆ fd„ˆfd„¬«       ‰ jS                  «        ‰ jT                  jV                  }	‰ jX                  s_ddl-m.c m}
 |
j_                  d¬«      5  t         j`                  jc                  |	j0                  ¬«      }ddd«       ‰ jT                  _+        ‰ je                  «       5  ‰ jg                  ‰«      }ddd«       ddl4m5} t        |«      s&t        tm        |dd«      |«      rR|jn                  dk(  rCt        ||«      r|n|jp                  }|js                  |«       t        ||«      s|jt                  } ||«      }t6        d   dxx   dz  cc<   ‰ jw                  ||«       ty        |«      }|j{                  |«       |j}                  «       cddd«       S # 1 sw Y   �Œ#xY w# 1 sw Y   ŒôxY w# 1 sw Y   yxY w)zr
        Generate code from self.graph and return the Instruction()s to
        call that generated code.
        r   r.  Ú__compiled_fnr|  c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrs   )Úas_proxyrG  s     ro   r4  z8OutputGraph.compile_and_call_fx_graph.<locals>.<genexpr>   s   è ø€ Ò5OÀq°a·j±j·lÑ5Oùr5  ÚstatsÚcalls_capturedr  ú%sT)Úinclude_strideÚinclude_deviceÚcoloredÚdynamo_output_graphc                  ó(   •— d‰ j                  «       iS )NÚsizes)rŽ  ru   s   €ro   rC  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>D  s   ø€ ˜ $×"AÑ"AÓ"CÐD€ rn   c                  ó,   •— ‰ j                  ddd¬«      S )NFT)Úprint_outputrÀ  rÁ  )Úprint_readable)r¶   s   €ro   rC  z7OutputGraph.compile_and_call_fx_graph.<locals>.<lambda>E  s   ø€  2×#4Ñ#4Ø!&°tÈDð $5ó $€ rn   )rª  r   NFrÚ   )rÜ   )Ú_LazyGraphModuleÚ__self__Ú_lazy_forwardÚunique_graphs)?r­   Ú_guardsr   Úclear_framerL  r/  r  rb  r#   r!  rö   r¢   rm  r_  Ú
create_argr…  r|  Ú_maybe_preserve_original_metar   Údo_not_emit_runtime_assertsr   r   rÆ   r_   rÜ   Úremove_unused_graphargsrB   rC   rh  r†   r   r  rN  r  rº   r2  Úgraph_code_logr«  rK   r°  r±  rX  rò   r  rÌ   rí   rî   rï   rð   rñ   rœ  Úcall_user_compilerÚtorch.fx._lazy_graph_modulerÉ  rÈ  rh   rÊ  Úforce_recompiler½   Úinstall_global_unsafer%   Úmake_call_generated_coderL  )rv   r›  Úrvrh  r/  r*  Úoutput_nodeÚncallsÚregister_finalizerÚold_fake_moder  Úbackend_fake_modeÚcompiled_fnrÉ  Úlazy_gmrB  r¶   s   `               @ro   r]  z%OutputGraph.compile_and_call_fx_graph  s  ù€ ô
 �]‰]×)Ñ)×5Ñ5Ó7ñ h	)Ý+à×#Ò#Ð#Ð#à×(Ñ(¨Ô,ä˜_Ó-ˆDä˜b¤$Ô'Ð'Ð'Ü˜d¤NÔ3Ð3Ð3Ø×*Ñ*ØØØ×$Ñ$×/Ñ/´Ñ5OÈBÔ5OÓ0OÓPÐRØó	ˆKð �I‰I×$Ñ$×BÑBÀ2À{ÔSÜ×5Ò5Ü/Ü—N‘N 4¨¯©Ó4Ø—N‘NØôð ×(Ñ(Ô*Ü  §¡Ó,ˆFÜ�WÑÐ.Ó/°6Ñ9Ó/ð ×!Ñ!×'Ñ'Ô)ä# D¨$¯*©*Ó5ˆBØ&*×&AÑ&Aò 'Ð"Ù" 2Õ&ð'ð *.×)EÑ)EˆBÔ&ð ×5Ñ5×:Ñ:Ó<ð �G‰GØ2ñô × Ñ ØÜ&Ø˜"¨TÀ$ÐPTôôô �N‰N×+Ñ+Ø%ÛDóð ,ô ð ×#Ñ#Ô%Ø ×0Ñ0×:Ñ:ˆMØ—;’;ß9Ð9à—]‘]ÈE�]ÓRñ ä(-×(9Ñ(9×(HÑ(HØ"/×"9Ñ"9ð )Ió )Ð%÷ð 2C�×$Ñ$Ô.à×*Ñ*Ó,ñ :Ø"×5Ñ5°bÓ9�÷:õ Eä˜+Ð'7Ô8Üœ7 ;°
¸DÓAÐCSÔTØ×(Ñ(¨OÒ;ô " +Ð/?Ô@ñ  à$×-Ñ-ð ð !×0Ñ0°Ô9ä! +Ð/?Ô@à")§/¡/�Ká! +Ó.ˆKä�WÑ˜oÓ.°!Ñ3Ó.à×&Ñ& t¨[Ô9ä˜2“ˆBØ×'Ñ'¨Ô-Ø×&Ñ&Ó(÷Qh	)ñ h	)÷xñ ú÷:ð :ú÷Mh	)ð h	)ús=   «IO!É<+OÊ')O!ËOË"CO!ÏO	ÏO!ÏO	ÏO!Ï!O*c                 ó:   — | j                   j                  d¬«      S )NÚplaceholder)Úop)r_   Ú
find_nodesru   s    ro   ÚplaceholderszOutputGraph.placeholders|  s   € à�z‰z×$Ñ$¨Ð$Ó6Ð6rn   c                 óZ   — | j                   D �cg c]  }|j                  d   ‘Œ c}S c c}w ©Nr.  )rå  r2  ©rv   r1  s     ro   r  zOutputGraph.graphargs€  s%   € à26×2CÑ2CÖD¨$�—	‘	˜*Ó%ÒDÐDùÒDs   �(r¶   c                 ój   — t        dd¬«      5  | j                  |«      cd d d «       S # 1 sw Y   y xY w)NúOutputGraph.call_user_compilerÚbackend_compile)Ú
phase_name)rD   Ú_call_user_compiler)rv   r¶   s     ro   rÔ  zOutputGraph.call_user_compiler„  s5   € ÜØ,Ð9Jô
ñ 	0ð ×+Ñ+¨BÓ/÷	0÷ 	0ò 	0ús   Ž)©2c           
      ó  — | j                   €J ‚d}g }|j                  j                  D ]6  }|j                  dv r|dz  }|j                  dk(  sŒ&|j	                  |«       Œ8 t        |«       |D ]"  }|j                  d   }|j                  |_        Œ$ | j                  |_
        | j                  |_        	 t        | j                   d«      r| j                   j                  nd} t        «       t         j"                  d|› �«       | j                   }t$        j&                  rt)        |«      } ||| j+                  «       «      }	 t        «       t         j"                  d	|› �«       t-        |	«      sJ d
«       ‚	 tE        ddi | jF                  ¥|tI        |j                  j                  «      tI        |«      dœ¥«       	S # t.        $ r…}
| j0                  r0t3        | j                   |
«      j5                  |
j6                  «      d ‚d| j8                  j;                  «       › d�}t=        |
| j8                  j>                  |«       Y d }
~
ŒÐd }
~
wt@        $ r}
|
‚d }
~
wtB        $ r}
t3        | j                   |
«      |
‚d }
~
ww xY w)Nr   ©rI  Úcall_methodÚcall_moduler   râ  r.  rh   Ú 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Ë   r_   rÔ  rã  r’   rJ   r2  rg   Ú_dynamo_sourcerø   Ú_param_name_to_sourcer  Ú_source_to_user_stacksr  rh   r‹   r   ÚINFOr   r¾   r³   r·   Úcallabler(   r  r'   Úwith_tracebackÚ__traceback__r  Úformat_frame_summaryr+   r  r)   rÀ   r   rÙ   r'  )rv   r¶   Útotrå  r1  Úplr¡  r*  rË   rß  ÚeÚmsgs               ro   rí  zOutputGraph._call_user_compilerŠ  sd  € Ø×ÑÐ+Ð+Ð+ØˆØˆØ—H‘H—N‘Nò 	*ˆDØ�w‰wÐIÑIØ�q‘�Ø�w‰w˜-Ó'Ø×#Ñ# DÕ)ð		*ô
 	˜3ÔØò 	+ˆBØ—'‘'˜*Ñ%ˆCà #§
¡
ˆBÕð	+ð
 $(×#<Ñ#<ˆÔ Ø$(×$>Ñ$>ˆÔ!ð	Dô ˜4×+Ñ+¨ZÔ8ð × Ñ ×)Ò)àð ð
 ŒL‹Nœ7Ÿ<™<Ð+EÀdÀVÐ)LÔMØ×*Ñ*ˆKÜ×(Ò(Ü,¨[Ó9�Ù% b¨$×*=Ñ*=Ó*?Ó@ˆKØŒL‹Nœ7Ÿ<™<Ð+BÀ4À&Ð)IÔJÜ˜KÔ(ÐOÐ*OÓOÑ(ô& 	ØØ,ðØ—.‘.ðàÜ! "§(¡(§.¡.Ó1Ü" <Ó0ò	ô		
ð Ðøô; 1ò 
	DØ×5Ò5Ü+¨D×,<Ñ,<¸aÓ@×OÑOØ—O‘Oóàðð MØ—<‘<×4Ñ4Ó6Ð7Ø'ð(ð ô
 ' q¨$¯,©,×*=Ñ*=¸s×CÑCûÜò 	ð ˆGûÜò 	DÜ'¨×(8Ñ(8¸!Ó<À!ÐCûð	Dús2   Â7CG Ç	J Ç
A;I
É
J ÉIÉJ É$I;É;J c                 ób   — g }| j                   D ]  }|j                  |j                  «       Œ |S rs   )r  r’   Úexample)rv   rÄ   r¡  s      ro   r·   zOutputGraph.example_inputsÈ  s/   € ØˆØ—>‘>ò 	'ˆCØ�M‰M˜#Ÿ+™+Õ&ð	'àˆrn   c                 óú  ‡ ‡‡‡— ‰ j                   sJ ‚dt        j                  j                  fd„}dt        j                  j                  fd„Šˆfd„}ddlm} t        t        ‰ j                  j                  «      «      D ]À  }t        t        |j                  «      «      dk(  sŒ%|j                  dk(  s||j                  d	k(  r|j                  t        j                  u sQ|j                  d	k(  r1|j                  t         j"                  u r ||j$                  d   «      s ||«      s	 ||«      sŒ°‰ j'                  |«       ŒÂ d
„ }ˆ fd„}t)        «       Šdt*        t         j,                  t         j.                  f   fd„Šg }‰ j0                  D �]¸  } ||«      d u}|r|j                  rŒ|j3                  |«       Œ/|j                  s&t5        |j6                  d   t8        «      s	 ||«       Œa|j6                  d   }	t5        |	t8        «      rŒ�t5        |j6                  d   j:                  t         j<                  «      rÚ|j6                  d   j:                  }
|j6                  d   j>                  }t         j@                  jB                  jE                  |
«      s}tG        |
jI                  «       «      }|jK                  «       D ]Q  }tM        |jN                  |«      }tQ        jR                  t         j,                  t         j.                  fˆˆfd„|«       ŒS �ŒŒ|	jT                  �|	jT                  n|	j:                  } ‰‰|«       �Œ» |D ]+  } ||«      }|€Œ|‰vr	 ||«       Œ‰jW                  |«       Œ- y )NÚb_nodec                 óú   — | du ryt        | t        j                  «      sy| j                  j	                  d«      }|€y|du ryt        |t
        j                  «      r|j                  j                  «       x}�|S y)NTFrQ  )	r!  r   ÚNoder2  rM  r­   ÚSymBoolr1  Úmaybe_as_bool)r  ÚbÚrs      ro   Úis_static_truez;OutputGraph.remove_unused_graphargs.<locals>.is_static_trueÛ  sq   € Ø˜‰~ØÜ˜f¤b§g¡gÔ.ØØ—‘—‘ Ó0ˆAØˆyØØ�D‰yØä˜1œeŸm™mÔ,ØŸ&™&×.Ñ.Ó0Ð0�QÐ=à�ð rn   Úac                 óÆ   — ddl m} t        | t        t        t
        f«      ryt        | t        j                  «      r%t        | j                  j                  d«      |«      S y)Nr   ©ÚSymTypesTrQ  F)
Útorch.fx.experimental.sym_noder  r!  rk   rE  r˜   r   r  r2  rM  )r  r  s     ro   Úis_symnode_argz;OutputGraph.remove_unused_graphargs.<locals>.is_symnode_argî  sD   € Ý?ä˜!œc¤5¬$Ð/Ô0ØÜ˜!œRŸW™WÔ%Ü! !§&¡&§*¡*¨_Ó"=¸xÓHÐHØrn   c                 ó  •— ddl m} | j                  dk7  ryt        | j                  j                  d«      |«      syt        ˆfd„| j                  D «       «      syt        ˆfd„| j                  j                  «       D «       «      syy)	Nr   r  rI  FrQ  c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrs   rm   ©r2  r  r  s     €ro   r4  zWOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node.<locals>.<genexpr>  s   øè ø€ Ò<¨Q‘~ a×(Ñ<ùó   ƒc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrs   rm   r  s     €ro   r4  zWOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_node.<locals>.<genexpr>  s   øè ø€ ÒG¨Q‘~ a×(ÑGùr  T)
r  r  rã  r!  r2  rM  rO  rœ   r�   r  )r1  r  r  s     €ro   Úis_symnode_compute_nodezDOutputGraph.remove_unused_graphargs.<locals>.is_symnode_compute_nodeú  sg   ø€ Ý?à�w‰w˜/Ò)Øä˜dŸi™iŸm™m¨OÓ<¸hÔGØô Ó<°$·)±)Ô<Ô<ØÜÓG°$·+±+×2DÑ2DÓ2FÔGÔGØØrn   r   )Úis_accessor_noderð  rI  c                 óö   — | j                   d   }|j                  }t        |t        j                  «      rDt        |j
                  j                  t        j                  «      r|j
                  j                  S y rç  )	r2  r  r!  r­   r¬  r1  r¨  r©  rª  )r1  r¡  r  s      ro   Úplaceholder_binds_symbolzEOutputGraph.remove_unused_graphargs.<locals>.placeholder_binds_symbol  sV   € Ø—)‘)˜JÑ'ˆCØ—k‘kˆGÜ˜'¤5§<¡<Ô0´ZØ—‘×!Ñ!¤5§<¡<ô6ð —|‘|×(Ñ(Ð(Ørn   c                 óð   •— t         j                  d| j                  d   j                  j	                  «       «       | j                  d= ‰j                  | «       ‰j                  j                  | d «       y )NzREMOVE UNUSED GRAPHARG %sr.  )rŠ   r«  r2  rg   r*  rp  rh  rv  )r1  rv   s    €ro   Úremove_unusedz:OutputGraph.remove_unused_graphargs.<locals>.remove_unused%  s\   ø€ Ü�I‰IÐ1°4·9±9¸ZÑ3H×3OÑ3O×3TÑ3TÓ3VÔWð —	‘	˜*Ð%Ø×Ñ˜TÔ"Ø×!Ñ!×%Ñ% d¨DÕ1rn   Úfakec                 ó    — | t        |«      z  } y rs   )r   )Úused_symbolsr  s     ro   Úupdate_used_symbolsz@OutputGraph.remove_unused_graphargs.<locals>.update_used_symbols/  s   € ØœL¨Ó.Ñ.‰Lrn   r.  c                 ó   •—  ‰‰| «      S rs   rm   )rÉ  r"  r!  s    €€ro   rC  z5OutputGraph.remove_unused_graphargs.<locals>.<lambda>P  s   ø€ Ñ.AÀ,ÐPQÓ.R€ rn   ),r  r   r1  ÚArgumentÚ%torch.fx.experimental.symbolic_shapesr  rW  rö   r_   rÔ  r'  Úusersrã  rì  ÚoperatorÚgetitemr­   Ú_checkrœ   rp  rè   r   r¬  rÇ   rå  r’   r!  r2  rQ   r  ÚScriptObjectÚexample_strong_refÚ_libraryÚfake_class_registryÚtracing_with_realrþ   Ú__obj_flatten__rÚ  rÈ  Úwrapped_objÚpytreeÚtree_map_onlyr¦  Úremove)rv   r  r  r  r1  r  r  Úrecheck_placeholdersÚbinds_symbolr¡  Úreal_script_objÚfake_script_objÚ	flat_dictrÎ  Úfake_attr_valr  Úsymbolr  r"  r!  s   `                @@@ro   rÒ  z#OutputGraph.remove_unused_graphargsÎ  sè  û€ ð ×ÒÐÐð	¤2§7¡7×#3Ñ#3ó 	ð&	œbŸg™g×.Ñ.ó 	ô	õ" 	KäœT $§*¡*×"2Ñ"2Ó3Ó4ò 	+ˆDÜ”4˜Ÿ
™
Ó#Ó$¨Ó)à—G‘G˜zÒ)ØŸ™ ?Ò2°t·{±{Äh×FVÑFVÑ7VàŸ™ ?Ò2Ø ŸK™K¬5¯<©<Ñ7Ù*¨4¯9©9°Q©<Ô8á.¨tÔ4Ù'¨Õ-à×$Ñ$ TÕ*ð	+ò	ô	2ô +.«%ˆð	/´E¼%¿,¹,ÌÏÉÐ:TÑ4Uó 	/ð  "ÐØ×%Ñ%ó $	<ˆDÙ3°DÓ9ÀÐEˆLáØ—z“zØ(×/Ñ/°Õ5à—z’z¬*Ø—I‘I˜jÑ)Ô+@ô+ñ " $Õ'ð Ÿ)™) JÑ/�CÜ! #Ô'<Ô=Ø Ü! $§)¡)¨JÑ"7×"?Ñ"?Ä×ASÑASÔTØ*.¯)©)°JÑ*?×*GÑ*G˜Ø*.¯)©)°JÑ*?×*RÑ*R˜Ü$Ÿ~™~×AÑA×SÑSØ+ô ô )-¨_×-LÑ-LÓ-NÓ(O˜IØ(1¯©Ó(8ò " Ü07Ø$3×$?Ñ$?Àó1" ô !'× 4Ñ 4Ü%*§\¡\´5·<±<Ð$@Ü$RØ$1õ!"ð	"ñ !à+.¯?©?Ð+F˜ŸšÈCÏKÉKð ñ (¨°dÖ;ðI$	<ðN )ò 	0ˆDÙ-¨dÓ3ˆFØÑ!Ø Ñ-Ù! $Õ'ð !×'Ñ'¨Õ/ñ	0rn   r)  c                 óH   — | j                   j                  |«       d| _        y)zt
        We call this on the creation of a new compiled subgraph that is inserted
        before user code.
        TN)rÿ   rK  r  )rv   r)  s     ro   r=  z#OutputGraph.add_output_instructionsc  s    € ð
 	× Ñ ×'Ñ'¨Ô/ØˆÕrn   c                 óÎ   — || j                   vsJ ‚| j                   j                  |«       | j                  j                  t	        j
                  | j                  ||«      «       y)a`  
        WARNING: prefer the safer `install_global_by_id/install_global`.
        torch.compile instances should be independent of each other;
        one footgun is to have one instance depend on the existence of
        a global installed by another instance. This can happen if we mangle
        a global the same way across both instances.
        N)ré   r€   r  r’   r@   rH  rÎ   )rv   r*  r{   s      ro   r×  z!OutputGraph.install_global_unsafek  sS   € ð ˜4×1Ñ1Ñ1Ð1Ð1Ø×Ñ×"Ñ" 4Ô(Ø�‰×Ñœ[×/Ñ/°×0AÑ0AÀ4ÈÓOÕPrn   c                 ó„   — |› dt        |«      › d| j                  › �}|| j                  v r|S | j                  ||«       |S )z¹
        Installs a global if it hasn't been installed already.
        This is determined by (prefix, id(value)) pair.

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

        Returns the name of the newly installed global.
        )r#   r×  r?  s       ro   r#  zOutputGraph.install_global†  s#   € ô ˜Ó ˆØ×"Ñ" 4¨Ô/Øˆrn   c                 ó.  — d | _         | j                  j                  «        d | _        | j                  j
                  D ]  }d|j                  v sŒ|j                  d= Œ  | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        y rç  )r  r£   r†   rø   r_   rÔ  r2  rh  rf  rù   rú   r  r  rò   rè  s     ro   ÚcleanupzOutputGraph.cleanup‘  sÔ   € ð ˆŒØ�‰×ÑÔØ$(ˆÔ!à—J‘J×$Ñ$ò 	*ˆDØ˜TŸY™YÒ&Ø—I‘I˜jÑ)ð	*ð 	×Ñ×#Ñ#Ô%Ø× Ñ ×&Ñ&Ô(Ø×Ñ×ÑÔ!Ø×#Ñ#×)Ñ)Ô+Ø×#Ñ#×)Ñ)Ô+Ø×-Ñ-×3Ñ3Ô5Ø×Ñ×"Ñ"Õ$rn   Úenabledc                 ó   — || _         y rs   )r
  )rv   rD  s     ro   rŽ  z$OutputGraph.set_torch_function_state£  s
   € Ø&-ˆÕ#rn   rÜ  c                 ó:   — | j                   j                  |«       y rs   )r  r’   )rv   rÜ  s     ro   Úadd_graph_finalizerzOutputGraph.add_graph_finalizer¦  s   € ð 	×#Ñ#×*Ñ*Ð+=Õ>rn   r1  c                 ó¦   — |j                   dk(  r|j                  d   j                  S |j                   dk(  sJ ‚| j                  |j                     S )z#Extract the non-fake example tensorrâ  r.  rð  )rã  r2  r  r£   rì  rè  s     ro   Úexample_value_from_input_nodez)OutputGraph.example_value_from_input_node«  sH   € à�7‰7�mÒ#Ø—9‘9˜ZÑ(×0Ñ0Ð0Ø�w‰w˜*Ò$Ð$Ð$Ø�‰˜tŸ{™{Ñ+Ð+rn   )r%  rs   )Útmp)FN)r  N)\rh   ri   rj   r”   r   r•   r   r   r   r˜   ÚScoperw   r  rP   r+  r(  ró   rS  r   rU  rX  Úpropertyr/  r_  ra  r_   Úsetterrf  rh  rj  rm  rp  Ú
contextlibÚcontextmanagerrz  r|  r  rÜ   r­   rÍ  Ú	GuardsSetr5  r£   r  rœ  rž  r   rR   rÑ  rB   rÕ  rÜ  r3  rä  Ústaticmethodrë  r   r®   r¯   rÇ   r  r,  r�   rt  r^  rU  rŽ  r–  rœ  rb  r]  r   r   r  rå  r  rÆ   r   rÔ  rí  r·   rÒ  r"   r=  r×  r@  r#  rC  rŽ  rG  rI  r°   r±   s   @ro   rÉ   rÉ   ç   sÅ  ø„ ñðr2à˜3 ˜8‘nðr2ð ˜jÑ)ðr2ð
 ðr2ð ðr2ð õr2òhDñ&5¨Oó 5ò
)òò.ð0& 8¨B°¨GÑ#4ó &ò#ð
 ñó ðð ñ ó ð ò&ð ñ)ó ð)ð ‡\�\ñ*ó ð*ð ñ7ó ð7ð ñ4ó ð4òAò@ò@ð ×Ññó ðð( ñó ðð ñ.ó ð.ð ñ8ó ð8ð ðA˜Ÿ™×/Ñ/ò Aó ðAð ð>˜D  c ™Nò >ó ð>ó'
òR$ò&ð ñNó ðNð>3 xó >3ò@'ò0òóò5ð
 ñó ððL,à�e—h‘h—o‘o u§|¡|°SÐ8Ñ9óL,ò\GðT QUñ}Ø19Ð:LÑ1Mó}ò~5ò*1ò<ð Có ð2 ×Ññó ðò"7ò.m)ð^ ð7˜d 2§7¡7™mò 7ó ð7ð ðE˜4 ™>ò Eó ðEð0 R§^¡^ð 0¸
ó 0ð< b§n¡nð <¸ó <ð|  U§\¡\Ñ 2ó óS0ðj ¨d°;Ñ.?ð  ÀDó  ó
Qð°Só ð	¨só 	ó%ð$.°ð .¸ó .ð?Ø"*¨B¯N©NÐ+;¸TÐ+AÑ"Bð?à	ó?ð
,°%·(±(·-±-÷ ,rn   rÉ   a  With the current config, we will graph break (and fall back to eager-mode PyTorch) on all ops that have do not have the 'pt2_compliant_tag'. Please see the following doc for how to mark this op as PT2 compliant https://pytorch.org/tutorials/advanced/custom_ops_landing_page.htmlc                 óÔ  ‡ — |dk7  ry ˆ fd„}ˆ fd„}t        |t        j                  j                  «      r=t        j                  j
                  |j                  v r	 ||«       y  ||d|› d�«       y t        |t        j                  j                  «      �r't        |j                  «       «      }t        |«      dk(  rLt        ||d   «      }t        j                  j
                  |j                  v r	 ||«       y  ||d|› d	�«       y t        j                  j                  j                  ‰ j                  ||fd
«      \  }}	 t        j                   j"                  |j$                  g|¢­i |¤Ž}	t        |	«      }t        j                  j
                  |j                  v r	 ||«       y  ||d|› d|	› d�«       y y # t&        $ r}
t)        t+        |
«      «       Y d }
~
Œod }
~
ww xY w)NrI  c                 óZ   •— | j                   dv ry ‰j                  j                  | «       y )N>   ÚatenÚprimÚprims)Ú	namespacer  r€   )rì  Úoutput_graphs    €ro   Úencountered_compliant_opz8check_pt2_compliant_op.<locals>.encountered_compliant_opÀ  s)   ø€ Ø×ÑÐ8Ñ8ØØ×)Ñ)×-Ñ-¨fÕ5rn   c                 óˆ   •— ‰j                   j                  | «       t        j                  rt	        |dz   t
        z   «       y y )Nú )r  r€   r   Úonly_allow_pt2_compliant_opsr*   Úerr_epilogue)rì  r  rX  s     €ro   Úencountered_non_compliant_opz<check_pt2_compliant_op.<locals>.encountered_non_compliant_opÅ  s6   ø€ Ø×&Ñ&×*Ñ*¨6Ô2Ü×.Ò.Ü˜# ™)¤lÑ2Õ3ð /rn   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…  Ú	overloadsr'  rÈ  Ú_dynamoÚutilsÚget_fake_values_from_nodesr   r  Ú_jit_resolve_packetÚ_qualified_op_namer¿   r*   r•   )rX  Úkindrì  rœ   r�   rY  r^  re  rã  Úoverloadr  s   `          ro   Úcheck_pt2_compliant_oprm  ¼  sÔ  ø€ ØˆÒØô6ô
4ô
 �&œ%Ÿ*™*×/Ñ/Ô0Ü�9‰9×&Ñ&¨&¯+©+Ñ5Ù$ VÔ,ØÙ$ØØ3°F°8ð <)ð *ô	
ð
 	ä�&œ%Ÿ*™*×5Ñ5Õ6Ü˜&×*Ñ*Ó,Ó-ˆ	ô ˆy‹>˜QÒÜ˜ ¨1¡Ó.ˆBÜ�y‰y×*Ñ*¨b¯g©gÑ5Ù(¨Ô,ØÙ(Øð.Ø.4¨Xð 6.ð/ôð ä—}‘}×*Ñ*×EÑEØ×#Ñ# d¨F ^°Uó
‰ˆˆfð	"Ü—x‘x×3Ñ3Ø×)Ñ)ðØ,0òØ4:ñˆHô �V˜XÓ&ˆÜ�9‰9×&Ñ&¨"¯'©'Ñ1Ù$ RÕ(á(ØØ=¸f¸Xð F3Ø3;°*ð =%ð&õð? 7øô0 ò 	"Üœ#˜a›&×!Ñ!ûð	"ús   Å-G  Ç 	G'Ç	G"Ç"G'c                   óf   ‡ — e Zd ZdZ	 d
ˆ fd„	Zd„ Z	 	 	 dˆ fd„	Z	 dˆ fd„	Zd„ Zd
d„Z	d„ Z
d	„ Zˆ xZS )rÞ   a  
    Holds an FX graph that is being traced. OutputGraph owns a SubgraphTracer
    and the separation of responsibilities is that SubgraphTracer is
    responsible for building the graph while OutputGraph is responsible for
    compiling and executing the graph.
    c                 óÐ  •— t         ‰| �  «        t        j                  |«      | _        t
        j                  j                  «       | _        |r|�J ‚|| _	        i | _
        i | _        || _        i | _        d | _        d | _        d | _        d | _        d | _        | j                  €g | _        y | j                  j&                  | j                  j)                  |«      |fgz   | _        y rs   )r¥   rw   Úweakrefr°  rX  r­   r   ÚGraphr_   rÐ   rf  rh  rr  Úlifted_freevarsÚ	prev_instÚ	_cur_codeÚ_orig_gm_metaÚ_orig_gm_lineno_mapÚ_orig_gm_firstlinenoÚsource_fn_stackÚ_target_to_str)rv   rX  rr  rÐ   rs  rª   s        €ro   rw   zSubgraphTracer.__init__  sÝ   ø€ ô 	‰ÑÔÜ#ŸM™M¨,Ó7ˆÔÜ—X‘X—^‘^Ó%ˆŒ
ñ
 Ø�>Ð!�>Ø&ˆÔð 9;ˆÔ à=?ˆÔð ˆŒð  "ˆÔØˆŒàˆŒØ!ˆÔØ#'ˆÔ Ø$(ˆÔ!ð
 �;‰;ÐØ#%ˆDÕ à#'§;¡;×#>Ñ#>Ø—‘×*Ñ*¨=Ó9¸=ÐIðBñ $ˆDÕ rn   c                 ó–  — | j                   r½| j                  r°| j                  r£|j                  j                  }d }|�)| j                  j                  || j                  z
  d «      }|�]| j                   |   }t        j                  j                  D ]  }||v sŒ||   |j                  |<   Œ d|v r|d   |j                  d<   y y y y y y )NÚstack_trace)
ru  rv  rw  Úcurrent_instructionÚstarts_linerM  r   r°  Ú_COPY_META_FIELDSr2  )rv   r›  r1  ÚlinenoÚnode_idxr2  Úfields          ro   rÐ  z,SubgraphTracer._maybe_preserve_original_meta<  sß   € à×ÒØ×(Ò(Ø×)Ò)à×+Ñ+×7Ñ7ˆFØˆHØÐ!Ø×3Ñ3×7Ñ7Ø˜T×6Ñ6Ñ6¸ó�ð Ð#Ø×)Ñ)¨(Ñ3�ÜŸX™X×7Ñ7ò 7�EØ ’}Ø+/°©;˜Ÿ	™	 %Ò(ð7ð ! DÑ(Ø/3°MÑ/B�D—I‘I˜mÒ,ð )ð $ð *ð )ð rn   c           	      óT
  •‡‡‡‡— | j                   �^t        j                  ||f«      \  }}	g }
|D ]$  }| j                  |«      }|
j	                  |«       Œ& t        j
                  |
|	«      \  }}t        ‰| �  |||||||«      Š| j                  j                  }t        j                  dk\  r |dv rœ|j                  Š‰| j                  ur‚‰j                  �v‰j                  j                  �`|j                   Š|j#                  ‰j                  j                  ¬«      Šˆˆˆˆfd„}t$        j'                  dt)        |«      «       ‰| _        d}|j                   | j*                  urÚ t-        j.                  |j                   «      j1                  dd„ «      «       }t3        |t4        j6                  j8                  «      rld	}|j:                  j<                  D �cg c]  }|j>                  ‘Œ c}| _         |jB                  | _"        |jF                  jH                  jJ                  | _&        nd | _         d | _"        d | _&        |jN                  }|r'|jQ                  «       ‰jR                  j>                  d
<   |dv r>| jT                  ‰jR                  jV                  |fgz   ‰jR                  j>                  d<   nv|dk(  rq| j                   �tY        d«       | jT                  ‰jR                  jV                  ‰jR                  j>                  d
   |   d   fgz   ‰jR                  j>                  d<   | j[                  |‰jR                  «       |�sd
‰jR                  j>                  vr5|jN                  }|r'|jQ                  «       ‰jR                  j>                  d
<   d‰jR                  j>                  vr¸|dv r>| jT                  ‰jR                  jV                  |fgz   ‰jR                  j>                  d<   nv|dk(  rq| j                   �tY        d«       | jT                  ‰jR                  jV                  ‰jR                  j>                  d
   |   d   fgz   ‰jR                  j>                  d<   d‰jR                  j>                  vr g }|r?|j]                  «       s|j	                  |j_                  «       «       ta        |dd «      }|rŒ?|jc                  «        td        jf                  ji                  |«      jk                  «       }djm                  |«      ‰jR                  _7        ‰S c c}w )Nr6  rï  )r  c                  óv   •— t        ‰‰«      j                  «       } d‰j                  j                  › d‰› d| › �S )NzTRACE FX call z from r�  )rE   Úrstripr1  r*  )ÚlineÚcur_instÚheaderrÙ  Útx_codes    €€€€ro   Úget_trace_call_log_strz;SubgraphTracer.create_proxy.<locals>.get_trace_call_log_strš  s9   ø€ Ü5°g¸xÓH×OÑOÓQ�DØ+¨B¯G©G¯L©L¨>¸À¸xÀrÈ$ÈÐPÐPrn   r¿  FÚorig_graphmodulec                   ó   — y rs   rm   rm   rn   ro   rC  z-SubgraphTracer.create_proxy.<locals>.<lambda>¥  s   � rn   TÚnn_module_stack>   rð  rI  rx  rñ  z0Invoking an nn.Module inside HigherOrderOperatorr   r{  rr  rò  )8rr  r1  Útree_flattenÚ#maybe_lift_tracked_freevar_to_inputr’   Útree_unflattenr¥   rj  rX  r   rQ  rR  r|  rs  Ú	positionsr  r  Úget_line_of_code_headerÚtrace_call_logr«  rL   rt  r$   Úget_contextrM  r!  r­   r   rÆ   r_   rÔ  r2  ru  Ú_lineno_maprv  r½   Ú__code__rÓ   rw  rŒ  rº   r1  rx  r*  r*   rÐ  Úis_co_filename_from_nn_modulesÚframe_summaryrÈ  Úreverser–   ÚStackSummaryÚ	from_listÚformatrç  r{  )rv   rk  rì  rœ   r�   r*  Ú	type_exprÚproxy_factory_fnÚ	flat_argsÚ	tree_specÚnew_flat_argsr¡  Úmaybe_new_argr›  r‰  Úis_retracingÚorig_graphmodule_maybeÚndrŒ  Úframe_summariesÚmsgsr†  r‡  rÙ  rˆ  rª   s                        @@@@€ro   rj  zSubgraphTracer.create_proxyP  s™  ü€ ðV �;‰;Ð"Ü#)×#6Ñ#6¸¸f°~Ó#FÑ ˆI�yØˆMØ ò 4�Ø $× HÑ HÈÓ M�Ø×$Ñ$ ]Õ3ð4ô "×0Ñ0°À	ÓJ‰LˆD�&ä‰WÑ!Ø�&˜$ ¨¨iÐ9Ió
ˆð
 ×Ñ×)Ñ)ˆô ×Ñ˜wÒ&¨4ð 4
ñ ,
ð
 ×-Ñ-ˆHà §¡Ñ.Ø×&Ñ&Ð2Ø×&Ñ&×-Ñ-Ð9àŸ)™)�Ø×3Ñ3¸8×;MÑ;M×;TÑ;TÐ3ÓU�÷Qô ×$Ñ$ T¬:Ð6LÓ+MÔNØ!)�”ð ˆØ�9‰9˜DŸN™NÑ*ð&¤\×%=Ñ%=¸b¿i¹iÓ%H×%LÑ%LØ"¡Ló&ó &Ð"ô Ð0´%·(±(×2FÑ2FÔGØ#�à&<×&BÑ&B×&HÑ&Hö&Ø "�B—G“Gò&�Ô"ð ,B×+MÑ+M�Ô(à*×2Ñ2×;Ñ;×JÑJð Õ)ð &*�Ô"Ø+/�Ô(Ø,0�Ô)Ø×,Ñ,ˆÙØ.=×.BÑ.BÓ.DˆB�G‰G�L‰LÐ*Ñ+àÐ3Ñ3Ø.2×.BÑ.BØ—‘—‘˜vÐ&ðFñ /ˆB�G‰G�L‰LÐ*Ò+ð �]Ò"Ø�{‰{Ð&ÜÐPÔQà.2×.BÑ.Bà—G‘G—L‘LØ—G‘G—L‘LÐ!2Ñ3°FÑ;¸AÑ>ððFñ /ˆB�G‰G�L‰LÐ*Ñ+ð 	×*Ñ*¨2¨r¯w©wÔ7âØ ¨¯©¯©Ñ4Ø"$×"4Ñ"4�Ù"Ø6E×6JÑ6JÓ6L�B—G‘G—L‘LÐ!2Ñ3à ¨¯©¯©Ñ4ØÐ;Ñ;Ø6:×6JÑ6JØŸ™Ÿ™ vÐ.ðNñ 7�B—G‘G—L‘LÐ!2Ò3ð ˜]Ò*Ø—{‘{Ð.Ü%ØNôð 7;×6JÑ6JàŸG™GŸL™LØŸG™GŸL™LÐ):Ñ;¸FÑCÀAÑFððNñ 7�B—G‘G—L‘LÐ!2Ñ3ð  §¡§¡Ñ,Ø<>ˆOÙð ×8Ñ8Ô:Ø#×*Ñ*¨2×+;Ñ+;Ó+=Ô>Ü˜R ¨4Ó0�ò ð ×#Ñ#Ô%ô ×)Ñ)×3Ñ3°OÓD×KÑKÓMˆDØ"$§'¡'¨$£-ˆB�G‰GÔàˆ	ùòO&s   ÇT%c                 ó‚  •— t        | j                  ||||«       | j                  �at        j                  |i |¤Ž}|D ]G  }t        |t        j                  j                  «      sŒ(|j                  | j                  k(  rŒBJ d«       ‚ t        ‰
| �-  ||||||«      }	| j                  j                  |	j                  d<   |	S )Nz2create_node using arg not from this SubgraphTracerr‚  )rm  rX  rr  r1  Úarg_tree_leavesr!  r­   r   r  r_   r¥   rm  r   r2  )rv   rã  rì  rœ   r�   r*  rœ  rž  r¡  r1  rª   s             €ro   rm  zSubgraphTracer.create_nodeò  s½   ø€ ô 	˜t×0Ñ0°"°f¸dÀFÔKØ�;‰;Ð"Ü×.Ñ.°Ð?¸Ñ?ˆIØ ò H�Ü! #¤u§x¡x§}¡}Ô5Øà—I‘I §¡Ó+ðHàGóHØ+ð	Hô ‰wÑ" 2 v¨t°V¸TÀ9ÓMˆØ*.×*;Ñ*;×*EÑ*Eˆ�	‰	Ð&Ñ'Øˆrn   c                 óÞ  — t        |j                  «      dkD  r”g }|j                  j                  «       D ]S  }|j                  | j                  k7  sŒ|j	                  t        t        |j                  j                  «      «      «       ŒU |D ]  }|j                  j                  |«       Œ | j                  j                  |«       | j                  j                  |j                  d «       y rZ  )r'  r&  rÚ  r_   rK  rW  rö   rÔ  r‡  rf  rv  r*  )rv   r1  Úuser_graph_nodesÚuserÚother_graph_nodes        ro   rp  zSubgraphTracer.remove_node  s¿   € Üˆt�z‰z‹?˜QÒØ46ÐØŸ
™
Ÿ™Ó)ò N�ð —:‘: §¡Ó+ð %×+Ñ+¬H´T¸$¿*¹*×:JÑ:JÓ5KÓ,LÕMðNð %5ò DÐ Ø ×&Ñ&×1Ñ1Ð2BÕCðDà�
‰
×Ñ˜dÔ#Ø× Ñ ×$Ñ$ T§Y¡Y°Õ5rn   c                 ó   — t         j                  d||�|j                  «       nd«       |€| j                  €J d«       ‚| j                  rTt        |d¬«      sG| j                  j                  j                  |g «      j                  t        j                  «       «       || j                  v r2t        j                  «       D ]  }|› d|› �}|| j                  vsŒ|} n | j                  rqt        t!        | j                  «      «      }| j                  |   j"                  }|r| j$                  j'                  |«      }	n7| j$                  j)                  |«      }	n| j$                  j'                  d «      }	|	5  | j+                  d|di |¬	«      }
| j                  r>|r<| j                  j-                  «       \  }}|
| j                  |<   || j                  |<   n|
| j                  |<   |
cd d d «       S # 1 sw Y   y xY w)
Nzcreate_graph_input %s %sz(none)zByou are required to provide a source for inputs on the root tracerF)Úallow_cell_or_freevarrß  râ  rm   )rœ  )rŠ   r«  r*  rr  rÐ   r7   rX  r  Ú
setdefaultr’   r   Úextract_stackrf  rû   rü   rå   rW  r1  r_   Úinserting_beforeÚinserting_afterrj  Úpopitem)rv   r*  rœ  r¤  rg   rË  Úcandidate_nameÚ	prev_namer1  rÍ  r°  r¨   r©   s                ro   r0  z!SubgraphTracer.create_graph_input  sØ  € Ü�	‰	Ø&ØØ#Ð/ˆF�K‰KŒM°Xô	
ð
 ˆ>à—‘Ð'ðTàSóTØ'ð ×ÒÜ'¨ÀeÕLØ×!Ñ!×7Ñ7×BÑBÀ6È2ÓN×UÑUÜ"×0Ñ0Ó2ôð
 �4×+Ñ+Ñ+Ü—_‘_Ó&ò �Ø$( 6¨¨1¨# �Ø!¨×)AÑ)AÒAØ)�DÙð	ð ×#Ò#ÜœX d×&>Ñ&>Ó?Ó@ˆIØ×+Ñ+¨IÑ6×;Ñ;ˆDÙØ—j‘j×1Ñ1°$Ó7‘à—j‘j×0Ñ0°Ó6‘à—*‘*×-Ñ-¨dÓ3ˆCØñ 	Ø×%Ñ% m°T¸2¸rÈYÐ%ÓWˆEØ×'Ò'©FØ×/Ñ/×7Ñ7Ó9‘��1Ø16�×(Ñ(¨Ñ.Ø./�×(Ñ(¨Ò+à16�×(Ñ(¨Ñ.Ø÷	÷ 	ò 	ús   Å9A1G4Ç4G=c                 ó¨  — | j                   €J d«       ‚|| j                  v r| j                  |   S | j                  |j                  j                  «      }t        |j                  |j                  j                  d   «       || j                  |<   | j                   �4|j                  | j                   k7  r| j                   j                  |«       |S )NzIlift_tracked_freevar_to_input should not be called on root SubgraphTracerrQ  )	rr  rr  r0  r1  r*  rO   r2  ry  Úlift_tracked_freevar_to_input)rv   r°  Ú	new_proxys      ro   r·  z,SubgraphTracer.lift_tracked_freevar_to_inputP  sµ   € ð �K‰KÐ#ð	WàVó	WØ#ð
 �D×(Ñ(Ñ(Ø×'Ñ'¨Ñ.Ð.Ø×+Ñ+¨E¯J©J¯O©OÓ<ˆ	Ü˜)Ÿ.™.¨%¯*©*¯/©/¸/Ñ*JÔKØ&/ˆ×Ñ˜UÑ#Ø�;‰;Ð" u§|¡|°t·{±{Ò'BØ�K‰K×5Ñ5°eÔ<ØÐrn   c                 ó’   — t        |t        j                  j                  «      s|S |j                  | k(  r|S | j                  |«      S )z£
        If arg is a free variable, then lift it to be an input.
        Returns the new lifted arg (if arg was a freevar), else the
        original arg.
        )r!  r­   r   ÚProxyry  r·  )rv   r¡  s     ro   rŽ  z2SubgraphTracer.maybe_lift_tracked_freevar_to_inputb  s=   € ô ˜#œuŸx™xŸ~™~Ô.ØˆJØ�Z‰Z˜4ÒØˆJØ×1Ñ1°#Ó6Ð6rn   )NFN)NNN)NNNN)rh   ri   rj   r”   rw   rÐ  rj  rm  rp  r0  r·  rŽ  r°   r±   s   @ro   rÞ   rÞ   ÿ  sN   ø„ ñð KOõ2òjCð4 ØØõ`ðF HLõò&6ó,2òjö$
7rn   rÞ   )©rô   rN  rº   r¥  r‘  rû   r¡  r   r'  rè  rQ  r–   rp  r   Útypingr   r   r   r   r   r	   r
   r   r   r©  Útorch._guardsr­   Útorch._loggingÚtorch.distributedÚdistributedrµ  Útorch.nnÚtorch.utils._pytreerg  Ú_pytreer1  r   r   r   r   Útorch._utils_internalr   rÕ  r   Ú%torch.fx.experimental._backward_stater   r%  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$   rn  r%   Úcurrent_scope_idr&   r'   r(   r)   r*   r+   r5  r,   r-   Úmutation_guardr.   rù   r/   r0   rg   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   Úvariables.baserP   Úvariables.builderrQ   rR   rS   rT   rU   Úvariables.listsrV   Úvariables.miscrW   Úvariables.nn_modulerX   Úvariables.tensorrY   rZ   r[   r\   Úvariables.torch_functionr]   Útorch._dynamo.symbolic_convertr^   Ú	getLoggerrh   rŠ   r°  ÚgetArtifactLoggerÚgraph_tabular_logrÓ  Úgraph_sizes_logr’  re   rq   Ú	lru_cacher‹   r�   r    r®   r¯   r¢   r³   r•   ÚobjectrK  rÉ   r]  rm  rü   ræ   ÚTracerrÞ   rm   rn   ro   ú<module>rÚ     sA  ðã Û Û Û Û Û Û Û Û Û 	Û 
Û Û Ý !ß X× XÕ Xã ã Û Ý  Û ß $Ð $Ý ß NÑ NÝ 0Ý :Ý ?ß UÑ UÝ JÝ Fç DÓ Dß 5÷ó õ 'Ý Ý -÷õ ÷ 0Ý 0ß @÷÷ ÷ õ ÷÷ ÷ ÷ ÷ õ( ,÷õ õ .Ý (Ý 1÷ó õ Cñ ÝHð €g×Ò˜Ó!€Ø—N’N×4Ò4°X¸wÓGÐ Ø—’×1Ò1°(¸LÓI€Ø—.’.×2Ò2°8¸]ÓK€Ø—’×1Ò1°(¸LÓI€ñ �$Ô÷ð ó ð÷ñ ð0 €×Ò�TÓñ4ó ð4ð ÷-ð -ó ð-òô	%�U—X’X—_’_ô 	%÷ ñ  ðF 	ˆS�&ˆ[Ñ€÷I,ñ I,ðZ.Jð ò=ð@ &�i—o’oÓ'Ð ôm7�R—Y’Yõ m7rn   