ó
    .Vði^¿ ã                  óì(  • % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSKJ!r!J"r"  SSKJ#r#J$r$  SSKJ%r%  SSKJ&r&  SSKJ'r'J(r(  SS	KJ)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3  SS
K4J5r5J6r6  SSK7r7SSK8r7SSK9r7SSK:J;s  J<r=  SSK7J>r>  SSK?J@r@JArAJBrBJCrC  SSKDJErE  SSKFJGrGJHrH  SSKIJJrJJKrKJLrL  SSKMJNrN  SSKOJPrPJQrQJRrRJSrSJTrT  SSKUJVrVJWrW  SSKXJYrY  SSKZJ[r[  SSK\J]r]  SSK^J_r_J`r`  SSKaJbrb  SSKcJdrd  \RÊ                  (       a8  SSKfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprp  SSKqJrrr  SSKsJtrtJuru  SSKvJwrw  SSKxJyry  SSKzJ{r{   SSK|r} SSKr7SSK€J�r‚  SS KIJƒrƒ  SS!KJ„r„  SS"K…J†r†  \}(       ay  \}\}GR                  \}GR                  \}GR                  4rŠS#\‹S$'   \}\‚\}GR                  \‚GR                  \}GR                  \‚GR                  \}GR                  \‚GR                  0rŒOS%rŠ0 rŒSS&K�JŽrŽJ�r�J�r�  \2" S'5      r’\2" S(5      r“\5" S)5      r”\7GR*                  GR,                  GR.                  r˜\7GR*                  GR,                  GR2                  rš\7GR*                  GR,                  GR6                  rœ\GR:                  " \RB                  5      ržS*\‹S+'   0 rŸS,\‹S-'   S.r S/r¡S0\¡ S13r¢\GRF                  " \¤5      r¥0 r¦S2\‹S3'   \GR:                  " \§5      r¨S4\‹S5'   \GRR                  " 5       rª " S6 S7\
GRV                  5      r¬ " S8 S95      r­      GSeS: jr®Sq¯GSfS; jr°GSfS< jr±Sq²S=\‹S>'   GSgS? jr³GShS@ jr´GSfSA jrµSq¶GSiSB jr·GSjSC jr¸GSfSD jr¹SE\‹SF'   SG\‹SH'   GSkSI jrºGSlSJ jr» " SK SL\
GRV                  5      r¼ " SM SN5      r½\GR|                  " 5       r¿\$        GSm                   GSnSP jj5       rÀ\/GSoGSpSQ jj5       rÁ\/ GSo     GSqSR jj5       rÁ GSr     GSsSS jjrÁ\GR„                  GSfST j5       rÃ\7GRˆ                  \7GRŠ                  \7GRN                  4\7GRŒ                  \7GRŽ                  \7GR�                  4\7GR’                  \7GR”                  \7GR–                  4\7GR˜                  \7GRš                  4\7GRœ                  \7GRž                  4\7GR                   \7GR¢                  4\7GR¤                  \7GR¦                  \7GR¨                  4\7GRª                  \7GR¬                  \7GR®                  4\7GR°                  \7GR²                  \7GR´                  4\7GR¶                  \7GR¸                  40
rÝ " SU SV5      rÞ\Þ" 5       rßGStSW jràGSfSX jrá\GRÄ                  " SY\GRÆ                  5      rä " SZ S[\GRÊ                  5      ræGStS\ jrçGStS] jrèGSuS^ jréGSvS_ jrêGSwS` jrëGSxSa jrìGSySb jríGSzSc jrî " Sd Se5      rï\/GS{Sf j5       rð\/      GS|Sg j5       rð\/GS}Sh j5       rðGS~Si jrð\GRâ                  Sj:¼  aH  \GRä                  \GRæ                  \Rj                  \Rd                  \GRè                  \GRê                  4rö\GRâ                  Sk:¼  a  \ö\Rf                  4-  röGSSl jr÷GSSm jrøGSSn jrù\/    GS€So j5       rú\/    GS�Sp j5       rú    GSSq jrú\3\GRö                  \GRø                  \GRú                  \GRü                  4   rÿSr\‹Ss'       GS‚St jGr     GSƒSu jGr\GR                  \GR                  \GR                  \GR
                  \GR                  \GR                  Sv.GrSwSxSySzS{S|Sv.Gr	    GS„S} jGr
GS…S~ jGrGS†S jGrGS‡S€ jGrGSˆS� jGrGS‰S‚ jGr\RL                  " Sƒ5      GSŠS„ j5       GrGS‹GSŒS… jjGrGS�S† jGrGSŽS‡ jGrGSŽSˆ jGrS‰Gr\GR,                   " SŠ S‹5      5       GrSŒGr\GR2                  " G\S�9GqSŽ\‹S�'   GS�S� jGrGS�S‘ jGrGS�S’ jGrGS�S“ jGr            GS‘S” jGr\G" G\S•9Gr \H" G\S•9Gr!GS’S– jGr"GSfS— jGr#GS“S˜ jGr$ " S™ Sš5      Gr%SGq&S›\‹Sœ'   GS”S� jGr'GS•Sž jGr(\$  GS–       GS—SŸ jj5       Gr)\GR,                   " S  S¡5      5       Gr* " S¢ S£\ï5      Gr+G\+" 5       G\+Gl,        GS˜S¤ jGr-SS¥.     GS™S¦ jjGr.\/    GSšS§ j5       Gr/\/GS›S¨ j5       Gr/GSœS© jGr/GS�Sª jGr0\$GSžS« j5       Gr1    GSŸS¬ jGr2GSoGS S­ jjGr3GS¡S® jGr4GSˆS¯ jGr5GS¢S° jGr6\RL                  " S5      GS£S² j5       Gr7GS¤S³ jGr8 GS¥       GS¦S´ jjGr9GS§Sµ jGr:\&" S¶5      GS¨S· j5       Gr;\×\§G\<\ÜG\=G\>G\?" S5      G\@GR‚                  G\BGR‚                  \RN                  \7GR†                  \7GRˆ                  \7GRŠ                  \7GRŒ                  \7GRŽ                  \7GR�                  \7GR*                  GR’                  GR”                  \7GR–                  GR˜                  1GrMS¸\‹S¹'   \`" 5       (       a0  SSGKNGrNG\MGRŸ                  G\NGR                   GRˆ                  5         GS©Sº jGrQ\GR¤                  GSªS» j5       GrSGS«S¼ jGrTGS¬S½ jGrUGS­S¾ jGrVGS­S¿ jGrWGS®SÀ jGrXGS®SÁ jGrY      GS®SÂ jGrZGS®SÃ jGr[G\?" 0 GR¹                  5       5      Gr]SÄ\‹SÅ'   G\?" 0 GR½                  5       5      Gr_SÆ\‹SÇ'   G\?" 0 GRÁ                  5       5      GraSÈ\‹SÉ'   G\?" \"" 5       GR½                  5       5      GrbSÆ\‹SÊ'   G\?" G\c" S%5      5      GrdSË\‹SÌ'   G\?" G\c" G\e" S5      5      5      GrfSË\‹SÍ'   G\dGRÎ                  GrhG\iGRÔ                  GrkG\lGRÔ                  Grm\GRÜ                  " G\lGRÞ                  GR½                  5       \"GRÞ                  GR½                  5       5       V s1 s H  n G\p" U 5      (       d  M  U iM     sn GrqG\rGRÞ                  GR½                  5        V s1 s H  n G\p" U 5      (       d  M  U iM     sn GrsG\tGRÞ                  GR½                  5        V s1 s H  n G\p" U 5      (       d  M  U iM     sn GruG\vGRÔ                  GrwG\vGRÞ                  GR½                  5        V s1 s H  n G\p" U 5      (       d  M  U iM     sn GrxG\yGRÞ                  GR½                  5        V s1 s H  n G\p" U 5      (       d  M  U iM     sn GrzG\yGRö                  Gr|G\=GRÞ                  GR½                  5        V s1 s H  n G\p" U 5      (       d  M  U iM     sn Gr}\2" SÎ5      Gr~\2" SÏ5      GrGS¯SÐ jGr€GS°SÑ jGr�GS±SÒ jGr‚GS²SÓ jGrƒGS³SÔ jGr„GS±SÕ jGr…G\†Gr‡GS´SÖ jGrˆGSµS× jGr‰G\lGRö                  GrŠ\7R|                  GR                  GS¶SØ j5       GrŒGS·SÙ jGr�GS¸SÚ jGrŽGS¹SÛ jGr�GSºSÜ jGr�GS»SÝ jGr‘  GS¼         GS½SÞ jjGr’ GSo         GS¾Sß jjGr“    GS¿Sà jGr”GSÀSá jGr•GSÁSâ jGr–GSÂSã jGr—SäGr˜SSåKzGJ™Gr™  GSÃSæ jGršGSÄSç jGr›SOSè.       GSÅSé jjGrœGSÆSê jGr�      GSÇSë jGržGSÈSì jGrŸGSoGSÉSí jjGr SSOSîSOSïSOSO\¥GRB                  SOSO4
                         GSÊSð jjGr¢GSËSñ jGr£\RH                  GSžSò j5       Gr¤\ï" 5       Gr¥\GR:                  " G\y5      Gr¦Só\‹Sô'   / Gr§Sõ\‹Sö'   \ï" 5       Gr¨\GR¤                  GSÌS÷ j5       Gr©GSÍSø jGrªGSÎGSÏSù jjGr«GSÐSú jGr¬        GSÑSû jGr­      GSÒSü jGr® GSo       GSÓSý jjGr¯\GR|                  " 5       Gr°GSÔSþ jGr±\$GSÕSÿ j5       Gr²            GSÖGS  jGr³GS×GS jGr´GSØGS jGrµGSÙGS jGr¶GSÚGS jGr·GSÛGS jGr¸GSGS jGr¹GSÜGS jGrºGSÝGS jGr» GSo     GSÞGS	 jjGr¼ " GS
 GS\
GRV                  5      Gr½GSßGS jGr¾        GSàGS jGr¿GSáGS jGrÀ            GSâGS jGrÁGSGS/GrÂGSGS/GrÃ/ GSQGrÄG\ÂG\Ã-   G\Ä-   GrÅGS•GS jGrÆ   GSã         GSäGS jjGrÇ   GSã         GSåGS jjGrÈGSæGS jGrÉGSæGS jGrÊ " GS GS\,\”\“4   5      GrËGSçGS jGrÌ " GS GS5      GrÍ " GS GS \,\”\“4   5      GrÎGSèGS! jGrÏ        GSéGS" jGrÐGSˆGS# jGrÑGSˆGS$ jGrÒGSêGS% jGrÓGSêGS& jGrÔGSëGS' jGrÕGSìGS( jGrÖ\GR,                   " GS) GS*5      5       Gr×GSíGS+ jGrØGSîGS, jGrÙGSïGS- jGrÚGSGS. jGrÛGSGS/ jGrÜGSðGS0 jGrÝGSGS1 jGrÞGSñGS2 jGrß      GSòGS3 jGràGSGS4 jGráGSóGS5 jGrâ\RH                   GSô       GSõGS6 jj5       GrãGSöGS7 jGräGS÷GS8 jGrå " GS9 GS:\7GR*                  GR,                  5      Græ        GSøGS; jGrçGSùGS< jGrèGSúGS= jGré " GS> GS?5      GrêG\r" 5       GrëGS@\‹GSA'   GS¥GSûGSB jjGrìGSüGSC jGrí\RH                  GSžGSD j5       GrîGS•GSE jGrïGSýGSF jGrðGSþGSG jGrñGSÿGSH jGròGSfGSI jGróGS GSJ jGrôGSŠGSK jGrõGSGSL jGröGSGSM jGr÷\7GRð                  GSGSN j5       Grù\7GRð                  GSGSO j5       Grú\7GRð                  GSGSP j5       GrûGSGSQ jGrüGSGSR jGrýGSGSS jGrþ " GST GSU5      Grÿ " GSV GSW\×5      Gr GSGSX jGrGSYGrS±\‹GSZ'   GSÍGS[ jGr\$GSžGS\ j5       Gr\$GSžGS] j5       GrGS	GS^ jGrSOGqGS•GS_ jGrGS
GS` jGr	\7GRð                  GSGSa j5       Gr
\7GRð                  GSGSb j5       GrGSGSc jGrGSGSd jGrg! \~ a    Sr} GN°f = f! \‘ a     GNf = fs  sn f s  sn f s  sn f s  sn f s  sn f s  sn f (  aß  
Utility functions and classes used throughout the TorchDynamo system.

This module contains a collection of helper utilities used by various parts of Dynamo for:
- Performance metrics collection and reporting
- Compilation timing and debugging
- Graph manipulation and tensor operations
- Runtime guards and checks
- Common data structure operations
- Testing and development tools

This is an internal module that provides shared functionality used across the Dynamo codebase.
é    )ÚannotationsN)ÚCounterÚOrderedDict)ÚAbstractContextManagerÚcontextmanager)Úis_dataclass)Ú	lru_cache)ÚCodeTypeÚMethodWrapperType)ÚAnyÚcastÚClassVarÚGenericÚLiteralÚOptionalÚoverloadÚ	TypeAliasÚ	TypeGuardÚTypeVarÚUnion)Ú	ParamSpecÚTypeIs)Úfx)Ú_instruction_counterÚ_len_torch_function_stackÚ_pop_torch_function_stackÚ_push_on_torch_function_stack)Úenable_python_dispatcher)ÚMetricsContextÚRuntimeMetricsContext)Ú	CompileIdÚSourceÚTracingContext)Úis_sparse_compressed)Újustknobs_checkÚlog_chromium_event_internalÚlog_compilation_eventÚrecord_chromium_event_internalÚsignpost_event)Ú_format_graph_codeÚlazy_format_graph_code)Ú_WaitCounter)ÚLazyModuleMixin)Úis_traceable_wrapper_subclass)Ú
has_tritonÚhas_triton_package)ÚRemovableHandleé   )Ú_get_flat_args)
ÚCallableÚ	ContainerÚ	GeneratorÚ	ItemsViewÚIterableÚIteratorÚKeysViewÚMappingÚSequenceÚ
ValuesView)ÚExecutionRecord)ÚInstructionTranslatorÚInstructionTranslatorBase©ÚVariableTracker)ÚDeviceLikeType)ÚFakeTensorMode)Údetect_fake_mode©Ú
LazyString©Úconfigztuple[types.ModuleType, ...]ÚNP_SUPPORTED_MODULES© )Ú
FakeTensorÚis_fakeÚmaybe_get_fake_modeÚTÚRÚ_Pz*collections.defaultdict[str, Counter[str]]Úcountersúdict[str, Any]Úoptimus_scuba_logzJhttps://pytorch.org/docs/main/compile/programming_model.recompilation.htmlz;https://pytorch.org/docs/main/torch.compiler_nn_module.htmlzSee z& for more information and limitations.zdict[str, list[float]]Úcompilation_time_metricsúdict[str, float]Úcumulative_time_spent_nsc                  ó    • \ rS rSrSrSrSrSrg)ÚReInplaceTriggeré¿   r2   é   é   rK   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚAUTO_FUNC_V1ÚAUTO_FUNC_V2Ú
TRITON_OPSÚ__static_attributes__rK   ó    ÚXD:\a\ltx-desktop-ci\ltx-desktop-ci\python-embed\Lib\site-packages\torch\_dynamo\utils.pyrY   rY   ¿   s   † Ø€LØ€LØƒJre   rY   c                  ó¼   • \ rS rSr% \R
                  " \5      rS\S'   \	SS j5       r
\	SS j5       r\	SS j5       r\	SS j5       r\	SS j5       r\	SS	 j5       rS
rg)ÚReinplaceCounterséÅ   z!collections.defaultdict[str, int]Ú_valuesc                óZ   • US:w  a%  U R                   SUR                   3==   U-  ss'   g g ©Nr   Úmissed_bytes_)rj   Úname)ÚclsÚtriggerÚbytess      rf   Úadd_missed_bytesÚ"ReinplaceCounters.add_missed_bytesÉ   s-   € à�A‹:Ø�K‰K˜-¨¯© ~Ð6Ó7¸5Ñ@Ô7ð re   c                óF   • US:w  a  U R                   SU 3==   U-  ss'   g g ©Nr   Úmissed_tensors_)rj   )ro   rp   Úcounts      rf   Úadd_missed_opportunitiesÚ*ReinplaceCounters.add_missed_opportunitiesÏ   s)   € à�A‹:Ø�K‰K˜/¨'¨Ð3Ó4¸Ñ=Ô4ð re   c                ó8   • U R                   R                  5         g ©N)rj   Úclear©ro   s    rf   r|   ÚReinplaceCounters.clearÔ   s   € à�‰×ÑÕre   c                óf   • Sn[          H$  nXR                  R                  SU 3S5      -  nM&     U$ ru   )rY   rj   Úget©ro   Úsumrp   s      rf   Úget_total_missedÚ"ReinplaceCounters.get_total_missedØ   s4   € àˆß'ˆGØ—;‘;—?‘? _°W°IÐ#>ÀÓBÑBŠCñ (àˆ
re   c                óz   • Sn[          H.  nXR                  R                  SUR                   3S5      -  nM0     U$ rl   )rY   rj   r€   rn   r�   s      rf   Úget_total_missed_bytesÚ(ReinplaceCounters.get_total_missed_bytesß   s8   € àˆß'ˆGØ—;‘;—?‘? ]°7·<±<°.Ð#AÀ1ÓEÑEŠCñ (àˆ
re   c                óV   • U R                   (       a  [        SSU R                   5        g g )NÚinductorÚreinplace_counters)rj   r)   r}   s    rf   ÚlogÚReinplaceCounters.logæ   s!   € ð �;�;Ü˜:Ð';¸S¿[¹[ÕIð re   rK   N)rp   rY   rq   ÚintÚreturnÚNone)rp   rY   rw   r�   rŽ   r�   ©rŽ   r�   ©rŽ   r�   )r]   r^   r_   r`   ÚcollectionsÚdefaultdictr�   rj   Ú__annotations__Úclassmethodrr   rx   r|   rƒ   r†   r‹   rd   rK   re   rf   rh   rh   Å   s”   ‡ Ø1<×1HÒ1HÈÓ1M€GÐ.ÓMð óAó ðAð
 ó>ó ð>ð óó ðð óó ðð óó ðð óJó óJre   rh   c                ó¦   •  SS K nUR                  XS9$ ! [         a1    SR                  S [        R                  " U/U 5       5       5      s $ f = f)Nr   ©ÚheadersÚ
c              3  ó`   #   • U  H$  nS R                  [        [        U5      5      v •  M&     g7f)ú, N)ÚjoinÚmapÚstr)Ú.0Úrows     rf   Ú	<genexpr>Útabulate.<locals>.<genexpr>ö   s&   é € ð 
Ú0P¨ˆD�I‰I”cœ#˜s“m×$Ð$Ò0Pùs   ‚,.)ÚtabulateÚImportErrorrœ   Ú	itertoolsÚchain)Úrowsr˜   r£   s      rf   r£   r£   í   sX   € ð
Ûà× Ñ  Ð Ð7Ð7øÜó 
Ø�y‰yñ 
Ü09·²ÀÀ	È4Ô0Pó
ó 
ò 	
ð
ús   ‚ •8AÁAc                 ó   • [         S-   q g ©Nr2   )Ú
curr_framerK   re   rf   Úincrement_framer«   ÿ   s   € ä˜a‘�Jre   c                 óX   • [         R                  5         [        R                  5         Sqg ©Nr   )rW   r|   rU   rª   rK   re   rf   Úreset_frame_countr®     s   € ä×"Ñ"Ô$Ü×"Ñ"Ô$Ø�Jre   ú!Optional[list[Callable[[], str]]]Ú_recompile_user_contextsc                ó@   • [         c  / q [         R                  U 5        g)aR  
Register a hook to be called when a recompile is triggered. The hook
should return a string describing user contexts that are not available
to the compiler, such as the current training epoch. This is useful for
debugging and data analysis for recompile. For data retention purposes,
the user context string is capped at 256 characters.
N)r°   Úappend)Úhooks    rf   Ú(register_hook_for_recompile_user_contextr´     s   € ô  Ñ'Ø#%Ð Ü×#Ñ# DÕ)re   c                 ó   • [         $ r{   ©r°   rK   re   rf   Ú#get_hook_for_recompile_user_contextr·     ó   € Ü#Ð#re   c                 ó   • Sq g)z@Clear any registered recompile user-context hooks (test helper).Nr¶   rK   re   rf   Úreset_recompile_user_contextsrº   !  s
   € ð  $Ñre   c                ó   • [         U -  q g r{   )Úop_count)Úcnts    rf   Úincrement_op_countr¾   *  s   € ä��O�Hre   c                 ó¢   • 0 n [         R                  5        H  u  pUS-  X'   M     U R                  SS5      U R                  SS5      -   U S'   U $ )Nç    eÍÍAÚentire_frame_compiler   Úentire_backward_compileÚtotal_wall_time)rW   Úitemsr€   )Útotal_by_keyÚphaseÚtimings      rf   Úcalculate_time_spentrÈ   1  sc   € Ø€LÜ1×7Ñ7Ö9‰ˆà$ s™lˆÓñ :ð '3×&6Ñ&6Ø ó'à×ÑÐ2°AÓ6ñ'7€LÐ"Ñ#ð Ðre   c            	     óŒ   • [        5       n SnU R                  5        H  u  p#U SU S[        US5       3nM     [        U5        g )NzTIMING:Ú Ú:é   )rÈ   rÄ   ÚroundÚprint)rÅ   ÚoutÚkeyÚvalues       rf   Úprint_time_reportrÒ   C  sJ   € Ü'Ó)€Là
€CØ"×(Ñ(Ö*‰
ˆØ��Q�s�e˜1œU 5¨!›_Ð-Ð.Šñ +ô 
ˆ#…Jre   r   Ú_METRICS_CONTEXTr    Ú_RUNTIME_METRICS_CONTEXTc                 ó   • [         $ r{   )rÓ   rK   re   rf   Úget_metrics_contextrÖ   f  s   € ÜÐre   c                 ó   • [         $ r{   )rÔ   rK   re   rf   Úget_runtime_metrics_contextrØ   j  r¸   re   c                  ó$   • \ rS rSrSrSrSrSrSrg)ÚCompileEventLogLevelin  zë
Enum that loosely corresponds with a "log level" of a given event.

CHROMIUM_EVENT: Logs only to tlparse.
COMPILE_EVENT: Logs to tlparse + PT2 Compile Events
COMPILATION_METRIC: Logs to tlparse, PT2 Compile Events, and dynamo_compile
r2   r[   r\   rK   N)	r]   r^   r_   r`   Ú__doc__ÚCHROMIUMÚPT2_COMPILEÚCOMPILATION_METRICrd   rK   re   rf   rÚ   rÚ   n  s   † ñð €HØ€KØÓre   rÚ   c                  ó  • \ rS rSrSr\S\R                  4         SS jj5       r\ S         SS jj5       r	\ S       SS jj5       r
\          SS j5       r\S\R                  4       SS	 jj5       r\          SS
 j5       r\\R                  4       SS jj5       r\SS j5       r\SS j5       r\SSS jj5       r\ S       SS jj5       r\SS j5       r\SS j5       rSrg) ÚCompileEventLoggeri|  a–  
Helper class for representing adding metadata(i.e. columns) to various compile events.
Use CompileEventLogger to add event data to:
- Chromium events
- PT2 Compile Events
- CompilationMetrics

This should be used in conjunction with dynamo_timed() and metrics contexts, which create
timed spans and events. CompileEventLogger uses three log levels (described in CompileEventLogLevel),
where each log level logs to all sources below it in the hierarchy.

Example usages:
- I want to log to an existing chromium event within dynamo timed:
with dynamo_timed("my_event"):
    CompileEventLogger.chromium("my_event", foo=bar)

- I want to log my event to both chromium + pt2_compile_events:
with dynamo_timed("my_event", log_pt2_compile_event=True):
    CompileEventLogger.pt2_compile("my_event", foo=bar)

- I want to add information to dynamo events and dynamo_compile
    CompileEventLogger.compilation_metric(foo=bar)
Nc                óÞ   • Uc  [         R                  " 5       n[        5       nU[        R                  :X  a  SnO"U[        R
                  :X  a  SnO[        S5      eUR                  XX5        g )NFTzjCannot log instant event at COMPILATION_METRIC level. Please choose one of CHROMIUM_EVENT or COMPILE_EVENT)ÚtimeÚtime_nsÚget_chromium_event_loggerrÚ   rÜ   rÝ   ÚRuntimeErrorÚlog_instant_event)Ú
event_nameÚmetadatarã   Ú	log_levelÚchromium_logÚlog_pt2_compile_events         rf   ræ   Ú$CompileEventLogger.log_instant_event•  sk   € ð ‰?Ü—l’l“nˆGÜ0Ó2ˆØÔ,×5Ñ5Ó5Ø$)Ñ!ØÔ.×:Ñ:Ó:Ø$(Ñ!äØ|óð ð 	×&Ñ&Ø õ	
re   c                ó"  • [        5       nUR                  5       nU[        R                  :X  a  UR                  " U 40 UD6  gU[        R
                  :X  a5  UR                  5       nX;  a  [        SU 5      eUR                  " U 40 UD6  gU[        R                  :X  d   eUR                  5       nX:w  a  [        S5      e[        5       nUR                  5       (       d  [        S5      eUR                  X25        UR                  " U 40 UD6  g)zˆ
Centralized API for adding data to various events
Log an event to a toplevel "dynamo" event or metrics context
depending on log level.
zµError: specified log level PT2_COMPILE, but the event %s is not logged to pt2_compile_events. Make sure the event is active and you passed log_pt2_compile_event=True to dynamo_timedzµLog level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `log_toplevel_event_data` directly.z[No metrics context is in progress. Please only call this function within a metrics context.N)rä   Úget_pt2_compile_substackrÚ   rÜ   Úadd_event_datarÝ   rå   rÞ   Úget_outermost_eventrÖ   Úin_progressÚupdate)rç   ré   Ú	overwriterè   rê   Úpt2_compile_substackÚ	top_eventÚmetrics_contexts           rf   Úadd_dataÚCompileEventLogger.add_data«  s  € ô 1Ó2ˆØ+×DÑDÓFÐàÔ,×5Ñ5Ó5Ø×'Ò'¨
Ñ?°hÓ?ØÔ.×:Ñ:Ó:Ø#/×#HÑ#HÓ#JÐ ØÓ5Ü"ðAð ó	ð ð ×'Ò'¨
Ñ?°hÓ?àÔ 4× GÑ GÓGÐGÐGØ$×8Ñ8Ó:ˆIàÓ&Ü"ðBóð ô 2Ó3ˆOØ"×.Ñ.×0Ñ0Ü"Øqóð ð
 ×"Ñ" 8Ô7Ø×'Ò'¨
Ñ?°hÓ?re   c                ó€   • [        5       R                  5       nUc  [        S5      e[        R                  " X0U40 UD6  g)z3
Syntactic sugar for logging to the toplevel event
NzWNo toplevel event active. Please only call this function within a dynamo_timed context.)rä   rð   rå   rà   r÷   )ré   ró   rè   rõ   s       rf   Úadd_toplevelÚCompileEventLogger.add_toplevelÙ  sB   € ô .Ó/×CÑCÓEˆ	ØÑÜØióð ô 	×#Ò# I¸)ÑPÀxÓPre   c                ó”  • [        5       nU[        R                  :X  d  U[        R                  :X  a  UR	                  XU5        gU[        R
                  :X  d   eUR                  5       nX:w  a  [        S5      e[        5       nUR                  5       (       d  [        S5      eUR	                  X#5        UR	                  XU5        g)z*
Increments an existing field, or adds it
z°Log level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `increment_toplevel` directly.úhNo metrics context is in progress. Please only call this function within a metrics context/dynamo_timed.N)
rä   rÚ   rÜ   rÝ   Ú	incrementrÞ   rð   rå   rÖ   rñ   ©rç   ré   rÐ   rÑ   rê   rõ   rö   s          rf   rþ   ÚCompileEventLogger.incrementç  s¿   € ô 1Ó2ˆàÔ-×6Ñ6Ó6ØÔ0×<Ñ<Ó<à×"Ñ" :°EÕ:àÔ 4× GÑ GÓGÐGÐGØ$×8Ñ8Ó:ˆIØÓ&Ü"ð}óð ô
 2Ó3ˆOØ"×.Ñ.×0Ñ0Ü"Ø~óð ð ×%Ñ% cÔ1Ø×"Ñ" :°EÕ:re   r2   c                ó€   • [        5       nUR                  5       nUc  [        S5      e[        R	                  XBX5        g)zH
Increments a value on the toplevel metric. By default, logs to metric.
Nú_No toplevel event active. Please only call this function within a metrics context/dynamo_timed.)rä   rð   rå   rà   rþ   ©rÐ   rÑ   ré   rê   rõ   s        rf   Úincrement_toplevelÚ%CompileEventLogger.increment_toplevel  sB   € ô 1Ó2ˆØ ×4Ñ4Ó6ˆ	ØÑÜØqóð ô 	×$Ñ$ Y¸3ÕFre   c                ó”  • [        5       nU[        R                  :X  d  U[        R                  :X  a  UR	                  XU5        gU[        R
                  :X  d   eUR                  5       nX:w  a  [        S5      e[        5       nUR                  5       (       d  [        S5      eUR	                  X#5        UR	                  XU5        g)z\
Add metadata <value> to a set of values with key <key>. Creates a set if it doesn't exist.
z¯Log level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `add_to_set_metric` directly.rý   N)
rä   rÚ   rÜ   rÝ   Ú
add_to_setrÞ   rð   rå   rÖ   rñ   rÿ   s          rf   r  ÚCompileEventLogger.add_to_set  s¿   € ô 1Ó2ˆàÔ-×6Ñ6Ó6ØÔ0×<Ñ<Ó<à×#Ñ# J°UÕ;àÔ 4× GÑ GÓGÐGÐGØ$×8Ñ8Ó:ˆIØÓ&Ü"ð|óð ô
 2Ó3ˆOØ"×.Ñ.×0Ñ0Ü"Ø~óð ð ×&Ñ& sÔ2Ø×#Ñ# J°UÕ;re   c                ó€   • [        5       nUR                  5       nUc  [        S5      e[        R	                  XBX5        g)z™
Same as add to set, just does it automatically to the toplevel event instead of having to explicitly name it.
Defaults to COMPILATION_METRIC log level.
Nr  )rä   rð   rå   rà   r  r  s        rf   Úadd_to_set_toplevelÚ&CompileEventLogger.add_to_set_toplevel6  sB   € ô 1Ó2ˆØ ×4Ñ4Ó6ˆ	ØÑÜØqóð ô 	×%Ñ% i¸CÕGre   c                óT   • [         R                  " U [        R                  4SS0UD6  g)z»
Add <metadata> to <event_name> in chromium. Each key/value of metadata will appear in the chromium trace.
<event_name> should be the name of a timed event span passed to `dynamo_timed`.
ró   FN)rà   r÷   rÚ   rÜ   ©rç   rè   s     rf   ÚchromiumÚCompileEventLogger.chromiumJ  s.   € ô 	×#Ò#ØÔ,×5Ñ5ñ	
ØAFð	
ØJRó	
re   c                óT   • [         R                  " U [        R                  4SS0UD6  g)aS  
Add <metadata> to <event_name> in chromium and PT2 Compile Events.
Each key/value of metadata will appear in the chromium trace. Each kwarg name becomes
a column in PT2 Compile Events, with the corresponding kwarg value.
<event_name> should be the name of a timed event span passed to `dynamo_timed`,
with log_to_pt2_compile_events=True.
ró   FN)rà   r÷   rÚ   rÝ   r  s     rf   Úpt2_compileÚCompileEventLogger.pt2_compileT  s.   € ô 	×#Ò#ØÔ,×8Ñ8ñ	
ØDIð	
ØMUó	
re   c                óP   • [         R                  " [        R                  U 40 UD6  g)a  
Add <metadata> to the CompilationMetrics context. Also logs to PT2 Compile Events
and chromium.
Each key/value of metadata will appear in the chromium trace. Each kwarg name becomes
a column in PT2 Compile Events and Dynamo Compile, with the corresponding kwarg value.
N)rà   rú   rÚ   rÞ   )ró   rè   s     rf   Úcompilation_metricÚ%CompileEventLogger.compilation_metrica  s%   € ô 	×'Ò'Ü ×3Ñ3°Yñ	
ØBJó	
re   c                óN   • [         R                  XU[        R                  5        g)zÀ
Log an instant event to chromium logs with name <event_name> at time <time_ns>. The `args` field in
Perfetto will point to metadata. <time_ns> should be a value obtained from time.time_ns().
N)rà   ræ   rÚ   rÜ   )rç   rè   rã   s      rf   ÚinstantÚCompileEventLogger.instantm  s    € ô 	×,Ñ,Ø 'Ô+?×+HÑ+Hõ	
re   c                ó^   • [        5       (       d  g[        5       nUR                  " U 40 UD6  g)zÔ
Adds to an existing pt2_compile event, but silently returns if the event doesn't exist
or ChromiumEventLogger is not initialized.
This function is syntactic sugar for chromium_event_logger().try_add_event_data.
N)Úchromium_event_log_activerä   Útry_add_event_data)rç   rè   rê   s      rf   Útry_add_pt2_compileÚ&CompileEventLogger.try_add_pt2_compiley  s+   € ô )×*Ñ*ØÜ0Ó2ˆØ×'Ò'¨
Ñ?°hÓ?re   c                ót   • [        5       (       d  g[        5       nUR                  5       (       d  gU " U0 UD6  g)zz
Special function that quietly runs a given method, returning if CHROMIUM_EVENT_LOG is None or metrics context is not set
N)r  rÖ   rñ   )Ú	method_fnÚargsÚkwargsrö   s       rf   Útry_ÚCompileEventLogger.try_…  s7   € ô
 )×*Ñ*ØÜ-Ó/ˆØ×*Ñ*×,Ñ,ØÙ�4Ð"˜6Ó"re   rK   )
rç   rž   rè   rS   rã   úOptional[int]ré   rÚ   rŽ   r�   ©F)
rç   rž   ré   rÚ   ró   Úboolrè   ÚobjectrŽ   r�   )ré   rÚ   ró   r&  rè   r'  rŽ   r�   )
rç   rž   ré   rÚ   rÐ   rž   rÑ   r�   rŽ   r�   )rÐ   rž   rÑ   r�   ré   rÚ   rŽ   r�   )
rç   rž   ré   rÚ   rÐ   rž   rÑ   r   rŽ   r�   )rÐ   rž   rÑ   r   ré   rÚ   rŽ   r�   )rç   rž   rè   r'  rŽ   r�   )ró   r&  rè   r'  rŽ   r�   r{   )rç   rž   rè   rS   rã   r$  rŽ   r�   )r  zCallable[_P, Any]r   ú_P.argsr!  ú	_P.kwargsrŽ   r�   )r]   r^   r_   r`   rÛ   ÚstaticmethodrÚ   rÜ   ræ   r÷   rú   rþ   rÞ   r  r  r
  r  r  r  r  r  r"  rd   rK   re   rf   rà   rà   |  s�  † ñð0 ð "&Ø*>×*GÑ*Gð	
Øð
à ð
ð ð
ð (ð	
ð
 
ô
ó ð
ð* ð  ð+@Øð+@à'ð+@ð ð+@ð ð	+@ð
 
ô+@ó ð+@ðZ à;@ðQØ'ðQØ48ðQØNTðQà	ôQó ðQð ð;Øð;Ø$8ð;Ø?Bð;ØKNð;à	ó;ó ð;ð< ð Ø*>×*QÑ*QðGØðGàðGð (ðGð 
ô	Gó ðGð  ð<Øð<Ø$8ð<Ø?Bð<ØKNð<à	ó<ó ð<ð< ð +?×*QÑ*QðHØðHàðHð (ðHð 
ô	Hó ðHð& ó
ó ð
ð ó

ó ð

ð õ	
ó ð	
ð àLPð	
Øð	
Ø#1ð	
Ø<Ið	
à	ô	
ó ð	
ð ó	@ó ð	@ð ó	#ó ó	#re   rà   Fc	           
   #  ó.	  #   • U(       a  Un	U n
OU n	Sn
U [         ;  a	  / [         U '   [         U    n0 nU(       a  UR                  U5        U
(       a  UR                  SU
05        Ub  UR                  SU05        [        5       n[        R                  " 5       nUR                  XžXÂU5        [        R                  R                  U  S35      /nU(       a6  U(       a  UOU nUR                  [        SU 35      R                  5       5        [        R                  R                  R                  5       SLnU(       a¾  UR                  S5      (       d   e[!        ["        S5      (       d  S["        l        ["        =R$                  S	-  sl        ["        R$                  S	:X  aY  UR                  [        S
5      R                  5       5        U(       d*  SnUR                  [        U5      R                  5       5         [&        R(                  " 5        nU H  nUR+                  U5        M     Sv •  SSS5        [        R                  " 5       nUU-
  nUR                  US-  5        UR-                  U	U0 XâU5        U(       aÙ  [.        U	==   U-  ss'   ["        =R$                  S	-  sl        ["        R$                  S:H  nUS-  nU(       aM  [1        5       nUR3                  5       (       a-  UR5                  UU5        U(       a  UR5                  SU5        ggg[7        5       nUR5                  UU5        U(       a  USU(       + S.nUR5                  SUU5        ggg! , (       d  f       GN3= f! [        R                  " 5       nUU-
  nUR                  US-  5        UR-                  U	U0 XâU5        U(       aÙ  [.        U	==   U-  ss'   ["        =R$                  S	-  sl        ["        R$                  S:H  nUS-  nU(       aM  [1        5       nUR3                  5       (       a-  UR5                  UU5        U(       a  UR5                  SU5        f f f [7        5       nUR5                  UU5        U(       a  USU(       + S.nUR5                  SUU5        f f f = f7f)a8  
dynamo_timed is a context manager
By wrapping a function in dynamo_timed, we can get a few things:

1) Optionally log timings to pt2_compile_events.
2) Optionally log timings to CompilationMetrics (dynamo_compile).
3) Optionally log chromium events.
4) Optionally increment a WaitCounter.
5) Store a record in compilation_time_metrics
   For example:

    def _foo(...):
        with dynamo_timed("_foo"):
            ...

    Would show up as an entry in our timing dict:
    OrderedDict([('_foo', [0.083690, 0.23949, 3.1425e-05])])
    This is extremely useful for granular debugging.

Although it is tempting to use dynamo_timed as a decorator, please do not.
In its decorator form it makes cProfile traces less useful as dynamo_timed
suddenly becomes a bottleneck for lots of function calls (as only one parent
pointer is recorded).

Params:
- key: key into compile_time_metrics. If phase_name is not provided, this is
  also the event name used for pt2_compile_events logs and chromium events.
- phase_name: Optional override for the event name.
- log_pt2_compile_event: Whether to log a pt2 compile event internally.
- metadata: Extra metadata to put in pt2_compile_events.
- dynamo_compile_column_us: If provided, updates the specified CompilationMetrics
  field to be logged to dyname_compile column. We expect all columns to be _us;
  therefore, the field name must end with "_us".
- compile_id: In the typical case, this parameter should not be needed. Use to
  supply the compile_id for those cases where we want to log a compile_id where
  it's not naturally available, e.g., for runtime autotuning.
- is_backward: Specify forward/backward directly when not available in a
  CompileContext, e.g., during runtime autotuning.
  that support it.
- log_waitcounter: If set, we'll log a waitcounter of the form "pytorch.dynamo_timed.{key}"
NÚfn_nameÚis_backwardz (dynamo_timed)zpytorch.wait_counter.Ú_usÚdepthr   r2   z#pytorch.wait_counter.dynamo_compilez.pytorch.wait_counter.compile_runtime_overheadsrÀ   éè  Úduration_usT)Ú
compile_idÚ
is_runtimeÚ
is_forward)rU   rò   rä   râ   rã   Úlog_event_startÚtorchÚprofilerÚrecord_functionr²   r,   ÚguardÚ_guardsÚCompileContextÚcurrent_compile_idÚendswithÚhasattrÚ_dynamo_timed_tlsr/  Ú
contextlibÚ	ExitStackÚenter_contextÚlog_event_endrW   rÖ   rñ   rþ   rØ   )rÐ   Ú
phase_namerë   rè   Údynamo_compile_column_usr2  r-  Úlog_waitcounterÚwaitcounter_name_overriderç   r,  ÚmetricsÚevent_metadatarê   Ústart_nsÚcx_mgrsÚwc_nameÚis_compile_timeÚ
runtime_wcÚstackÚcxÚend_nsÚtime_spent_nsÚis_outer_eventr1  rö   Úruntime_contextÚextras                               rf   Údynamo_timedrV  •  s  é € öl Øˆ
Ø‰àˆ
Øˆà
Ô*Ó*Ø(*Ô  Ñ%ä& sÑ+€GØ€NÞØ×Ñ˜hÔ'ÞØ×Ñ˜y¨'Ð2Ô3ØÑØ×Ñ˜}¨kÐ:Ô;ä(AÓ(C€LÜ�|Š|‹~€HØ× Ñ Ø˜nÀZôô
 	�‰×&Ñ&¨#¨¨oÐ'>Ó?ð!€Gö Þ/HÑ+ÈcˆØ�‰”|Ð&;¸G¸9Ð$EÓF×LÑLÓNÔOä—m‘m×2Ñ2×EÑEÓGÈtÐS€OÞà'×0Ñ0°×7Ñ7Ð7Ð7ô Ô(¨'×2Ñ2Ø&'ÔÔ#Ü×Ò 1Ñ$Õô ×"Ñ" aÓ'Ø�N‰Nœ<Ð(MÓN×TÑTÓVÔWÞ"ØM�
Ø—‘œ|¨JÓ7×=Ñ=Ó?Ô@ð(QÜ×!Ò!Ô# uÛ�Ø×#Ñ# BÖ'ñ ã÷ $ô
 —’“ˆØ Ñ)ˆØ�‰�} sÑ*Ô+Ø×"Ñ"Ø˜  HÀZô	
ö $ô % ZÓ0°MÑAÓ0ô ×#Ò# qÑ(Õ#Ü.×4Ñ4¸Ñ9ˆNà'¨4Ñ/ˆKÞÜ"5Ó"7�Ø"×.Ñ.×0Ñ0Ø#×-Ñ-Ð.FÈÔTÞ%Ø'×1Ñ1°-ÀÕMð &ð 1ô
 #>Ó"?�Ø×)Ñ)Ð*BÀKÔPÞ!à&0Ø&*Ø*5¤oñ�Eð
 $×-Ñ-¨m¸[È%ÕPð "ð- $÷ $Ö#ûô
 —’“ˆØ Ñ)ˆØ�‰�} sÑ*Ô+Ø×"Ñ"Ø˜  HÀZô	
ö $ô % ZÓ0°MÑAÓ0ô ×#Ò# qÑ(Õ#Ü.×4Ñ4¸Ñ9ˆNà'¨4Ñ/ˆKÞÜ"5Ó"7�Ø"×.Ñ.×0Ñ0Ø#×-Ñ-Ð.FÈÔTÞ%Ø'×1Ñ1°-ÀÕMð &ð 1ô
 #>Ó"?�Ø×)Ñ)Ð*BÀKÔPÞ!à&0Ø&*Ø*5¤oñ�Eð
 $×-Ñ-¨m¸[È%ÕPð "ð- $üs8   ‚G8RÇ;M- ÈMÈ/M- È7D$RÍ
M*Í%M- Í-D%RÒRc                ó   • g r{   rK   ©ÚreprÚ	aggregates     rf   Úcompile_timesr[  (  s   € ØILre   c                ó   • g r{   rK   rX  s     rf   r[  r[  ,  s   € ð &)re   c           	     óN  ^• [         4SU4S jjjnU S:X  a5  [         Vs/ s H  nX2" [        U   S S94PM     nnSnU[        USS9-  nU$ U S:X  aJ  [        R                  5        Vs/ s H  nU" US	 S9PM     nn[	        [        R                  5       5      nX‡4$ g
s  snf s  snf )aŸ  
Get metrics about torchdynamo frontend/backend compilation times.

Accumulates information from functions tagged with `dynamo_timed`.

repr='str' returns a printable string for user interaction, and 'csv'
returns headers, rows which can be logged for output

aggregate causes values from multiple compilations (e.g. split graphs)
to be accumulated into one value.  If false, expect more than one value
per metric.
rž   c                óh   >• T(       a  U" [        U 5      5      $ SR                  [        X5      5      $ )Nr›   )r‚   rœ   r�   )ÚvaluesÚitem_fnrZ  s     €rf   Úfmt_fnÚcompile_times.<locals>.fmt_fnC  s)   ø€ ÞÙœ3˜v›;Ó'Ð'Ø�y‰yœ˜WÓ-Ó.Ð.re   c                ó
   • U S $ )Nz.4frK   ©Úxs    rf   Ú<lambda>Úcompile_times.<locals>.<lambda>J  s
   € ÈÈ3ÈÀjre   )r`  z!TorchDynamo compilation metrics:
)ÚFunctionzRuntimes (s)r—   Úcsvc                ó
   • U S $ )Nz.6frK   rd  s    rf   rf  rg  R  s
   € ¨1¨S¨'¨
re   N)r_  zlist[float]r`  zCallable[[float], str]rŽ   rž   )rž   rU   r£   r_  ÚlistÚkeys)	rY  rZ  ra  Úkr§   rÏ   Úvr_  r˜   s	    `       rf   r[  r[  3  sÕ   ø€ ô  GJ÷ /ñ /ð
 ˆuƒ}õ .ó
â-�ð �Ô/°Ñ2Ñ<PÑQÓRÙ-ð 	ð 
ð 3ˆØŒx˜Ð&BÑCÑCˆØˆ
Ø	�‹ô .×4Ñ4Ô6ó
â6�ñ �1Ñ2Ô3Ù6ð 	ð 
ô Ô/×4Ñ4Ó6Ó7ˆØˆÐØùò
ùò
s   ŸBÁ(B"c                 ó>   • [         R                  [        SSS95        g )Nrž   TrX  )r‹   Úinfor[  rK   re   rf   Údump_compile_timesrq  Z  s   € ä‡H�HŒ] °Ñ6Õ7re   c                  ó6   • \ rS rSrSSS jjrS	S jrS
S jrSrg)ÚDuplicateWarningCheckerim  c                ó0   • Xl         U R                  5         g r{   )ÚmaxsizeÚreset)Úselfru  s     rf   Ú__init__Ú DuplicateWarningChecker.__init__n  s   € ØŒØ�
‰
�re   c                ó"   • [        5       U l        g r{   )r   Úset©rw  s    rf   rv  ÚDuplicateWarningChecker.resetr  s   € Ü*5«-ˆ�re   c                óf  • XR                   ;   a2  U R                   R                  USS9  [        R                  (       d  g gS U R                   U'   [	        U R                   5      U R
                  :”  a>  U R                   R                  SS9  [	        U R                   5      U R
                  :”  a  M>  g)NT)ÚlastF)r{  Úmove_to_endrI   ÚverboseÚlenru  Úpopitem©rw  rÐ   s     rf   ÚaddÚDuplicateWarningChecker.addu  s‡   € Ø—(‘(‹?Ø�H‰H× Ñ  ¨4Ð Ñ0Ü—>—>Øð "ð ð !ˆD�H‰H�S‰MÜ�d—h‘h“- $§,¡,Ó.Ø—‘× Ñ  eÐ Ñ,ô �d—h‘h“- $§,¡,Õ.àre   )ru  r{  N)é   )ru  r�   rŽ   r�   r�   )rÐ   z!Union[str, tuple[object, object]]rŽ   r&  )r]   r^   r_   r`   rx  rv  r…  rd   rK   re   rf   rs  rs  m  s   † öô8÷	re   rs  c                 ó”   • [         R                  R                  SS5      S:H  n U (       a
  [        5       $ [        R
                  " 5       $ )NÚTORCH_COMPILE_DEBUGÚ0Ú1)ÚosÚenvironr€   Úadd_file_handlerr@  rA  )Úcompile_debugs    rf   Úsetup_compile_debugr�  „  s7   € Ü—J‘J—N‘NÐ#8¸#Ó>À#ÑE€MæÜÓ!Ð!ä×ÒÓ!Ð!re   c                 ó,   • [         R                  5         g r{   )Úgraph_break_dup_warning_checkerrv  rK   re   rf   Úreset_graph_break_dup_checkerr“  �  s   € Ü#×)Ñ)Õ+re   z§
    \x1B            # ESC
    \[              # [
    [0-?]*          # Parameter bytes
    [ -/]*          # Intermediate bytes
    [@-~]           # Final byte
    c                  ó,   ^ • \ rS rSrSrU 4S jrSrU =r$ )ÚStripAnsiFormatteriž  z0Logging formatter that strips ANSI escape codes.c                óN   >• [         TU ]  U5      n[        R                  SU5      $ )NÚ )ÚsuperÚformatÚANSI_ESCAPE_PATTERNÚsub)rw  ÚrecordÚmsgÚ	__class__s      €rf   r™  ÚStripAnsiFormatter.format¡  s$   ø€ Ü‰g‰n˜VÓ$ˆÜ"×&Ñ& r¨3Ó/Ð/re   rK   )r]   r^   r_   r`   rÛ   r™  rd   Ú__classcell__©rž  s   @rf   r•  r•  ž  s   ø† Ù:÷0ó 0re   r•  c                 óÄ  ^^• [         R                  R                  [        5       S5      n [         R                  " U SS9  [
        R                  " [         R                  R                  U S5      5      mTR                  [        S5      5        [
        R                  " S5      mTR                  T5        [        R                  " 5       nUR                  UU4S j5        U$ )NÚtorchdynamoT©Úexist_okz	debug.logz%(message)sztorch._dynamoc                 ó&   >• TR                  T 5      $ r{   ©ÚremoveHandler©Úlog_file_handlerÚloggers   €€rf   rf  Ú"add_file_handler.<locals>.<lambda>°  s   ø€ ˜v×3Ñ3Ð4DÔEre   )rŒ  Úpathrœ   Úget_debug_dirÚmakedirsÚloggingÚFileHandlerÚsetFormatterr•  Ú	getLoggerÚ
addHandlerr@  rA  Úcallback)Úlog_pathÚ	exitstackrª  r«  s     @@rf   rŽ  rŽ  ¦  s�   ù€ Ü�w‰w�|‰|œM›O¨]Ó;€HÜ‡K‚K� 4Ò(ä×*Ò*¬2¯7©7¯<©<¸À+Ó+NÓOÐØ×!Ñ!Ô"4°]Ó"CÔDÜ×Ò˜Ó/€FØ
×ÑÐ&Ô'ä×$Ò$Ó&€IØ×ÑÕEÔFØÐre   c                 óN  ^^• [         R                  " 5       n [        R                  b|  [        R
                  " [        R                  5      m[        R                  R                  R                  5        H*  mTR                  T5        U R                  UU4S j5        M,     U $ U $ )Nc                 ó&   >• TR                  T 5      $ r{   r§  r©  s   €€rf   rf  Ú setup_log_file.<locals>.<lambda>º  s   ø€  v×';Ñ';Ð<LÔ'Mre   )r@  rA  rI   Úlog_file_namer°  r±  r6  Ú_loggingÚ	_internalÚget_loggersr´  rµ  )r·  rª  r«  s    @@rf   Úsetup_log_filer¿  ´  s}   ù€ Ü×$Ò$Ó&€IÜ×ÑÑ'Ü"×.Ò.¬v×/CÑ/CÓDÐÜ—n‘n×.Ñ.×:Ñ:Ö<ˆFØ×ÑÐ.Ô/Ø×ÑÕMÖNñ =ð ÐàÐre   c                ó|   • [        5        SUR                   S[        U 5      R                   SUR                   S3$ )Nz/error_recordings/Ú_z.rec)r®  Úco_nameÚtyper]   Úco_firstlineno)ÚexcÚcodes     rf   Úgen_record_file_namerÇ  À  sB   € Ü‹oÐð Ø‡�€ˆa”�S“	×"Ñ"Ð# 1 T×%8Ñ%8Ð$9¸ð?ð ?re   c                óš  •  [         R                  R                  U 5      (       a  [        R	                  SU 5        g [         R
                  " [         R                  R                  U 5      SS9  [        U S5       nUR                  U5        S S S 5        g ! , (       d  f       g = f! [         a    [        R                  SU 5         g f = f)Nz9Unable to write execution record %s; file already exists.Tr¤  Úwbz#Unable to write execution record %s)rŒ  r­  Úexistsr‹   Úwarningr¯  ÚdirnameÚopenÚdumpÚ	ExceptionÚ	exception)ÚfilenameÚexec_recordÚfs      rf   Úwrite_record_to_filerÔ  Å  sŽ   € ð
GÜ�7‰7�>‰>˜(×#Ñ#Ü�K‰KØKÈXõô �KŠKœŸ™Ÿ™¨Ó1¸DÒAÜ�h Ô%¨Ø× Ñ  Ô#÷ &×%Ö%ûäó GÜ�‰Ð;¸XÖFðGús4   ‚:B' ½>B' Á;BÂB' Â
B$Â B' Â$B' Â' C
Ã	C
c                ó^   • SnU R                    H  nSUR                  ;   d  M  US-  nM     U$ )Nr   Úcallr2   )ÚnodesÚop)ÚgÚcÚns      rf   Úcount_callsrÜ  Ó  s0   € Ø	€AØ�WŒWˆØ�Q—T‘T�>Ø�‰FŠAñ ð €Hre   c                ó   • U $ r{   rK   rd  s    rf   ÚidentityrÞ  Û  s   € Ø€Hre   c                óR   •  [        U 5        g! [         a     g[         a     gf = f©NTF)ÚhashÚ	TypeErrorÚ
ValueErrorrd  s    rf   Úhashablerä  ß  s.   € ðÜˆQŒØøÜó Ùäó Ùðús   ‚ Ž
&š	&¥&c                 ó   • g r{   rK   ©r   r!  s     rf   Únothingrç  ê  s   € Øre   c                  ób   • \ rS rSrSrSS jrSS jrSSS jjrSS jrSS jr	SS	 jr
SS
 jrSrg)ÚExactWeakKeyDictionaryiî  z\Similar to weakref.WeakKeyDictionary, but use `is`/`id` rather than `==` to compare equalityc                ó    • 0 U l         0 U l        g r{   ©r_  Úrefsr|  s    rf   rx  ÚExactWeakKeyDictionary.__init__ñ  s   € Ø&(ˆŒØ;=ˆ�	re   c                ó2   • U R                   [        U5         $ r{   )r_  Úidr„  s     rf   Ú__getitem__Ú"ExactWeakKeyDictionary.__getitem__õ  s   € Ø�{‰{œ2˜c›7Ñ#Ð#re   Nc                óL   • U R                   R                  [        U5      U5      $ r{   )r_  r€   rï  )rw  rÐ   Údefaults      rf   r€   ÚExactWeakKeyDictionary.getø  s   € Ø�{‰{�‰œr #›w¨Ó0Ð0re   c                ó2   • [        U5      U R                  ;   $ r{   )rï  r_  r„  s     rf   Ú__contains__Ú#ExactWeakKeyDictionary.__contains__û  s   € Ü�#‹w˜$Ÿ+™+Ñ%Ð%re   c                ó®   ^ ^• [        U5      mTT R                  ;  a)  [        R                  " UUU 4S j5      T R                  T'   UT R                  T'   g )Nc                ó&   >• TR                  T5      $ r{   )Ú
_remove_id)ÚrefÚidxrw  s    €€rf   rf  Ú4ExactWeakKeyDictionary.__setitem__.<locals>.<lambda>  s   ø€ ¸$¿/¹/È#Ô:Nre   )rï  rì  Úweakrefrû  r_  )rw  rÐ   rÑ   rü  s   `  @rf   Ú__setitem__Ú"ExactWeakKeyDictionary.__setitem__þ  s?   ù€ Ü�‹gˆØ�d—i‘iÓÜ$Ÿ[š[¨Õ.NÓOˆD�I‰I�c‰NØ ˆ�‰�CÒre   c                óv   • XR                   ;   a  U R                   U	 XR                  ;   a  U R                  U	 g g r{   rë  )rw  rü  s     rf   rú  Ú!ExactWeakKeyDictionary._remove_id  s2   € Ø—+‘+ÓØ—‘˜CÐ Ø—)‘)ÓØ—	‘	˜#‘ð re   c                ól   • U R                   R                  5         U R                  R                  5         g r{   )rì  r|   r_  r|  s    rf   r|   ÚExactWeakKeyDictionary.clear
  s    € Ø�	‰	�‰ÔØ�‰×ÑÕre   )rì  r_  r�   )rÐ   r   rŽ   r   r{   )rÐ   r   ró  r   rŽ   r   )rÐ   r   rŽ   r&  )rÐ   r   rÑ   r   rŽ   r�   ©rü  r�   rŽ   r�   )r]   r^   r_   r`   rÛ   rx  rð  r€   rö  rÿ  rú  r|   rd   rK   re   rf   ré  ré  î  s(   † Ùfô>ô$ö1ô&ô!ô÷re   ré  c                ó   • g r{   rK   ©ÚobjÚallowed_typess     rf   Úistyper
    s   € Ø>Are   c                ó   • g r{   rK   r  s     rf   r
  r
    s   € ð re   c                ó   • g r{   rK   r  s     rf   r
  r
    s   € Ø@Cre   c                óx   • [        U[        [        [        45      (       a  [	        U 5      U;   $ [	        U 5      UL $ )zisinstance() without subclasses)Ú
isinstanceÚtuplerk  r{  rÃ  r  s     rf   r
  r
    s4   € ä�-¤%¬¬sÐ!3×4Ñ4Ü�C‹y˜MÑ)Ð)Ü�‹9˜Ð%Ð%re   ©r\   é   )r\   é   c                óî   • [         R                  S:¼  a  [        U [        5      (       a  g[        U [        R
                  5      =(       d+    U [        R                  L =(       d    U [        R                  L $ )Nr  T)ÚsysÚversion_infor  Ú_builtin_final_typing_classesÚtypingÚ_Finalr   r   ©rÑ   s    rf   Ú	is_typingr  7  sW   € ô ×Ñ˜7Ó"¤z°%Ô9V×'WÑ'WØä�5œ&Ÿ-™-Ó(÷ 	!Ø”F—N‘NÐ"÷	!à”F—L‘LÐ ðre   c                ó"  • [         (       d  g[        U [         R                  [         R                  [         R                  [         R
                  [         R                  [         R                  [         R                  [         R                  45      $ ©NF)
Únpr
  Úint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64r  s    rf   Úis_numpy_int_typer&  I  sW   € ßŠ2ØäØä�G‰GÜ�H‰HÜ�H‰HÜ�H‰HÜ�H‰HÜ�I‰IÜ�I‰IÜ�I‰Ið		
óð re   c                óŒ   • [         (       d  g[        U [         R                  [         R                  [         R                  45      $ r  )r  r
  Úfloat16Úfloat32Úfloat64r  s    rf   Úis_numpy_float_typer+  \  s4   € ßŠ2ØäØä�J‰JÜ�J‰JÜ�J‰Jð	
óð re   c                ó   • g r{   rK   r  s    rf   Úis_lru_cache_wrapped_functionr-  j  s   € ð 25re   c                ó   • g r{   rK   r  s    rf   r-  r-  p  s   € ð 47re   c                ó„   • [        U [        R                  5      =(       a     [        [        R
                  " U S5      5      $ )NÚ__wrapped__)r  Ú	functoolsÚ_lru_cache_wrapperÚis_functionÚinspectÚgetattr_staticr  s    rf   r-  r-  v  s6   € ô �eœY×9Ñ9Ó:÷ ¼{Ü×Ò˜u mÓ4ó@ð re   r   Ú
_FuncTypesc                ó¢   • [        U 5      =(       d>    [        U [        R                  R                  [        R                  R
                  45      $ r{   )r3  r  r6  Ú_opsÚOpOverloadPacketÚ
OpOverloadr  s    rf   Úis_function_or_wrapperr;  †  s;   € ô �uÓ÷ ¤Ø”—
‘
×+Ñ+¬U¯Z©Z×-BÑ-BÐCó"ð re   c                ó’   • [        U [        R                  [        R                  [        R                  [        R
                  45      $ r{   )r  ÚtypesÚFunctionTypeÚBuiltinFunctionTypeÚMethodDescriptorTypeÚWrapperDescriptorTyper  s    rf   r3  r3  Ž  s=   € ô Øä×ÑÜ×%Ñ%Ü×&Ñ&Ü×'Ñ'ð		
óð re   )Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__z==z!=Ú<z<=Ú>z>=c                ó°   • [        U [        R                  [        R                  [        R                  [        R
                  [        R                  45      $ r{   )r  r=  ÚGetSetDescriptorTyper@  rA  ÚMemberDescriptorTyper   r  s    rf   Úis_wrapper_or_member_descriptorrM  °  sH   € ô Øô ×&Ñ&ä×&Ñ&ä×'Ñ'ä×&Ñ&ä×#Ñ#ð	
óð re   c                ó   • [        U 5      S   $ r­   )Ú unwrap_with_attr_name_if_wrapper)Úfns    rf   Úunwrap_if_wrapperrQ  Ì  s   € Ü+¨BÓ/°Ñ2Ð2re   c                ó    • [        U 5      (       a:  [        R                  " U SS5      (       a  [        R                  " U SU 5      n SnX4$ S nX4$ )NÚ_torchdynamo_inlineF)r3  r4  r5  )rP  Ú	attr_names     rf   rO  rO  Ð  sU   € ô �2‡�œ7×1Ò1°"Ð6KÈU×SÑSÜ×#Ò# BÐ(=¸rÓBˆØ)ˆ	ð ˆ=Ðð ˆ	Øˆ=Ðre   c                óN   • [         (       d  g[        U [         R                  5      $ r  )r  r
  Úndarrayr  s    rf   Úis_numpy_ndarrayrW  Û  s   € ßŠ2Øä�%œŸ™Ó$Ð$re   c                óÊ   • [         R                  [         R                  R                  /[        R
                  Q7nU[         R                  R                  4-   n[        X5      $ )zCheck of obj is a tensor)	r6  ÚTensorÚnnÚ	ParameterrI   Útraceable_tensor_subclassesÚ_subclassesrL   r
  )r  Útensor_lists     rf   Úistensorr_  â  sU   € ô 	�‰Ü�‰×Ñð%ô 
×	+Ñ	+ñ%€Kð
 ¤×!2Ñ!2×!=Ñ!=Ð ?Ñ?€KÜ�#Ó#Ð#re   c                ó"   • [        U [        5      $ r{   )r  r-   )Úmods    rf   Úis_lazy_modulerb  í  s   € Ü�cœ?Ó+Ð+re   r‡  c                 ó   • [        U 6   g r{   )rÎ   ©r   s    rf   Ú
print_oncere  ñ  s	   € ä	ˆ4‚Lre   c                ó†   ^• U mSU4S jjnUR                   b  [        UR                   5      S:X  d   eUR                   S   $ )zNSome black magic to create a cell object that usually only exists in a closurec                 ó   >• T $ r{   rK   rd  s   €rf   rÓ  Úmake_cell.<locals>.fú  s   ø€ Øˆre   r2   r   )rŽ   r   )Ú__closure__r‚  )ÚvalrÓ  re  s     @rf   Ú	make_cellrk  ö  s>   ø€ à€A÷ð �=‰=Ñ$¬¨Q¯]©]Ó);¸qÓ)@Ð@Ð@Ø�=‰=˜ÑÐre   c                ó>  •  [        S U  5       5      nUR                  5        VVs0 s H  u  p4X4R                  5       _M     nnnX%4$ s  snnf ! [         aC  nSSKJn  SSKJn  U" SSU" U 6  SU" [        UR                  5       5      6  3S/ US	9   S nAg S nAff = f)
Nc              3  ó@   #   • U  H  oR                  5       v •  M     g 7fr{   )Úas_proxy©rŸ   Úargs     rf   r¡   Ú$proxy_args_kwargs.<locals>.<genexpr>  s   é € Ð:²T¨cŸ<™<Ÿ>˜>²Tùó   ‚r2   ©Úunimplemented)Útypestrz&Failed to convert args/kwargs to proxyzcall_function args: rÊ   z7Missing `as_proxy()` implementation for some arg/kwarg.©Úgb_typeÚcontextÚexplanationÚhintsÚfrom_exc)
r  rÄ   rn  ÚNotImplementedErrorrÅ  rt  Úvariables.baseru  rk  r_  )	r   r!  Ú
proxy_argsrÐ   rp  Úproxy_kwargsÚert  ru  s	            rf   Úproxy_args_kwargsr�    s›   € ð
ÜÑ:±TÓ:Ó:ˆ
Ø<B¿L¹L¼NÔKºN±°˜Ÿ\™\›^Ò+¹NˆÑKØÐ'Ð'ùó Løäó 

Ý&Ý+áØ<Ø*©7°D¨>Ð*:¸!¹GÄTÈ&Ï-É-Ë/ÓEZÐ<[Ð;\Ð]ØQØØ÷	
ûð	

ús(   ‚%A §A	ÁA Á	A Á
BÁ9BÂBc                ó(   • U c  S $ [        U S-  5      $ ©Nr0  ©r�   ©rn  s    rf   Ú	to_int_msr†    s   € Ø‘9ˆ4Ð/¤# a¨$¡h£-Ð/re   c                ó(   • U c  S $ [        U S-  5      $ )Ni@B r„  r…  s    rf   Ú	to_int_usrˆ    s   € Ø‘9ˆ4Ð4¤# a¨)¡mÓ"4Ð4re   r\   c                  ó2  • \ rS rSr% SrS\S'   SrS\S'   SrS\S'   SrS\S'   Sr	S\S	'   Sr
S\S
'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS \S!'   SrS \S"'   Sr S\S#'   Sr!S$\S%'   Sr"S\S&'   Sr#S\S''   Sr$S$\S('   Sr%S$\S)'   Sr&S$\S*'   Sr'S\S+'   Sr(S\S,'   Sr)S$\S-'   Sr*S\S.'   Sr+S\S/'   Sr,S\S0'   Sr-S\S1'   Sr.S\S2'   Sr/S\S3'   Sr0S\S4'   Sr1S\S5'   Sr2S\S6'   Sr3S\S7'   Sr4S\S8'   Sr5S\S9'   Sr6S\S:'   Sr7S\S;'   Sr8S\S<'   Sr9S\S='   Sr:S\S>'   Sr;S\S?'   Sr<S\S@'   Sr=S\SA'   Sr>S\SB'   Sr?S\SC'   \@rASD\SE'   SrBS\SF'   SrCS\SG'   SrDS\SH'   SrES\SI'   SrFS\SJ'   SrGS\SK'   SrHS\SL'   SrIS\SM'   SrJS\SN'   SrKSO\SP'   SrLS\SQ'   SRrMS$\SS'   SrNS\ST'   SrOS$\SU'   SrPS$\SV'   SrQS\SW'   SrRS\SX'   SrSS\SY'   SrTS\SZ'   SrUS\S['   SrVS\S\'   SrWS\S]'   SrXS\S^'   SrYS\S_'   SrZS\S`'   Sr[S\Sa'   Sr\S\Sb'   Sr]S\Sc'   Sr^S\Sd'   SRr_S$\Se'   Sr`S\Sf'   SraS\Sg'   \bSjSh j5       rcSirdg)kÚCompilationMetricsi"  NúOptional[str]r2  Ú	frame_keyrÂ  Úco_filenamer$  rÄ  Ú
cache_sizeÚaccumulated_cache_sizeÚguard_countÚshape_env_guard_countÚgraph_op_countÚgraph_node_countÚgraph_input_countúOptional[float]Ú
start_timeÚentire_frame_compile_time_sÚbackend_compile_time_sÚinductor_compile_time_sÚcode_gen_time_sÚ	fail_typeÚfail_reasonÚfail_user_frame_filenameÚfail_user_frame_linenozOptional[set[str]]Únon_compliant_opsÚcompliant_custom_opsÚrestart_reasonsÚdynamo_time_before_restart_szOptional[list[str]]Ústack_traceÚexception_stack_traceÚgraph_node_shapesúOptional[bool]Úhas_guarded_codeÚremote_cache_time_saved_sÚstructured_logging_overhead_sÚconfig_suppress_errorsÚ config_inline_inbuilt_nn_modulesÚspecialize_floatÚdynamo_configÚcompiler_configr4  Únum_triton_bundlesÚ!remote_fx_graph_cache_get_time_msÚ!remote_fx_graph_cache_put_time_msÚstart_time_usr1  Ú!dynamo_cumulative_compile_time_usÚ'aot_autograd_cumulative_compile_time_usÚ#inductor_cumulative_compile_time_usÚ,inductor_code_gen_cumulative_compile_time_usÚtriton_compile_time_usÚruntime_cudagraphify_time_usÚruntime_triton_autotune_time_usÚ%dynamo_compile_time_before_restart_usÚ distributed_ephemeral_timeout_usÚstructured_logging_overhead_usÚ!remote_fx_graph_cache_get_time_usÚ!remote_fx_graph_cache_put_time_usÚ#backward_cumulative_compile_time_usÚend_time_usÚpre_grad_pass_time_usÚpost_grad_pass_time_usÚjoint_graph_pass_time_usr�   Úlog_format_versionÚinductor_configÚremote_cache_versionÚ"inductor_fx_remote_cache_hit_countÚ#inductor_fx_remote_cache_miss_countÚ%inductor_fx_remote_cache_backend_typeÚ!inductor_fx_remote_cache_hit_keysÚ"inductor_fx_remote_cache_miss_keysÚcuda_versionÚtriton_versionzOptional[dict[str, bool]]Úfeature_usageÚcompile_time_autotune_time_usFr3  Ú
gc_time_usÚtensorify_float_attemptÚtensorify_float_successÚtensorify_float_failureÚguard_latency_usÚrecompile_reasonÚnum_graph_breaksÚtriton_kernel_compile_times_usÚir_countÚcudagraph_skip_reasonÚpython_versionÚ!pgo_put_remote_code_state_time_usÚ!pgo_get_remote_code_state_time_usÚparam_numelÚparam_bytesÚparam_countÚrecompile_user_contextsÚ#inline_inbuilt_nn_modules_candidateÚpytorch_versionÚinductor_provenancec                óÄ  • SS jnSS jnSS jnSS jnU" UR                  S5      5      U" UR                  S5      5      U" UR                  S5      5      U" UR                  S5      5      U" UR                  S	5      5      U" UR                  S
5      5      U" UR                  S5      5      U" UR                  S5      5      U" UR                  S5      5      S.	n0 UEUEnU" UR                  S5      5      US'   U" UR                  S5      5      US'   U" UR                  S5      5      US'   UR                  S5      nU(       a  [        U5      OSUS'   U " S0 UD6$ )zÓ
Factory method to create a CompilationMetrics from a dict of fields.
Includes the logic to add legacy fields and any pre-processing, e.g.,
we transform some fields to comma-separated strings for scuba logging.
c                ó   • U b  U S-  $ S $ )Ng    €„.ArK   ©Úmetrics    rf   Úus_to_sÚ*CompilationMetrics.create.<locals>.us_to_s’  s   € Ø#)Ñ#5�6˜C‘<Ð?¸4Ð?re   c                ó   • U b  U S-  $ S $ rƒ  rK   ræ  s    rf   Úus_to_msÚ+CompilationMetrics.create.<locals>.us_to_ms•  s   € Ø%+Ñ%7�6˜T‘>ÐA¸TÐAre   c                ó–   ^• SS jmU c  g [        U [        [        45      (       d  gSR                  U4S j[	        U 5       5       5      $ )Nc                ó:   •  [        U 5      $ ! [         a     gf = f©Nú	<unknown>)rž   rÏ  )Úitems    rf   Úsafe_strÚFCompilationMetrics.create.<locals>.collection_to_str.<locals>.safe_str™  s#   € ð'Ü˜t›9Ð$øÜ ó 'Ù&ð'ús   ‚
 �
™rð  Ú,c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr{   rK   )rŸ   rñ  rò  s     €rf   r¡   ÚGCompilationMetrics.create.<locals>.collection_to_str.<locals>.<genexpr>¥  s   øé € ÐF²~¨t™H TŸN˜N²~ùó   ƒ)rñ  r   rŽ   rž   )r  r{  rk  rœ   Úsorted)rç  rò  s    @rf   Úcollection_to_strÚ4CompilationMetrics.create.<locals>.collection_to_str˜  s?   ø€ ô'ð ‰~Øä˜f¤s¬D k×2Ñ2Ø"à—8‘8ÔF´v¸f´~ÓFÓFÐFre   c                ój   • U c  g  [         R                  " [        U 5      5      $ ! [         a     gf = frï  )ÚjsonÚdumpsrk  rÏ  ræ  s    rf   Úcollection_to_json_strÚ9CompilationMetrics.create.<locals>.collection_to_json_str§  s4   € Ø‰~Øð#Ü—z’z¤$ v£,Ó/Ð/øÜó #Ù"ð#ús   †% ¥
2±2r²  r³  r´  rµ  r¶  r»  r½  r¾  r¼  )	r–  r—  r˜  r™  rš  r¨  r°  r±  r©  rÊ  rË  r×  r2  N)rç  r$  rŽ   r•  )rç  r$  rŽ   r$  )rç  úOptional[Any]rŽ   r‹  rK   )r€   rž   )	ro   rH  rè  rë  rù  rþ  Úlegacy_metricsÚall_metricsr2  s	            rf   ÚcreateÚCompilationMetrics.createŠ  sŒ  € ô	@ô	Bô	Gô	#ñ " '§+¡+¨oÓ">Ó?Ù+2Ø—‘Ð?Ó@ó,ñ '.Ø—‘ÐEÓFó'ñ (/Ø—‘ÐAÓBó(ñ  'Ø—‘ÐJÓKó ñ *1Ø—‘Ð>Ó?ó*ñ 2:Ø—‘Ð?Ó@ó2ñ 2:Ø—‘Ð?Ó@ó2ñ .5Ø—‘Ð<Ó=ó.ñ/
ˆð8 4˜Ð3¨7Ð3ˆñ <MØ�O‰OÐ?Ó@ó<
ˆÐ7Ñ8ñ =NØ�O‰OÐ@ÓAó=
ˆÐ8Ñ9ñ 9OØ�O‰OÐ<Ó=ó9
ˆÐ4Ñ5ð !—_‘_ \Ó2ˆ
Þ7A¤C¨
¤OÀtˆ�LÑ!ñ Ñ!�[Ñ!Ð!re   rK   )rH  rS   rŽ   rŠ  )er]   r^   r_   r`   r2  r”   rŒ  rÂ  r�  rÄ  rŽ  r�  r�  r‘  r’  r“  r”  r–  r—  r˜  r™  rš  r›  rœ  r�  rž  rŸ  r   r¡  r¢  r£  r¤  r¥  r§  r¨  r©  rª  r«  r¬  r­  r®  r4  r¯  r°  r±  r²  r1  r³  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  ÚLOG_FORMAT_VERSIONrÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  r3  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  r•   r  rd   rK   re   rf   rŠ  rŠ  "  sû  ‡ à $€J�Ó$Ø#€Iˆ}Ó#Ø!€Gˆ]Ó!Ø!%€K�Ó%Ø$(€N�MÓ(Ø $€J�Ó$Ø,0Ð˜MÓ0Ø!%€K�Ó%Ø+/Ð˜=Ó/Ø$(€N�MÓ(Ø&*Ð�mÓ*Ø'+Ð�}Ó+Ø"&€J�Ó&Ø37Ð Ó7Ø.2Ð˜OÓ2Ø/3Ð˜_Ó3Ø'+€O�_Ó+Ø#€Iˆ}Ó#Ø!%€K�Ó%Ø.2Ð˜mÓ2Ø,0Ð˜MÓ0Ø,0ÐÐ)Ó0Ø/3ÐÐ,Ó3Ø*.€OÐ'Ó.Ø48Ð  /Ó8Ø'+€KÐ$Ó+Ø15ÐÐ.Ó5Ø'+Ð�}Ó+ð (,Ð�nÓ+Ø15Ð˜Ó5Ø59Ð! ?Ó9Ø-1Ð˜NÓ1Ø7;Ð$ nÓ;Ø'+Ð�nÓ+Ø#'€M�=Ó'Ø%)€O�]Ó)Ø!%€J�Ó%Ø(,Ð˜Ó,Ø7;Ð% }Ó;Ø7;Ð% }Ó;Ø#'€M�=Ó'Ø!%€K�Ó%Ø7;Ð% }Ó;Ø=AÐ+¨]ÓAØ9=Ð'¨Ó=ØBFÐ0°-ÓFØ,0Ð˜MÓ0Ø26Ð  -Ó6Ø59Ð# ]Ó9Ø;?Ð)¨=Ó?Ø6:Ð$ mÓ:Ø48Ð" MÓ8Ø7;Ð% }Ó;Ø7;Ð% }Ó;Ø9=Ð'¨Ó=Ø!%€K�Ó%Ø+/Ð˜=Ó/Ø,0Ð˜MÓ0Ø.2Ð˜mÓ2Ø0Ð˜Ó0Ø%)€O�]Ó)Ø*.Ð˜-Ó.Ø8<Ð&¨Ó<Ø9=Ð'¨Ó=Ø;?Ð)¨=Ó?Ø7;Ð% }Ó;Ø8<Ð&¨Ó<Ø"&€L�-Ó&Ø$(€N�MÓ(Ø/3€MÐ,Ó3Ø37Ð! =Ó7Ø!&€J�Ó&Ø $€J�Ó$Ø.2Ð˜^Ó2Ø.2Ð˜^Ó2Ø26ÐÐ/Ó6Ø(,Ð�oÓ,Ø&*Ð�mÓ*Ø&*Ð�mÓ*Ø48Ð" MÓ8Ø"€HˆmÓ"Ø+/Ð˜=Ó/Ø$(€N�MÓ(Ø7;Ð% }Ó;Ø7;Ð% }Ó;ð "&€K�Ó%ð "&€K�Ó%ð "&€K�Ó%Ø26ÐÐ/Ó6Ø:?Ð'¨Ó?Ø%)€O�]Ó)Ø.2ÐÐ+Ó2àóR"ó óR"re   rŠ  é@   ©Úmaxlenz%collections.deque[CompilationMetrics]Ú_compilation_metricsc                óÄ  • [        5       nUR                  5       nU(       d  gUR                  UU R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                   U R"                  U R$                  b  ['        U R$                  5      OSU R(                  b  ['        U R(                  5      OSU R*                  b  ['        U R*                  5      OSU R,                  U R.                  U R0                  S9  g)aî  
These are the common fields in CompilationMetrics that existed before
metrics_context, and aren't set by MetricsContext.set(). We add the subset
of them that make sense in `dynamo`/toplevel events in PT2 Compile Events
directly.

If you're tempted to add to this list, consider using CompileEventLogger.compilation_metric()
instead, which will automatically also add it to tlparse and PT2 Compile Events.
TODO: Get rid of this function and replace it with CompileEventLogger directly instead.
N)rç   rŒ  rÂ  r�  rÄ  rŽ  r�  r�  r‘  r’  r“  r”  r›  rœ  r�  rž  rŸ  r   r¡  r¢  r§  r­  )rä   rð   rï   rŒ  rÂ  r�  rÄ  rŽ  r�  r�  r‘  r’  r“  r”  r›  rœ  r�  rž  rŸ  rk  r   r¡  r¢  r§  r­  )rÚ  Úevent_loggerrç   s      rf   Ú#add_compilation_metrics_to_chromiumr  è  s   € ô -Ó.€LØ×1Ñ1Ó3€JÞØØ×ÑØØ—+‘+Ø—	‘	Ø—M‘MØ×'Ñ'Ø—<‘<Ø ×7Ñ7Ø—M‘MØ×5Ñ5Ø×'Ñ'Ø×+Ñ+Ø×-Ñ-Ø—+‘+Ø—M‘MØ!"×!;Ñ!;Ø ×7Ñ7ð *+×)<Ñ)<Ñ)HŒD�×$Ñ$Ô%Èdð -.×,BÑ,BÑ,NŒD�×'Ñ'Ô(ÐTXð ()×'8Ñ'8Ñ'DŒD�×"Ñ"Ô#È$à%&×%CÑ%CØ×+Ñ+Ø—o‘oð;  ò re   c                 ól   • SS jn U " [         R                  " 5       5      n[        R                  " USS9$ )Nc           	     ó°   • 1 SknU R                  5        VVs0 s H/  u  p#X!;  d  M  U[        U[        5      (       a  [        U5      OU_M1     snn$ s  snnf )N>   r�  Úbase_dirÚrepro_afterÚrepro_levelÚTYPE_CHECKINGr»  Údebug_dir_rootÚrepro_toleranceÚrepro_forward_onlyÚ_custom_ops_profileÚ_save_config_ignoreÚrepro_ignore_non_fpÚignore_logger_methodsÚlog_compilation_metricsÚsame_two_models_use_fp64r\  Úreorderable_logging_functionsÚnontraceable_tensor_subclassesÚ)_autograd_backward_strict_mode_banned_opsÚ+inject_BUILD_SET_unimplemented_TESTING_ONLY©rÄ   r  r{  rø  ©ÚdÚ	blocklistrÐ   rÑ   s       rf   Úclean_for_jsonÚ6_get_dynamo_config_for_logging.<locals>.clean_for_json  sX   € ò
ˆ	ð2  Ÿg™gœiô
â'‘
�ØÑ#ó DˆC¤*¨U´C×"8Ñ"8”˜”¸eÒCÙ'ò
ð 	
ùó 
s
   ˜A§'AT©Ú	sort_keys©r"  rS   rŽ   rS   )rI   Úget_config_copyrü  rý  )r$  Úconfig_dicts     rf   Ú_get_dynamo_config_for_loggingr+    s-   € ô
ñ< !¤×!7Ò!7Ó!9Ó:€KÜ�:Š:�k¨TÑ2Ð2re   c                 ó  • SS jn [         R                  R                  (       d  g  [         R                  R                  R                  5       nU " U5      n[        R                  " USS9$ ! [        [
        4 a     gf = f)Nc           	     ó®   • S1nU R                  5        VVs0 s H/  u  p#X!;  d  M  U[        U[        5      (       a  [        U5      OU_M1     snn$ s  snnf )Nr  r   r!  s       rf   r$  Ú4_compiler_config_for_logging.<locals>.clean_for_json<  s[   € àð
ˆ	ð  Ÿg™gœiô
â'‘
�ØÑ#ó DˆC¤*¨U´C×"8Ñ"8”˜”¸eÒCÙ'ò
ð 	
ùó 
s
   —A¦'Az!Compiler Config cannot be pickledTr&  r(  )r6  ÚcompilerrI   r)  râ  ÚAttributeErrorrü  rý  )r$  Úcompiler_config_copyr*  s      rf   Ú_compiler_config_for_loggingr2  ;  sn   € ô	
ô �>‰>× × Øð3Ü$Ÿ~™~×4Ñ4×DÑDÓFÐñ !Ð!5Ó6€KÜ�:Š:�k¨TÑ2Ð2øô	 ”~Ð&ó 3Ù2ð3ús   §(A, Á,A?Á>A?c                 ód  •  " S S[         R                  5      n [        5       nSnSn[        R                  R
                  (       a)   [        R                  R
                  R                  5       nUbˆ   UR                  5        HO  u  pE[        U[        5      (       d  UR                  U5        [        U[        5      (       d  MB  [        U5      X4'   MQ     U H  nX4	 M     [         R                   " UU SSS9nU$ U$ ! [        [        [        [        4 a    Sn N«f = f! ["         a    Sn U$ f = f)zF
Method to parse and scrub uninteresting configs from inductor config
c                  ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚA_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializeriZ  c                óD   >•  [         TU ]  U5      $ ! [         a     gf = f)NzValue is not JSON serializable)r˜  ró  rÏ  )rw  Úorž  s     €rf   ró  ÚI_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializer.default[  s)   ø€ ð8Ü‘w‘ qÓ)Ð)øÜó 8Ù7ð8ús   ƒ ’
žrK   )r7  r   rŽ   r   )r]   r^   r_   r`   ró  rd   r   r¡  s   @rf   ÚTypeSafeSerializerr5  Z  s   ø† ÷	8õ 	8re   r9  Nz!Inductor Config cannot be pickledT)ro   Úskipkeysr'  z(Inductor Config is not JSON serializable)rü  ÚJSONEncoderr{  r6  Ú	_inductorrI   r)  râ  r0  rå   ÚAssertionErrorrÄ   r  rž   r…  rk  rý  rÏ  )r9  Úkeys_to_scrubÚinductor_conf_strÚinductor_config_copyrÐ   rj  s         rf   Ú%_scrubbed_inductor_config_for_loggingrA  S  s*  € ô8œT×-Ñ-ô 8ô "›e€MØÐØÐä‡�××ð	DÜ#(§?¡?×#9Ñ#9×#IÑ#IÓ#KÐ ð Ñ'ð	KØ0×6Ñ6Ö8‘�Ü! #¤s×+Ñ+Ø!×%Ñ% cÔ*ä˜c¤3×'Ó'Ü04°S³	Ð(Ó-ñ 9ó %�Ø(Ò-ñ %ô !%§
¢
Ø$Ø&ØØñ	!Ðð ÐÐÐøô1 œ>¬<¼ÐHó 	DØ CÒð	Dûô* ó 	Kà JÑØÐð	Kús+   Á(C= Á4AD Ã3D Ã=DÄDÄD/Ä.D/c                ó’  ^• [         R                  R                  R                  5       (       a   SSKJn  UnSnOS nS nUR                  S5      nU(       d(  [         R                  R                  R                  5       n0 SU_SU S-  _SUS-  _SU(       a  UR                  OS _S	U(       a  [        U5      OS _S
[        [         R                  R                  5       5      _S[!        5       _S["        R$                  _S["        R&                  _S[)        5       _S[+        5       _S[         R,                  R.                  _S[1        5       (       a  [2        R4                  OS_SU_SU_S[6        R,                  _S[         R4                  _n	[8        R;                  0 U	EUE5      m[<        R?                  T5        Sn
TR@                  SL a  SU
-   n
TRB                  SL a  U
S-   n
[         R                  RE                  U
U4S jSUS9  [G        T5        ["        RH                  (       a  [K        T5        g g ! [         a    S nS n GNf = f)Nr   )ÚREMOTE_CACHE_VERSIONÚ_ManifoldCacher2  r²  r0  rÀ  r›  rœ  r¼  r­  rª  r«  rÅ  r®  rÌ  rÍ  r—  rÆ  rÉ  rÚ  râ  Úcompilation_metricsFÚbwd_TÚ_runtimec            	     óÄ   >• [         R                  " T5      R                  5        V Vs0 s H(  u  pU [        U[        5      (       a  [        U5      OU_M*     snn $ s  snn f r{   )ÚdataclassesÚasdictrÄ   r  r{  rk  )rm  rn  rE  s     €rf   rf  Ú,record_compilation_metrics.<locals>.<lambda>¾  sQ   ø€ ä#×*Ò*Ð+>Ó?×EÑEÔGô
âG‘�ð œ* Q¬×,Ñ,Œt�AŒw°!Ò3ÙGó
ùó 
s   ©/A)Úrecord_logging_overheadr2  )&r6  r<  ÚutilsÚ should_use_remote_fx_graph_cacheÚtorch._inductor.fb.remote_cacherC  ÚModuleNotFoundErrorr€   r:  r;  r<  r_   rž   rˆ  r¼  Úget_structured_logging_overheadr+  rI   Úsuppress_errorsÚinline_inbuilt_nn_modulesrA  r2  ÚversionÚcudar/   ÚtritonÚ__version__r  rŠ  r  r	  r²   r4  r3  Útrace_structuredr  r  r'   )Ústart_time_nsÚend_time_nsrH  Úexc_typeÚ	exc_valuerC  rÆ  rÉ  r2  Úcommon_metricsrn   rE  s              @rf   Úrecord_compilation_metricsr^  ƒ  ss  ø€ ô ‡�×Ñ×=Ñ=×?Ñ?ð	9ÝLà#7Ð Ø4DÑ1ð
 15Ð-Ø#Ðð —‘˜\Ó*€JÞÜ—]‘]×1Ñ1×DÑDÓFˆ
ðØ�jðà˜¨$Ñ.ðð 	�{ dÑ*ðð 	®h�X×*Ò*¸Dð	ð
 	®”s˜9”~¸ðð 	)¬)Ü�N‰N×:Ñ:Ó<ó+
ðð 	Ô7Ó9ðð 	!¤&×"8Ñ"8ðð 	+¬F×,LÑ,Lðð 	Ô@ÓBðð 	Ô7Ó9ðð 	œŸ™×*Ñ*ðð 	´
·±œ&×,Ò,À"ðð  	Ð 4ð!ð" 	0Ð1Vð#ð$ 	œ#Ÿ+™+ð%ð& 	œ5×,Ñ,ð'€Nô, -×3Ñ3Ð4Q°~Ð4QÈÐ4QÓRÐÜ×ÑÐ 3Ô4à €DØ×%Ñ%¨Ò.Ø˜‰}ˆØ×%Ñ%¨Ò-Ø�jÑ ˆä	‡N�N×#Ñ#Øô	
ð !&ð ð $ñ ô$ (Ð(;Ô<ô ×%×%ÜÐ1Õ2ð &øôC #ó 	9Ø#'Ð Ø48Ó1ð	9ús   °
H4 È4IÉI)Úon_exitc                ó²   • [        [        5      U :”  a)  [        R                  5         [        [        5      U :”  a  M)  [        R                  " [        U S9nUqg )Nr  )r‚  r	  Úpopleftr’   Údeque)Únew_sizeÚ	new_deques     rf   Úset_compilation_metrics_limitre  Ú  sE   € ä
Ô"Ó
# hÓ
.Ü×$Ñ$Ô&ô Ô"Ó
# hÕ
.ä×!Ò!Ô"6¸xÑH€IØ$Ñre   c                 ó,   • [         R                  5         g r{   )r	  r|   rK   re   rf   Úclear_compilation_metricsrg  â  s   € ä×ÑÕ re   c                 ó    • [        [        5      $ r{   )rk  r	  rK   re   rf   Úget_compilation_metricsri  ç  s   € ÜÔ$Ó%Ð%re   c                  ó0  • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
      SS	 jrSS
 jr        SS jr  S           SS jjrSS jr S             SS jjr S         SS jjr  S         S S jjrSrg)!ÚChromiumEventLoggerië  a  Logs chromium events to structured logs. tlparse will concatenate these into a perfetto UI link.

See https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview#heading=h.yr4qxyxotyw for
a specification of the Chromium Event JSON format.
c                ó²   • [        U R                  S5      (       a  U R                  R                  $ / U R                  l        U R                  R                  $ )zE
The main event stack, with every chromium event.
Logged to tlparse.
rO  )r>  ÚtlsrO  r|  s    rf   Ú	get_stackÚChromiumEventLogger.get_stackò  s<   € ô
 �4—8‘8˜W×%Ñ%Ø—8‘8—>‘>Ð!àˆD�H‰HŒNØ—8‘8—>‘>Ð!re   c                ó>   • U R                  5       nU(       a  US   $ S$ )z^
Get the outermost event name (i.e. the longest running event)
or None if the stack is empty.
r   N)rn  )rw  rO  s     rf   rð   Ú'ChromiumEventLogger.get_outermost_eventý  s!   € ð
 —‘Ó ˆÞ ˆu�Q‰xÐ* dÐ*re   c                ó²   • [        U R                  S5      (       a  U R                  R                  $ / U R                  l        U R                  R                  $ )zY
A smaller subset of the main stack that gets used to log
PT2 Compile Events internally.
rô   )r>  rm  rô   r|  s    rf   rî   Ú,ChromiumEventLogger.get_pt2_compile_substack  sB   € ô
 �4—8‘8Ð3×4Ñ4Ø—8‘8×0Ñ0Ð0à,.ˆD�H‰HÔ)Ø—8‘8×0Ñ0Ð0re   c                ó†   • [        U R                  S5      (       d  0 U R                  l        U R                  R                  $ )NÚ
event_data)r>  rm  ru  r|  s    rf   Úget_event_dataÚ"ChromiumEventLogger.get_event_data  s/   € Ü�t—x‘x ×.Ñ.Ø"$ˆD�H‰HÔØ�x‰x×"Ñ"Ð"re   c                ó@  • [         R                  " 5       U l        SSKJn  UR
                  (       a*  UR
                   S[        R                  " 5        3U l        O#[        [        R                  " 5       5      U l        [        R                  SU R                  5        g )Nr2   rH   Ú-z*ChromiumEventLogger initialized with id %s)Ú	threadingÚlocalrm  r—  rI   Úpt2_compile_id_prefixÚuuidÚuuid4Úid_rž   r‹   rp  )rw  rI   s     rf   rx  ÚChromiumEventLogger.__init__  sd   € Ü—?’?Ó$ˆŒåð ×'×'Ø ×6Ñ6Ð7°q¼¿º»¸ÐGˆD�Häœ4Ÿ:š:›<Ó(ˆDŒHô 	�‰Ð=¸t¿x¹xÕHre   c                óR   • XR                  5       ;  a  gU R                  " U40 UD6  g)zT
Same as add_event_data, but will silently not log if the event isn't in the stack.
N)rn  rï   )rw  rç   r!  s      rf   r  Ú&ChromiumEventLogger.try_add_event_data$  s'   € ð Ÿ^™^Ó-Ó-ØØ×Ò˜JÑ1¨&Ó1re   c                óÔ   • XR                  5       ;  a)  [        S[        U5       SU R                  5        S35      eU R                  5       nX;  a  0 X1'   X1   R	                  U5        g)zb
Adds additional metadata info to an in-progress event
This metadata is recorded in the END event
úEvent ú not in úq. Cannot add metadata to events that aren't in progress. Please make sure the event has started and hasn't ended.N)rn  rå   rY  rv  rò   )rw  rç   r!  ru  s       rf   rï   Ú"ChromiumEventLogger.add_event_data,  su   € ð Ÿ^™^Ó-Ó-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð
 ×(Ñ(Ó*ˆ
ØÓ'Ø%'ˆJÑ"ØÑ×%Ñ% fÕ-re   c                óê   • XR                  5       ;  a)  [        S[        U5       SU R                  5        S35      eU R                  5       nX;  a  0 XA'   X$U   ;  a  SXA   U'   XA   U==   U-  ss'   g)z;
Increment an integer event data field by the given amount
r„  r…  r†  r   N)rn  rå   rY  rv  ©rw  rç   rÐ   rÑ   ru  s        rf   rþ   ÚChromiumEventLogger.increment@  s�   € ð Ÿ^™^Ó-Ó-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð ×(Ñ(Ó*ˆ
ØÓ'Ø%'ˆJÑ"Ø Ñ,Ó,Ø*+ˆJÑ" 3Ñ'ØÑ˜sÓ# uÑ,Ô#re   c                ó  • XR                  5       ;  a)  [        S[        U5       SU R                  5        S35      eU R                  5       nX;  a  0 XA'   X$U   ;  a  [	        5       XA   U'   XA   U   R                  U5        g)zB
Add a value to a set within a event_name's metadata if it exists
r„  r…  r†  N)rn  rå   rY  rv  r{  r…  r‰  s        rf   r  ÚChromiumEventLogger.add_to_setR  s”   € ð Ÿ^™^Ó-Ó-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð
 ×(Ñ(Ó*ˆ
ØÓ'Ø%'ˆJÑ"Ø Ñ,Ó,Ü*-«%ˆJÑ" 3Ñ'ØÑ˜sÑ#×'Ñ'¨Õ.re   Nc                ó\  • U=(       d(    [         R                  R                  R                  5       n[	        U5      US'   U R                  UUSU5        U R                  5       R                  U5        U R                  " U40 UD6  U(       a   U R                  5       R                  U5        gg)aQ  
Logs the start of a single event.
:param str event_name Name of event to appear in trace
:param time_ns Timestamp in nanoseconds
:param metadata: Any extra metadata associated with this event
:param log_pt2_compile_event: If True, log to pt2_compile_events
:param compile_id: Explicit compile_id (rather than using the current context)
r2  ÚBN)
r6  r:  r;  r<  rž   Ú_log_timed_eventrn  r²   rï   rî   )rw  rç   rã   rè   rë   r2  s         rf   r5  Ú#ChromiumEventLogger.log_event_starth  s’   € ð   ×T¤5§=¡=×#?Ñ#?×#RÑ#RÓ#Tˆ
Ü!$ Z£ˆ�ÑØ×ÑØØØØô		
ð 	�‰Ó×Ñ 
Ô+à×Ò˜JÑ3¨(Ò3Þ Ø×)Ñ)Ó+×2Ñ2°:Õ>ð !re   c                óÄ   • U R                  5       nU R                  5       nUR                  5         UR                  5         U R                  5       nUR                  5         g r{   )rn  rî   r|   rv  )rw  rO  Úsubstackru  s       rf   rv  ÚChromiumEventLogger.reset†  sK   € ð —‘Ó ˆØ×0Ñ0Ó2ˆØ�‰ŒØ�‰ÔØ×(Ñ(Ó*ˆ
Ø×ÑÕre   c                ó4  ^• U=(       d(    [         R                  R                  R                  5       n[	        U5      US'   U R                  5       nTU;   a	  UT   nUT	 O0 nUR                  U5        U R                  TUSU5      n	SU4S jjn
U R                  5       nTU;  a  [        R                  S5        gU
" U5        U(       a?  U R                  5       nU
" U5        [        XœU R                  U5        UR                  5         UR                  5         g)aÞ  
Logs the end of a single event. This function should only be
called after log_event_start with the same event_name.
:param event_name: Name of event to appear in trace
:param time_ns: Timestamp in nanoseconds
:param metadata: Any extra metadata associated with this event
:param start_time_ns: The start time timestamp in nanoseconds
:param log_pt_compile_event: If True, log to pt2_compile_events
:param compile_id: Explicit compile_id (rather than using the current context)
r2  ÚEc                óz   >• TU S   :w  a1  [         R                  S5        U R                  5         TU S   :w  a  M0  g g )Néÿÿÿÿz>ChromiumEventLogger: Detected overlapping events, fixing stack)r‹   rË  Úpop)rO  rç   s    €rf   Ú	pop_stackÚ4ChromiumEventLogger.log_event_end.<locals>.pop_stack·  s9   ø€ Ø  b¡	Ó)ô —‘ØTôð —	‘	”ð   b¡	×)re   z7ChromiumEventLogger: Start event not in stack, ignoringN)rO  ú	list[str]rŽ   r�   )r6  r:  r;  r<  rž   rv  rò   r�  rn  r‹   rË  rî   r&   r  r˜  )rw  rç   rã   rè   rY  rë   r2  Úall_event_datarI  Úeventr™  Úevent_stackrô   s    `           rf   rC  Ú!ChromiumEventLogger.log_event_end�  s  ø€ ð&  ×T¤5§=¡=×#?Ñ#?×#RÑ#RÓ#Tˆ
Ü!$ Z£ˆ�Ñð ×,Ñ,Ó.ˆØ˜Ó'Ø+¨JÑ7ˆNØ˜zÑ*àˆNà×Ñ˜hÔ'à×%Ñ%ØØØØó	
ˆ÷	ð —n‘nÓ&ˆð ˜[Ó(ô �K‰KÐQÔRØá�+Ôæ Ø#'×#@Ñ#@Ó#BÐ ÙÐ*Ô+Ü'Ø¨T¯X©X°}ôð !×$Ñ$Ô&ð 	�‰Õre   c                ó€   ^• UUS-  UUSSSS.m[         R                  R                  SU4S jSSS9  [        T5        T$ )	zQ
Logs a timed event in chromium format. See log_event_start, log_event_end, etc.
r0  rV  r   )rn   Útsr   ÚphÚcatÚtidÚpidÚchromium_eventc                 ó   >• T $ r{   rK   ©r�  s   €rf   rf  Ú6ChromiumEventLogger._log_timed_event.<locals>.<lambda>ï  ó   ø€ ™ure   F©Ú
payload_fnÚsuppress_contextÚexpect_trace_id)r6  r¼  rX  r(   )rw  rç   rã   rÆ   rè   r�  s        @rf   r�  Ú$ChromiumEventLogger._log_timed_eventÙ  sY   ø€ ð Ø˜D‘.ØØà!ØØñ	
ˆô 	�‰×'Ñ'ØÜ$Ø"Ø!ð	 	(ñ 	
ô 	' uÔ-Øˆre   c           	     ó:  ^• Uc  0 n[        [        R                  R                  R	                  5       5      nXSS'   UUS-  USSSSSS.m[        R
                  R                  S	U4S
 jSSS9  U(       a'  [        TU R                  5       U R                  U5        gg)a*  
Log an instant event with no associated duration.
:param str event_name: Name of event to appear in trace
:param int time_ns Timestamp in nanoseconds
:param Optional[Dict[str, Any]] metadata: Any extra metadata associated with this event
:param str cname optional color for the arrow in the trace
Nr2  r0  ÚirV  r   Úp)rn   r¡  r   r¢  r£  r¤  r¥  Úsr¦  c                 ó   >• T $ r{   rK   r¨  s   €rf   rf  Ú7ChromiumEventLogger.log_instant_event.<locals>.<lambda>  rª  re   FTr«  )
rž   r6  r:  r;  r<  r¼  rX  r&   rî   r  )rw  rç   rã   rè   rë   r2  r�  s         @rf   ræ   Ú%ChromiumEventLogger.log_instant_eventö  s¥   ø€ ð ÑØˆHÜœŸ™×5Ñ5×HÑHÓJÓKˆ
Ø!+�ÑàØ˜D‘.ØØà!ØØØñ

ˆô 	�‰×'Ñ'ØÜ$Ø"Ø ð	 	(ñ 	
ö !ä'Ø�t×4Ñ4Ó6¸¿¹À'õð !re   )r  rm  )rŽ   r›  ©rŽ   r‹  )rŽ   rS   r�   )rç   rž   r!  r   rŽ   r�   )rç   rž   rÐ   rž   rÑ   r�   rŽ   r�   )rç   rž   rÐ   rž   rÑ   r   rŽ   r�   ©FN)rç   rž   rã   r�   rè   rS   rë   r&  r2  úOptional[CompileId]rŽ   r�   r{   )rç   rž   rã   r�   rè   rS   rY  r�   rë   r&  r2  r¹  rŽ   r�   )
rç   rž   rã   r�   rÆ   rž   rè   úOptional[dict[str, Any]]rŽ   rS   r  )
rç   rž   rã   r�   rè   rº  rë   r&  rŽ   r�   )r]   r^   r_   r`   rÛ   rn  rð   rî   rv  rx  r  rï   rþ   r  r5  rv  rC  r�  ræ   rd   rK   re   rf   rk  rk  ë  s—  † ñô	"ô+ô	1ô#ô
Iô2ð.àð.ð ð.ð 
ô	.ô(-ð$/àð/ð ð/ð ð	/ð
 
ô/ð6 ',Ø*.ð?àð?ð ð?ð !ð	?ð
  $ð?ð (ð?ð 
õ?ô<ð" +/ðGàðGð ðGð !ð	Gð
 ðGð  $ðGð (ðGð 
õGð\ .2ðàðð ðð ð	ð
 +ðð 
õðB .2à&+ð(àð(ð ð(ð +ð	(ð  $ð(ð 
÷(ð (re   rk  zOptional[ChromiumEventLogger]ÚCHROMIUM_EVENT_LOGc                 ó0   • [         c
  [        5       q [         $ r{   )r»  rk  rK   re   rf   rä   rä   $  s   € äÑ!Ü0Ó2ÐÜÐre   c                 ó   • [         S L$ r{   )r»  rK   re   rf   r  r  +  s   € ä TÐ)Ð)re   c           	   #  ó†  #   • [        5       n[        R                  " 5       nUR                  U U0 U5         Sv •  UR	                  U [        R                  " 5       0 UU5        U(       a  UR                  5         gg! UR	                  U [        R                  " 5       0 UU5        U(       a  UR                  5         f f = f7f)zá
Context manager that creates a chromium start and end event. Chromium event
logging is integrated with dynamo_timed, so you probably want to use that
instead. Use this context manager only if you want to avoid dynamo_timed.
N)rä   râ   rã   r5  rC  rv  )rç   Úreset_event_log_on_exitrë   Úchromium_event_logÚchromium_start_times        rf   Úchromium_event_timedrÂ  0  s³   é € ô 3Ó4ÐÜŸ,š,›.ÐØ×&Ñ&ØØØ
Øô	ð'Ûà×(Ñ(ØÜ�LŠL‹NØØØ!ô	
ö #Ø×$Ñ$Õ&ð #øð 	×(Ñ(ØÜ�LŠL‹NØØØ!ô	
ö #Ø×$Ñ$Õ&ð #üs   ‚4C·A< »ACÁ<AB>Â>Cc                  óL   • \ rS rSr% SrS\S'   S\S'   SS jr\SS j5       rS	r	g
)ÚCleanupHookiQ  z,Remove a global variable when hook is calledrS   Úscoperž   rn   c                ór   • [         b  [         =R                  S-  sl        U R                  U R                  	 g r©   )ÚCleanupManagerrw   rÅ  rn   ©rw  r   s     rf   Ú__call__ÚCleanupHook.__call__X  s)   € äÑ%Ü× Ò  AÑ%Õ Ø�J‰J�t—y‘yÑ!re   c                ó`   • X;  d   e[         =R                  S-  sl        X U'   [        X5      $ r©   )rÇ  rw   rÄ  )rÅ  rn   rj  s      rf   r  ÚCleanupHook.create^  s1   € àÓ Ð Ð Ü×Ò Ñ!ÕØˆd‰Ü˜5Ó'Ð're   rK   N©r   r   rŽ   r�   )rÅ  rS   rn   rž   rj  r   rŽ   rÄ  )
r]   r^   r_   r`   rÛ   r”   rÉ  r*  r  rd   rK   re   rf   rÄ  rÄ  Q  s)   ‡ á6àÓØ
ƒIô"ð ó(ó ó(re   rÄ  c                  ó<   ^ • \ rS rSr% SrS\S'   SU 4S jjrSrU =r$ )rÇ  if  r   zClassVar[CleanupManager]Úinstancec                ó^   >• U R                   U    H
  nU" 5         M     [        TU ]	  U5        g r{   )r_  r˜  rú  )rw  rü  r³   rž  s      €rf   rú  ÚCleanupManager._remove_idj  s(   ø€ Ø—K‘K Ô$ˆDÙŽFñ %ä‰Ñ˜3Õre   rK   r  )	r]   r^   r_   r`   rw   r”   rú  rd   r   r¡  s   @rf   rÇ  rÇ  f  s   ø‡ Ø€EØ&Ó&÷ õ  re   rÇ  c                óÒ   • U R                  5       R                  U R                  5      nU R                  (       a,  U R                  b  U R                  R                  5       Ul        U$ )z!Clone the tensor and its gradient)ÚcloneÚrequires_grad_Úrequires_gradÚis_leafÚgrad)re  Úys     rf   Úclone_tensorrÙ  s  sB   € à	�‰‹	× Ñ  §¡Ó1€AØ‡y‡y�Q—V‘VÑ'Ø—‘—‘“ˆŒØ€Hre   ©Údtypec          	     ó|  ^• [        U 5      (       a  U $ SU4S jjn[        R                  " 5          U R                  R                  S:X  a  U" U 5      sSSS5        $ U R
                  [        R                  L a`  [        R                  " U" U R                  5       5      U" U R                  5       5      U R                  U R                  5       S9sSSS5        $ [        U 5      (       aÄ  U R
                  [        R                  [        R                  1;   a!  U R                  5       nU R!                  5       nO U R#                  5       nU R%                  5       n[        R&                  " U" U5      U" U5      U" U R)                  5       5      U R                  U R
                  S9sSSS5        $ [+        U 5      (       a  U" U 5      sSSS5        $ [-        S [/        U R1                  5       U R3                  5       5       5       5      nU R4                  (       a  [        R6                  " US-   4U 5      nO6[        R8                  " US-   T=(       d    U R:                  U R                  S9nU R=                  5       UR=                  5       -
  S-  U R?                  5       -  nURA                  U R1                  5       U R3                  5       U5         URC                  U RE                  5       5        U RF                  (       a  URI                  U RJ                  5        U RF                  (       a&  U RL                  b  [O        U RL                  TS	9Ul&        [S        U S
5      (       a  U RT                  RW                  5       Ul*        UsSSS5        $ ! [P         a    U" U 5      s sSSS5        $ f = f! , (       d  f       g= f)zcopy while preserving stridesc                óZ  >• [         R                  " U 5      nU R                  (       a  UR                  U R                  5        U R                  (       a&  U R
                  b  [        U R
                  TS9Ul        [        U S5      (       a  U R                  R                  5       Ul        U$ )NrÚ  Ú_dynamo_dynamic_indices)
r6  rÓ  rÖ  rÔ  rÕ  r×  Úclone_inputr>  rÞ  Úcopy)re  rØ  rÛ  s     €rf   Útorch_cloneÚ clone_input.<locals>.torch_clone„  su   ø€ Ü�KŠK˜‹NˆØ�9�9Ø×Ñ˜QŸ_™_Ô-Ø�9�9˜Ÿ™Ñ+Ü  §¡¨uÑ5ˆAŒFÜ�1Ð/×0Ñ0Ø()×(AÑ(A×(FÑ(FÓ(HˆAÔ%Øˆre   ÚxlaN)Úis_coalesced)Úlayoutc              3  ó6   #   • U  H  u  pUS -
  U-  v •  M     g7f)r2   NrK   )rŸ   ÚshapeÚstrides      rf   r¡   Úclone_input.<locals>.<genexpr>®  s   é € ð 
Ú6O¡] UˆU�Q‰Y˜&Ö Ò6Oùs   ‚é    )rÛ  ÚdevicerÚ  rÞ  ©re  útorch.TensorrŽ   rí  ),rM   r6  Úno_gradrë  rÃ  rå  Ú
sparse_cooÚsparse_coo_tensorÚ_indicesrj   rç  rä  r$   Ú
sparse_csrÚ
sparse_bsrÚcrow_indicesÚcol_indicesÚccol_indicesÚrow_indicesÚsparse_compressed_tensorr_  r.   r‚   ÚzipÚsizerè  Úis_quantizedÚempty_quantizedÚemptyrÛ  Údata_ptrÚelement_sizeÚas_strided_Úcopy_rÓ  rÖ  rÔ  rÕ  r×  rß  rå   r>  rÞ  rà  )re  rÛ  rá  Úcompressed_indicesÚplain_indicesÚneeded_sizeÚresultÚcache_line_offsets    `      rf   rß  rß  {  sÊ  ø€ ô
 ˆq‡z�zàˆ÷ô 
�Š�Ø�8‰8�=‰=˜EÓ!á˜q“>÷ 
‰ð �8‰8”u×'Ñ'Ò'Ü×*Ò*Ù˜AŸJ™J›LÓ)Ù˜AŸI™I›KÓ(Ø—‘ØŸ^™^Ó-ñ	÷ 
‰ô " !×$Ñ$Ø�x‰xœE×,Ñ,¬e×.>Ñ.>Ð?Ó?Ø%&§^¡^Ó%5Ð"Ø !§¡£‘à%&§^¡^Ó%5Ð"Ø !§¡£�Ü×1Ò1ÙÐ.Ó/Ù˜MÓ*Ù˜AŸH™H›JÓ'Ø—‘Ø—x‘xñ÷) 
‰ô6 +¨1×-Ñ-ñ ˜q“>÷= 
‰ô@ ñ 
Ü69¸!¿&¹&»(ÀAÇHÁHÃJÔ6Oó
ó 
ˆð �>�>Ü×*Ò*¨K¸"Ñ,<Ð+>ÀÓB‰Fä—[’[Ø˜bÑ ¨×(8°·±ÀÇÁñˆFð �Z‰Z‹\˜FŸO™OÓ-Ñ-°Ñ3Ø�^‰^ÓñÐð 	×Ñ˜1Ÿ6™6›8 Q§X¡X£ZÐ1BÔCð
	"Ø�L‰L˜Ÿ™›Ô#Ø�y�yØ×%Ñ% a§o¡oÔ6Ø�y�y˜QŸV™VÑ/Ü)¨!¯&©&¸Ñ>�”ô �1Ð/×0Ñ0Ø-.×-FÑ-F×-KÑ-KÓ-MˆFÔ*Ø÷u 
‰øôf ó 	"ñ ˜q“>Ñ!÷o 
‰ðf	"ú÷g 
�úsK   ±"N-ÁA3N-ÃC
N-Æ.N-ÇC?N-ËBNÍ1N-ÎN*ÎN-Î)N*Î*N-Î-
N;c                ó   • g r{   rK   ©Úexample_inputss    rf   Úclone_inputsr
  Ë  s   € ð re   c                ó   • g r{   rK   r  s    rf   r
  r
  Ñ  s   € Ø:=re   c                óæ  • [        U 5      [        L a†  [        U 5      nUR                  5        He  u  p#[        U[        5      (       a  [        U5      X'   M)  [        U[        R                  5      (       d   [        U5      5       e[        U5      X'   Mg     U$ [        U 5      n[        [        U5      5       H5  n[        X   [        R                  5      (       d  M&  [        X   5      X'   M7     U$ r{   )rÃ  ÚdictrÄ   r  r  r
  r6  rY  rß  rk  Úranger‚  )r	  ÚresrÐ   rÑ   r±  s        rf   r
  r
  Õ  s»   € äˆNÓœtÒ#Ü�>Ó"ˆØŸ)™)ž+‰JˆCÜ˜%¤×'Ñ'Ü'¨Ó.�“ä! %¬¯©×6Ñ6ÐC¼¸U»ÓCÐ6Ü& uÓ-�“ñ &ð ˆ
ä
ˆ~Ó
€CÜ”3�s“8Ž_ˆÜ�c‘fœeŸl™l×+Ó+Ü  ¡Ó(ˆC‹Fñ ð €Jre   c                óÂ   •  U R                  5         g ! [         aA  nSSKJnJn  [
        R                  " SS[        U 5      5      nU" U" S SU 35      5      UeS nAff = f)Nr2   )Úformat_skip_frame_messageÚ	SkipFramez\(.*r—  z(torch.compile cannot be run in context: )rþ  rå   rÅ  r  r  Úrer›  rY  )rj  r€  r  r  Úfunctorch_subclass_names        rf   Úskip_frame_if_in_functorch_moder  è  se   € ðØ�‰�øÜó 
ß=ô #%§&¢&¨°"´d¸3³iÓ"@ÐÙÙ%ØØ:Ð;RÐ:SÐTóó
ð
 ð	ûð
ús   ‚ “
A�<AÁAc               #  óÐ  #   • [         R                  R                  n [         R                  R                  R
                  nU" 5          U " 5          [         R                  " [         R                  R                  5       5      n[        U5        [         R                  R                  5       (       a2  [         R                  " [         R                  R                  5       5      nS S S 5        S S S 5         S v •  [         R                  R                  R                  5          [         R                  R                  W5        [         R                  R                  5       (       a  [         R                  R                  W5        S S S 5        g ! , (       d  f       N®= f! , (       d  f       N·= f! , (       d  f       g = f! [         R                  R                  R                  5          [         R                  R                  W5        [         R                  R                  5       (       a  [         R                  R                  W5        S S S 5        f ! , (       d  f       f = f= f7fr{   )r6  Ú_CÚ_DisableFuncTorchrM  Ú_python_dispatchÚ_disable_current_modesrÓ  ÚrandomÚget_rng_stater  rU  Úis_availableÚset_rng_state)Údisable_functorchÚdisable_current_modesÚ	rng_stateÚcuda_rng_states       rf   Úpreserve_rng_stater#  ø  s`  é € äŸ™×2Ñ2ÐÜ!ŸK™K×8Ñ8×OÑOÐÙ	Õ	 Ñ"3Õ"5Ü—K’K¤§¡× :Ñ :Ó <Ó=ˆ	Ü'¨	Ô2Ü�:‰:×"Ñ"×$Ñ$Ü"Ÿ[š[¬¯©×)AÑ)AÓ)CÓDˆN÷	 #6×	 ð
9Ûä�[‰[×)Ñ)×@Ñ@ÕBÜ�L‰L×&Ñ& yÔ1Ü�z‰z×&Ñ&×(Ñ(Ü—
‘
×(Ñ(¨Ô8÷ CÐB÷ #6Õ"5ú×	 Õ	 ú÷ CÕBûŒU�[‰[×)Ñ)×@Ñ@ÕBÜ�L‰L×&Ñ& yÔ1Ü�z‰z×&Ñ&×(Ñ(Ü—
‘
×(Ñ(¨Ô8÷ C×BÖBÿs�   ‚AI&ÁFÁBFÃ#FÃ+I&Ã4F> Ã8(I&Ä A"F-Æ	I&Æ
F	ÆFÆ
F*Æ&I&Æ-
F;Æ7I&Æ>)I#Ç'A"IÉ		I#É
I ÉI#É#I&c                ó
  • [        U [        R                  R                  R                  [        R                  R
                  R                  [        R                  R                  [        R                  R                  45      $ r{   )	r  r6  ÚjitÚ_traceÚTopLevelTracedModuleÚ_scriptÚRecursiveScriptModuleÚScriptFunctionÚScriptModule)Úmodel0s    rf   Úis_jit_modelr-  
	  sY   € ô Øä�I‰I×Ñ×1Ñ1Ü�I‰I×Ñ×3Ñ3Ü�I‰I×$Ñ$Ü�I‰I×"Ñ"ð		
óð re   c                óR  • [        U 5      (       a  U $  [        R                  R                  X5      $ ! [         ai     [        R                  R                  U 5      s $ ! [         a7    U(       a  [        R                  S5         O[        R                  S5          g f = f g f = f)Nz	jit errorz0Both torch.jit.trace and torch.jit.script failed)	r-  r6  r%  ÚtracerÏ  Úscriptr‹   rÐ  Úerror)Úmodelr	  r�  s      rf   Útorchscriptr3   	  s�   € Ü�E×Ñàˆð	NÜ�y‰y�‰˜uÓ5Ð5øÜó Nð	NÜ—9‘9×#Ñ# EÓ*Ò*øÜó 	NÞÜ—‘˜kÖ*ä—	‘	ÐLÖMØð	Núà*ð ðNús>   ”3 ³
B&¾AÁB&Á&B ÂB&ÂB ÂB&ÂB Â B&Â%B&c                ó\   •  [         R                  " U 5      $ ! [        [        4 a     g f = fr{   )r4  Úgetfilerâ  ÚOSError©r  s    rf   r5  r5  2	  s-   € ðÜ�Š˜sÓ#Ð#øÜ”wÐó Ùðús   ‚ ˜+ª+c                ó*   • [        [        U 5      5      $ )zLTest if an object is a namedtuple or a torch.return_types.* quasi-namedtuple)Úis_namedtuple_clsrÃ  r7  s    rf   Úis_namedtupler:  9	  s   € äœT #›YÓ'Ð're   c                ó„  ^ •  [        T [        5      (       a™  [        T SS5      nUS;   a  g[        [        T SS5      [        5      (       ae  [	        [        T SS5      5      (       aJ  [        S T R
                   5       5      nU[        4:X  a  gU(       a  [        U 4S jU 5       5      (       a  gg	! [         a     g	f = f)
zhTest if an object is a namedtuple or a (torch.return_types|torch.autograd.forward_ad).* quasi-namedtupler^   N)útorch.return_typesztorch.autograd.forward_adTÚ_fieldsÚ_makec              3  ó:   #   • U  H  o[         Ld  M  Uv •  M     g 7fr{   )r   )rŸ   Úts     rf   r¡   Ú$is_namedtuple_cls.<locals>.<genexpr>I	  s   é € ÐKª AÄ7Ð:JŸa™aªùs   ‚’	c              3  óx   >#   • U  H/  n[        U5      =(       a    TR                  UR                  L v •  M1     g 7fr{   )r9  Ú__new__)rŸ   r@  ro   s     €rf   r¡   rA  M	  s;   øé € ð !ò #˜ô	 *¨!Ó,÷ 5àŸK™K¨1¯9©9Ð4ô5ò #ùs   ƒ7:F)Ú
issubclassr  Úgetattrr  ÚcallableÚ	__bases__Úanyrâ  )ro   ÚmoduleÚbasess   `  rf   r9  r9  >	  sÁ   ø€ ðÜ�cœ5×!Ñ!Ü˜S ,°Ó5ˆFØÐLÓLØÜœ' # y°$Ó7¼×?Ñ?ÄHÜ˜˜W dÓ+÷Eñ Eô ÑK¨¯ªÓKÓK�ØœU˜HÓ$àÞœSô !ñ #ó!÷ ñ ð  ð øô ó ØØðús   ƒ(B2 ¬A"B2 Â!B2 Â2
B?Â>B?útuple[str, ...]c                ó8  • U [         L a  g[        U [        5      (       d   e[        U S5      (       a  U R                  $ [
        R                   " S S5      5       nU R                  S:X  d   eU " [        U[        U R                  5      5      5      n0 n[        U5       HA  nUS   S:w  d  M  [        [        X$5      U5      (       d  M*  [        X$5      R                  X4'   MC     [        U5      U R                  :X  d   e[        [!        X3R"                  S95      $ )	zIGet the fields of a namedtuple or a torch.return_types.* quasi-namedtuple)ÚstartÚstopÚstepr=  c                  ó    • \ rS rSr% S\S'   Srg)Ú!namedtuple_fields.<locals>.Markerig	  r�   ÚindexrK   N©r]   r^   r_   r`   r”   rd   rK   re   rf   ÚMarkerrQ  g	  s   ‡ àŽ
re   rT  r<  r   rÁ  )rÐ   )ÚslicerD  r  r>  r=  rI  Ú	dataclassr^   r�   r  Ún_fieldsÚdirr  rE  rR  r‚  rø  r€   )ro   rT  r  Úfieldsrn   s        rf   Únamedtuple_fieldsrZ  \	  sñ   € ð Œe‚|Ø(ä�cœ5×!Ñ!Ð!Ð!Üˆs�I×Ñà�{‰{Ðä×Ñ÷ð ó ðð �>‰>Ð1Ó1Ð1Ð1Ù
Œc�&œ% §¡Ó-Ó.Ó
/€CØ€FÜ�C–ˆØ�‰7�c�>œj¬°Ó);¸V×DÓDÜ" 3Ó-×3Ñ3ˆF‹Lñ ô ˆv‹;˜#Ÿ,™,Ó&Ð&Ð&Ü”˜§J¡JÑ/Ó0Ð0re   c           	     ó^  ^^^• [         R                  " 5          [         R                  " [         R                  R	                  5       5      m[         R
                  R                  5       (       a2  [         R                  " [         R
                  R	                  5       5      m[        R                  " U R                  5       U R                  5       5       Vs/ s H%  nXR                  [         R                  " U5      4PM'     snmS S S 5        SUUU4S jjnU$ s  snf ! , (       d  f       N= f)Nc                 ó„  >• [         R                  " 5          [         R                  R                  T5        [         R                  R                  5       (       a  [         R                  R                  T5        T H)  u  pnU R                  U:w  d  M  U R                  U5        M+     S S S 5        g ! , (       d  f       g = fr{   )r6  rî  r  r  rU  r  Ú_versionr  )ÚparamrT  Úoriginal_valuer"  r!  Úsaved_states      €€€rf   ÚrestoreÚ"checkpoint_params.<locals>.restore�	  st   ø€ Ü�]Š]�_Ü�L‰L×&Ñ& yÔ1Ü�z‰z×&Ñ&×(Ñ(Ü—
‘
×(Ñ(¨Ô8Û2=Ñ.� Ø—>‘> WÕ,Ø—K‘K Ö/ñ 3>÷	 �_Ž_ús   —A8B1ÂB1Â1
B?r�   )r6  rî  rÓ  r  r  rU  r  r¥   r¦   Ú
parametersÚbuffersr]  )Úgmr^  ra  r"  r!  r`  s      @@@rf   Úcheckpoint_paramsrf  v	  sÃ   ú€ Ü	�Š�Ü—K’K¤§¡× :Ñ :Ó <Ó=ˆ	Ü�:‰:×"Ñ"×$Ñ$Ü"Ÿ[š[¬¯©×)AÑ)AÓ)CÓDˆNô #Ÿš¨¯©«¸"¿*¹*»,ÔGó
ò H�ð —N‘N¤E§K¢K°Ó$6Ó7áGñ
ˆ÷	 
÷0ñ 0ð €Nùò
÷	 
�ús   ™B=DÃ,DÄDÄDÄ
D,c                óŠ  • [         R                  R                  5       (       a  [         R                  R                  nO[        nU" 5         [
        R                  " 5         [         R                  " S5        [        R                  " 5       n[        U5       H  nU " U6 nU" 5         M     [        R                  " 5       nWXt-
  4$ )Ni9  )r6  rU  r  Úsynchronizerç  ÚgcÚcollectÚmanual_seedrâ   Úperf_counterr  )r2  r	  Útimesrh  Út0rÁ  r  Út1s           rf   Útimedrp  �	  sŽ   € ô ‡z�z×Ñ× Ñ Ü—j‘j×,Ñ,‰äˆá„MÜ‡J‚J„LÜ	×Ò�dÔÜ	×	Ò	Ó	€BÜ�5Ž\ˆÙ˜Ð'ˆÙŽñ ô 
×	Ò	Ó	€BØ�2‘7ˆ?Ðre   c           	     ól   • [        S [        R                  " XR                  S5      5       5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7fr{   )Úis_cuda©rŸ   re  s     rf   r¡   Ú check_is_cuda.<locals>.<genexpr>¡	  s   é € ÐWÒ"V˜Q�yŽyÒ"Vùó   ‚T)Úallr¥   r¦   rc  )re  r	  s     rf   Úcheck_is_cudarx   	  s&   € ÜÑW¤)§/¢/°.Ç-Á-ÐPTÓBUÔ"VÓWÓWÐWre   rê  c                óú   • U S:”  d   e[        U 5       Vs/ s H  nSU 3PM
     nn[        USS  US S -   5      n[        SSR                  U5       SSR                  U5       S35      nSU  S	3Ul        U$ s  snf )
Nr2   rn  r—  zlambda rô  z: (Ú)Úrot_Ú_helper)r  ÚreversedÚevalrœ   r]   )rÛ  r±  ÚvarsÚrotatedrP  s        rf   Úrot_n_helperr�  ¤	  sŒ   € àˆq‹5€Lˆ5Ü" 1œXÓ&šX˜ˆa�ˆs‹G™X€DÐ&Ü�t˜B˜C�y 4¨¨ 9Ñ,Ó-€GÜ	�˜Ÿ™ ›Ð' s¨3¯8©8°GÓ+<Ð*=¸QÐ?Ó	@€BØ˜˜˜7Ð#€B„KØ€Iùò	 's   –A8z	set[type]Úcommon_constant_typesc                óB  • [        U [        [        45      (       a  [        [	        [
        U 5      5      $ [        U [        R                  [        [        R                  [        R                  [        R                  45      =(       d    [        U [         ["        1-  5      $ r{   )r
  r  Ú	frozensetrw  r�   Úis_safe_constantr  ÚenumÚEnumrÃ  r6  ÚSizer  Ú_GenericAliasr=  ÚGenericAliasr‚  rU  r…  s    rf   r…  r…  Ñ	  s{   € Üˆa”%œÐ#×$Ñ$Ü”3Ô'¨Ó+Ó,Ð,ÜØ	ä�I‰IÜÜ�J‰JÜ× Ñ Ü×Ñð	
ó	÷ ô 
Ø	Ü¤ Ñ'ó
ðre   c                 ó
   • SS1$ ©Nr   r2   rK   rK   re   rf   Úcommon_constantsr�  ã	  s   € ð
 	
Ø	ð	ð re   c                óò   • [        U [        R                  [        R                  45      =(       aG    [        U R                  [        R
                  R                  R                  R                  5      (       + $ r{   )	r  r6  ÚSymBoolÚSymIntÚnodeÚnestedr½  Ú
nested_intÚNestedIntNoder  s    rf   Úis_torch_symr•  í	  sP   € Ü�eœeŸm™m¬U¯\©\Ð:Ó;÷ ÄJØ�
‰
”E—L‘L×*Ñ*×5Ñ5×CÑCóEô Að re   c                ó†  • SSK Jn  [        R                  " 5       R                  (       + =(       Ga    UR
                  R                  5       (       + =(       dê    UR
                  R                  5       =(       a    [        R                  (       + =(       d­    UR
                  R                  5       =(       a    [        R                  (       + =(       dp    UR
                  R                  5       =(       a    [        R                  (       + =(       d3    U" U5      =(       d$    [        S5      (       + =(       a    U [        5       ;   $ )Nr2   )Úis_from_defaultsz5pytorch/dynamo:enable_unspecialize_zero_one_plain_int)Úsourcer—  r#   r€   Ú#force_unspec_int_unbacked_size_likeÚguard_sourceÚis_localÚis_specialized_nn_modulerI   Úallow_unspec_int_on_nn_moduleÚ"is_unspecialized_builtin_nn_moduleÚis_unspecialized_nn_moduler%   r�  )rÑ   r˜  r—  s      rf   Úis_int_specialization_caser   ó	  sï   € Ý(ä×!Ò!Ó#×GÑGÔG÷ ð à×Ñ×(Ñ(Ó*Ô*÷ 	
ð
 ×Ñ×8Ñ8Ó:÷ 9Ü×8Ñ8Ô8÷	
ð ×Ñ×BÑBÓD÷ 9Ü×8Ñ8Ô8÷	
ð ×Ñ×:Ñ:Ó<÷ 9Ü×8Ñ8Ô8÷	
ñ  ˜FÓ#÷!	
ô(  Ð WÓXÔX÷ ,ØÔ)Ó+Ñ+ð/re   c                óÀ  • SSK JnJnJn  [	        X5      (       a”  U R                  5       (       d  U R                  5       nU R                  5       n[        U5      =(       dD    [        R                  (       + =(       a(    [        U5      [        L =(       a    [        XT5      (       + nU(       d  U $ [	        X5      (       a  UR                  U R                  5       5      $ U $ )Nr2   )ÚConstantVariableÚLazyVariableTrackerÚSymNodeVariable)Ú	variablesr¢  r£  r¤  r  Úis_realizedÚoriginal_sourcer_  r•  rI   Úspecialize_intrÃ  r�   r   r  Úevaluate_expr)rp  r¢  r£  r¤  r˜  rÑ   Úis_symnode_vts          rf   Úspecialize_symnoder«  
  s²   € ßQÑQô �#×+Ñ+°C·O±O×4EÑ4Eð ×$Ñ$Ó&ˆØ×"Ñ"Ó$ˆä$ UÓ+÷ 
Ü×%Ñ%Ô%÷ >Ü�U“œsÐ"÷>ä.¨uÓ=Ô=ð 	ö ØˆJä�#×'Ñ'Ø×&Ñ& s×'8Ñ'8Ó':Ó;Ð;Ø€Jre   c                ó’   • SSK Jn  [        U 5      n [        X5      (       a%  U R	                  5       (       a  U R                  5       $ U $ )Nr2   rA   )r¥  rB   r«  r  Úis_python_constantÚas_python_constant)rp  rB   s     rf   Úguard_if_dynr¯  +
  s<   € Ý*ä
˜SÓ
!€Cä�#×'Ñ'¨C×,BÑ,B×,DÑ,DØ×%Ñ%Ó'Ð'à€Jre   c                ój   • [        S [        R                  " XR                  5       5       5       5      $ )Nc              3  ó@   #   • U  H  oR                  5       v •  M     g 7fr{   )r­  rt  s     rf   r¡   Ú&check_constant_args.<locals>.<genexpr>7
  s   é € ÐVÒ/U¨!×#Ñ#×%Ð%Ò/Uùrr  )rw  r¥   r¦   r_  ræ  s     rf   Úcheck_constant_argsr³  6
  s"   € ÜÑV¬y¯ª¸tÇ]Á]Ã_Ô/UÓVÓVÐVre   c                óú   • SSK Jn  SSKJn  Sn[        R
                  " XR                  5       5       HA  n[        XS5      (       a  US-  nM  [        XR5      (       a  UR                  5       (       a  MA    g   US:„  $ )Nr2   rA   ©ÚUnspecializedPythonVariabler   F)	r¥  rB   Úvariables.tensorr¶  r¥   r¦   r_  r  r­  )r   r!  rB   r¶  Úunspec_countre  s         rf   Úcheck_unspec_python_argsr¹  :
  sd   € Ý*Ý=à€LÜ�_Š_˜T§=¡=£?Ö3ˆÜ�a×5Ñ5Ø˜AÑŠLÜ˜Q×0Ñ0°Q×5IÑ5I×5KÓ5KÙñ	 4ð
 ˜!ÑÐre   c                ó¸   • SSK Jn  [        R                  " XR	                  5       5       H,  nUR                  5       (       a  M  [        X25      (       a  M,    g   g)Nr2   rµ  FT)r·  r¶  r¥   r¦   r_  r­  r  )r   r!  r¶  re  s       rf   Úcheck_unspec_or_constant_argsr»  G
  sA   € õ
 >ä�_Š_˜T§=¡=£?Ö3ˆØ×$Ñ$×&Ó&¬*°Q×*TÓ*TÙñ 4ð re   c                ó~   ^• SSK Jm  [        U4S j[        R                  " XR                  5       5       5       5      $ )Nr2   )ÚNumpyNdarrayVariablec              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7fr{   )r  )rŸ   re  r½  s     €rf   r¡   Ú+check_numpy_ndarray_args.<locals>.<genexpr>W
  s#   øé € ð â7ˆAô 	�1Ð*×+Ð+Ú7ùs   ƒ)r·  r½  rH  r¥   r¦   r_  )r   r!  r½  s     @rf   Úcheck_numpy_ndarray_argsrÀ  T
  s/   ø€ Ý6äô ä—’ §}¡}£Ô7óó ð re   ztype[KeysView[Any]]Ú	dict_keysztype[ValuesView[Any]]Údict_valuesztype[ItemsView[Any, Any]]Ú
dict_itemsÚodict_valuesztype[Iterator[Any]]Útuple_iteratorÚrange_iteratorÚKÚVc                óZ   • [        U [        5      (       d   e[        R                  U 5      $ r{   )r  r  rl  )r"  s    rf   Úbuiltin_dict_keysrÊ  {
  s#   € ä�aœ×ÑÐÐÜ�9‰9�Q‹<Ðre   c                ó°  • [        U [        5      (       d   e[        U [        [        45      (       a  U R	                  5       $ [        U [        5      (       a<  [        R
                  " U 5       Vs/ s H  o[        R                  " X5      4PM     sn$ [        R                  U 5       Vs/ s H  o[        R                  X5      4PM     sn$ s  snf s  snf r{   )r  r  r
  r   rÄ   rl  rð  )r  rm  s     rf   Úget_items_from_dictrÌ  �
  s©   € ä�cœ4× Ñ Ð Ð Üˆc”Dœ+Ð&×'Ñ'Ø�y‰y‹{ÐÜ	�Cœ×	%Ñ	%ä>I×>NÒ>NÈsÔ>SÓTÒ>S¸”K×+Ò+¨CÓ3Ó4Ñ>SÑTÐTô 8<·y±yÀ´~ÓF²~°!”D×$Ñ$ SÓ,Ó-±~ÑFÐFùò Uùò Gs   Á0!CÂ+ Cc                ón   • [        U 5      n[        R                  R                  R	                  U5        U$ r{   )Ú
object_newr6  rZ  ÚModulerx  )ro   r  s     rf   Únn_module_newrÐ  Ž
  s&   € Ü
�S‹/€Cä	‡H�H‡O�O×Ñ˜SÔ!Ø€Jre   c                óN   • [         R                  " [        R                  U S5      $ r©   )r1  ÚreduceÚoperatorÚmul)Úits    rf   ÚproductrÖ  •
  s   € Ü×ÒœHŸL™L¨"¨aÓ0Ð0re   c                ó:   • U R                  5       u  nu  p4X4U-      $ r{   )Ú
__reduce__)rÕ  rR  rÁ  r  rM  s        rf   Útuple_iterator_getitemrÙ  ™
  s!   € Ø—}‘}“Ñ€A�vˆØ�u‰}ÑÐre   c                óh   • [         R                  R                  [        R                  5      " U 5      $ r{   )r6  Ú_dynamoÚdisablerI  rY  r}   s    rf   Údataclass_fieldsrÝ  ž
  s"   € Ü�=‰=× Ñ ¤×!3Ñ!3Ô4°SÓ9Ð9re   c                ó®   • U R                  5       u  nu  p#UR                  U=(       d    SUR                  -  -   nUR                  nUR                  nXEU4$ r­   )rØ  rM  rO  rN  )Ú
range_iterrÁ  Ú	range_objÚ	maybe_idxrM  rN  rO  s          rf   Únormalize_range_iterrâ  ¥
  sQ   € Ø!+×!6Ñ!6Ó!8Ñ€A�|ˆ	ð �O‰O˜yŸ~¨A°·±Ñ?Ñ?€EØ�>‰>€DØ�>‰>€DØ˜ÐÐre   c                ó$   • U R                  U5      $ r{   )Úas_subclass)r@  ro   s     rf   Úto_subclassrå  ³
  s   € Ø�=‰=˜ÓÐre   c                ó¨   • [         n[        U [        5      (       a  [        n[        [        R
                  " UR                  U 5      XS-   5      5      $ r©   )r  r  r   Únextr¥   Úislicerl  )r"  rÛ  Ú
dict_classs      rf   Údict_keys_getitemrê  º
  s@   € ô €JÜ�!”[×!Ñ!Ü ˆ
ä”	× Ò  §¡°Ó!3°Q¸A¹Ó>Ó?Ð?re   c                ó   • [        U 5      U   $ r{   ©rk  )r³  rÛ  s     rf   Úset_getitemrí  Ä
  s   € ä�‹7�1‰:Ðre   c                ót   • U R                   R                  nU R                  nU(       a  SOSnU SU SU 3nU$ )NÚLÚGz["z"].)rž  r]   rn   )rÑ   r{  rn   rj  rÅ  Ú
local_names         rf   Ú	enum_reprrò  É
  sA   € ð �?‰?×#Ñ#€DØ
�*‰*€CÞ‰C˜c€EØ�7˜"˜T˜F # c UÐ+€JØÐre   c                ó  • XR                   S'   [        R                  " 5       R                  nUc   eUR                  n[
        R                  R                  R                  R                  X15      =n(       a  X@R                   S'   g g )NÚexample_valueÚunbacked_bindings)
Úmetar#   r€   Ú	fake_modeÚ	shape_envr6  r   ÚexperimentalÚsymbolic_shapesÚcompute_unbacked_bindings)r‘  rô  r÷  rø  Úsymbol_to_paths        rf   Úset_example_valuerý  Ó
  s~   € ð "/‡I�IˆoÑÜ×"Ò"Ó$×.Ñ.€IØÑ Ð Ð Ø×#Ñ#€Iô �8‰8× Ñ ×0Ñ0×JÑJØó
ð	
ˆõ 	
ð
 *8�	‰	Ð%Ò&ð	
re   c                óà   • U R                  5       R                  R                  R                  S5      n[	        U5      (       d*  SSKJn  SSKJn  U" S[        U5      S/ UR                  QS9  U$ )Nrô  r2   ©Úgraph_break_hintsrs  z:Cannot check Tensor object identity without its fake valuez/TensorVariable is missing a fake example_value.©rw  rx  ry  rz  )rn  r‘  rö  r€   rM   r—  r   rÅ  rt  rž   Ú
DYNAMO_BUG)ÚvtÚfake_tensorr   rt  s       rf   Ú_get_fake_tensorr  ç
  sb   € Ø—+‘+“-×$Ñ$×)Ñ)×-Ñ-¨oÓ>€KÜ�;×ÑÝ'Ý&áØPÜ˜Ó$ØIØ1Ð%×0Ñ0Ð1ò		
ð Ðre   c                óf   • U R                  U5      u  p#n[        SX2-
  XDS:”  a  SOS-
  -   U-  5      $ )Nr   r2   r—  )ÚindicesÚmax)r³  Úseq_lenrM  rN  rO  s        rf   Úslice_lengthr
  ö
  s9   € ØŸ	™	 'Ó*Ñ€E�Üˆq�4‘< 4°q³©1¸bÑ#AÑBÀtÑKÓLÐLre   c                óX   • SSK Jn  SSKJn  SU SU SU 3nU" [        U U" U5      /S9  g )Nr   )Úraise_observed_exception)r¢  z3wrong number of arguments or keyword arguments for z() call.
  Expect: z
  Actual: rd  )Útorch._dynamo.excr  Útorch._dynamo.variablesr¢  râ  )Útxrn   ÚexpectÚactualr  r¢  Úmsg_strs          rf   Úraise_args_mismatchr  û
  sM   € õ ;Ý8ð >¸d¸Vð DØ�Hð Ø�Hð	ð ñ ÜØ
Ù˜wÓ'Ð(óre   c                óR  ^• SSK JnJn  TR                  5       (       a&  [	        U4S jU  5       5      nUR                  U5      $ SnU(       a"  TR                  5       (       a  Sn[        T5      mS nU  H›  n	U(       a:  U	R                  5       (       a#  T[        U	5      L a  UR                  S5      s  $ MB  MD  U" [        R                  5      R                  X)T/0 5      n
Uc  U
nMs  U" [        R                  5      R                  X*U/0 5      nM�     Uc  UR                  S5      nU$ )Nr2   )ÚBuiltinVariabler¢  c              3  ó”   >#   • U  H=  nUR                  5       =(       a!    UR                  5       TR                  5       :H  v •  M?     g 7fr{   )r­  r®  )rŸ   re  Úsearchs     €rf   r¡   Ú iter_contains.<locals>.<genexpr>  sI   øé € ð 
ò �ð × Ñ Ó"÷ FØ×$Ñ$Ó&¨&×*CÑ*CÓ*EÑEôFâùs   ƒAAFT)r¥  r  r¢  r­  rH  r  Ú	is_tensorr  rÓ  ÚeqÚcall_functionÚor_)rÄ   r  r  Úcheck_tensor_identityr  r¢  Úfound_constÚmust_check_tensor_idÚfoundre  Úchecks    `         rf   Úiter_containsr"    s  ø€ ÷ =à× Ñ ×"Ñ"Üô 
ñ ó
ó 
ˆð
  ×&Ñ& {Ó3Ð3à ÐÞ ×!1Ñ!1×!3Ñ!3Ø#Ðä! &Ó)ˆà'+€EÛˆÞØ�{‰{�}‰}ØÔ-¨aÓ0Ò0Ø+×2Ñ2°4Ó8Ò8ñ 1ñ ñ $¤H§K¡KÓ0×>Ñ>¸rÀvÀ;ÐPRÓSˆEØ‰}Ø’á'¬¯©Ó5×CÑCØ ˜¨ó’ñ ð �}Ø ×'Ñ'¨Ó.ˆØ€Lre   c                ót   • [        U [        R                  [        R                  R                  [
        45      $ )z4Returns whether it indexes dictionaries using its id)r  r6  rY  rZ  rÏ  r   )rm  s    rf   Ú	key_is_idr$  :  s%   € ô �aœ%Ÿ,™,¬¯©¯©Ô9JÐKÓLÐLre   c                óh   • U  Vs/ s H   n[        U5      (       a  [        U5      OUPM"     sn$ s  snf r{   )r$  rï  )rÑ   rm  s     rf   Ú	key_to_idr&  A  s+   € Ù27Ó8²%¨Q”Y˜q—\‘\ŒBˆqŒE qÒ(±%Ñ8Ð8ùÒ8s   …'/c               ó  ^• SSK Jn  [        U [        [        45      (       ah  SR                  U4S jU  5       5      n[        U [        5      (       a  SU S3$ [        U [        5      (       d   e[        U 5      S:X  a  SU S3$ SU S	3$ [        U [        R                  5      (       a  [        U TS
9R                  SS5      $ U" U 5      (       a  U R                  $ [        U [        5      (       a  SS jnU" U 5      $ U < $ )Nr2   )Úis_builtin_callablerô  c              3  ó8   >#   • U  H  n[        UTS 9v •  M     g7f©©r{  N©Ú
const_repr©rŸ   r³  r{  s     €rf   r¡   Úconst_repr.<locals>.<genexpr>I  s   øé € ÐDÂ!¸Qœj¨°%Ö8Â!ùó   ƒÚ[Ú]Ú(z,)rz  r+  Ú'r—  c                óz   • U R                   nUR                  nUS:X  a  UR                  $ US-   UR                  -   $ )NÚbuiltinsÚ.)rž  r^   r_   )r7  ÚklassrI  s      rf   ÚfullnameÚconst_repr.<locals>.fullnameZ  s?   € Ø—K‘KˆEØ×%Ñ%ˆFØ˜Ó#Ø×)Ñ)Ð)Ø˜C‘< %×"4Ñ"4Ñ4Ð4re   )r7  r   rŽ   rž   )Útrace_rulesr(  r  rk  r  rœ   r‚  r†  r‡  rò  Úreplacer]   rÃ  )re  r{  r(  Ú
elems_reprr9  s    `   rf   r-  r-  E  sê   ø€ Ý0ä�!”dœE�]×#Ñ#Ø—X‘XÔDÁ!ÓDÓDˆ
Ü�aœ×ÑØ�z�l !Ð$Ð$ä˜a¤×'Ñ'Ð'Ð'Ü�1‹v˜‹{Ø˜:˜, bÐ)Ð)à˜:˜, aÐ(Ð(Ü	�A”t—y‘y×	!Ñ	!ô ˜ %Ñ(×0Ñ0°°bÓ9Ð9Ù	˜Q×	Ñ	Ø�z‰zÐÜ	�A”t×	Ñ	ô	5ñ ˜‹{Ðà‘ˆre   c               óJ   ^• SR                  U4S jU  5       5      nSU-   S-   $ )Nrô  c              3  ó8   >#   • U  H  n[        UTS 9v •  M     g7fr*  r,  r.  s     €rf   r¡   Ú!dict_keys_repr.<locals>.<genexpr>g  s   øé € ÐGºJ°qœ
 1¨EÖ2ºJùr0  r1  r2  )rœ   )Ú
const_keysr{  Úkeys_strs    ` rf   Údict_keys_reprrC  f  s&   ø€ Ø�x‰xÔG¹JÓGÓG€HØ�‰>˜CÑÐre   Ú
__dict_key)ÚUnsupportedFakeTensorExceptionc                óP   • U S[        U5       SU R                  R                   3$ )NrÁ  Ú_c)rï  Úoutputr2  )r  Úrootr  s      rf   Úget_safe_global_namerJ  q  s*   € ð ˆV�1”R˜“W�I˜R §	¡	× 4Ñ 4Ð5Ð6Ð6re   c                ó$   • U H
  nX;   d  M
    g   grà  rK   )rñ  Ú
containersÚ	containers      rf   Úis_inrN  {  s   € Ûˆ	ØÕÙñ  ð re   )Úrequires_suffixc               ó¼   • U(       d  [        U /UQ76 (       d  U $ [        R                  " 5        H  nU  SU 3n[        U/UQ76 (       a  M  Us  $    [        S5      e)za
Return a name that starts with `prefix` and is not in any of the
`containers` (e.g., map, set).
rÁ  Úunreachable)rN  r¥   rw   r=  )ÚprefixrO  rL  r±  Ú	candidates        rf   Úget_unique_name_wrtrT  ‚  s^   € ö ¤5¨Ð#=°*×#=Ð#=Øˆä�_Š_ÖˆØ�h˜a ˜s�Oˆ	Ü�YÐ, ×,Ò,ØÒñ ô
 ˜Ó
'Ð're   c           	     óÐ   •  U " 5       $ ! [          aR  nSSKJn  SUR                   S3n[        R                  U5        U" S[        UR                  5      U/ US9   S nAg S nAff = f)Nr2   rs  zEncountered exception (z!) during fake tensor propagation.z!Fake tensor propagation exceptionrv  )rE  rÅ  rt  Úreasonr‹   rË  rž   )rP  r€  rt  r�  s       rf   Úwrap_fake_exceptionrW  ”  s_   € ð
Ù‹tˆøÜ)ó 
Ý&à'¨¯© zÐ1RÐSˆÜ�‰�CÔÙØ7Ü˜Ÿ™“MØØØ÷	
ûð
ús   ‚	 ‰
A%“AA Á A%c                óª   ^ • [         R                  R                  R                  U5         [	        U 4S j5      sS S S 5        $ ! , (       d  f       g = f)Nc                 ó0   >• [         R                  " T 5      $ r{   )rà  Údeepcopyr7  s   €rf   rf  Ú)deepcopy_to_fake_tensor.<locals>.<lambda>©  s   ø€ ¬4¯=ª=¸Ô+=re   )r6  r]  r  ÚFakeCopyModerW  )r  r÷  s   ` rf   Údeepcopy_to_fake_tensorr]  ¥  s4   ø€ ô 
×	Ñ	×	&Ñ	&×	3Ñ	3°IÕ	>Ü"Ô#=Ó>÷ 
?×	>×	>ús   «AÁ
Ac                ó‚   • [         R                  " [         R                  " [         R                  " X-
  5      5      5      $ )z#
Calculate root mean squared error
)r6  ÚsqrtÚmeanÚsquare)rû  r  s     rf   Úrmserb  ¬  s'   € ô �:Š:”e—j’j¤§¢¨c©iÓ!8Ó9Ó:Ð:re   c                ó   • [        U USUS9$ )Ng        )ÚtolÚ	equal_nan©Úsame)rû  r  re  s      rf   Úbitwise_samerh  ³  s   € ÜØØØØñ	ð re   g-Cëâ6?Tc                ó0  ^ ^^^^^^^^^	^
^^• Tc  T m[        T [        [        [        R                  [
        R                  R                  [
        R                  45      (       a°  [        T[        [        [        R                  45      (       d   S[        T 5       S[        T5       35       e[        T 5      [        T5      :w  a	  T	" S5        g[        T 5      [        T5      :H  =(       a(    [        UUUUUU	UUU
4	S j[        T TT5       5       5      $ [        T 5      R                  S:X  a2  [        T R                  TR                  TR                  TTTTTTT	T
TS9$ [        T [         5      (       aÔ  [        T[         5      (       d   e[#        T R%                  5       5      [#        TR%                  5       5      :X  d;   S	[#        T R%                  5       5       S
[#        TR%                  5       5       35       e['        T R%                  5       5       H0  n[        T U   TU   TU   TTTTTTT	T
TS9(       a  M'  T	" SU5          g   g[        T ["        5      (       aO  [        T["        5      (       d   e[#        T 5      [#        T5      :X  d   S[#        T 5       S
[#        T5       35       eg[        T [
        R(                  [*        45      (       Gaò  [        T [
        R,                  R.                  5      (       a   e[        T[
        R,                  R.                  5      (       a   eS&S jmU4S jT TT4 5       u  m mmT R0                  (       a3  TR0                  (       d   eT R3                  5       m TR3                  5       m[        T[
        R(                  5      (       d   S[        T 5       S[        T5       35       eT(       a¾  T R4                  TR4                  :w  a  T	" ST R4                  TR4                  5        gT R4                  [
        R6                  :X  ag  T(       a  g[
        R8                  " T R;                  [
        R<                  S9TR;                  [
        R<                  S9TTTS9nU(       d  T	" S5        U$ T(       aö  T R?                  5       R;                  [
        R@                  5      m TR?                  5       R;                  [
        R@                  5      m[
        R8                  " T TTTSS9(       a  g[
        R                  RB                  RE                  T TSSS9nUS:  a@  [F        RI                  SURK                  5       RM                  5       RO                  5       5        [7        US:¬  5      $ T(       d  T R;                  TR4                  5      m [
        R8                  " T TTTTS9(       a  gTR4                  [
        RP                  :X  GaÏ  SnTRS                  5       RU                  5       (       d{  TRS                  5       RU                  5       (       dX  T RS                  5       RU                  5       (       a5  [
        R8                  " TR;                  TR4                  S9TUUTS9(       a  g[W        TT 5      RO                  5       n[X        RR                  " U5      (       a  [F        RI                  S5        [W        TT5      RO                  5       nS'UUU UUU
4S jjnU" 5       nUUU-  TS-  -   :*  nU(       dr  T(       ak  [X        RR                  " U5      (       aP  [X        RR                  " U5      (       a5  [
        RZ                  R\                  R^                  R`                  (       d  SnU(       d'  T	" SUUTRc                  5       TR4                  UTT
5        U$ T(       a  gT	" ST5        g[        T [d        [f        [        S5      [6        [
        Rh                  45      (       a*  T(       a  gT T:H  nU(       d  T	" S [        T 5      T T5        U$ [k        T 5      (       d  [m        T 5      (       al  T(       a0  [k        T5      (       d   [m        T5      (       d  T RO                  5       m [        T 5      [        T5      L =(       a    T T:H  nU(       d
  T	" S!T T5        U$ [o        T 5      (       aX  [        T 5      [        T5      L =(       a;    [        [
        Rp                  " T 5      [
        Rp                  " T5      TTTTTTTT	T
S"9$ [        T 5      R                  S#;   aB  [        T 5      [        T5      L d   e[        UUUUUU	U UUUU
4S$ jT Rr                   5       5      $ [u        S%[        T 5      R                   35      e)(z-Check correctness to see if ref and res matchNztype mismatch rÊ   zLength mismatchFc              3  óR   >	#   • U  H  u  pn[        UUUTTTTT
TT	TTS 9v •  M     g7f)©Ú	log_errorÚ(use_larger_multiplier_for_smaller_tensorÚforce_max_multiplierNrf  )rŸ   ÚaiÚbiÚ	fp64_refiÚcos_similarityre  Úexact_dtypern  Úignore_non_fprl  Úrelax_numpy_equalityrd  rm  s       €€€€€€€€€rf   r¡   Úsame.<locals>.<genexpr>Ö  sJ   øé € ð ,
ò &=Ñ!�˜	ô ØØØØØØØØ$ØØ#Ø9aØ%9öò &=ùs   ƒ$'ÚQuestionAnsweringModelOutputrk  zkeys mismatch z == )	rr  rd  re  rs  ru  rt  rl  rm  rn  zAccuracy failed for key name %sTzelements mismatch c                óp   • [        U [        R                  5      (       a  U $ [        R                  " U 5      $ r{   )r  r6  rY  Útensor©r@  s    rf   Ú	to_tensorÚsame.<locals>.to_tensor  s%   € Ü" 1¤e§l¡l×3Ñ3�1ÐH¼¿ºÀa»ÐHre   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr{   rK   )rŸ   rj  r{  s     €rf   r¡   rv    s   øé € ÐMÒ8L°™i¨Ÿn˜nÒ8Lùr÷  zdtype mismatch %s, %srÚ  )ÚatolÚrtolre  z+Accuracy failed: uint8 tensor did not matchr   g�íµ ÷Æ°>)ÚdimÚepsg®Gáz®ï?zSimilarity score=%sg{®Gáz¤?z=Found nan in reference. Consider running in higher precision.c                 ó¢  >• T(       a  gTR                   [        R                  [        R                  4;   a  SOSn T(       a  TR	                  5       S::  a  Sn U $ T(       a  TR	                  5       S::  a  Sn U $ TR	                  5       S:  d?  TR
                  S:X  a)  TR                  S	   TR                  S
   s=:X  a  S:X  d  O  TS:¼  a  Sn U $ )Nç      $@g      @g       @é
   iô  g       @r0  é   r—  éþÿÿÿr2   g{®Gáz”?)rÛ  r6  r(  Úbfloat16ÚnumelÚndimrç  )Ú
multiplierrn  Úfp64_refrû  r  rd  rm  s    €€€€€€rf   Úget_multiplierÚsame.<locals>.get_multiplieri  sÁ   ø€ ö ,Ø#ð  #Ÿy™y¬U¯]©]¼E¿N¹NÐ,KÓK™ÐQTð ö @Ø Ÿ™Ó(¨BÓ.à%)˜
ð &Ð%ö BØ Ÿ™Ó(¨CÓ/à%(˜
ð &Ð%ð !Ÿ™Ó(¨4Ó/ØŸH™H¨›M¨c¯i©i¸©m¸s¿y¹yÈ¹}Õ.QÐPQÕ.Qà (›?ð
 &)˜
Ø%Ð%re   rƒ  zŠRMSE (res-fp64): %.5f, (ref-fp64): %.5f and shape=%s. res.dtype: %s, multiplier: %f, tol: %f, use_larger_multiplier_for_smaller_tensor: %dz+Accuracy failed: allclose not within tol=%szAccuracy failed (%s): %s != %sz!Accuracy failed (numpy): %s != %s©rr  rd  re  rs  ru  rt  rl  rm  )ÚMaskedLMOutputÚSeq2SeqLMOutputÚ!CausalLMOutputWithCrossAttentionsÚLongformerMaskedLMOutputÚ	InstancesÚSquashedNormalÚBoxesÚNormalÚTanhTransformÚFooÚVariablec              3  ó†   >#   • U  H6  n[        [        TU5      [        T
U5      [        TU5      TTTTT	TTTS 9v •  M8     g7f)rŽ  N)rg  rE  )rŸ   rÐ   rr  re  rs  r‹  rt  rl  rû  ru  r  rd  rm  s     €€€€€€€€€€€rf   r¡   rv  Ø  sW   øé € ð 
ò $�ô Ü˜˜SÓ!Ü˜˜SÓ!Ü˜ #Ó&Ø-ØØ#Ø'Ø%9Ø+Ø#Ø9aöò $ùs   ƒ>Azunsupported type: )r@  r   rŽ   rí  )rŽ   Úfloat);r  rk  r  r’   rb  r6  rZ  ÚParameterListrˆ  rÃ  r‚  rw  rù  r]   rg  Úlossr  r{  rl  rø  rY  r›  r]  rL   Ú	is_sparseÚto_denserÛ  r&  ÚallcloseÚtor"  Úflattenr)  Ú
functionalÚcosine_similarityr‹   rË  ÚdetachÚcpurñ  r*  ÚisnanrH  rb  Úmathr<  rI   ÚcppÚinject_relu_bug_TESTING_ONLYrú  rž   r�   rë  r&  r+  rW  Ú	as_tensorÚ__dict__rå   )rû  r  r‹  rr  rd  re  rs  ru  rt  rl  rm  rn  rm  ÚrÚscoreÚ	loose_tolÚ	ref_errorÚ	res_errorrŒ  rŠ  Úpasses_testr{  s   ````````````         @rf   rg  rg  ¼  s²  ÿü€ ð ÑØˆÜØŒd”Eœ;×,Ñ,¬e¯h©h×.DÑ.DÄeÇjÁjÐQ÷ñ ô ˜#¤¤e¬[×->Ñ->Ð?×@Ñ@ð 	
ØœT #›Y˜K q¬¨c«¨Ð4ó	
Ð@ô ˆs‹8”s˜3“xÓÙÐ'Ô(ØÜ�3‹xœ3˜s›8Ñ#÷ 
¬÷ ,
ô ,
ô &)¨¨c°8Ô%<ó,
ó )
ð 	
ô" 
ˆc‹×	Ñ	Ð=Ó	=ô Ø�H‰HØ�H‰HØ�M‰MØØØØØ ØØØ5]Ø!5ñ
ð 	
ô 
�Cœ×	Ñ	Ü˜#œt×$Ñ$Ð$Ð$Ü�3—8‘8“:‹¤# c§h¡h£j£/Ó1ð 	
ØœS §¡£›_Ð-¨T´#°c·h±h³j³/Ð1BÐCó	
Ð1ô ˜Ÿ™›
Ö#ˆAäØ˜‘FØ˜‘FØ˜Q‘KØ#1ØØ'Ø +Ø)=Ø"/Ø'Ø=eØ)=÷ñ ñ Ð;¸QÔ?Ùñ% $ð& Ü	�Cœ×	Ñ	Ü˜#œs×#Ñ#Ð#Ð#Ü�3‹xœ3˜s›8Ó#ÐRÐ'9¼#¸c»(¸À4ÌÈCËÀzÐ%RÓRÐ#ØÜ	�Cœ%Ÿ,™,¬Ð.×	/Ò	/Ü˜c¤5×#4Ñ#4×#?Ñ#?×@Ñ@Ð@Ð@Ü˜c¤5×#4Ñ#4×#?Ñ#?×@Ñ@Ð@Ð@ô	Iô N¸¸cÀ8Ñ8LÓMÑˆˆS�(à�=�=Ø—=—=Ð �=Ø—,‘,“.ˆCØ—,‘,“.ˆCÜ˜#œuŸ|™|×,Ñ,ÐV°¼tÀC»y¸kÈÌ4ÐPSË9È+Ð.VÓVÐ,ÞØ�y‰y˜CŸI™IÓ%ÙÐ1°3·9±9¸c¿i¹iÔHØØ�y‰yœEŸJ™JÓ&Þ Øä—N’NØ—F‘F¤§¡�FÐ-Ø—F‘F¤§¡�FÐ-ØØØ'ñ�ö ÙÐKÔLØ�æØ—+‘+“-×"Ñ"¤5§=¡=Ó1ˆCØ—+‘+“-×"Ñ"¤5§=¡=Ó1ˆCÜ�~Š~˜c 3¨S°sÀd×Kð Ü—H‘H×'Ñ'×9Ñ9¸#¸sÈÈtÐ9ÐTˆEØ�t‹|Ü—‘Ð1°5·<±<³>×3EÑ3EÓ3G×3LÑ3LÓ3NÔOÜ˜ ™Ó&Ð&æØ—f‘f˜SŸY™YÓ'�ô �~Š~˜c 3¨S°sÀi×PØð �~‰~¤§¡Ô.ð %�	à Ÿ™Ó(×,Ñ,×.Ñ.ØŸI™I›KŸO™O×-Ñ-ØŸ	™	›Ÿ™×)Ñ)ÜŸšØ Ÿ™¨#¯)©)˜Ð4ØØ&Ø&Ø"+÷ð  Ü  ¨3Ó/×4Ñ4Ó6�	ä—:’:˜i×(Ñ(Ü—K‘KØWôô ! ¨3Ó/×4Ñ4Ó6�	÷!&ô !&ñF ,Ó-�
à'¨J¸Ñ,BÀSÈ4ÁZÑ,OÑP�æ#Þ!ÜŸ
š
 9×-Ñ-ÜŸ
š
 9×-Ñ-ô "ŸO™O×2Ñ2×6Ñ6×S×Sà"&�KÞ"ÙðIà!Ø!ØŸ™›
ØŸ	™	Ø"ØØ@ô
ð #Ð"æØáÐCÀSÔIØÜ	�Cœ#œs¤D¨£J´´e·l±lÐC×	DÑ	DÞØØ�3‰JˆÞÙÐ6¼¸S»	À3ÈÔLØˆÜ	˜3×	Ñ	Ô#6°s×#;Ñ#;ÞÜ˜c×"Ñ"Ô&9¸#×&>Ñ&>à—(‘(“*ˆCÜ�#‹Yœ$˜s›)Ð#×5¨#°©*ˆÞÙÐ9¸3ÀÔDØˆÜ	˜#×	Ñ	Ü�S“	œT #›YÐ&÷ 
¬DÜ�OŠO˜CÓ Ü�OŠO˜CÓ ØØ)ØØØ#Ø!5Ø'ØØ5]ñ-
ð 	
ô 
ˆc‹×	Ñ	ð  ó 
ô �C‹yœD ›IÒ%Ð%Ð%Ü÷ 
ö 
ð —|’|ó
ó 
ð 	
ô" Ð/´°S³	×0BÑ0BÐ/CÐDÓEÐEre   c                ó~   • U R                   R                  S5      S   nSU R                   SU SU R                   S3$ )NÚ/r—  r4  z' (rË   rz  )r�  ÚsplitrÂ  rÄ  )rÆ  Úshort_filenames     rf   Úformat_func_infor·  ì  sD   € Ø×%Ñ%×+Ñ+¨CÓ0°Ñ4€NØˆt�|‰|ˆn˜C Ð/¨q°×1DÑ1DÐ0EÀQÐGÐGre   c               #  ó  #   • [         R                  n [        R                  [         l        [         R                  n[        R                  [         l         S v •  U [         l        U[         l        g ! U [         l        U[         l        f = f7fr{   )rI   Úrecompile_limitr  ru  Úaccumulated_recompile_limit)ÚpriorÚprior_acc_limits     rf   Údisable_cache_limitr½  ñ  s^   é € ä×"Ñ"€Eä Ÿ[™[„FÔÜ×8Ñ8€Oä),¯©„FÔ&ð=Ûà!&ŒÔØ-<ŒÕ*øð "'ŒÔØ-<ŒÕ*üs   ‚ABÁA1 ÁBÁ1B	Â	Bz'collections.defaultdict[Any, list[Any]]Úguard_failuresz3list[torch._dynamo.output_graph.GraphCompileReason]Úgraph_break_reasonsc                óä   • S[         R                   R                  5       R                  S5      -   S-   [        [        R
                  " 5       5      -   n[        R                  R                  X5      $ )NÚrun_z%Y_%m_%d_%H_%M_%S_%fz-pid_)ÚdatetimeÚnowÚstrftimerž   rŒ  Úgetpidr­  rœ   )Úroot_dirÚdir_names     rf   Ú_get_debug_dirrÈ    sd   € ð 	Ü
×
Ñ
×
Ñ
Ó
!×
*Ñ
*Ð+AÓ
Bñ	Cð ñ	ô Œb�iŠi‹kÓ
ñ		ð ô �7‰7�<‰<˜Ó+Ð+re   c                 ó8   • [         R                  n [        U 5      $ r{   )rI   r  rÈ  )Ú
debug_roots    rf   r®  r®    s   € Ü×&Ñ&€JÜ˜*Ó%Ð%re   c                óè   • SU R                   ;   a,  [        U R                   S   5      (       a  U R                   S   $ U(       a/  SSKJn  SSKJn  U" S[        U 5      SU  S3/ UR                  QS	9  g g )
Nrô  r   rs  r2   rÿ  z Missing FakeTensor example valuez,`FakeTensor` example value was required for z but not available.r  )rö  rM   r  rt  r—  r   rž   r  )r‘  Úrequiredrt  r   s       rf   Úextract_fake_example_valuerÍ  !  sl   € Ø˜$Ÿ)™)Ó#¬°·	±	¸/Ñ0J×(KÑ(KØ�y‰y˜Ñ)Ð)Þ	Ý3å'áØ6Ü˜“IØFÀtÀfÐL_Ð`Ø1Ð%×0Ñ0Ð1ó		
ð re   c                ó:   • [        U 5      UR                  L d   eU $ r{   )rN   r÷  )r€  r  s     rf   Úensure_graph_fakerÏ  3  s   € Ü˜qÓ! R§\¡\Ò1Ð1Ð1Ø€Hre   c                ój   ^ ^• SUU 4S jjn[         R                  R                  R                  X5      $ )Nc                ó  >• U R                   S:X  a  SU R                  ;  a  [        U TT5      $ U R                   S:X  a†  SU R                  ;  av  U R                  TR                  R
                  ;   d   eTR                  R
                  U R                     n[        U[        R                  R                  5      (       d   eU$ U R                  S   nT(       d+  [        U[        R                  5      (       a  [        UT5      $ U$ )Nr  rô  Úget_attr)rØ  rö  Úget_fake_valueÚtargetrH  Ú
nn_modulesr  r6  r   ÚGraphModulerY  rÏ  )rÛ  re  rÏ   Úallow_non_graph_faker  s      €€rf   ÚvisitÚ)get_fake_values_from_nodes.<locals>.visit;  sÌ   ø€ Ø�4‰4�?Ó" ¸a¿f¹fÓ'Dô " ! RÐ)=Ó>Ð>à�T‰T�ZÓ O¸1¿6¹6Ó$AØ—8‘8˜rŸy™y×3Ñ3Ó3Ð3Ð3Ø—‘×%Ñ% a§h¡hÑ/ˆBÜ˜b¤%§(¡(×"6Ñ"6×7Ñ7Ð7Ð7ØˆIà�f‰f�_Ñ%ˆÞ#¬
°3¼¿¹×(EÑ(EÜ$ S¨"Ó-Ð-Øˆ
re   )rÛ  útorch.fx.NoderŽ   r   )r6  r   r‘  Úmap_arg)r  r×  r×  rØ  s   ` ` rf   Úget_fake_values_from_nodesrÜ  8  s(   ù€ ÷ð ô" �8‰8�=‰=× Ñ  Ó.Ð.re   c                ó®   ^^• SSK nSSKJm  Uc  U $ SnUR                  c   eUR                  nUR                  mUU4S jnUR
                  " X5U 5      n U $ )zÊ
Replace symbolic size expressions (like 's0', 's94') in error messages
with their concrete runtime values for better readability.

Example: "size (s94)" -> "size (s94: hint= 10)" if s94's value is 10.
r   N)ÚIntegerz
\(s(\d+)\)c                óê   >^• SU R                  S5       3m[        U4S jTR                  5        5       S 5      n[        U[        T45      (       a  ST S[        U5       S3$ U R                  S5      $ )Nr³  r2   c              3  óP   >#   • U  H  u  pUR                   T:X  d  M  Uv •  M     g 7fr{   )rn   )rŸ   rm  rn  Úsym_names      €rf   r¡   ÚGget_concrete_sizes_from_symints.<locals>.replace_sym.<locals>.<genexpr>g  s"   øé € ÐDÒ-‘4�1°·±¸8Ñ1C�Q‰QÒ-ùs   ƒ&�	&r3  z	: hint = rz  r   )Úgrouprç  rÄ   r  r�   rž   )Úmatchrj  rá  rÞ  Ú
var_to_vals     @€€rf   Úreplace_symÚ4get_concrete_sizes_from_symints.<locals>.replace_symd  sp   ù€ Ø�u—{‘{ 1“~Ð&Ð'ˆÜÜD˜:×+Ñ+Ô-ÓDØó
ˆô �cœC ˜>×*Ñ*Ø�x�j 	¬#¨c«(¨°1Ð5Ð5Ø�{‰{˜1‹~Ðre   )r  Úsympy.core.numbersrÞ  rø  rå  r›  )r�  r÷  r  Úpatternrø  ræ  rÞ  rå  s         @@rf   Úget_concrete_sizes_from_symintsrê  O  s_   ù€ ó å*àÑØˆ
à€GØ×ÑÑ*Ð*Ð*Ø×#Ñ#€IØ×%Ñ%€Jöð �&Š&� sÓ
+€CØ€Jre   c           	     óæ  ^ ^^^^• SSK Jn  SSKJnJnJnJnJn  T R                  n	ST R                  ;   a,  [        T R                  S   5      (       a  T R                  S   $ [        TT R                  T R                  4U5      u  mm[        R                  R                   R"                  (       d)  [        R                  R                   R$                  (       aP  [        T['        T 0 5      U5      n
U
 Vs0 s H+  n[        U5      (       d  M  [)        U5      UR*                  _M-     nnO/ n
0 nSmTR,                  nUc   eU	S:X  aZ  [/        T5      S:”  aK  [1        TS   [        R2                  R4                  5      (       a  [7        TS   U5      4[9        TSS 5      -   mU	S:X  ab  TR:                  R<                  T R>                     m[A        T5      (       a#  [C        TS	5      (       a  TRE                  TT5        [7        TU5      mT RF                  S
;   d  [I        S T 5       5      (       a  [9        S T 5       5      m U   [K        5          [M        UUUU U4S j5      nSSS5        SSS5        U(       d=  [Š        RŒ                  " [        RŽ                  [�        R’                  " [”        TS(9W5      n[        R                  R                   R"                  (       d)  [        R                  R                   R$                  (       a'  TR:                  R–                  R™                  T U
U5        W$ s  snf ! , (       d  f       NÚ= f! , (       d  f       Nã= f! U a    e [N         Ga…  nUnURP                  b  URP                  n[1        U[        RR                  RT                  RV                  5      (       a�  URX                  [        RZ                  R\                  R^                  R`                  [        RZ                  R\                  Rb                  R`                  4;   a  S/nOS/nU" S[e        URX                  5      SURX                   S3US9  GO^[1        U[        RR                  RT                  Rf                  5      (       aƒ  [        R                  R                   Rh                  (       d-  U" S[e        URX                  5      SURX                   S3S/S9  GOÕU" S[e        URX                  5      SURX                   S3S/S9  GO¨[1        U[        RR                  RT                  Rj                  5      (       a®  URX                  n	Sn[1        U	[        Rl                  Rn                  5      (       a\  [        Rp                  Rs                  U	Rt                  RF                  U	Rt                  Rv                  5      nUb  Uu  nnSU SU SU S3nU" SS URX                   3SU S!3/S9  OÇ[1        U[        Rx                  Rz                  R|                  R~                  5      (       a  U" UR€                  [e        U5      S"S#9e[1        UU5      (       a!  U" UR€                  UR                  S   5      Ue[1        U[‚        5      (       a(  S$[e        U5      ;   a  U" S%S&T R>                   S'U 3S/ S9  […        [e        U5      U5      nU" U5      R‡                  URˆ                  5      SeSnAff = f))ab  
Run the computation represented by `node` using fake tensors and return the result.

allow_non_graph_fake: whether to allow the return result to be:
    1. non-fake or 2. fake that is not created by this instance of Dynamo.
    If `True`, you must be prepared to deal with such return values, ideally
    by further wrapping them as this graph's fakes.
r   )ÚValueRangeErrorr2   )ÚTorchRuntimeErrorrt  ÚUnsupportedÚ	UserErrorÚUserErrorTyperô  NÚcall_methodÚcall_moduleÚ_initialize_hook)ÚinterpolateÚ
is_integerÚwrapped_gradientc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr{   )r  Úcomplex)rŸ   Úas     rf   r¡   Ú!get_fake_value.<locals>.<genexpr>µ  s   é € ð MÚ(, 1Œ
�1”g×Ðªùs   ‚c              3  ó¨   #   • U  HH  n[        U[        R                  5      (       a"  UR                  R                  b  [        U5      OUv •  MJ     g 7fr{   )r  r6  ÚSymFloatr‘  Úhintr›  ro  s     rf   r¡   rú  ¹  sG   é € ð 
ò �ô ˜c¤5§>¡>×2Ñ2°s·x±x·}±}Ñ7Pô �c”
àôò ùs   ‚AAc                 ó6   >• [        TR                  TT TT5      $ r{   )Úrun_noderH  )r   r!  Únnmoduler‘  r  s   €€€€€rf   rf  Ú get_fake_value.<locals>.<lambda>Å  s   ø€ œ §¡¨D°$¸ÀÔIre   zkEnable tracing of data-dependent output operators with `torch._dynamo.config.capture_scalar_outputs = True`z’Consider wrapping the operator into a PyTorch-understood custom operator (see https://pytorch.org/tutorials/advanced/custom_ops_landing_page.html)zData dependent operatorz
Operator `zP` has a non-Tensor output whose value is dependent on the data of Tensor inputs.r  zDynamic shape operatorz.`'s output shape depends on input Tensor data.zmEnable tracing of dynamic shape operators with `torch._dynamo.config.capture_dynamic_output_shape_ops = True`z'Dynamic shape operator (no meta kernel)zA` does not have a meta kernel that supports dynamic output shapesz!Please report an issue to PyTorchr—  z:It's possible that the support was implemented in module `z` and you may need to `import z`(z), otherwise z3Operator does not support running with fake tensorszunsupported operator: z}see https://docs.google.com/document/d/1GgvOe7C8_NVOMLOCwDaYV1mXXyHMXY7ExoewHqooxrs/edit#heading=h.64r4npvq0w0 for how to fixÚconstrain_as_size_example)Ú	case_nameÚargumentz&TypeError when making fake tensor callz
TypeError z: )r  )MÚtorch.utils._sympy.value_rangesrì  rÅ  rí  rt  rî  rï  rð  rØ  rö  rM   rÜ  r   r!  r6  rÛ  rI   Úuse_graph_deduplicationÚtrack_nodes_for_deduplicationr3   rï  r]  r÷  r‚  r  rZ  rÏ  r]  r  rH  rÕ  rÔ  rb  r>  Ú_infer_parametersrn   rH  r   rW  rå   Ú	__cause__r]  r  ÚDataDependentOutputExceptionÚfuncÚopsÚatenrñ  ró  Ú_local_scalar_denserž   ÚDynamicOutputShapeExceptionÚ capture_dynamic_output_shape_opsÚUnsupportedOperatorExceptionr8  r:  r  Ú_dispatch_pystubÚ_schemaÚoverload_namer   rù  rú  ÚGuardOnDataDependentSymNodeÚCONSTRAINT_VIOLATIONrâ  rê  Úwith_tracebackÚ__traceback__ÚpytreeÚtree_map_onlyrY  r1  ÚpartialrÏ  Úregion_trackerÚtrack_node_mutations)r‘  r  r×  rì  rí  rt  rî  rï  rð  rØ  Úflat_args_kwargsrp  Úid_to_initial_versionr÷  Úret_valr€  Úcauserz  Úimport_suggestionÚmaybe_pystubrI  Úctxr�  rÁ  r   r!  r   s   ``                      @@@rf   rÓ  rÓ  r  s  ü€ õ @÷õ ð 
�‰€Bð ˜$Ÿ)™)Ó#¬°·	±	¸/Ñ0J×(KÑ(KØ�y‰y˜Ñ)Ð)ä-Ø
ˆT�Y‰Y˜Ÿ™Ð$Ð&:ó�L€Dˆ&ô
 	�‰×Ñ×4×4Ü�=‰=×Ñ×=×=ä5Ø”˜t RÓ(Ð*>ó
Ðñ .>ó!
Ú-= cÄÈÇÓ!ŒBˆs‹G�S—\‘\Ò!Ñ-=ð 	ð !
Ðð ÐØ "Ðà€HØ—‘€IØÑ Ð Ð Ø	ˆ]Óœs 4›y¨1›}´¸DÀ¹GÄUÇXÁXÇ_Á_×1UÑ1Uä'¨¨Q©°Ó;Ð=ÄÀdÈ1È2ÀhÃÑOˆà	ˆ]ÓØ—9‘9×'Ñ'¨¯©Ñ4ˆä˜(×#Ñ#¬°Ð:L×(MÑ(Mð
 ×&Ñ& x°Ô6ô +¨8°YÓ?ˆà‡y�yÐEÓEÌñ MÙ(,óM÷ Jñ Jô ñ 
ñ ó
ó 
ˆðhOÚÔ0Õ2Ü)ßIÐIóˆG÷ 3�YöR  Ü× Ò Ü�L‰Lœ)×+Ò+Ô,=À"ÑEÀwó
ˆô
 	�‰×Ñ×4×4Ü�=‰=×Ñ×=×=à
�	‰	× Ñ ×5Ñ5ØØØ!ô	
ð €NùòC!
÷R 3Õ2ú�Y�Yûð ó ØÜô aOØ ˆØ�;‰;Ñ"Ø—K‘KˆEäØ”5×$Ñ$×0Ñ0×MÑM÷
ñ 
ð
 �z‰zÜ—	‘	—‘×#Ñ#×+Ñ+Ü—	‘	—‘×2Ñ2×:Ñ:ðó ðKð‘ð`ð�ñ Ø1Ü˜EŸJ™J›Ø(¨¯©¨ð 5Ið Iàôô Ø”5×$Ñ$×0Ñ0×LÑL÷
ñ 
ô —=‘=×'Ñ'×H×HÙØ4Ü §
¡
›OØ",¨U¯Z©Z¨LÐ8fÐ gðYðô	ñ ØEÜ §
¡
›OØ",¨U¯Z©Z¨LÐ8yÐ zà;ðô	ô Ø”5×$Ñ$×0Ñ0×MÑM÷
ñ 
ð —‘ˆBØ "ÐÜ˜"œeŸj™j×3Ñ3×4Ñ4Ü$Ÿx™x×8Ñ8Ø—J‘J—O‘O R§Z¡Z×%=Ñ%=ó �ð  Ñ+Ø".‘K�F˜Cð#Ø#) (Ð*HÈÈð QØ˜5 ð/ð &ñ
 ØMØ0°·±°Ð=Øà(Ð)ð *&ð &ðó		ô Ø”5—8‘8×(Ñ(×8Ñ8×TÑT÷
ñ 
ñ Ø×2Ñ2Ü�E“
Ø5ñð ô
 ˜˜×/Ñ/Ù˜M×>Ñ>ÀÇÁÀqÁ	ÓJÐPQÐQÜ˜œy×)Ñ)¨j¼CÀ»JÓ.FÙØ@Ø$ T§[¡[ M°°E°7Ð;ØØò	ô .¬c°!«f°iÓ@ˆÙ Ó$×3Ñ3°A·O±OÓDÈ$ÐNûðCaOús[   Ã5L3ÄL3ÉM ÉM	ÉL8É$M	É,M Ì8
M	ÍM	Í	
MÍM ÍM Í[0Í+N [+Û+[0c                 ó$   • [        [        SS 5      $ )NrÑ   )rE  Ú_current_noderK   re   rf   Úget_current_noder'  A  s   € Ü”= '¨4Ó0Ð0re   c              #  óv   #   • [        5       nU [        l         S v •  U[        l        g ! U[        l        f = f7fr{   )r'  r&  rÑ   )r‘  Úolds     rf   Úset_current_noder*  E  s-   é € ä
Ó
€CØ„MÔð"Ûà!ŒÕø˜cŒÕüs   ‚9™) �9©6¶9c           
     óÈ  ^^^^
• TR                   m
[        T5         SUUUU
4S jjnSSKJn   T
S:X  a  TR                  " T0 TD6sSSS5        $ T
S:X  a^  [        TS   TR                  5      (       d  SSKJn  U" S	S
U" S5      / S9  [        TS   TR                  5      " TSS 0 TD6sSSS5        $ T
S:X  a  Uc   eU" T0 TD6sSSS5        $ T
S:X  a.  U R                  R                  TR                  5      sSSS5        $ T
S:X  a*  STR                  ;   d   eTR                  S   sSSS5        $  SSS5        [%        T
5      e! [        [        4 a:  nSSKJn  / n	[        U[        5      (       a  S/n	U" SS
U" U5      U	US9   SnANXSnAfU a    e [         a0  n[        U" U5      5      R!                  UR"                  5      UeSnAff = f! , (       d  f       N¤= f)a   
Runs a given node, with the given args and kwargs.

Behavior is dictated by a node's op.

run_node is useful for extracting real values out of nodes.
See get_real_value for more info on common usage.

Note: The tracer arg is only used for 'get_attr' ops
Note: The nnmodule arg is only used for 'call_module' ops

Nodes that are not call_function, call_method, call_module, or get_attr will
raise an AssertionError.
c           	     óN   >• ST STR                    ST ST S3	[        U 5      -   $ )Nz0Dynamo failed to run FX node with fake tensors: rÊ   z(*z, **z): got )rÔ  rY  )r€  r   r!  r‘  rØ  s    €€€€rf   Úmake_error_messageÚ$run_node.<locals>.make_error_messaged  s=   ø€ àBÀ2À$ÀaÈÏÉÀ}ÐTVÐW[ÐV\Ð\`ÐagÐ`hÐhoÐpÜ�q“'ñðre   r2   )rî  r  Nrñ  r   rs  z/Missing attribute when running call_method noder—  zattribute not definedr  rò  rÒ  Úplaceholderrô  z;If the op is a PyTorch op, please file an issue to PyTorch.zGNotImplementedError/UnsupportedFakeTensorException when running FX noderv  )r€  r   rŽ   rž   )rØ  r*  rÅ  rî  rÔ  r>  rt  rE  Úoutput_graphÚget_submodulerö  r|  rE  r  rÏ  rå   r  r  r=  )Útracerr‘  r   r!  r   r-  rî  rt  r€  rz  rØ  s    ```      @rf   rÿ  rÿ  O  sî  û€ ð" 
�‰€Bä	˜$Õ	÷	ò 	õ 	%ð-	Ø�_Ó$Ø—{’{ DÐ3¨FÑ3÷ 
 Ñ	ð �}Ó$Ü˜t A™w¨¯©×4Ñ4Ý2á!Ø QØ "Ù$6Ð7NÓ$OØ ò	ô ˜t A™w¨¯©Ô4°d¸1¸2°hÐIÀ&ÑI÷/ 
 Ñ	ð0 �}Ó$ØÑ+Ð+Ð+Ù Ð0¨Ñ0÷5 
 Ñ	ð6 �zÓ!Ø×*Ñ*×8Ñ8¸¿¹ÓE÷9 
 Ñ	ð: �}Ó$Ø&¨$¯)©)Ó3Ð3Ð3Ø—y‘y Ñ1÷? 
 Ñ	ð: %÷; 
 ôr ˜Ó
Ðøô1 $Ô%CÐDó 	å*àˆEÜ˜!Ô0×1Ñ1àQð�ñ ØaØÙ.¨qÓ1ØØ÷ûð ó 	ØÜó 	ÜÑ1°!Ó4Ó5×DÑDØ—‘óàðûð	ú÷i 
 Õ	úsY   œG¯EÁAEÂ4EÃ*EÄ&EÄ4GÅGÅ0FÆGÆGÆ +GÇGÇGÇ
G!c                ó”  ^• SSK Jn  TR                  nX;   a  X0   $ U R                  n[        R
                  R                  R                  U R                  U R                  4U4S j5      u  pVUS:X  a)  SU R                  ;   a  U R                  S   R                  $ US:X  aS  TR                  R                  U R                     n[        U5      (       d  [         R"                  " U5      nOU" U0 UD6  OSn [%        TXXg5      nXƒU '   U$ ! [&         a0  n	U" [)        U	5      5      R+                  U	R,                  5      SeSn	A	ff = f)z…
Run the actual computation represented by `node` and return the result.
This will execute any dependent nodes in the graph as well.
r2   )rí  c                ó   >• [        U T5      $ r{   )Úget_real_value)rÛ  r2  s    €rf   rf  Ú get_real_value.<locals>.<lambda>¬  s   ø€ ”.  FÔ+re   r/  Úgraphargrò  N)rÅ  rí  Úreal_value_cacherØ  r6  r   r‘  rÛ  r   r!  rö  Úexampler0  rÕ  rÔ  rb  rà  rZ  rÿ  rå   rž   r  r  )
r‘  r2  rí  ÚcacherØ  r   r!  Ú	nn_moduleÚ
real_valuer€  s
    `        rf   r5  r5  ž  s&  ø€ õ
 'à×#Ñ#€EØƒ}Ø‰{Ðà	�‰€BÜ—8‘8—=‘=×(Ñ(Ø	�‰�D—K‘KÐ Ü+ó�L€Dð
 
ˆ]Ó˜z¨T¯Y©YÓ6Ø�y‰y˜Ñ$×,Ñ,Ð,à	ˆ]ÓØ×'Ñ'×2Ñ2°4·;±;Ñ?ˆ	Ü˜i×(Ñ(ÜŸš iÓ0‰Iñ �tÐ&˜vÓ&àˆ	ðRÜ˜f d°&ÓDˆ
Ø ˆd‰ð Ðøô ó RÙ¤ A£Ó'×6Ñ6°q·±ÓGÈTÐQûðRús   Ã:D Ä
EÄ+EÅEc                ó
  ^• SSK JmJn  SU4S jjnU R                  5        H%  u  p4U" U5      (       d  M   SU SU" U5       35       e   U R	                  5        H%  u  p5U" U5      (       d  M   SU SU" U5       35       e   g )Nr   )ÚFakeTensorConfigrM   c                ón   >• TR                   (       a#  SS KnSUR                  " U R                  5       3$ g)Nr   z"FAKE TENSOR CREATION TRACEBACK: 
 zNEnable TORCH_FAKE_TENSOR_DEBUG=1 to get creation stack traces on fake tensors.)ÚdebugÚ	tracebackÚformat_listÚ_debug_trace)r@  rA  r>  s     €rf   Ústack_or_hintÚ7assert_no_fake_params_or_buffers.<locals>.stack_or_hintÈ  s/   ø€ Ø×!×!Ûà8¸×9NÒ9NÈqÏ~É~Ó9^Ð8_Ð`Ð`àcre   zUnexpected fake buffer rÊ   zUnexpected fake param )r@  r   rŽ   rž   )Útorch._subclasses.fake_tensorr>  rM   Únamed_buffersÚnamed_parameters)re  rM   rD  rn   Úbufferr^  r>  s         @rf   Ú assert_no_fake_params_or_buffersrJ  Å  s’   ø€ ßG÷dð ×(Ñ(Ö*‰ˆÙ˜6—?“?ð 	
Ø% d V¨1©]¸6Ó-BÐ,CÐDó	
Ð"ñ +ð ×*Ñ*Ö,‰ˆÙ˜5—>“>ð 	
Ø$ T F¨!©M¸%Ó,@Ð+AÐBó	
Ð!ò -re   c                ó8   • U R                    SU R                   3$ )z1
Returns the fully qualified name of the object.
r7  )r^   r_   r7  s    rf   ÚfqnrL  Ú  s!   € ð �n‰nÐ˜Q˜s×/Ñ/Ð0Ð1Ð1re   c                ó\   • [         R                  R                  R                  (       a  U $ U$ r{   )r6  rÛ  rI   Úassume_static_by_default)Úcount1Úcount2s     rf   ÚifdynstaticdefaultrQ  á  s   € Ü‡}�}×Ñ×4×4Øˆàˆre   c           
     óP  • [        [        R                  " [        R                  R	                  [        [        U R                  5      5      5      5       HN  nUR                  S5      (       d  M  US   S:w  d  M&  [        R                  " U R                   SUSS  35        MP     g)z8
Ensure all the files in a given submodule are imported
z.pyr   rÁ  r7  Néýÿÿÿ)rø  rŒ  Úlistdirr­  rÌ  r   rž   Ú__file__r=  Ú	importlibÚimport_moduler]   )ra  rÑ  s     rf   Úimport_submodulerX  è  st   € ô œ2Ÿ:š:¤b§g¡g§o¡o´d¼3ÀÇÁÓ6MÓ&NÓOÖPˆØ×Ñ˜U×#Ó#¨°©°sÕ(:Ü×#Ò# s§|¡| n°A°h¸sÀ°m°_Ð$EÖFò Qre   c                ó*   • [        [        U 5      5      $ r{   )Úclass_has_getattributerÃ  r  s    rf   Úobject_has_getattributer[  ñ  s   € Ü!¤$ u£+Ó.Ð.re   c                ó8   • [         R                  U S5      nX#U'   g )Nr¬  )r'  Ú__getattribute__)r  rn   rÑ   r"  s       rf   Ú object_setattr_ignore_descriptorr^  õ  s   € ä×Ñ  ZÓ0€AØ€d‚Gre   c                ó’   •  [        [        R                  " U S5      [        R                  5      (       a  g g! [
         a     gf = f)Nr]  TF)r  r4  r5  r=  r>  r0  r}   s    rf   rZ  rZ  û  sT   € ðÜÜ×"Ò" 3Ð(:Ó;Ü×Ñ÷
ñ 
ð ð	
ð øô ó ØØðús   ‚49 ¹
AÁAc                óÌ   •  [         R                  " [        U 5      S5      nU(       a)  U[        R
                  R                  R                  L a  S nU$ ! [         a    S n N@f = f)NÚ__getattr__)r4  r5  rÃ  r0  r6  rZ  rÏ  ra  )rÑ   Úignore_nn_module_getattrÚ
getattr_fns      rf   Úget_custom_getattrrd    sX   € ðÜ×+Ò+¬D°«K¸ÓGˆ
ö   J´%·(±(·/±/×2MÑ2MÒ$Màˆ
ØÐøô ó ØŠ
ðús   ‚ A ÁA#Á"A#c                  ó    • \ rS rSrSrSrSrSrg)ÚTensorStaticReasoni  r[   r…  rÌ   rK   N)r]   r^   r_   r`   Ú	PARAMETERÚ
NOT_TENSORÚNN_MODULE_PROPERTYrd   rK   re   rf   rf  rf    s   † Ø€IØ€JØÓre   rf  c                óœ   • U [         R                  :X  a  gU [         R                  :X  a  gU [         R                  :X  a  g[	        SU  35      e)Nz>mark_dynamic on parameter, parameters are always static today.z2mark_dynamic on a non tensor, how did this happen?z4tensor is static because it is nn module associated.zIllegal reason )rf  rg  rh  ri  r=  )rV  s    rf   Útensor_static_reason_to_messagerk    sJ   € ØÔ#×-Ñ-Ó-ØOØÔ#×.Ñ.Ó.ØCØÔ#×6Ñ6Ó6ØEÜ
˜?¨6¨(Ð3Ó
4Ð4re   c                óÀ  • SSK Jn  UR                  R                  5       (       d  UR                  R	                  5       (       a'  [
        R                  (       a  S[        R                  4$ [        U 5      [        R                  R                  L d  U" U5      (       a'  [
        R                  (       a  S[        R                  4$ U(       d  S[        R                  4$ g)a   
Given a tensor, source, and is_tensor flag, determine if a shape should be static.

Args:
tensor - the real tensor to evaluate, parameters force a static shape.
is_tensor - internal dynamo check, essentially "is_tensor": target_cls is TensorVariable,
tensors not in a TensorVariable for whatever reason are forced static.

Returns a tuple, where the first element is the bool of whether or not this tensor should have a static shape.
The second element is a TensorStaticReason, useful for passing to tensor_static_reason_to_message if needed.
r2   )Ú)is_from_unspecialized_param_buffer_sourceTr¸  )r˜  rm  rš  rœ  rž  rI   Ú&force_nn_module_property_static_shapesrf  ri  rÃ  r6  rZ  r[  Úforce_parameter_static_shapesrg  rh  )ry  r  Útensor_sourcerm  s       rf   Útensor_always_has_static_shaperq  $  s¥   € õ  Bð 	×"Ñ"×;Ñ;×=Ñ=Ø×%Ñ%×HÑH×JÑJÜ
×
7×
7ØÔ'×:Ñ:Ð:Ð:ô 	ˆV‹œŸ™×*Ñ*Ò*Ù4°]×CÑCÜ
×
.×
.ØÔ'×1Ñ1Ð1Ð1ÞØÔ'×2Ñ2Ð2Ð2Øre   c                ó.   ^ ^• SU U4S jjn[        U5      $ )Nc                 óŒ  >•  SSK J n   TR                  R
                   Vs/ s H;  oR                  UR                  UR                  UR                  UR                  /PM=     nnU " U/ SQS9n[        TTR                  R                  R                  U5      $ ! [         a    S[        [        TT5      5      -   s $ f = fs  snf )Nr   )r£   zkTabulate module missing, please install tabulate to log the graph in tabular format, logging code instead:
)Úopcodern   rÔ  r   r!  r—   )r£   r¤   rž   r+   Úgraphr×  rØ  rn   rÔ  r   r!  r*   ÚforwardÚ__code__r�  )r£   rÛ  Ú
node_specsÚ	graph_strr,  re  s       €€rf   ÚinnerÚ(lazy_format_graph_tabular.<locals>.innerG  sµ   ø€ ð	Ý)ð ACÇÁÇÂó
Ú@N¸1�T‰T�1—6‘6˜1Ÿ8™8 Q§V¡V¨Q¯X©XÓ6Áð 	ð 
ñ ØÒ Nñ
ˆ	ô " '¨2¯:©:×+>Ñ+>×+JÑ+JÈIÓVÐVøô ó 	à~ÜÔ,¨W°bÓ9Ó:ñ;òð	üò
s   ƒB ¡ACÂ"B>Â=B>©rŽ   rž   rF   )r,  re  rz  s   `` rf   Úlazy_format_graph_tabularr}  F  s   ù€ ÷Wð Wô" �eÓÐre   c                óh   • U  SU SU SU S[         R                  " U5      R                  5        S3
$ )NrÊ   z line z 
r™   )ÚdisÚBytecode)rR  rn   rÑ  Úline_norÆ  s        rf   Úformat_bytecoder‚  [  s=   € ð ˆX�Q�t�f˜A˜h˜Z v¨g¨Y°c¼#¿,º,ÀtÓ:L×:PÑ:PÓ:RÐ9SÐSUÐVÐVre   Ú_forward_pre_hooksÚ_forward_hooksÚ_backward_pre_hooksÚ_backward_hooks)Ú_state_dict_pre_hooksÚ_state_dict_hooksÚ_load_state_dict_pre_hooksÚ_load_state_dict_post_hooksc                 óþ   • [        [        [        R                  R                  R
                  R                  5      =(       d7    [        [        R                  R                  R
                  R                  5      5      $ r{   )r&  r‚  r6  rZ  ÚmodulesrI  Ú_global_backward_hooksÚ_global_backward_pre_hooksrK   re   rf   Únn_module_has_global_hooksr�  l  sS   € ô ÜŒE�H‰H×Ñ×#Ñ#×:Ñ:Ó;÷ 	CÜŒu�x‰x×Ñ×&Ñ&×AÑAÓBóð re   c                ó~  • / nU(       + =(       a    U(       + =(       a    U(       + nU(       d  U(       a  UR                  [        5        U(       d  U(       a  UR                  [        5        U(       a  UR                  [        5        / nU H-  n[	        X/ 5      nU H  n	X‰   n
UR                  U
5        M     M/     U$ )z¶
Sometimes its useful to differentiate between types of hooks such as forward/backward/pre
hooks executed during module.__call__, and state_dict hooks which are executed separately.
)ÚextendÚforward_hook_namesÚbackward_hook_namesÚstate_dict_hook_namesrE  r²   )ra  Úcheck_forward_hooksÚcheck_backward_hooksÚcheck_state_dict_hooksÚhook_dicts_to_checkÚcheck_all_hooksÚ	all_hooksÚhook_dict_nameÚhooksÚ	hook_namer³   s              rf   Únn_module_get_all_hooksrž  u  sª   € ð ÐàÔ÷ 	'Ø$Ô$÷	'à&Ô&ð ö
 žoØ×"Ñ"Ô#5Ô6ÞžØ×"Ñ"Ô#6Ô7ÞØ×"Ñ"Ô#8Ô9à€IÛ-ˆÜ˜¨RÓ0ˆÛˆIØÑ#ˆDà×Ñ˜TÖ"ó ñ .ð Ðre   c                ó0   • [        U UUUS9n[        U5      $ )zD
Helper function to check if a module has any hooks attached to it.
)r•  r–  r—  )rž  r&  )ra  r•  r–  r—  rœ  s        rf   Únnmodule_has_hooksr   –  s&   € ô $ØØ/Ø1Ø5ñ	€Eô �‹;Ðre   c                óT  • [        U 5      (       a  U $ [        U [        R                  5      (       a  [	        U R
                  5      $ [        U [        R                  5      (       a  U R                  SS9$ [        U [        [        45      (       a  [        U 5      " S U  5       5      $ U $ )z0Convert tensor and tnp.ndarray to numpy.ndarray.T)Úforcec              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr{   )Úto_numpy_helper©rŸ   r  s     rf   r¡   Ú"to_numpy_helper.<locals>.<genexpr>±  ó   é € ÐAº5°Cœ?¨3×/Ð/º5ùrv  )rM   r  ÚtnprV  r¤  ry  r6  rY  Únumpyr  rk  rÃ  r  s    rf   r¤  r¤  ¨  s}   € äˆu‡~�~ØˆÜ�%œŸ™×%Ñ%Ü˜uŸ|™|Ó,Ð,Ü	�Eœ5Ÿ<™<×	(Ñ	(Ø�{‰{ ˆ{Ð&Ð&Ü	�EœE¤4˜=×	)Ñ	)Ü�EŒ{ÑA¹5ÓAÓAÐAàˆre   c                ó>  • [         c   e[        U [         R                  5      (       a  [        R                  " U 5      $ [        U [
        R                  5      (       a  U R                  $ [        U [        [        45      (       a  [        U 5      " S U  5       5      $ U $ )zeConvert tnp.ndarray to tensor, leave other types intact. If a list/tuple, loop through it to convert.c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr{   )Únumpy_to_tensorr¥  s     rf   r¡   Ú"numpy_to_tensor.<locals>.<genexpr>¾  r§  rv  )
r  r  rV  r6  r«  r¨  ry  r  rk  rÃ  r  s    rf   r¬  r¬  ¶  sr   € ä‰>Ðˆ>Ü�%œŸ™×$Ñ$Ü�Š˜uÓ%Ð%Ü�%œŸ™×%Ñ%Ø�|‰|ÐÜ	�EœE¤4˜=×	)Ñ	)Ü�EŒ{ÑA¹5ÓAÓAÐAàˆre   c                  ó2   • \ rS rSrSS jrSS jrS	S jrSrg)
Únumpy_to_tensor_wrapperiÃ  c                óL   • Xl         SU R                   R                  -   U l        g ©NÚwrapped_©rÓ  r]   )rw  rÓ  s     rf   rx  Ú numpy_to_tensor_wrapper.__init__Ä  s   € ØŒØ" T§V¡V§_¡_Ñ4ˆ�re   c                ó6   • SU R                   R                   S3$ )Nz<Wrapped function <original ú>>r³  r|  s    rf   Ú__repr__Ú numpy_to_tensor_wrapper.__repr__È  s   € Ø-¨d¯f©f¯o©oÐ->¸bÐAÐAre   c                ó<   • U R                   " U0 UD6n[        U5      $ r{   )rÓ  r¬  ©rw  r   r!  rÏ   s       rf   rÉ  Ú numpy_to_tensor_wrapper.__call__Ë  s    € Ø�fŠf�dÐ%˜fÑ%ˆÜ˜sÓ#Ð#re   )r]   rÓ  N)rÓ  úCallable[_P, R]rŽ   r�   r|  ©r   r(  r!  r)  rŽ   r   )r]   r^   r_   r`   rx  r·  rÉ  rd   rK   re   rf   r¯  r¯  Ã  s   † ô5ôB÷$re   r¯  c                ó  • [        U [        R                  5      (       a  [        X5      n[	        U5      $ [        U [
        R                  5      (       a+  [        [        R                  " U 5      U5      n[	        U5      $ g r{   )r  r¨  rV  rE  r¬  r6  rY  )r  rn   rÏ   s      rf   Únumpy_attr_wrapperr¿  Ð  s^   € Ü�#”s—{‘{×#Ñ#Ü�cÓ ˆÜ˜sÓ#Ð#Ü	�CœŸ™×	&Ñ	&Ü”c—k’k #Ó&¨Ó-ˆÜ˜sÓ#Ð#ð 
're   c                  ó6   • \ rS rSrSrSS jrS	S jrS
S jrSrg)Únumpy_method_wrapperiÙ  zgConvert obj from torch.Tensor to tnp.ndarray and call method. Then convert result back to torch.Tensor.c                ó8   • Xl         SU R                   -   U l        g r±  )Úmethodr]   )rw  rÃ  s     rf   rx  Únumpy_method_wrapper.__init__Ü  s   € ØŒØ" T§[¡[Ñ0ˆ�re   c                ó"   • SU R                    S3$ )Nz<Wrapped method <original r¶  ©rÃ  r|  s    rf   r·  Únumpy_method_wrapper.__repr__à  s   € Ø+¨D¯K©K¨=¸Ð;Ð;re   c                óÌ   • US   n[        U[        R                  5      (       a  [        R                  " U5      n[        X0R                  5      nU" USS  0 UD6n[        U5      $ rŒ  )r  r6  rY  r¨  rV  rE  rÃ  r¬  )rw  r   r!  r  Úmethod_callablerÏ   s         rf   rÉ  Únumpy_method_wrapper.__call__ã  sX   € Ø�1‰gˆÜ�cœ5Ÿ<™<×(Ñ(Ü—+’+˜cÓ"ˆCÜ! #§{¡{Ó3ˆÙ˜t A B˜xÐ2¨6Ñ2ˆÜ˜sÓ#Ð#re   )r]   rÃ  N)rÃ  rž   rŽ   r�   r|  )r   r   r!  r   rŽ   r   ©	r]   r^   r_   r`   rÛ   rx  r·  rÉ  rd   rK   re   rf   rÁ  rÁ  Ù  s   † Ùqô1ô<÷$re   rÁ  c                  ó6   • \ rS rSrSrSS jrS	S jrS
S jrSrg)Únumpy_operator_wrapperiì  zQImplements dunder methods for tnp.ndarray via functions from the operator libraryc                ó8   • Xl         SUR                   3U l        g r±  )rØ  r]   )rw  rØ  s     rf   rx  Únumpy_operator_wrapper.__init__ï  s   € ØŒØ" 2§;¡; -Ð0ˆ�re   c                ó"   • SU R                    S3$ )Nz<Wrapped operator <original r¶  )r]   r|  s    rf   r·  Únumpy_operator_wrapper.__repr__ó  s   € Ø-¨d¯m©m¨_¸BÐ?Ð?re   c                óZ   • U(       a   eS U 5       nU R                   " U6 n[        U5      $ )Nc              3  ó�   #   • U  H<  n[        U[        R                  5      (       a  [        R                  " U5      OUv •  M>     g 7fr{   )r  r6  rY  r¨  rV  ro  s     rf   r¡   Ú2numpy_operator_wrapper.__call__.<locals>.<genexpr>ú  s2   é € ð 
ÚRVÈ3¤
¨3´·±× =Ñ =ŒC�KŠK˜ÔÀ3ÔFÒRVùs   ‚AA)rØ  r¬  rº  s       rf   rÉ  Únumpy_operator_wrapper.__call__ö  s3   € ÞÐˆzñ
ÙRVó
ˆð �gŠg�tˆnˆÜ˜sÓ#Ð#re   )r]   rØ  N)rØ  úCallable[..., Any]rŽ   r�   r|  r½  rË  rK   re   rf   rÍ  rÍ  ì  s   † Ù[ô1ô@÷$re   rÍ  c                ór  • [        U [        5      (       d  U $ U R                  (       Ga'  / nU R                  5        H}  n[        U[        R
                  5      (       aJ  UR                  UR                  R                  R                  UR                  R                  5      5        Ml  UR                  U5        M     / nU R                  5        H}  n[        U[        R
                  5      (       aJ  UR                  UR                  R                  R                  UR                  R                  5      5        Ml  UR                  U5        M     O U R                  5       nU R                  5       n[        R                  " UUU R                  U R                  U R                  S9nUR!                  5         U$ )N)rÛ  rë  rÕ  )r  rL   Ú_has_symbolic_sizes_stridesrú  r6  r�  r²   r‘  rø  Ú	size_hintÚexprrè  Úempty_stridedrÛ  rë  rÕ  Úzero_)re  rú  r³  rè  rØ  s        rf   ÚdefakerÝ    s,  € Ü�aœ×$Ñ$Øˆð 	×$×$Ð$ØˆØ—‘–ˆAÜ˜!œUŸ\™\×*Ñ*Ø—‘˜AŸF™F×,Ñ,×6Ñ6°q·v±v·{±{ÓCÖDà—‘˜A–ñ	 ð
 ˆØ—‘–ˆAÜ˜!œUŸ\™\×*Ñ*Ø—‘˜aŸf™f×.Ñ.×8Ñ8¸¿¹¿¹ÓEÖFà—‘˜aÖ ò	 ð �v‰v‹xˆØ—‘“ˆÜ×ÒØØØ�g‰gØ�x‰xØ—o‘oñ	€Að ‡G�G„IØ€Hre   c                ó   • U " U0 UD6$ r{   rK   )rP  r   r!  s      rf   Ú8_disable_side_effect_safety_checks_for_current_subtracerrß  !  s   € ñ ˆtÐ�vÑÐre   c                óL   • SS K nXR                  R                  R                  L $ r­   )Útorch.utils.checkpointrM  Ú
checkpoint)r  r6  s     rf   Úis_utils_checkpointrã  '  s   € ã!à—+‘+×(Ñ(×3Ñ3Ð3Ð3re   c                ó   • SSK Jn  XL $ )Nr   )Úinvoke_subgraph_placeholder)Ú'torch._higher_order_ops.invoke_subgraphrå  )r  rå  s     rf   Úis_invoke_subgraphrç  .  s   € ÝSàÐ-Ð-re   c                 ód   • SSK Jn  UR                  " [        R                  R
                  40 U D6$ )Nr2   ©Ú TorchHigherOrderOperatorVariable)Úvariables.higher_order_opsrê  Úmaker6  Ú_higher_order_opsÚinvoke_subgraph)Úoptionsrê  s     rf   Úbuild_invoke_subgraph_variablerð  4  s/   € ÝLà+×0Ò0Ü×Ñ×/Ñ/ñà
ñð re   c                 óÈ   • SS K Js  Jn  SSKJn  UR
                  n[        R                  R                  R                  (       a  UR                  nUR                  " U40 U D6$ )Nr   r2   ré  )Útorch._higher_order_ops.wraprí  Úwraprë  rê  Útag_activation_checkpointr6  Ú
_functorchrI   Úfunctionalize_rng_opsÚwrap_activation_checkpointrì  )rï  Úhigher_order_opsrê  Úactivation_checkpoint_ops       rf   Úbuild_checkpoint_variablerú  =  s\   € ß;Ð;åLð
 	×2Ñ2ð ô ×Ñ×Ñ×4×4Ø#3×#NÑ#NÐ à+×0Ò0Ø ñà
ñð re   c                ó¨   • SSK Jn  [        R                  " U 5      R                  nU" 5       nUS:X  a   U$ US;   a  U(       a  [        5       nU$ SnU$ )Nr2   )Úis_dynamo_supportedr¦  )rU  ÚxpuÚmtiaF)Ú
eval_framerü  r6  rë  rÃ  r/   )Údevice_typerü  rÃ  Úcompile_supporteds       rf   Úis_compile_supportedr  P  s`   € Ý/ä�<Š<˜Ó$×)Ñ)€DÙ+Ó-ÐØˆuƒ}Øð
 Ðð	 
Ð(Ó	(Ö->Ü&›LÐð Ðð "ÐØÐre   c                ó\   • U R                  S5      n[        USU R                  SSS95      $ )zÖ
Convert byte offset `offset` of `str` into character offset.
Byte offset is used for 3.11+ instruction column data.
Takes things like unicode characters into consideration.

Unchanged from CPython implementation.
zutf-8Nr<  )Úerrors)Úencoder‚  Údecode)rž   ÚoffsetÚas_utf8s      rf   Ú_fix_offsetr	  b  s4   € ð �j‰j˜Ó!€GÜˆw�w˜Ð×&Ñ& w°yÐ&ÐAÓBÐBre   c                  ó>   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg)	Ú_Anchorsin  r�   Úleft_end_linenoÚleft_end_offsetÚright_start_linenoÚright_start_offsetrK   NrS  rK   re   rf   r  r  n  s   ‡ ð ÓØÓØÓàÖre   r  c                ó¬  ^^• [         R                  S:¼  d   eSSKn UR                  SU -   S-   5      n[        UR                  5      S:w  a  gU R                  S5      mSU4S jjnSU4S	 jjmSUU4S
 jjnSUU4S jjnUR                  S   n[        XaR                  5      (       Ga  UR                  n[        XqR                  5      (       Ga  [        [        UR                  R                  5      S-
  nUR                  R                   c   eU" X‡R                  R                   5      n	T" X‰5      u  p‰TU   U	   =n
R#                  5       (       d  U
S;   aB  U
S;   a  U" X‰5      u  p‰O
U" X‰5      u  p‰TU   U	   =n
R#                  5       (       a  M:  U
S;   a  MB  U	S-   nU[        TU   5      :  a(  TU   U   =n
R#                  5       (       d  U
S;  a  US-  n[%        X‰X‹5      $ [        XqR&                  5      (       aÔ  [        [        UR                  R                  5      S-
  nUR                  R                   c   eU" XÇR                  R                   5      nT" XÍ5      u  pÍTU   U   S:w  a  U" XÍ5      u  pÍTU   U   S:w  a  M  [        [        UR                  5      S-
  nUR                   c   eU" XçR                   5      n[%        XÍXë5      $ [        XqR(                  5      (       aÔ  [        [        UR*                  R                  5      S-
  nUR*                  R                   c   eU" XÇR*                  R                   5      nT" XÍ5      u  pÍTU   U   S:w  a  U" XÍ5      u  pÍTU   U   S:w  a  M  [        [        UR                  5      S-
  nUR                   c   eU" XçR                   5      n[%        XÍXë5      $ g! [         a     gf = f)zí
Given source code `segment` corresponding to a bytecode
instruction, determine:
    - for binary ops, the location of the binary op
    - for indexing, the location of the brackets.
`segment` is expected to be a valid Python expression
)r\   é   r   Nz(
z
)r2   r™   c                ó"   >• [        TU    U5      $ r{   )r	  )Úlinenor  Úliness     €rf   Ú	normalizeÚ-_extract_anchors_from_expr.<locals>.normalize’  s   ø€ Ü˜5 ™=¨&Ó1Ð1re   c                óæ   >• U [        T5      :  a<  U[        TU    5      :¼  a*  SnU S-  n U [        T5      :  a  U[        TU    5      :¼  a  M*  U [        T5      :  a  U[        TU    5      :  d   eX4$ rŒ  ©r‚  )r  Úcolr  s     €rf   Únext_valid_charÚ3_extract_anchors_from_expr.<locals>.next_valid_char—  sw   ø€ Ø”s˜5“zÓ! c¬S°°v±Ó-?Ó&?ØˆCØ�a‰KˆFð ”s˜5“zÓ! c¬S°°v±Ó-?Õ&?ð œ˜E›
Ó" s¬S°°v±Ó-?Ó'?Ð?Ð?Øˆ{Ðre   c                ón   >• US-  nT" X5      u  pU [        T5      :  a  U[        TU    5      :  d   eX4$ r©   r  ©r  r  r  r  s     €€rf   rþ   Ú-_extract_anchors_from_expr.<locals>.incrementŸ  sB   ø€ Øˆq‰ˆÙ% fÓ2‰ˆØœ˜E›
Ó" s¬S°°v±Ó-?Ó'?Ð?Ð?Øˆ{Ðre   c                ór   >• SnU S-  n T" X5      u  pU [        T5      :  a  U[        TU    5      :  d   eX4$ rŒ  r  r  s     €€rf   ÚnextlineÚ,_extract_anchors_from_expr.<locals>.nextline¦  sG   ø€ ØˆØ�!‰ˆÙ% fÓ2‰ˆØœ˜E›
Ó" s¬S°°v±Ó-?Ó'?Ð?Ð?Øˆ{Ðre   r[   z)\#z\#r1  r3  )r  r�   r  r�   rŽ   r�   )r  r�   r  r�   rŽ   ztuple[int, int])r  r  ÚastÚparseÚSyntaxErrorr‚  Úbodyrµ  r  ÚExprrÑ   ÚBinOpr   r�   ÚleftÚ
end_linenoÚend_col_offsetÚisspacer  Ú	SubscriptÚCallr  )Úsegmentr"  Útreer  rþ   r   Ú	statementrÚ  Ú
cur_linenoÚcur_colÚchÚ	right_colÚleft_linenoÚleft_colÚright_linenor  r  s                  @@rf   Ú_extract_anchors_from_exprr8  x  sž  ù€ ô ×Ñ˜wÓ&Ð&Ð&ãðð �y‰y˜ ™¨5Ñ0Ó1ˆô ˆ4�9‰9ƒ~˜ÓØà�M‰M˜$Ó€E÷2÷
÷ð ÷ð ð —	‘	˜!‘€IÜ�)ŸX™X×&Ò&Ø�‰ˆÜ�dŸI™I×&Ò&ô œc 4§9¡9×#7Ñ#7Ó8¸1Ñ<ˆJØ—9‘9×+Ñ+Ñ7Ð7Ð7Ù 
¯I©I×,DÑ,DÓEˆGÙ"1°*Ó"FÑˆJð ˜zÑ*¨7Ñ3Ð3�2×<Ñ<×>Ñ>À"ÈÃ,Ø˜“;Ù*2°:Ó*GÑ'�J á*3°JÓ*HÑ'�Jð	 ˜zÑ*¨7Ñ3Ð3�2×<Ñ<×>Ó>À"ÈÅ,ð   !™ˆIàœC  jÑ 1Ó2Ó2Ø$ ZÑ0°Ñ;Ð;˜×DÑD×FÑFØ˜e“Oà˜Q‘�	ô ˜J°ÓGÐGÜ˜Ÿm™m×,Ñ,ô œs D§J¡J×$9Ñ$9Ó:¸QÑ>ˆKØ—:‘:×,Ñ,Ñ8Ð8Ð8Ù  ¯j©j×.GÑ.GÓHˆHÙ$3°KÓ$JÑ!ˆKØ˜Ñ$ XÑ.°#Ó5Ù(1°+Ó(HÑ%�ð ˜Ñ$ XÑ.°#Õ5ô  ¤ T§_¡_Ó5¸Ñ9ˆLØ×&Ñ&Ñ2Ð2Ð2Ù! ,×0CÑ0CÓDˆIÜ˜K°<ÓKÐKÜ˜Ÿh™h×'Ñ'ô
 œs D§I¡I×$8Ñ$8Ó9¸AÑ=ˆKØ—9‘9×+Ñ+Ñ7Ð7Ð7Ù  ¯i©i×.FÑ.FÓGˆHÙ$3°KÓ$JÑ!ˆKØ˜Ñ$ XÑ.°#Ó5Ù(1°+Ó(HÑ%�ð ˜Ñ$ XÑ.°#Õ5ô  ¤ T§_¡_Ó5¸Ñ9ˆLØ×&Ñ&Ñ2Ð2Ð2Ù! ,×0CÑ0CÓDˆIÜ˜K°<ÓKÐKàøôU ó Ùðús   žO Ï
OÏOc           	     ód  • [         R                  S:¼  Ga²  [        R                  " U R                  UR
                  R                  U R                  UR
                  R                  UR
                  R                  UR
                  R                  S9n[        R                  " U/5      S   nSR                  UR                  5       SS 5      n[        UR
                  R                  UR
                  R                  S-   5       Vs/ s H2  n[        R                   " U R                  U5      R#                  5       PM4     nn[$        R&                  " SR                  U5      5      R                  5       n[)        US   5      [)        US   5      -
  nUS   SU n[$        R*                  " [$        R&                  " U5      U5      nU$ UR
                  c   eUR
                  R                  c  g[        R                   " U R                  UR
                  R                  5      R#                  5       n	UR
                  R                  c  U	$ UR
                  R                  b  UR
                  R                  c  U	$ [-        X‘R
                  R                  5      n
SnSn/ nUR
                  R                  UR
                  R                  :X  aA  [-        X‘R
                  R                  5      nXšU nUR/                  SU
-  S	Xº-
  -  -   5        GO—XšS S-   nUR/                  SU
-  S	[)        U	5      U
-
  -  -   5        [        R                   " U R                  UR
                  R                  5      R#                  5       n[-        XáR
                  R                  5      n[        UR
                  R                  S-   UR
                  R                  5       H„  n[        R                   " U R                  U5      R#                  5       nXÏS-   -  n[)        U5      [)        UR1                  5       5      -
  nUR/                  SU-  S	[)        U5      U-
  -  -   5        M†     XÎSU -  n[)        U5      [)        UR1                  5       5      -
  nUR/                  SU-  S	UU-
  -  -   5        Sn [3        U5      nUc$  U Vs/ s H  nUR7                  S	S
5      PM     nnGO=U Vs/ s H  n[9        U5      PM     nnUR:                  S:X  a  U=R<                  U
-  sl        UR>                  S:X  a  U=R@                  U
-  sl         [        [)        U5      5       HŸ  n[        [)        UU   5      5       H�  nUUR:                  :  a  M  UUR:                  :X  a  UUR<                  :  a  M7  UUR>                  :X  a  UUR@                  :¼  a  MY  UUR>                  :”  a  Mk  UU   U   S	:X  d  My  S
UU   U'   Mƒ     M¡     U Vs/ s H  nSR                  U5      PM     nnSn[        [)        U5      5       HY  nU[        R                   " U R                  UR
                  R                  U-   5      R#                  5       S-   -  nX=U   S-   -  nM[     U$ s  snf ! [4         a     GNëf = fs  snf s  snf s  snf )aœ  
Python 3.11+ only. Returns lines of source code (from code object `code`)
corresponding to `inst`'s location data, and underlines relevant code to `inst`.

Example: CALL on `g`:
f(g(
  ^^
    h(x)))
    ^^^^^

We need our own implementation in < 3.13 since `format_frame_summary` in
Python's `traceback` module doesn't handle multi-line expressions
(and their anchor extraction code is not completely correct).
)r\   é   )r)  ÚcolnoÚ	end_colnor   r™   r2   Nr—  rÊ   Ú~Ú^)!r  r  rA  ÚFrameSummaryr�  Ú	positionsr  rÂ  r)  Ú
col_offsetr*  rB  rœ   Ú
splitlinesr  Ú	linecacheÚgetlineÚrstripÚtextwrapÚdedentr‚  Úindentr	  r²   Úlstripr8  r=  r<  rk  r  r  r  r  )rÆ  ÚinstÚframe_summaryr  r  Ú
orig_linesÚorig_lines_dedentÚ
indent_lenrH  Ú
first_lineÚstart_offsetÚ
end_offsetr.  ÚmarkersÚ	last_lineÚlineÚ
num_spacesÚanchorsÚmarkerÚmutable_markersr  r±  s                         rf   Úget_instruction_source_311rY  ö  sÔ  € ô ×Ñ˜7Ô"ä!×.Ò.Ø×ÑØ�N‰N×!Ñ!Ø�L‰LØ—~‘~×0Ñ0Ø—.‘.×+Ñ+Ø—n‘n×3Ñ3ñ
ˆô ×&Ò&¨ Ó7¸Ñ:ˆà—‘˜6×,Ñ,Ó.¨q¨rÐ2Ó3ˆô   §¡× 5Ñ 5°t·~±~×7PÑ7PÐSTÑ7TÔUó
âU�ô ×Ò˜d×.Ñ.°Ó7×>Ñ>Ö@ÙUð 	ð 
ô %ŸOšO¨D¯I©I°jÓ,AÓB×MÑMÓOÐÜ˜ A™Ó'¬#Ð.?ÀÑ.BÓ*CÑCˆ
Ø˜A‘˜{ 
Ð+ˆÜ—’¤§¢°Ó!8¸&ÓAˆØˆà�>‰>Ñ%Ð%Ð%Ø‡~�~×ÑÑ$Øô ×"Ò" 4×#3Ñ#3°T·^±^×5JÑ5JÓK×RÑRÓT€JØ‡~�~× Ñ Ñ(ØÐØ‡~�~× Ñ Ñ(¨D¯N©N×,IÑ,IÑ,QØÐô ˜z¯>©>×+DÑ+DÓE€Lð €Jà€Gà€Gð ‡~�~× Ñ  D§N¡N×$9Ñ$9Ó9Ü  ¯^©^×-JÑ-JÓKˆ
Ø¨*Ð5ˆØ�‰�s˜\Ñ)¨C°:Ñ3LÑ,MÑMÖNà˜]Ð+¨dÑ2ˆØ�‰�s˜\Ñ)¨C´3°z³?À\Ñ3QÑ,RÑRÔSÜ×%Ò%Ø×Ñ˜dŸn™n×7Ñ7ó
ç
‰&‹(ð 	ô ! ¯N©N×,IÑ,IÓJˆ
Ü˜DŸN™N×1Ñ1°AÑ5°t·~±~×7PÑ7PÖQˆFÜ×$Ò$ T×%5Ñ%5°vÓ>×EÑEÓGˆDØ˜d‘{Ñ"ˆGä˜T›¤S¨¯©«Ó%7Ñ7ˆJØ�N‰N˜3 Ñ+¨c´S¸³YÀÑ5KÑ.LÑLÖMñ Rð 	˜[˜jÐ)Ñ)ˆÜ˜“^¤c¨)×*:Ñ*:Ó*<Ó&=Ñ=ˆ
Ø�‰�s˜ZÑ'¨#°¸jÑ1HÑ*IÑIÔJà"&€GðÜ,¨WÓ5ˆð
 �Ù:AÓBº'°�6—>‘> # sÖ+¹'ˆÐB‰ñ HOÓ+OÂw¸V¬D°®LÁwˆÐ+Oð ×"Ñ" aÓ'Ø×#Ò# |Ñ3Õ#Ø×%Ñ%¨Ó*Ø×&Ò&¨,Ñ6Õ&ô œC ›LÖ)ˆFÜœS °Ñ!8Ó9Ö:�Ø˜G×3Ñ3Ó3ÙØ˜W×4Ñ4Ó4¸¸w×?VÑ?VÓ9VÙà˜g×8Ñ8Ó8Ø˜w×9Ñ9Ó9áØ˜G×6Ñ6Ó6ÙØ" 6Ñ*¨3Ñ/°3Õ6Ø36�O FÑ+¨CÓ0ó ;ñ *ñ" 2AÓA² v�2—7‘7˜6–?±ˆÐAà€FÜ”3�w“<Ö ˆØÜ×Ò˜d×.Ñ.°·±×0EÑ0EÈÑ0IÓJ×QÑQÓSØññ	
ˆð 	˜!‘*˜tÑ#Ñ#Šñ !ð €MùòI
øôr ó Úðüò
 Cùò ,Pùò4 Bs*   Ä9ZÒ)Z Ò;Z#ÓZ(×;Z-Ú
Z ÚZ c                ó\   • [        U [        R                  5      (       a  [        U SS 5      $ g )NÚ_dynamo_static_input_type)r  r6  rY  rE  rz  s    rf   Úget_static_address_typer\  z  s&   € Ü�!”U—\‘\×"Ñ"Ü�qÐ5°tÓ<Ð<àre   c                ó®  • [         R                  R                  R                  [         R                  R                  [         R
                  [         R                  R
                  4n[         R                  R                  R                  [         R                  R                  [         R                  [         R                  R                  4nU / UQUQ7;   $ r{   )	r6  r  r6   Ú	get_stateÚdefault_generatorr  rU  Ú	set_stater  )rÑ   ÚgettersÚsetterss      rf   Úis_rng_state_getter_or_setterrc  �  sœ   € ô 	�‰×Ñ×$Ñ$Ü×Ñ×)Ñ)Ü×ÑÜ�
‰
× Ñ ð€Gô 	�‰×Ñ×$Ñ$Ü×Ñ×)Ñ)Ü×ÑÜ�
‰
× Ñ ð	€Gð Ð(�gÐ( Ñ(Ñ(Ð(re   c                óÐ   • [        U [        R                  5      =(       aF    U R                  S:H  =(       a0    U R                  R
                  [        R                  R                  L $ )NÚ__get__)	r  r=  r   r]   Ú__self__Ú__objclass__r6  r  Ú_TensorBaser  s    rf   Úis_tensor_base_attr_getterri  ’  sK   € ä�5œ%×1Ñ1Ó2÷ 	@Ø�N‰N˜iÑ'÷	@à�N‰N×'Ñ'¬5¯8©8×+?Ñ+?Ð?ðre   c                ó¤   •  [         R                  " [        R                  U 5      n[	        U5      [
        R                  L $ ! [         a     gf = fr  )r4  r5  r6  rY  rÃ  r=  rK  r0  )rn   Úattrs     rf   Úis_tensor_getset_descriptorrl  š  sD   € ðÜ×%Ò%¤e§l¡l°DÓ9ˆÜ�D‹zœU×7Ñ7Ð7Ð7øÜó Ùðús   ‚?A Á
AÁAc                ó   • [        U S5      $ )NÚ__torch_function__)r>  r  s    rf   Úis_torch_function_objectro  ¢  s   € Ü�5Ð.Ó/Ð/re   c                ó†  • SSK Jn  SSKJn  U R	                  5       (       d0  [        U S5      (       a�  [        U R                  5       S5      (       ap  S n[        X5      (       a  [        U R                  SS 5      nO'[        X5      (       a  [        U R                  SS 5      nUS [        R                  R                  4;  $ g)Nr   )ÚUserDefinedObjectVariable)ÚTensorWithTFOverrideVariableÚ
peek_valuern  F)r  rq  Ú&torch._dynamo.variables.torch_functionrr  r¦  r>  rs  r  rE  Ú
class_typerÑ   r6  r  Ú_disabled_torch_function_impl)r  rq  rr  r  s       rf   Úhas_torch_functionrw  ¦  s˜   € õ BÝSð 
‡~�~×ÑÜ��L×!Ñ!¤g¨b¯m©m«oÐ?S×&TÑ&TàˆÜ�b×7Ñ7Ü˜2Ÿ=™=Ð*>ÀÓE‰Dä˜×6Ñ6Ü˜2Ÿ8™8Ð%9¸4Ó@ˆDà˜D¤%§(¡(×"HÑ"HÐIÑIÐIàre   c                óÞ   • S nS n[         R                  R                  R                  5       =n(       a*  XR                  ;   a  UR                  U    nUR
                  nUR                  U SX#S9$ )NF)Ústatic_shapesÚsymbolic_contextr˜  )r6  r:  r#   Útry_getÚtensor_to_contextrp  Úfrom_tensor)r@  r÷  rz  r˜  Útracing_contexts        rf   Úto_fake_tensorr  Ä  su   € ð ÐØ€FÜŸ-™-×6Ñ6×>Ñ>Ó@Ð@€Õ@Ø×1Ñ1Ó1Ø.×@Ñ@ÀÑCÐØ%×3Ñ3ˆFà× Ñ Ø	˜Ð1Að !ð ð re   c                ó  • [        U 5      (       + =(       ao    [        U 5      (       + =(       aX    [        U 5      =(       aF    [        U S5      =(       a3    [        U R                  S5      =(       a    U R                  R
                  $ )NÚ__dataclass_params__Úfrozen)r[  rZ  r   r>  r�  r‚  r  s    rf   Úis_frozen_dataclassrƒ  Ô  sn   € ä# EÓ*Ô*÷ 	.Ü& uÓ-Ô-÷	.ä˜Ó÷	.ô �EÐ1Ó2÷	.ô �E×.Ñ.°Ó9÷		.ð
 ×&Ñ&×-Ñ-ðre   c                ón   • U H   n[        X5      (       d  M  [        X5      s  $    [        U  SU 35      e)zP
Return the first available attribute or throw an exception if none is present.
z% does not has any of the attributes: )r>  rE  r=  )r  Úattrsrk  s      rf   Úget_first_attrr†  ß  s=   € ó ˆÜ�3×ÓÜ˜3Ó%Ò%ñ ô ˜C˜5Ð EÀeÀWÐMÓ
NÐNre   c              #  óÈ   ^^#   • U (       d  S v •  g SUU4S jjn[         R                  R                  R                  U5       nUv •  S S S 5        g ! , (       d  f       g = f7f)Nc                ó:   >• SS jn[         R                  " XTTS9$ )Nc                ó¤   • [         R                  R                  R                  S   S==   S-  ss'   [         R                  R                  X5      $ )NÚcompiled_autogradÚcompilesr2   )r6  rÛ  rM  rR   r<  Úcompile)Úgm_Úexample_inputs_s     rf   Úinner_compilerÚKmaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.inner_compileró  s>   € Ü—‘×#Ñ#×,Ñ,Ð-@ÑAÀ*ÓMÐQRÑRÓMÜ—‘×.Ñ.¨sÓDÐDre   )ÚbackendÚ	fullgraphÚdynamic)r�  r   rŽ  r   rŽ   r   )r6  rŒ  )re  r�  r“  r’  s     €€rf   Úcompiler_fnÚ3maybe_enable_compiled_autograd.<locals>.compiler_fnò  s#   ø€ ôEô —=’=Ø°iÈñð re   )re  r   rŽ   r   )r6  rÛ  rŠ  Ú_enable)Úshould_enabler’  r“  r”  r$  s    ``  rf   Úmaybe_enable_compiled_autogradr˜  ê  sE   ùé € ö Ü÷	ð 	ô �]‰]×,Ñ,×4Ñ4°[ÔAÀSØŠI÷ B×AÖAüs   „?A"ÁAÁ	A"Á
AÁA"c                 ó@   •  " S S[         5      n [        U " 5       5      $ )Nc                  ó   • \ rS rSrSrg)Ú*invalid_removeable_handle.<locals>.Invalidi  rK   N)r]   r^   r_   r`   rd   rK   re   rf   ÚInvalidr›    s   † Úre   rœ  )r  r1   )rœ  s    rf   Úinvalid_removeable_handler�  ÿ  s   € ô”$ô ô ™7›9Ó%Ð%re   c                ó  • [        U [        R                  R                  5      (       d  U $ [        U [        R                  R
                  5      (       a  U $ U R                  R                  U R                  5      nU R                  Ul        U$ r{   )	r  r6  rZ  rÏ  r   rÖ  rž  rC  r¬  )ra  Úproxys     rf   Únn_module_proxyr     s`   € Ü�cœ5Ÿ8™8Ÿ?™?×+Ñ+Øˆ
Ü�#”u—x‘x×+Ñ+×,Ñ,àˆ
Ø�M‰M×!Ñ! #§-¡-Ó0€EØ—\‘\€E„NØ€Lre   c                  óB   ^ • \ rS rSr      SU 4S jjrSS jrSrU =r$ )Ú	GmWrapperi  c                ó:   >• [         TU ]  5         Xl        X l        g r{   )r˜  rx  re  Úunflatten_fn)rw  re  r¤  rž  s      €rf   rx  ÚGmWrapper.__init__  s   ø€ ô 	‰ÑÔØŒØ(Õre   c                óT   • [        U5      nU R                  " U R                  U5      6 $ r{   )rk  re  r¤  rÈ  s     rf   rv  ÚGmWrapper.forward  s%   € ä˜t›*ˆØ�wŠw˜×)Ñ)¨$Ó/Ð0Ð0re   )re  r¤  )re  útorch.fx.GraphModuler¤  zCallable[[list[Any]], Any]rŽ   r�   ©r   r   rŽ   r   )r]   r^   r_   r`   rx  rv  rd   r   r¡  s   @rf   r¢  r¢    s*   ø† ð)Ø&ð)Ø6Pð)à	÷)÷1ò 1re   r¢  c                óº  ^	^
^^• [        U R                  R                  5       VVs/ s H<  u  p4UR                  S:X  d  M  UR                  R                  SS5      (       d  M:  UPM>     snnm[        R                  R                  R                  (       aW  TS/:X  d   e[        US   [        5      (       d   e[        US   5      m	S	S jmS
U	4S jjnU" [        X5      T" U5      5      m
O][        R                  " U5      u  pg[         R"                  " [        R$                  US9nU" [        X5      U5      m
[        R&                  mS	U
UU4S jjnU$ s  snnf )z‡
Mutate inputs so that they are flat and wrap gm such that it
accepts those inputs.  This is needed for graphs that take
bumpy inputs.
r/  Ú	steal_argFr   c                ó*   • U S   [        U SS  5      -   $ rŒ  rì  rd  s    rf   Ú
flatten_fnÚ(flatten_graph_inputs.<locals>.flatten_fn9  s   € Ø˜‘7œT $ q r (›^Ñ+Ð+re   c                ó   >• U S T /U TS  Q7$ r{   rK   )Ú	flat_argsÚboxed_inputs_counts    €rf   r¤  Ú*flatten_graph_inputs.<locals>.unflatten_fn<  s#   ø€ ØÐ1Ð1Ð2ÐT°YÐ?QÐ?RÐ5SÑTÐTre   )Útreespecc                 óZ   >• T" U 5      nT H  nX   R                  5         M     T" U5      $ r{   )r|   )r   r°  r±  Úcompiled_fnr­  Úinputs_idx_to_clears      €€€rf   ÚwrapperÚ%flatten_graph_inputs.<locals>.wrapperH  s1   ø€ Ù˜tÓ$ˆ	ó %ˆAØ‰G�M‰MŽOñ %ñ ˜9Ó%Ð%re   r©  )r°  r   rŽ   r   )Ú	enumerateru  r×  rØ  rö  r€   r6  rÛ  rŠ  Úin_compiled_autograd_regionr  rk  r‚  r¢  r  Útree_flattenr1  r  Útree_unflattenÚarg_tree_leaves)re  ÚinputsÚ
compile_gmr±  r‘  r¤  Úflat_inputsÚspecr·  r±  rµ  r­  r¶  s            @@@@rf   Úflatten_graph_inputsrÂ  $  s$  û€ ô ! §¡§¡Ô0ôâ0‰GˆAØ�7‰7�mÑ#ó 	
à(,¯	©	¯©°kÀ5×(I÷ 	
Ù0òÐô ‡}�}×&Ñ&×B×Bð # q cÓ)Ð)Ð)Ü˜& ™)¤T×*Ñ*Ð*Ð*Ü  ¨¡›^Ðô	,÷	Uñ !¤¨2Ó!<¹jÈÓ>PÓQ‰ô #×/Ò/°Ó7ÑˆÜ ×(Ò(¬×)>Ñ)>ÈÑNˆÙ ¤¨2Ó!<¸kÓJˆä×+Ñ+ˆ
÷&ñ &ð €NùóMs   §EÁEÁ$Ec                ó²   • [        U [        R                  R                  5      (       a  [	        U S5      (       d  / $ U R
                  R                  S/ 5      $ )Nrö  Úlocals_to_steal)r  r6  r   rÖ  r>  rö  r€   )Úmaybe_gms    rf   Úget_locals_to_stealrÆ  U  sB   € Ü�h¤§¡× 4Ñ 4×5Ñ5¼WÀXÈv×=VÑ=VØˆ	Ø�=‰=×ÑÐ.°Ó3Ð3re   c                ó    • XR                   S'   g )NrÄ  ©rö  )re  rÄ  s     rf   Úset_locals_to_stealrÉ  [  s   € Ø!0‡G�GÐÒre   c                  ó(   • \ rS rSrSS jrSS jrSrg)ÚLiti_  c                ó   • Xl         g r{   ©r³  )rw  r³  s     rf   rx  ÚLit.__init__`  s   € Ø�re   c                ó   • U R                   $ r{   rÍ  r|  s    rf   r·  ÚLit.__repr__c  s   € Ø�v‰vˆre   rÍ  N)r³  rž   rŽ   r�   r|  )r]   r^   r_   r`   rx  r·  rd   rK   re   rf   rË  rË  _  s   † ô÷re   rË  zset[str]Úwarn_once_cachec                ór   • U [         ;   a  g [         R                  U 5        [        R                  " XS-   S9  g )Nr2   )Ú
stacklevel)rÑ  r…  ÚwarningsÚwarn)r�  rÓ  s     rf   Ú	warn_oncerÖ  j  s-   € ð ŒoÓØÜ×Ñ˜ÔÜ‡M‚M�#¨q¡.Ó1re   c                óR   • [         R                  " S5      nUR                  SU 5      $ )Nz\x1B[@-_][0-?]*[ -/]*[@-~]r—  )r  rŒ  r›  )ÚtextÚansi_escapes     rf   Ústrip_color_from_stringrÚ  v  s"   € ä—*’*Ð:Ó;€KØ�?‰?˜2˜tÓ$Ð$re   c               #  ó  #   •  [         R                  R                  R                  S5      n S v •  [         R                  R                  R                  U 5        g ! [         R                  R                  R                  W 5        f = f7f)NT)r6  r  Ú	_autogradÚ _saved_tensors_hooks_set_tracing)r»  s    rf   Ú+_disable_saved_tensors_hooks_during_tracingrÞ  |  sX   é € ðCÜ—‘×"Ñ"×CÑCÀDÓIˆÛä�‰×Ñ×;Ñ;¸EÕBøŒ�‰×Ñ×;Ñ;¸EÕBüs   ‚B	„-A ±*B	Á+BÂB	c                 óŒ   • [         R                  R                  R                  =(       a    [         R                  " 5       (       + $ r{   )r6  r<  rI   ÚfreezingÚis_grad_enabledrK   re   rf   Úis_parameter_freezingrâ  †  s)   € Ü�?‰?×!Ñ!×*Ñ*×J´5×3HÒ3HÓ3JÔ/JÐJre   c                 óf   • [        [        5       5       V s/ s H  n [        U 5      PM     sn $ s  sn f r{   )r  r   Ú get_torch_function_mode_stack_at)r±  s    rf   Úget_torch_function_mode_stackrå  Š  s3   € ä5:Ô;TÓ;VÔ5WóÚ5W°Ô(¨Ö+Ñ5Wñð ùò s   –.c                ól   • U [        5       :  a  U S:¼  d   e[        R                  R                  U 5      $ r­   )r   r6  r  Ú_get_function_stack_at)Úinds    rf   rä  rä  �  s/   € ØÔ*Ó,Ó,°¸³Ð9Ð9Ü�8‰8×*Ñ*¨3Ó/Ð/re   c                ót   • [        [        5       5       H  n[        5         M     U  H  n[        U5        M     g r{   )r  r   r   r   )rO  rÁ  Úmodes      rf   Úset_torch_function_mode_stackrë  •  s/   € ÜÔ,Ó.Ö/ˆÜ!Ö#ñ 0ó ˆÜ% dÖ+ò re   c                 óL   • [        [        5       5       H  n [        5         M     g r{   )r  r   r   )rÁ  s    rf   Úclear_torch_function_mode_stackrí  �  s   € ÜÔ,Ó.Ö/ˆÜ!Ö#ò 0re   c                ó@   • [         R                  R                  U 5      $ r{   )r6  ÚacceleratorÚcurrent_stream)rë  s    rf   Úget_current_streamrñ  ¢  s   € Ü×Ñ×+Ñ+¨FÓ3Ð3re   c                 ó   • [        5         g r{   )Ú
breakpointrd  s    rf   Ú_breakpoint_for_c_dynamorô  §  s   € Ü…Lre   c                óæ   • U R                   n[        R                  " U5      n[        UR                  5      S:w  a  SSKJn  U" S5      eUR                  U R                  :w  a  SSKJn  U" S5      eg )Nr[   r2   )ÚInternalTorchDynamoErrorz[Tensor subclass method __metadata_guard__ must take exactly two subclass metadata argumentsz?Tensor subclass method __metadata_guard__ must be a classmethod)	Ú__metadata_guard__r4  Ú	signaturer‚  rc  rÅ  rö  rf  rž  )rÑ   rP  Úsigrö  s       rf   Úverify_guard_fn_signaturerú  «  sk   € Ø	×	!Ñ	!€BÜ
×
Ò
˜BÓ
€CÜ
ˆ3�>‰>Ó˜aÓÝ1á&Øió
ð 	
ð 
‡{�{�e—o‘oÓ%Ý1á&ØMó
ð 	
ð &re   c                ó”  • U R                   [        R                   [        R                   4;   =(       a•    U R                  [        R                  [        R                  4;   =(       aa    U R                  [        R                  [        R                  4;   =(       a-    U R
                  [        R
                  [        R
                  4;   $ r{   )rÄ   r  r   r_  rl  Ú__iter__)Úuser_clss    rf   Ú#does_not_override_dict_iter_methodsrþ  ¼  s‰   € à�‰œ4Ÿ:™:¤{×'8Ñ'8Ð9Ñ9÷ 	GØ�O‰O¤§¡¬[×-?Ñ-?Ð@Ñ@÷	Gà�M‰MœdŸi™i¬×)9Ñ)9Ð:Ñ:÷	Gð ×Ñ¤$§-¡-´×1EÑ1EÐ!FÑFð	re   c                ó$   • U R                  U5      $ r{   )rú  ©re  r±  s     rf   Ú	call_sizer  È  s   € à�6‰6�!‹9Ðre   c                ó$   • U R                  U5      $ r{   )rè  r   s     rf   Úcall_strider  Í  s   € à�8‰8�A‹;Ðre   c                ó"   • U R                  5       $ r{   )Ústorage_offsetrd  s    rf   Úcall_storage_offsetr  Ò  s   € à×ÑÓÐre   c                ó¢   • SS/nU Vs0 s H8  o"U R                   ;   d  M  U[        R                  " U R                   U   5      _M:     nnU$ s  snf )Nr[  Útag)r¬  rà  )r@  ÚKEYS_TO_COPYrÐ   Útensor_dicts       rf   Ú_extract_tensor_dictr  Ù  s]   € à#Øð€Lñ 4@óÚ3?¨CÈ!Ï*É*ÑCTÓ'ˆŒT�YŠY�q—z‘z #‘Ó'Ò'±<ð ð ð Ðùò	s
   ‰A (Ac                óB   • [         R                  R                  " U 0 UD6$ r{   )r6  r  ÚStreamræ  s     rf   Úbuild_streamr  æ  s   € Ü�8‰8�?Š?˜DÐ+ FÑ+Ð+re   c                óB   • [         R                  R                  " U 0 UD6$ r{   )r6  r  ÚEventræ  s     rf   Úbuild_eventr  ê  s   € Ü�8‰8�>Š>˜4Ð* 6Ñ*Ð*re   c                  ó¤   • \ rS rSr% SrS\S'   SrS\S'   Sr\SS j5       r	\SS j5       r
\SS	 j5       r\SS
 j5       r\\SS j5       5       rSrg)ÚCompileTimeInstructionCounteriî  r   r�   Ú_counterr—  Ú_idc                ó‚   • U R                   S-   U l         U R                   S:X  a  [        R                  " 5       U l        g g r©   )Ú_depthr   rM  r  r}   s    rf   rM  Ú#CompileTimeInstructionCounter.startó  s1   € à—Z‘Z !‘^ˆŒ
Ø�:‰:˜‹?Ü*×0Ò0Ó2ˆC�Gð re   c                óÂ   • U R                   S-
  U l         U R                   S:X  a;  U =R                  [        R                  " U R                  5      -  sl        SU l        g g )Nr2   r   r—  )r  r  r   Úendr  r}   s    rf   r  Ú!CompileTimeInstructionCounter.endù  sF   € à—Z‘Z !‘^ˆŒ
Ø�:‰:˜‹?Ø�LŠLÔ0×4Ò4°S·W±WÓ=Ñ=�LØˆC�Gð re   c                ó   • SU l         g r­   ©r  r}   s    rf   r|   Ú#CompileTimeInstructionCounter.clear   s	   € àˆ�re   c                ó   • U R                   $ r{   r  r}   s    rf   rÑ   Ú#CompileTimeInstructionCounter.value  s   € à�|‰|Ðre   c              #  ó  #   •  [         R                  (       a  U R                  5         S v •  [         R                  (       a  U R                  5         g g ! [         R                  (       a  U R                  5         f f = f7fr{   )rI   Ú%record_compile_time_instruction_countrM  r  r}   s    rf   rœ  Ú$CompileTimeInstructionCounter.record  sM   é € ð	Ü×;×;Ø—	‘	”Ûä×;×;Ø—‘•	ð <øŒv×;×;Ø—‘•	ð <üs   ‚A?„)A ­'A?Á(A<Á<A?rK   Nr�   r‘   ©rŽ   úGenerator[None, None, None])r]   r^   r_   r`   r  r”   r  r  r•   rM  r  r|   rÑ   r   rœ  rd   rK   re   rf   r  r  î  s„   ‡ Ø€HˆcÓØ€CˆƒMØ€Fàó3ó ð3ð
 óó ðð óó ðð óó ðð Øóó ó óre   r  c                  ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚCompileCounterInti  c                ó4   >• [        [        TU ]	  U5      5      $ r{   )r'  r˜  Ú__add__)rw  Úotherrž  s     €rf   r)  ÚCompileCounterInt.__add__  s   ø€ Ü ¤¡¡°Ó!7Ó8Ð8re   rK   )r*  r   rŽ   r'  )r]   r^   r_   r`   r)  rd   r   r¡  s   @rf   r'  r'    s   ø† ÷9õ 9re   r'  c                ót   • [        5       R                  5       (       a  [        5       R                  SX5        gg)zE
Records whether we are using a feature
Generally a feature is a JK.
rÎ  N)rÖ   rñ   Úset_key_value)ÚfeatureÚusages     rf   Úset_feature_user0    s.   € ô Ó×(Ñ(×*Ñ*ÜÓ×+Ñ+¨O¸WÕLð +re   )Úddp_optimizerÚpython_reducerÚ'python_reducer_without_compiled_forwardÚno_optimizationÚ_ddp_optimization_modec                 óò   • [         R                  n [        U [        5      (       a  U (       a  SOSnO0[        U [        5      (       a  U nO[        S[        U 5      < 35      eU[        ;   d   SU< 35       eU$ )Nr1  r4  z;Invalid dynamo config optimize_ddp type type(optimize_ddp)=z.Invalid dynamo config optimize_ddp value mode=)rI   Úoptimize_ddpr  r&  rž   rã  rÃ  r5  )r7  rê  s     rf   Úget_optimize_ddp_moder8  +  s|   € Ü×&Ñ&€LÜ�,¤×%Ñ%Þ".‰Ð4E‰Ü	�L¤#×	&Ñ	&Ø‰äØJ´t¸LÓ7IÑ6KÐLó
ð 	
ð Ô)Ó)ð Ø
9°D±7Ð;óÐ)ð €Kre   c               #  óB  #   • [         R                  =(       a    [        R                  " 5       n U (       aB  [        R                  " S5         [        R
                  " 5          Sv •  SSS5        SSS5        gSv •  g! , (       d  f       N= f! , (       d  f       g= f7f)aV  
Disables torch.inference_mode for the compilation (still on at runtime).
This simplifies the compile stack where we can assume that inference_mode
will always be off.

Since inference_mode is equivalent to no_grad + some optimizations (version
counts etc), we turn on no_grad here. The other optimizations are not
relevant to torch.compile.
FN)rI   Ú"fake_tensor_disable_inference_moder6  Úis_inference_mode_enabledÚinference_moderî  )Úis_inference_mode_ons    rf   Úmaybe_disable_inference_moder>  <  sd   é € ô 	×1Ñ1×W´e×6UÒ6UÓ6Wð ö ä× Ò  Õ'Ü�MŠM�Oã÷ ÷ (Ð'ô
 	÷	 �Oú÷ (Õ'üs6   ‚A
BÁBÁ"A=Á'BÁ/BÁ=
B	ÂBÂ
BÂBc               #  óÌ   #   • [         R                  (       a6  [        R                  R                  R                  5          Sv •  SSS5        gSv •  g! , (       d  f       g= f7f)z¹
Turns off tracking of inference_mode for fake tensor propagation. With this
context manager, when a real tensor is converted to fake tensor, the fake
tensor looses its inference-ness.
N)rI   r:  r6  r]  Ú
meta_utilsÚ$disable_inference_mode_for_fake_proprK   re   rf   Ú*maybe_disable_inference_mode_for_fake_proprB  T  sB   é € ô ×0×0Ü×Ñ×)Ñ)×NÑNÕPÛ÷ QÐPô 	÷ QÕPüs   ‚>A$Á AÁA$Á
A!ÁA$c                ób   • U S L =(       d%    SU R                   ;   =(       d    SU R                   ;   $ )Nrô  rj  rÈ  )r‘  s    rf   Úis_node_meta_validrD  b  s(   € Ø�4ˆ<×M˜?¨d¯i©iÑ7×M¸5ÀDÇIÁIÑ;MÐMre   c                 ó   • [         $ r{   ©Ú_error_on_graph_breakrK   re   rf   Ú_get_error_on_graph_breakrH  j  s   € Ü Ð re   c                ó   • U q g r{   rF  r  s    rf   Ú_set_error_on_graph_breakrJ  n  s   € à!Ñre   c                 óô   • [         R                  R                  R                  (       a)  [         R                  R
                  R                  S5      O[        R                  " 5       n U R                  5         U $ )NzPregraph bytecode)
r6  Úautogradr7  Ú_is_profiler_enabledr  Ú	_profilerÚ_RecordFunctionFastr@  ÚnullcontextÚ	__enter__©Úcms    rf   Úrecord_pregraph_bytecode_enterrT  s  sS   € ô �>‰>×"Ñ"×7×7ô 	�‰×Ñ×.Ñ.Ð/BÔCä×#Ò#Ó%ð ð
 ‡L�L„NØ€Ire   c                ó*   • U R                  S S S 5        g r{   )Ú__exit__rR  s    rf   Úrecord_pregraph_bytecode_exitrW  ~  s   € à‡K�K��d˜DÕ!re   c                 ó0   • SSK Jn   U R                  " 5       $ )Nr   ©r#   )Útorch._guardsr#   Úget_traced_coderY  s    rf   r[  r[  …  s   € Ý,à×)Ò)Ó+Ð+re   c                óÈ   • SSK Jn  SSKJn  [	        U 5      R
                  R                  SS5      nU(       a*  U" SS[	        U 5       SU 3S	U S
3S/UR                  QS9  g g )Nr2   rÿ  rs  Ú__hash__Fz,User-defined object with overridden __hash__zhashing object of type=z and variable tracker zFound a user-defined object z4 with overridden __hash__ when attempting to hash itzMDynamo does not support hashing user-defined objects with overridden __hash__r  )r—  r   rÅ  rt  rÃ  r¬  r€   ÚSUPPORTABLE)r  r  r   rt  Úis_overriddens        rf   Úraise_on_overridden_hashr`  ‹  so   € Ý#Ý"ä˜“I×&Ñ&×*Ñ*¨:°uÓ=€MæÙØBØ-¬d°3«i¨[Ð8NÈrÈdÐSØ6°r°dÐ:nÐoà_ðà"×.Ñ.ðó		
ð re   )r§   z-Union[list[tuple[str, Any]], list[list[Any]]]r˜   z!Union[tuple[str, ...], list[str]]rŽ   rž   r�   )r³   zCallable[[], str]rŽ   r�   )rŽ   r¯   )r½   r�   rŽ   r�   )rŽ   rV   )rŽ   r   )rŽ   r    )NFNNNNFN)rÐ   rž   rD  r‹  rë   r&  rè   zOptional[dict[str, object]]rE  r‹  r2  r¹  r-  r¦  rF  r&  rG  r‹  rŽ   úGenerator[Any, None, None]r%  )rY  zLiteral['str']rZ  r&  rŽ   rž   )rY  zLiteral['csv']rZ  r&  rŽ   ztuple[list[str], list[object]])rž   F)rY  rž   rZ  r&  rŽ   z-Union[str, None, tuple[list[str], list[str]]])rŽ   zcontextlib.ExitStack)rÅ  rÏ  rÆ  r
   rŽ   rž   )rÑ  rž   rÒ  r>   rŽ   r�   )rÙ  zfx.GraphrŽ   r�   )re  rO   rŽ   rO   )re  r   rŽ   r&  )r   r   r!  r   rŽ   r�   )r  r'  r	  ztype[T]rŽ   ú	TypeIs[T])r  r'  r	  z)tuple[type[list[T]], type[tuple[T, ...]]]rŽ   rb  )r  r'  r	  zIterable[type]rŽ   r&  )r  r'  r	  r   rŽ   r&  )rÑ   r   rŽ   r&  )rÑ   zCallable[..., T]rŽ   z*TypeGuard[functools._lru_cache_wrapper[T]])rÑ   r   rŽ   z,TypeGuard[functools._lru_cache_wrapper[Any]])rÑ   r   rŽ   zMTypeIs[Union[_FuncTypes, torch._ops.OpOverloadPacket, torch._ops.OpOverload]])rÑ   r   rŽ   zTypeIs[_FuncTypes])rÑ   r   rŽ   z—TypeIs[Union[types.GetSetDescriptorType, types.MethodDescriptorType, types.WrapperDescriptorType, types.MemberDescriptorType, types.MethodWrapperType]])rP  r   rŽ   r   )rP  r   rŽ   ztuple[Any, Optional[str]])rÑ   r   rŽ   zTypeGuard[np.ndarray])r  r   rŽ   r&  )ra  r   rŽ   r&  rÍ  r{   )rj  r   rŽ   ztypes.CellType)r   r   r!  r   rŽ   z&tuple[tuple[Any, ...], dict[str, Any]])rn  r•  rŽ   r$  )rÚ  rŠ  rŽ   r�   r·  )rY  r�   rZ  r�   rH  rS   r[  zOptional[type[BaseException]]r\  zOptional[BaseException]rŽ   r�   )rc  r�   rŽ   r�   )rŽ   zlist[CompilationMetrics])rŽ   rk  )rŽ   r&  )FF)rç   rž   r¿  r&  rë   r&  rŽ   ra  rì  )re  rí  rÛ  zOptional[torch.dtype]rŽ   rí  )r	  z"dict[str, Union[T, tuple[T, ...]]]rŽ   zdict[str, list[T]])r	  zSequence[T]rŽ   zlist[T])r	  r   rŽ   r   )rj  rí  rŽ   r�   r$  )r,  r   rŽ   z™TypeIs[Union[torch.jit._trace.TopLevelTracedModule, torch.jit._script.RecursiveScriptModule, torch.jit.ScriptFunction[Any, Any], torch.jit.ScriptModule]])r2  r   r	  r   r�  r&  rŽ   r   )r  r   rŽ   r‹  )ro   r   rŽ   r&  )ro   rÃ  rŽ   rK  )re  r¨  rŽ   zCallable[[], None])r2   )r2  r   r	  úIterable[Any]rm  r�   rŽ   ztuple[Any, float])re  r¨  r	  rc  rŽ   r&  )rÛ  r�   rŽ   rÖ  )rn  r   rŽ   r&  )rŽ   zset[int])rÑ   r   rŽ   z-TypeGuard[Union[torch.SymBool, torch.SymInt]])rÑ   r   r˜  r   rŽ   r&  )rp  r   rŽ   r   )r   rc  r!  zMapping[Any, Any]rŽ   r&  )r"  ú
dict[K, V]rŽ   zKeysView[K])r  rd  rŽ   z!Iterable[tuple[K, Union[V, Any]]])ro   r   rŽ   r   )rÕ  zIterable[T]rŽ   r�   )rÕ  r   rR  r�   rŽ   r   )rß  r   rŽ   ztuple[int, int, int])r@  r   ro   rÃ  rŽ   r   )r"  údict[Any, Any]rÛ  r�   rŽ   r   )r³  zset[T]rÛ  r�   rŽ   rO   )rÑ   r   r{  r&  rŽ   rž   )r‘  rÚ  rô  r   rŽ   r�   )r  rB   rŽ   r   )r³  rU  r	  r�   rŽ   r�   )r—  r—  )
r  r@   rn   rž   r  rž   r  rž   rŽ   r�   )
rÄ   rc  r  r   r  r?   r  r&  rŽ   r   )rm  r   rŽ   z?TypeIs[Union[torch.Tensor, torch.nn.Module, MethodWrapperType]])rÑ   r   rŽ   ú	list[Any])re  r   r{  r   rŽ   rž   )rA  r   r{  r   rŽ   rž   )r  r@   rI  rž   r  r   rŽ   rž   )rñ  rO   rL  zContainer[T]rŽ   r&  )rR  rž   rL  r   rO  r&  rŽ   rž   )rP  zCallable[[], Any]rŽ   r   )r  r   r÷  ú,torch._subclasses.fake_tensor.FakeTensorModerŽ   r   )rû  rí  r  rí  rŽ   rí  )rû  r   r  r   re  r&  rŽ   r&  )rû  r   r  r   r‹  r   rr  r&  rd  r›  re  r&  rs  r&  ru  r&  rt  r&  rl  zCallable[..., None]rm  r&  rn  r&  rŽ   r&  )rÆ  r
   rŽ   rž   )rÆ  rž   rŽ   rž   r|  )T)r‘  rÚ  rÌ  r&  rŽ   r   )r€  r   r  r@   rŽ   r   )r  r@   r×  r   r×  r&  rŽ   r   )r�  rž   r÷  zOptional[FakeTensorMode]rŽ   rž   )r‘  rÚ  r  r@   r×  r&  rŽ   r   )rŽ   úOptional[torch.fx.Node])r‘  rÚ  rŽ   r%  )r2  r   r‘  rÚ  r   r   r!  r   r   r   rŽ   r   )r‘  rÚ  r2  r   rŽ   r   )re  r¨  rŽ   r�   )r  r   rŽ   rž   )rO  r   rP  r   rŽ   r   )ra  ztypes.ModuleTyperŽ   r�   )r  r   rn   rž   rÑ   r   rŽ   r�   )ro   rÃ  rŽ   r&  )rÑ   r   rb  r&  rŽ   r   )rV  rf  rŽ   rž   )ry  zUnion[torch.Tensor, Any]r  r&  rp  r"   rŽ   z)tuple[bool, Optional[TensorStaticReason]])r,  rž   re  r¨  rŽ   r   )rR  rž   rn   rž   rÑ  rž   r�  r�   rÆ  r   rŽ   rž   )FFF)
ra  útorch.nn.Moduler•  r&  r–  r&  r—  r&  rŽ   rf  )
ra  ri  r•  r&  r–  r&  r—  r&  rŽ   r&  )rÑ   r   rŽ   r   )r  r   rn   rž   rŽ   r   )re  r   rŽ   r   )rP  r¼  r   r(  r!  r)  rŽ   rP   )rï  r   rŽ   r   )r   rC   rŽ   r   )rž   rž   r  r�   rŽ   r�   )r.  rž   rŽ   zOptional[_Anchors])rÆ  ztypes.CodeTyperJ  zdis.InstructionrŽ   rž   )r@  r   rŽ   r   )rn   rž   rŽ   r&  )r  rB   rŽ   r&  )r@  rí  r÷  rg  rŽ   r   )r  r   r…  rž   rŽ   r   )TT)r—  r&  r’  r&  r“  r&  rŽ   ra  )rŽ   r1   )ra  r   rŽ   r   )re  r¨  r¾  r   r¿  zCallable[[Any, Any], Any]rŽ   rÖ  )rÅ  r   rŽ   rf  )re  r¨  rÄ  rf  rŽ   r�   )r�  rž   rÓ  r�   rŽ   r�   )rØ  rž   rŽ   rž   )rŽ   rf  )rè  r�   rŽ   r   )rO  rf  rŽ   r�   )rë  ztorch.devicerŽ   útorch.Stream)rÑ   r   rŽ   r�   )rý  r   rŽ   r&  )re  r   r±  r�   rŽ   r�   )re  r   rŽ   r�   )r@  rí  rŽ   rS   )r   ú
tuple[Any]r!  re  rŽ   rj  )r   rk  r!  re  rŽ   ztorch.Event)r.  rž   r/  r&  rŽ   r�   )r‘  rh  rŽ   r&  )rÑ   r&  rŽ   r�   )rŽ   úAbstractContextManager[None])rS  rl  rŽ   r�   )rŽ   zOptional[list[CodeType]])r  r   r  rB   rŽ   r�   (  rÛ   Ú
__future__r   Úatexitr’   r@  rà  rI  rÂ  r  r†  r1  ri  rV  r4  r¥   rü  rC  r°  r¨  rÓ  rŒ  r  r  rF  rz  râ   rA  r=  r  r}  rÔ  rþ  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r6  Útorch._functorch.configÚ%torch.fx.experimental.symbolic_shapesÚtorch.utils._pytreerM  Ú_pytreer  r   Útorch._Cr   r   r   r   Útorch._dispatch.pythonr   Útorch._dynamo.metrics_contextr   r    rZ  r!   r"   r#   Útorch._subclasses.meta_utilsr$   Útorch._utils_internalr%   r&   r'   r(   r)   Útorch.fx._utilsr*   r+   Útorch.monitorr,   Útorch.nn.modules.lazyr-   Útorch.utils._python_dispatchr.   Útorch.utils._tritonr/   r0   Útorch.utils.hooksr1   Úgraph_utilsr3   r  Úcollections.abcr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Útorch._dynamo.replay_recordr>   Útorch._dynamo.symbolic_convertr?   r@   Útorch._dynamo.variables.baserB   Útorch._prims_commonrC   Útorch._subclassesrD   r©  r  rP  Útorch._loggingÚtorch._numpyÚ_numpyr¨  rE   rG   r—  rI   ÚfftÚlinalgr  rJ   r”   ÚNP_TO_TNP_MODULErF  rL   rM   rN   r¤   rO   rP   rQ   rZ  rÏ  ra  Úunpatched_nn_module_getattrrÉ  Úunpatched_nn_module_callÚ
_call_implÚunpatched_nn_module_call_implr“   rR   rT   Útroubleshooting_urlÚnnmodule_doc_urlÚnnmodule_doc_url_msgr³  r]   r‹   rU   r›  rW   rw   Útimer_counterr‡  rY   rh   r£   rª   r«   r®   r°   r´   r·   rº   r¼   r¾   rÈ   rÒ   rÖ   rØ   rÚ   rà   r{  r?  rV  r[  Úregisterrq  ÚFloatTensorr)  ÚDoubleTensorr*  ÚdoubleÚ
HalfTensorr(  ÚhalfÚBFloat16Tensorr‡  Ú
ByteTensorr"  Ú
CharTensorr  Ú
LongTensorr!  ÚlongÚ	IntTensorr   r�   ÚShortTensorr  ÚshortÚ
BoolTensorr&  Útensortype_to_dtypers  r’  r�  r“  rŒ  ÚVERBOSErš  Ú	Formatterr•  rŽ  r¿  rÇ  rÔ  rÜ  rÞ  rä  rç  ré  r
  r  ÚParamSpecArgsÚParamSpecKwargsÚTypeVarTupleÚTypeAliasTyper  r  r&  r+  r-  r>  r?  r@  rA  r6  r;  r3  r  ÚneÚltÚleÚgtÚgeÚcmp_name_to_op_mappingÚcmp_name_to_op_str_mappingrM  rQ  rO  rW  r_  rb  re  rk  r�  r†  rˆ  r  rV  rŠ  Ú!DEFAULT_COMPILATION_METRICS_LIMITrb  r	  r  r+  r2  rA  r^  rÓ   rÔ   re  rg  ri  rk  r»  rä   r  rÂ  rÄ  rÇ  rÏ  rÙ  rß  r
  r  r#  r-  r3  r5  r:  r9  rZ  rf  rp  rx  r�  rø  rž   rq   rÃ  ÚEllipsisrž  ÚNotImplementedrë  rÛ  Úmemory_formatrå  ÚfinfoÚiinfoÚ	attentionÚ
SDPBackendrU  Ú_CudaDevicePropertiesr‚  rV  r…  Úlanguager…  r:  r�  r•  r   r«  r¯  r³  r¹  r»  rÀ  rl  rÁ  r_  rÂ  rÄ   rÃ  rÄ  ÚiterrÅ  r  rÆ  Ú__length_hint__Útuple_iterator_lenr'  rC  rÎ  r  Údict_newr¦   r¬  rF  Údict_methodsr{  Úset_methodsr„  Úfrozenset_methodsr  Ú	tuple_newÚtuple_methodsrk  Úlist_methodsrð  Úlist_getitemÚstr_methodsrÇ  rÈ  rÊ  rÌ  rÐ  rÖ  rÙ  rÝ  rç  Ú	iter_nextrâ  rå  Údict_getitemró  rê  rí  rò  rý  r  r
  r  r"  r$  r&  r-  rC  ÚGLOBAL_KEY_PREFIXrE  rJ  rN  rT  rW  r]  rb  rh  r1  rg  r·  r½  Úorig_code_mapr¾  r¿  Úseen_code_maprÈ  r®  rÍ  rÏ  rÜ  rê  rÓ  r&  r'  r*  rÿ  r5  rJ  rL  rQ  rX  r[  r^  rZ  rd  rf  rk  rq  r}  r‚  r’  r“  r”  Úall_hook_namesr�  rž  r   r¤  r¬  r¯  r¿  rÁ  rÍ  rÝ  rß  rã  rç  rð  rú  r  r	  r  r8  rY  r\  rc  ri  rl  ro  rw  r  rƒ  r†  r˜  r�  r   r¢  rÂ  rÆ  rÉ  rË  rÑ  rÖ  rÚ  rÞ  râ  rå  rä  rë  rí  rñ  rô  rú  rþ  Ú_disable_dynamor  r  r  r  r  r  r  r'  r0  r5  r8  r>  rB  rD  rG  rH  rJ  rT  rW  r[  r`  rÆ  s   0rf   Ú<module>rÎ     sY  ðòõ #ã Û Û Û Û Û Û 
Û Û Û 	Û Û Û Û Û Û Û Û Û 	Û 	Û 
Û Û Û Û Û Û Û Û Û ß ,ß =Ý $Ý ß -÷÷ ÷ ñ ÷ 0ã Û Û ,ß $Ð $Ý ÷ó õ <ß Oß ;Ñ ;Ý =÷õ ÷ GÝ &Ý 1Ý Fß >Ý -å 'ð 
××÷÷ ÷ õ <÷õ =Ý2Ý0ðÛð	ÛÝÝ.Ý)åö 
àØ�FŠFØ�IŠIØ�IŠIð	>
ÐÐ:ó 	
ð �Ø�FŠF�C—G’GØ�IŠI�s—z’zØ�IŠI�s—z’zð	
Ñð  "ÐàÐßVÑVñ
 ˆCƒL€ÙˆCƒL€Ùˆtƒ_€à#ŸhšhŸošo×9Ò9Ð Ø Ÿ8š8Ÿ?š?×3Ò3Ð Ø %§¢§¢× :Ò :Ð à7B×7NÓ7NØ×Ñó8€Ð
4ó ð %'Ð �>Ó &àPð ð QÐ ØÐ.Ð/Ð/UÐVÐ Ø×Ó˜Ó!€ð 46Ð Ð0Ó 5ð
 .9×-DÓ-DÀUÓ-KÐ Ð*Ó Kà—“Ó!€ô�t—y’yô ÷%Jñ %JðP
Ø
7ð
à.ð
ð 	õ
ð €
õ õð ?CÐ Ð;Ó Bõ*õ$õ$ð €õõ
õ$ð> !Ó  Ø/Ó /õõ$ô˜4Ÿ9š9ô ÷S#ñ S#ðl —O“OÓ%Ð ð ð !%Ø"'Ø,0Ø.2Ø&*Ø"&Ø!Ø/3ñOQØ	ðOQð ðOQð  ð	OQð
 *ðOQð ,ðOQð $ðOQð  ðOQð ðOQð  -ðOQð  õOQó ðOQðd 
ß Ló 
Ø Lð 
ð -2ñ)Ø
ð)Ø%)ð)à#õ)ó 
ð)ð */ñ$Ø
ð$Ø"&ð$à2ö$ðN ‡‚ô8ó ð8ð
 
×Ò˜Ÿš u§{¢{Ð3Ø	×Ò˜Ÿš¨¯ªÐ5Ø	×Ò�u—}’} e§j¢jÐ1Ø	×Ò˜5Ÿ>š>Ð+Ø	×Ò�u—{’{�nØ	×Ò�u—z’z�mØ	×Ò�u—{’{ E§J¢JÐ/Ø	‡O‚O�e—k’k 5§9¢9Ð-Ø	×Ò˜Ÿš U§[¢[Ð1Ø	×Ò�u—z’z�mðÐ ÷ñ ñ( #:Ó";Ð õ"õ,ð
 —j“jðð ‡J‚Jó	Ð ô0˜×*Ò*ô 0õõ	õ?õ
Gõõõõ	÷ñ ðB 
Ü Aó 
Ø Að 
ðØ	ðØ Iðàôó 
ðð
 
Ü Có 
Ø Cõ&ð ×Ò�wÓð 	×ÒØ×ÒØ×ÑØ�‰Ø×ÒØ×Òð%Ð!ð ×Ò�wÓØ! f§l¡l _Ñ4Ð!õõ$õ&ð 
ð5Øð5à/ô5ó 
ð5ð
 
ð7Øð7à1ô7ó 
ð7ð
Øðà	õð Ø	×ÒØ	×ÒØ	×ÒØ	×Òð!ñ€
ˆIó ðØðàRöðØðàöð �kŠkØ�kŠkØ�kŠkØ�kŠkØ�kŠkØ�kŠkñÑ ð ØØØØØñÑ ðØððöö83öö%ö$ö,ð ×Ò�TÓôó ñ÷ñ ö
ö$0ö5ð Ñ ð ×Ò÷z"ð z"ó ñz"ðz %'Ñ !ð ?J×>OÓ>OÙ,ñ?Ñ Ð;ó ö
-ö` 3öF3ö0-ð`O3ØðO3àðO3ð ðO3ð ,ð	O3ð
 'ðO3ð 
öO3ñf "Ñ*DÑEÑ Ù0Ñ9SÑTÑ ö%ö!ö
&÷sò sðl	 59Ñ Ð1Ó 8öö*ð
 ð %*Ø"'ñ'Øð'à!ð'ð  ð'ð  õ	'ó ñ'ð@ ×Ò÷(ð (ó ñ(ô( Ð+õ  ò )Ó*�Õ öð 8<ñMØðMØ4ðMà÷Mð` 
ðØ6ðàôó 
ñð
 
Ü =ó 
Ù =öö&ð  ô9ó ñ9ð"Øððö÷,ñ ö$ö(ö
ð< ×Ò�QÓô1ó ñ1ö2ð0 =>ñØðØ -ðØ69ðà÷ö&Xñ ˆ2ƒôó ñð Ø	ÙØÙÙ	ÚˆƒJÙ×ÒÙ×ÒØ	‡N�Nà	‡L‚LØ	‡K‚KØ	×ÒØ	‡L‚LØ	‡K‚KØ	‡K‚KØ	‡H‚H×Ò×!Ò!Ø	‡J‚J×$Ò$ð'$Ñ �yó ñ, ×ÑÝá×Ò™fŸošo×3Ò3Ô4ðöð$ ‡‚ôó ñööö>ö2öWö
ð
Ø
ð
Ø!2ð
à	ö
öò "& b§g¢g£i£�	ÐÓ 0Ú%)¨"¯)ª)«+Ó%6�Ð"Ó 6Ú(,¨R¯XªX«ZÓ(8�
Ð%Ó 8Ú&*©;«=×+?Ò+?Ó+AÓ&B�Ð#Ó BÚ&*ª4°«8£n�Ð#Ó 4Ú&*ª4²°a³«>Ó&:�Ð#Ó :Ù#×3Ò3Ñ Ù�^Š^�
Ù�<Š<�ð —/“/¡$§-¢-×"6Ò"6Ó"8¸+×:NÒ:N×:UÒ:UÓ:WÔXóâXˆÚ�×÷ ÙXñ�ñ
 %(§L¢L×$7Ò$7Ô$9ÓNÒ$9˜&ºXÀf×=M�vÑ$9ÑN�á"×+Ò+×2Ò2Ô4óÚ4ˆvºÀ×8H‡FÑ4ñÑ ñ �MŠM�	Ù&+§n¢n×&;Ò&;Ô&=ÓRÒ&=˜FÂÈ&×AQ—Ñ&=ÑR�Ù%)§]¢]×%9Ò%9Ô%;ÓPÒ%;˜6ºxÈ×?O—Ñ%;ÑP�Ù×Ò�á$'§L¢L×$7Ò$7Ô$9ÓNÒ$9˜&ºXÀf×=M�vÑ$9ÑN�áˆCƒL�ÙˆCƒL�öö
Göö1öö
:ñ �	ööñ ×Ò�ð ‡�‡‚ô@ó ñ@öö
ö8ö(öMð Øñ	Ø!ðà
ðð ðð ð	ð
 
÷ð4 #(ñ	&Øð&àð&ð 	ð&ð  ð	&ð
 	÷&ðRMØ
ðMàDöMö9ööB ð
 !Ñ ÷ =ö7öð <Añ(Øð(Ø!ð(Ø48ð(à÷(ö$
ð"?Ø	ð?ØEð?àö?ö;÷ñ ð Ø ØØØØ!&ØØ%(§Y¢YØ5:Ø!&ðmFØ	ðmFà	ðmFð ðmFð ð	mFð
 
ðmFð ðmFð ðmFð ðmFð ðmFð #ðmFð /3ðmFð ðmFð 
÷mFö`	Hð
 ×Ñô=ó ñ=ñ  'Ó(�ð ;F×:QÓ:QÑRVÓ:W�Ð7Ó Wð LNÑ ÐHÓ Mñ 'Ó(�ð ‡‚ô,ó ñ,ö&÷
ñ ö$ð
/Ø!ð/Ø*-ð/ØEIð/àö/ð. Ø	ð Ø1ð àö ðL "'ñIØ
ðIà!ðIð ðIð 	÷	IðX —“Ó!�ö1ð ô"ó ñ"ðLØðLØ$ðLØ,/ðLØ9<ðLØHKðLà÷L÷^$÷N
÷*2÷÷G÷/÷÷	ð 27ñ
Øð
Ø*.ð
à÷
ð 
ö˜Ÿšõ ÷5ðØ$ðàðð ðð /÷	÷Dð*WØðWØðWØ&)ðWØ47ðWØ?BðWà÷Wñ +Ñ,<Ð=Ñ Ù,Ñ.?Ð@Ñ óÑ ñ $Ñ&9Ñ9Ñ<QÑQ�÷ð !&Ø!&Ø#(ñ	Ø	ðàðð ðð !ð	ð
 ÷ð ðF !&Ø!&Ø#(ñ	Ø	ðàðð ðð !ð	ð
 
÷ð ÷$÷
ö
$˜g b¨! e™nõ 
$÷$÷$ô $ö&$˜W R¨ U™^õ $÷*ð@ØðØ 'ðØ3<ðà÷÷4÷.÷÷÷&÷$	Cð ×Ò÷ò ó ñ÷{÷|A÷H÷)÷"÷÷0÷ð<ØðØ Lðà÷÷ ÷Oð ×ÑàAEñØðØ$(ðØ:>ðàöó ñ÷(&÷ö1�—’—’õ 1ð.Øð.Ø&)ð.Ø7Pð.à÷.÷b4÷1÷ô ò  ›E�‘Ô !÷	2ò 	2÷%ð ×ÑõCó ñC÷K÷÷0÷
,÷$÷
4÷
÷
÷"ð ×Òõó ñð ×Òõó ñð ×Òõó ñ÷
÷,÷+÷#ô #öL9˜õ 9÷
Mñ+Ñ ˜ô ÷ð" õó ñð. õ
ó ñ
÷Nð
 Ñ ÷!÷"ð
 ×Òõó ñð ×Òõ"ó ñ"÷,÷
ð 
øð]X ó Ø	ƒBðûð> ó 	Úð	üòTNùò
 Oùòùò
 SùÚPùò Osƒ   ÆAP< ÆB*AQ ñAQñ0AQòAQò/AQóAQ"ó.AQ"ô&AQ'ô<AQ'õ%AQ,õ;AQ,ö3AQ1÷	AQ1ÁP<AQÁQAQÁQAQÁQAQ