ó
    EñiøÐ ã                  óV*  • % 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/J0r0J1r1J2r2J3r3J4r4  SS
K5J6r6J7r7  SSK8r8SSK9r8SSK:r8SSK;J<s  J=r>  SSK8J?r?  SSK@JArAJBrBJCrCJDrD  SSKEJFrF  SSKGJHrHJIrI  SSKJJKrKJLrLJMrM  SSKNJOrO  SSKPJQrQJRrRJSrSJTrTJUrU  SSKVJWrWJXrX  SSKYJZrZ  SSK[J\r\  SSK]J^r^  SSK_J`r`  SSKaJbrbJcrc  SSKdJere  SSKfJgrg  \RÐ                  (       a>  SSKiJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrs  SSKtJuru  SSKvJwrw  SSKxJyryJzrz  SSK{J|r|  SS K}J~r~  SS!KJ€r€   SSK�r‚ SSK„r8SSK…J†r‡  SS"KJJˆ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•  \3" S)5      r—\3" S*5      r˜\6" S+5      r™\8GR4                  GR6                  GR8                  r�\8GR4                  GR6                  GR<                  rŸ\8GR4                  GR6                  GR@                  r¡\GRD                  " \RB                  5      r£S,\�S-'   0 r¤S.\�S/'   S0r¥S1r¦S2\¦ S33r§\GRP                  " \©5      rª0 r«S4\�S5'   \GRD                  " \¬5      r­S6\�S7'   \GR\                  " 5       r¯ " S8 S9\
GR`                  5      r± " S: S;5      r²      GSjS< jr³Sq´GSkS= jrµGSkS> jr¶Sq·S?\�S@'   GSlSA jr¸GSmSB jr¹GSkSC jrºSq»GSnSD jr¼GSoSE jr½GSkSF jr¾\GR~                  " 5       rÀGSpSG jrÁGSqSH jrÂ " SI SJ\
GR`                  5      rÃ " SK SL5      rÄ\GR~                  " 5       rÅ\$GSrSM j5       rÆ\$        GSs                   GStSO jj5       rÇ\0GSuGSvSP jj5       rÈ\0 GSu     GSwSQ jj5       rÈ GSx     GSySR jjrÈ\GR’                  GSkSS j5       rÊ\8GR–                  \8GR˜                  \8GRX                  4\8GRš                  \8GRœ                  \8GRž                  4\8GR                   \8GR¢                  \8GR¤                  4\8GR¦                  \8GR¨                  4\8GRª                  \8GR¬                  4\8GR®                  \8GR°                  4\8GR²                  \8GR´                  \8GR¶                  4\8GR¸                  \8GRº                  \8GR¼                  4\8GR¾                  \8GRÀ                  \8GRÂ                  4\8GRÄ                  \8GRÆ                  40
rä " ST SU5      rå\å" 5       ræGSzSV jrçGSkSW jrè\GRÒ                  " SX\GRÔ                  5      rë " SY SZ\GRØ                  5      ríGSzS[ jrîGSzS\ jrïGS{S] jrðGS|S^ jrñGS}S_ jròGS~S` jróGSSa jrôGS€Sb jrõ " Sc Sd5      rö\0GS�Se j5       r÷\0      GS‚Sf j5       r÷\0GSƒSg j5       r÷GS„Sh jr÷\ø" 5       rùSi\�Sj'   \GRô                  Sk:¼  aH  \GRö                  \GRø                  \Rl                  \Rf                  \GRú                  \GRü                  4rù      GS…Sl jrÿ\GRô                  Sm:¼  a  \ù\Rh                  4-  rùGS†Sn jGr GS†So jGrGS†Sp jGr\0    GS‡Sq j5       Gr\0    GSˆSr j5       Gr    GS†Ss jGr\4\GR                  \GR
                  \GR                  \GR                  4   GrSt\�Su'       GS‰Sv jGr	    GSŠSw jGr
\GR                  \GR                  \GR                  \GR                  \GR                  \GR                   Sx.GrSySzS{S|S}S~Sx.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RD                  " 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S™S— jGr)GSkS˜ 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r0\GR>                   " S¡ S¢5      5       Gr1 " S£ S¤\ö5      Gr2G\2" 5       G\2Gl3        GSŸS¥ jGr4GS S¦ jGr5GS¡S§ jGr6SS¨.     GS¢S© jjGr7\0    GS£Sª j5       Gr8\0GS¤S« j5       Gr8GS¥S¬ jGr8GS¦S­ jGr9\$GS§S® j5       Gr:    GS¨S¯ jGr;GSuGS©S° j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­S¶ jGrA GS®       GS¯S· jjGrBGS°S¸ jGrC\&" S¹5      GS±Sº j5       GrD\Þ\¬G\E\ãG\FG\GG\H" S5      G\IGR”                  G\KGR”                  \RN                  \8GR˜                  \8GRš                  \8GRœ                  \8GRž                  \8GR                   \8GR¢                  \8GR4                  GR¤                  GR¦                  \8GR¨                  GRª                  1GrVS»\�S¼'   \c" 5       (       a0  SSGKWGrWG\VGR±                  G\WGR²                  GRš                  5         GS²S½ jGrZ\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raGS·SÄ jGrb      GS·SÅ jGrcGS·SÆ jGrdG\H" 0 GRË                  5       5      GrfSÇ\�SÈ'   G\H" 0 GRÏ                  5       5      GrhSÉ\�SÊ'   G\H" 0 GRÓ                  5       5      GrjSË\�SÌ'   G\H" \"" 5       GRÏ                  5       5      GrkSÉ\�SÍ'   G\H" G\l" S'5      5      GrmSÎ\�SÏ'   G\H" G\l" G\n" S5      5      5      GroSÎ\�SÐ'   G\mGRà                  GrqG\rGRæ                  GrtG\uGRæ                  Grv\GRî                  " G\uGRð                  GRÏ                  5       \"GRð                  GRÏ                  5       5       V s1 s H  n G\y" U 5      (       d  M  U iM     sn GrzG\{GRð                  GRÏ                  5        V s1 s H  n G\y" U 5      (       d  M  U iM     sn Gr|G\}GRð                  GRÏ                  5        V s1 s H  n G\y" U 5      (       d  M  U iM     sn Gr~\øGRæ                  Gr\øGRð                  GRÏ                  5        V s1 s H  n G\y" U 5      (       d  M  U iM     sn Gr€G\�GRð                  GRÏ                  5        V s1 s H  n G\y" U 5      (       d  M  U iM     sn Gr‚G\�GR                  Gr„G\FGRð                  GRÏ                  5        V s1 s H  n G\y" U 5      (       d  M  U iM     sn Gr…G\H" \
GR`                  5      GRð                  GRÏ                  5        V s1 s H  n G\y" U 5      (       d  M  U iM     sn Gr†\3" SÑ5      Gr‡\3" 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\uGR                  Gr“\8R~                  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Su         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èKGJ¢Gr¢  GSÌSé jGr£GSÍSê jGr¤SNSë.       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SuGSÒSð jjGr©SSNSñSNSòSNSN\ªGRT                  SNSNSNSó4                             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RD                  " G\�5      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ÛGS  jGr·GSÜGS jGr¸ GSu       GSÝGS jjGr¹ GSu       GSÝGS jjGrº\GR~                  " 5       Gr»GSÞGS jGr¼\$GSßG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Su     GSèGS jjGrÇ " GS GS\
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 jGrÌ/ GSQ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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èGS†GS6 jGréGSûGS7 jGrê      GSüGS8 jGrëGS†GS9 jGrìGSýGS: jGrí\RH                   GSþ       GSÿGS; jj5       GrîGS GS< jGrïGSGS= jGrð " GS> GS?\8GR4                  GR6                  5      Grñ        GSGS@ jGròGSGSA jGróGSGSB jGrô " GSC GSD5      GrõG\{" 5       GröGSE\�GSF'   GS®GSGSG jjGr÷GSGSH jGrø\RH                  GS§GSI j5       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ýGSkGSN jGrþGS
GSO jGrÿGS‘GSP jGr GSGSQ jGrGSGSR jGr\8GR                  GSGSS j5       Gr\8GR                  GSGST j5       Gr\8GR                  GSGSU j5       GrGSGSV jGrGSGSW jGrGSGSX jGr	 " GSY GSZ5      Gr
 " GS[ GS\\Þ5      GrGSGS] jGrGS^GrS´\�GS_'   GSÖGS` jGr\$GS§GSa j5       Gr\$GS§GSb j5       GrGSGSc jGrSNGqGSœGSd jGrGSGSe jGr\8GR                  GSGSf j5       Gr\8GR                  GSGSg j5       GrGSGSh jGrGSGSi jGrg! \ƒ a    Sr‚ GNRf = 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 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ÚNoReturnÚ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)Ú
OrderedSet)Úis_traceable_wrapper_subclass)Ú
has_tritonÚhas_triton_package)ÚRemovableHandleé   )Ú_get_flat_args)
ÚCallableÚ	ContainerÚ	GeneratorÚ	ItemsViewÚIterableÚIteratorÚKeysViewÚMappingÚSequenceÚ
ValuesView)ÚInstruction)Ú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_logzihttps://docs.pytorch.org/docs/main/user_guide/torch_compiler/compile/programming_model.recompilation.htmlzZhttps://docs.pytorch.org/docs/main/user_guide/torch_compiler/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éÁ   r4   é   é   rN   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚAUTO_FUNC_V1ÚAUTO_FUNC_V2Ú
TRITON_OPSÚ__static_attributes__rN   ó    ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/utils.pyr\   r\   Á   s   † Ø€LØ€LØƒJrh   r\   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_©rm   Úname)ÚclsÚtriggerÚbytess      ri   Úadd_missed_bytesÚ"ReinplaceCounters.add_missed_bytesË   s-   € à�A‹:Ø�K‰K˜-¨¯© ~Ð6Ó7¸5Ñ@Ô7ð rh   c                óZ   • US:w  a%  U R                   SUR                   3==   U-  ss'   g g ©Nr   Úmissed_tensors_rq   )rs   rt   Úcounts      ri   Úadd_missed_opportunitiesÚ*ReinplaceCounters.add_missed_opportunitiesÑ   s-   € à�A‹:Ø�K‰K˜/¨'¯,©,¨Ð8Ó9¸UÑBÔ9ð rh   c                ó8   • U R                   R                  5         g ©N)rm   Úclear©rs   s    ri   r€   ÚReinplaceCounters.clearÖ   s   € à�‰×ÑÕrh   c                óz   • Sn[          H.  nXR                  R                  SUR                   3S5      -  nM0     U$ ry   ©r\   rm   Úgetrr   ©rs   Úsumrt   s      ri   Úget_total_missedÚ"ReinplaceCounters.get_total_missedÚ   s8   € àˆß'ˆGØ—;‘;—?‘? _°W·\±\°NÐ#CÀQÓGÑGŠCñ (àˆ
rh   c                óz   • Sn[          H.  nXR                  R                  SUR                   3S5      -  nM0     U$ ro   r„   r†   s      ri   Úget_total_missed_bytesÚ(ReinplaceCounters.get_total_missed_bytesá   s8   € àˆß'ˆGØ—;‘;—?‘? ]°7·<±<°.Ð#AÀ1ÓEÑEŠCñ (àˆ
rh   c                óV   • U R                   (       a  [        SSU R                   5        g g )NÚinductorÚreinplace_counters)rm   r*   r�   s    ri   ÚlogÚReinplaceCounters.logè   s!   € ð �;�;Ü˜:Ð';¸S¿[¹[ÕIð rh   rN   N)rt   r\   ru   ÚintÚreturnÚNone)rt   r\   r{   r’   r“   r”   ©r“   r”   ©r“   r’   )r`   ra   rb   rc   ÚcollectionsÚdefaultdictr’   rm   Ú__annotations__Úclassmethodrv   r|   r€   rˆ   r‹   r�   rg   rN   rh   ri   rk   rk   Ç   s–   ‡ Ø1<×1HÒ1HÈÓ1M€GÐ.ÓMð óAó ðAð
 óCó ðCð óó ðð óó ðð óó ðð óJó óJrh   rk   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     ri   Ú	<genexpr>Útabulate.<locals>.<genexpr>ø   s&   é € ð 
Ú0P¨ˆD�I‰I”cœ#˜s“m×$Ð$Ò0Pùs   ‚,.)ÚtabulateÚImportErrorr¡   Ú	itertoolsÚchain)Úrowsr�   r¨   s      ri   r¨   r¨   ï   sX   € ð
Ûà× Ñ  Ð Ð7Ð7øÜó 
Ø�y‰yñ 
Ü09·²ÀÀ	È4Ô0Pó
ó 
ò 	
ð
ús   ‚ •8AÁAc                 ó   • [         S-   q g ©Nr4   )Ú
curr_framerN   rh   ri   Úincrement_framer°     s   € ä˜a‘�Jrh   c                 óX   • [         R                  5         [        R                  5         Sqg ©Nr   )rZ   r€   rX   r¯   rN   rh   ri   Úreset_frame_countr³     s   € ä×"Ñ"Ô$Ü×"Ñ"Ô$Ø�Jrh   ú!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    ri   Ú(register_hook_for_recompile_user_contextr¹     s   € ô  Ñ'Ø#%Ð Ü×#Ñ# DÕ)rh   c                 ó   • [         $ r   ©rµ   rN   rh   ri   Ú#get_hook_for_recompile_user_contextr¼     s   € Ü#Ð#rh   c                 ó   • Sq g)z@Clear any registered recompile user-context hooks (test helper).Nr»   rN   rh   ri   Úreset_recompile_user_contextsr¾   #  s
   € ð  $Ñrh   c                ó   • [         U -  q g r   )Úop_count)Úcnts    ri   Úincrement_op_countrÂ   ,  s   € ä��O�Hrh   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)rZ   Úitemsr…   )Útotal_by_keyÚphaseÚtimings      ri   Úcalculate_time_spentrÌ   3  sc   € Ø€LÜ1×7Ñ7Ö9‰ˆà$ s™lˆÓñ :ð '3×&6Ñ&6Ø ó'à×ÑÐ2°AÓ6ñ'7€LÐ"Ñ#ð Ðrh   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       ri   Úprint_time_reportrÖ   E  sJ   € Ü'Ó)€Là
€CØ"×(Ñ(Ö*‰
ˆØ��Q�s�e˜1œU 5¨!›_Ð-Ð.Šñ +ô 
ˆ#…Jrh   c                 óx   • [        [        S5      (       d  [        [        S9[        l        [        R                  $ )NÚmetrics_context©Úon_exit)ÚhasattrÚ_metrics_context_tlsr    Úrecord_compilation_metricsrØ   rN   rh   ri   Úget_metrics_contextrÞ   g  s0   € ÜÔ'Ð):×;Ñ;Ü/=Ü.ñ0
ÔÔ,ô  ×/Ñ/Ð/rh   c                 óx   • [        [        S5      (       d  [        [        S9[        l        [        R                  $ )NÚruntime_metrics_contextrÙ   )rÛ   rÜ   r!   rÝ   rà   rN   rh   ri   Úget_runtime_metrics_contextrá   o  s0   € ÜÔ'Ð)B×CÑCÜ7LÜ.ñ8
ÔÔ4ô  ×7Ñ7Ð7rh   c                  ó$   • \ rS rSrSrSrSrSrSrg)ÚCompileEventLogLeveliw  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
r4   r^   r_   rN   N)	r`   ra   rb   rc   Ú__doc__ÚCHROMIUMÚPT2_COMPILEÚCOMPILATION_METRICrg   rN   rh   ri   rã   rã   w  s   † ñð €HØ€KØÓrh   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 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         ri   rï   Ú$CompileEventLogger.log_instant_eventž  sk   € ð ‰?Ü—l’l“nˆGÜ0Ó2ˆØÔ,×5Ñ5Ó5Ø$)Ñ!ØÔ.×:Ñ:Ó:Ø$(Ñ!äØ|óð ð 	×&Ñ&Ø õ	
rh   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_eventrØ   s           ri   Ú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Ó?rh   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       ri   Úadd_toplevelÚCompileEventLogger.add_toplevelâ  sB   € ô .Ó/×CÑCÓEˆ	ØÑÜØióð ô 	×#Ò# I¸)ÑPÀxÓPrh   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          ri   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Õ:rh   r4   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        ri   Úincrement_toplevelÚ%CompileEventLogger.increment_toplevel  sB   € ô 1Ó2ˆØ ×4Ñ4Ó6ˆ	ØÑÜØqóð ô 	×$Ñ$ Y¸3ÕFrh   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          ri   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Õ;rh   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        ri   Úadd_to_set_toplevelÚ&CompileEventLogger.add_to_set_toplevel?  sB   € ô 1Ó2ˆØ ×4Ñ4Ó6ˆ	ØÑÜØqóð ô 	×%Ñ% i¸CÕGrh   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     ri   ÚchromiumÚCompileEventLogger.chromiumS  s.   € ô 	×#Ò#ØÔ,×5Ñ5ñ	
ØAFð	
ØJRó	
rh   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     ri   Úpt2_compileÚCompileEventLogger.pt2_compile]  s.   € ô 	×#Ò#ØÔ,×8Ñ8ñ	
ØDIð	
ØMUó	
rh   c                óF  • [         R                  R                  R                  (       ag  U(       a_  SR	                  S UR                  5        5       5      n[         R                  R                  R                  U  SU 35          SSS5        ggg! , (       d  f       g= f)a  
Add record function data to the profiler event.

This emits profiler event data so compilation events show up in stack profilers
like the PyTorch profiler.

Args:
    event_name: Name of the event to record
    **metadata: Additional metadata to attach to the record function
r    c              3  ó4   #   • U  H  u  pU S U 3v •  M     g7f)Ú=NrN   )r¤   ÚkÚvs      ri   r¦   Ú>CompileEventLogger.add_record_function_data.<locals>.<genexpr>w  s   é € Ð$MÒ<L±D°A¨ s¨!¨A¨3¥ZÒ<Lùs   ‚z_data: N)ÚtorchÚautogradÚprofilerÚ_is_profiler_enabledr¡   rÈ   Úrecord_function)rð   rñ   Úmetadata_strs      ri   Úadd_record_function_dataÚ+CompileEventLogger.add_record_function_dataj  s}   € ô �>‰>×"Ñ"×7×7¾HØŸ9™9Ñ$M¸H¿N¹NÔ<LÓ$MÓMˆLÜ—‘×(Ñ(×8Ñ8Ø�,˜g l ^Ð4õð ÷ð ð =EÐ7÷õ ús   ÂBÂ
B 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     ri   Úcompilation_metricÚ%CompileEventLogger.compilation_metric}  s%   € ô 	×'Ò'Ü ×3Ñ3°Yñ	
ØBJó	
rh   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      ri   ÚinstantÚCompileEventLogger.instant‰  s    € ô 	×,Ñ,Ø 'Ô+?×+HÑ+Hõ	
rh   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      ri   Útry_add_pt2_compileÚ&CompileEventLogger.try_add_pt2_compile•  s+   € ô )×*Ñ*ØÜ0Ó2ˆØ×'Ò'¨
Ñ?°hÓ?rh   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)r0  rÞ   rú   )Ú	method_fnÚargsÚkwargsrØ   s       ri   Útry_ÚCompileEventLogger.try_¡  s7   € ô
 )×*Ñ*ØÜ-Ó/ˆØ×*Ñ*×,Ñ,ØÙ�4Ð"˜6Ó"rh   rN   )
rð   r£   rñ   rV   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ñ   rV   rì   r:  r“   r”   )r5  zCallable[_P, Any]r6  ú_P.argsr7  ú	_P.kwargsr“   r”   )r`   ra   rb   rc   rä   Ústaticmethodrã   rå   rï   rÿ   r  r  rç   r  r  r  r  r  r'  r*  r-  r2  r8  rg   rN   rh   ri   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ð	
à	ô	
ó ð	
ð ó	@ó ð	@ð ó	#ó ó	#rh   ré   c              #  ó:  #   • [         R                  R                  R                  (       aR  [         R                  R
                  R                  U 5      nUR                  5          Sv •  UR                  SSS5        gSv •  g! UR                  SSS5        f = f7f)a³  
A context manager for compile-time profiling that uses _RecordFunctionFast
for lower overhead than torch.profiler.record_function.

This is intended for use during compilation (dynamo, inductor, etc.) where
we want profiling support but with minimal overhead. Moreover, we do not
want the record_function call inside torch.compile to be dispatched.

Args:
    name: The name of the record function event that will appear in profiles.
N)	r!  r"  r#  r$  Ú_CÚ	_profilerÚ_RecordFunctionFastÚ	__enter__Ú__exit__)rr   Úrfs     ri   Úcompile_time_record_functionrH  ±  sk   é € ô ‡~�~×Ñ×3×3Ü�X‰X×Ñ×3Ñ3°DÓ9ˆØ
�‰Œð	*Ûà�K‰K˜˜d DÕ)äøð �K‰K˜˜d DÕ)üs   ‚A#BÁ&B Á*BÂBÂB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        [        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  [/        5       nUR1                  5       (       a-  UR3                  UU5        U(       a  UR3                  SU5        ggg[5        5       nUR3                  UU5        U(       a  USU(       + S.nUR3                  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  [/        5       nUR1                  5       (       a-  UR3                  UU5        U(       a  UR3                  SU5        f f f [5        5       nUR3                  UU5        U(       a  USU(       + S.nUR3                  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   r4   z#pytorch.wait_counter.dynamo_compilez.pytorch.wait_counter.compile_runtime_overheadsrÄ   éè  Úduration_usT)Ú
compile_idÚ
is_runtimeÚ
is_forward)rX   rû   rí   rë   rì   Úlog_event_startrH  r·   r-   Úguardr!  Ú_guardsÚCompileContextÚcurrent_compile_idÚendswithrÛ   Ú_dynamo_timed_tlsrM  Ú
contextlibÚ	ExitStackÚenter_contextÚlog_event_endrZ   rÞ   rú   r  rá   )rÔ   Ú
phase_namerô   rñ   Údynamo_compile_column_usrP  rK  Úlog_waitcounterÚwaitcounter_name_overriderð   rJ  ÚmetricsÚevent_metadataró   Ústart_nsÚcx_mgrsÚwc_nameÚis_compile_timeÚ
runtime_wcÚstackÚcxÚend_nsÚtime_spent_nsÚis_outer_eventrO  rØ   Úruntime_contextÚextras                               ri   Údynamo_timedrp  É  s  é € öl Øˆ
Ø‰àˆ
Øˆà
Ô*Ó*Ø(*Ô  Ñ%ä& sÑ+€GØ€NÞØ×Ñ˜hÔ'ÞØ×Ñ˜y¨'Ð2Ô3ØÑØ×Ñ˜}¨kÐ:Ô;ä(AÓ(C€LÜ�|Š|‹~€HØ× Ñ Ø˜nÀZôô ">ÀÀÀ_Ð>UÓ!VÐ W€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   ‚G$RÇ'M Ç<MÈM È#D$RÍ
MÍM ÍD%Q>Ñ>Rc                ó   • g r   rN   ©ÚreprÚ	aggregates     ri   Úcompile_timesru  Z  s   € ØILrh   c                ó   • g r   rN   rr  s     ri   ru  ru  ^  s   € ð &)rh   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_fnrt  s     €ri   Úfmt_fnÚcompile_times.<locals>.fmt_fnu  s)   ø€ ÞÙœ3˜v›;Ó'Ð'Ø�y‰yœ˜WÓ-Ó.Ð.rh   c                ó
   • U S $ )Nz.4frN   ©Úxs    ri   Ú<lambda>Úcompile_times.<locals>.<lambda>|  s
   € ÈÈ3ÈÀjrh   )rz  z!TorchDynamo compilation metrics:
)ÚFunctionzRuntimes (s)rœ   Úcsvc                ó
   • U S $ )Nz.6frN   r~  s    ri   r€  r�  „  s
   € ¨1¨S¨'¨
rh   N)ry  zlist[float]rz  zCallable[[float], str]r“   r£   )r£   rX   r¨   ry  ÚlistÚkeys)	rs  rt  r{  r  r¬   rÓ   r  ry  r�   s	    `       ri   ru  ru  e  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£   Trr  )r�   Úinforu  rN   rh   ri   Údump_compile_timesr‰  Œ  s   € ä‡H�HŒ] °Ñ6Õ7rh   c                  ó6   • \ rS rSrSSS jjrS	S jrS
S jrSrg)ÚDuplicateWarningCheckeriŸ  c                ó0   • Xl         U R                  5         g r   )ÚmaxsizeÚreset)Úselfr�  s     ri   Ú__init__Ú DuplicateWarningChecker.__init__   s   € ØŒØ�
‰
�rh   c                ó"   • [        5       U l        g r   )r   Úset©r�  s    ri   rŽ  ÚDuplicateWarningChecker.reset¤  s   € Ü*5«-ˆ�rh   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_endrL   ÚverboseÚlenr�  Úpopitem©r�  rÔ   s     ri   ÚaddÚDuplicateWarningChecker.add§  s‡   € Ø—(‘(‹?Ø�H‰H× Ñ  ¨4Ð Ñ0Ü—>—>Øð "ð ð !ˆD�H‰H�S‰MÜ�d—h‘h“- $§,¡,Ó.Ø—‘× Ñ  eÐ Ñ,ô �d—h‘h“- $§,¡,Õ.àrh   )r�  r“  N)é   )r�  r’   r“   r”   r•   )rÔ   z!Union[str, tuple[object, object]]r“   r<  )r`   ra   rb   rc   r�  rŽ  r�  rg   rN   rh   ri   r‹  r‹  Ÿ  s   † öô8÷	rh   r‹  c                 ó”   • [         R                  R                  SS5      S:H  n U (       a
  [        5       $ [        R
                  " 5       $ )NÚTORCH_COMPILE_DEBUGÚ0Ú1)ÚosÚenvironr…   Úadd_file_handlerrZ  r[  )Úcompile_debugs    ri   Úsetup_compile_debugr¨  ¶  s7   € Ü—J‘J—N‘NÐ#8¸#Ó>À#ÑE€MæÜÓ!Ð!ä×ÒÓ!Ð!rh   c                 ó,   • [         R                  5         g r   )Úgraph_break_dup_warning_checkerrŽ  rN   rh   ri   Úreset_graph_break_dup_checkerr«  ¿  s   € Ü#×)Ñ)Õ+rh   z§
    \x1B            # ESC
    \[              # [
    [0-?]*          # Parameter bytes
    [ -/]*          # Intermediate bytes
    [@-~]           # Final byte
    c                  ó0   ^ • \ rS rSrSrSU 4S j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)r�  ÚrecordÚmsgÚ	__class__s      €ri   r±  ÚStripAnsiFormatter.formatÓ  s$   ø€ Ü‰g‰n˜VÓ$ˆÜ"×&Ñ& r¨3Ó/Ð/rh   rN   )r´  zlogging.LogRecordr“   r£   )r`   ra   rb   rc   rä   r±  rg   Ú__classcell__©r¶  s   @ri   r­  r­  Ð  s   ø† Ù:÷0õ 0rh   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   €€ri   r€  Ú"add_file_handler.<locals>.<lambda>â  s   ø€ ˜v×3Ñ3Ð4DÔErh   )r¤  Úpathr¡   Úget_debug_dirÚmakedirsÚloggingÚFileHandlerÚsetFormatterr­  Ú	getLoggerÚ
addHandlerrZ  r[  Úcallback)Úlog_pathÚ	exitstackrÂ  rÃ  s     @@ri   r¦  r¦  Ø  s�   ù€ Ü�w‰w�|‰|œM›O¨]Ó;€HÜ‡K‚K� 4Ò(ä×*Ò*¬2¯7©7¯<©<¸À+Ó+NÓOÐØ×!Ñ!Ô"4°]Ó"CÔDÜ×Ò˜Ó/€FØ
×ÑÐ&Ô'ä×$Ò$Ó&€IØ×ÑÕEÔFØÐrh   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   €€ri   r€  Ú setup_log_file.<locals>.<lambda>ì  s   ø€  v×';Ñ';Ð<LÔ'Mrh   )rZ  r[  rL   Úlog_file_namerÈ  rÉ  r!  Ú_loggingÚ	_internalÚget_loggersrÌ  rÍ  )rÏ  rÂ  rÃ  s    @@ri   Úsetup_log_filer×  æ  s}   ù€ Ü×$Ò$Ó&€IÜ×ÑÑ'Ü"×.Ò.¬v×/CÑ/CÓDÐÜ—n‘n×.Ñ.×:Ñ:Ö<ˆFØ×ÑÐ.Ô/Ø×ÑÕMÖNñ =ð ÐàÐrh   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     ri   Úgen_record_file_namerß  ò  sB   € Ü‹oÐð Ø‡�€ˆa”�S“	×"Ñ"Ð# 1 T×%8Ñ%8Ð$9¸ð?ð ?rh   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      ri   Ú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   Úcallr4   )ÚnodesÚop)ÚgÚcÚns      ri   Úcount_callsrô    s0   € Ø	€AØ�WŒWˆØ�Q—T‘T�>Ø�‰FŠAñ ð €Hrh   c                ó   • U $ r   rN   r~  s    ri   Úidentityrö    s   € Ø€Hrh   c                óR   •  [        U 5        g! [         a     g[         a     gf = f©NTF)ÚhashÚ	TypeErrorÚ
ValueErrorr~  s    ri   Úhashablerü    s.   € ðÜˆQŒØøÜó Ùäó Ùðús   ‚ Ž
&š	&¥&c                 ó   • g r   rN   ©r6  r7  s     ri   Únothingrÿ    s   € Ørh   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   ©ry  Úrefsr”  s    ri   r�  ÚExactWeakKeyDictionary.__init__#  s   € Ø&(ˆŒØ;=ˆ�	rh   c                ó2   • U R                   [        U5         $ r   )ry  Úidrœ  s     ri   Ú__getitem__Ú"ExactWeakKeyDictionary.__getitem__'  s   € Ø�{‰{œ2˜c›7Ñ#Ð#rh   Nc                óL   • U R                   R                  [        U5      U5      $ r   )ry  r…   r  )r�  rÔ   Údefaults      ri   r…   ÚExactWeakKeyDictionary.get*  s   € Ø�{‰{�‰œr #›w¨Ó0Ð0rh   c                ó2   • [        U5      U R                  ;   $ r   )r  ry  rœ  s     ri   Ú__contains__Ú#ExactWeakKeyDictionary.__contains__-  s   € Ü�#‹w˜$Ÿ+™+Ñ%Ð%rh   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Úidxr�  s    €€ri   r€  Ú4ExactWeakKeyDictionary.__setitem__.<locals>.<lambda>3  s   ø€ ¸$¿/¹/È#Ô:Nrh   )r  r  Úweakrefr  ry  )r�  rÔ   rÕ   r  s   `  @ri   Ú__setitem__Ú"ExactWeakKeyDictionary.__setitem__0  s?   ù€ Ü�‹gˆØ�d—i‘iÓÜ$Ÿ[š[¨Õ.NÓOˆD�I‰I�c‰NØ ˆ�‰�CÒrh   c                óv   • XR                   ;   a  U R                   U	 XR                  ;   a  U R                  U	 g g r   r  )r�  r  s     ri   r  Ú!ExactWeakKeyDictionary._remove_id6  s2   € Ø—+‘+ÓØ—‘˜CÐ Ø—)‘)ÓØ—	‘	˜#‘ð rh   c                ól   • U R                   R                  5         U R                  R                  5         g r   )r  r€   ry  r”  s    ri   r€   ÚExactWeakKeyDictionary.clear<  s    € Ø�	‰	�‰ÔØ�‰×ÑÕrh   )r  ry  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`   ra   rb   rc   rä   r�  r  r…   r  r  r  r€   rg   rN   rh   ri   r  r     s(   † Ùfô>ô$ö1ô&ô!ô÷rh   r  c                ó   • g r   rN   ©ÚobjÚallowed_typess     ri   Úistyper"  A  s   € Ø>Arh   c                ó   • g r   rN   r  s     ri   r"  r"  E  s   € ð rh   c                ó   • g r   rN   r  s     ri   r"  r"  K  s   € Ø@Crh   c                óx   • [        U[        [        [        45      (       a  [	        U 5      U;   $ [	        U 5      UL $ )zisinstance() without subclasses)Ú
isinstanceÚtupler…  r“  rÛ  r  s     ri   r"  r"  O  s4   € ä�-¤%¬¬sÐ!3×4Ñ4Ü�C‹y˜MÑ)Ð)Ü�‹9˜Ð%Ð%rh   ztuple[Any, ...]Ú_builtin_final_typing_classes©r_   é   c                ó
  • [         R                  " U 5      S   [        UR                  R                  5       Vs/ s H$  nSUR
                  ;   d  M  UR
                  S   PM&     sn-   n[        [        U Vs/ s H"  n[        US5      (       d  M  UR                  PM$     sn5      5      nU Vs/ s H8  n[        U[        R                  5      (       d  M$  UR                  S:w  d  M6  UPM:     snS /-   $ s  snf s  snf s  snf )Nr   ÚvalÚdeviceÚmeta)ÚpytreeÚtree_flattenr…  Úgraphrï  r.  r/   rÛ   r-  r&  r!  rÛ  )ÚinputsÚmodelÚnodeÚ
all_inputsÚiÚdevicess         ri   Úget_inputs_devicesr8  f  sà   € ô ×$Ò$ VÓ,¨QÑ/Ü%)¨%¯+©+×*;Ñ*;Ô%<ó3Ú%<˜TÀÈÏÉÑ@RÓˆ�	‰	�%ÔÑ%<ñ3ñ €Jô -1Ü¡jÓI¢j ´G¸A¸x×4H“H�A—H”H¡jÑIÓJó-€Gñ óÚˆaœz¨!¬U¯\©\×:‹¸q¿v¹vÈÑ?O�‘7ñà	ˆñð ùò3ùò Jùòs)   ºC6ÁC6Á8C;ÂC;Â0#D ÃD Ã)D )r_   é   c                ó  • [         R                  S:¼  a  [        U [        5      (       a  g[        U [        R
                  [        R                  45      =(       d+    U [        R                  L =(       d    U [        R                  L $ )Nr)  T)
ÚsysÚversion_infor&  r(  ÚtypesÚ	UnionTypeÚtypingÚ_Finalr   r   ©rÕ   s    ri   Ú	is_typingrB  y  s`   € ô ×Ñ˜7Ó"¤z°%Ô9V×'WÑ'WØä�5œ5Ÿ?™?¬F¯M©MÐ:Ó;÷ 	!Ø”F—N‘NÐ"÷	!à”F—L‘LÐ ðrh   c                ó"  • [         (       d  g[        U [         R                  [         R                  [         R                  [         R
                  [         R                  [         R                  [         R                  [         R                  45      $ ©NF)
Únpr"  Úint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64rA  s    ri   Úis_numpy_int_typerN  ‹  sW   € ßŠ2ØäØä�G‰GÜ�H‰HÜ�H‰HÜ�H‰HÜ�H‰HÜ�I‰IÜ�I‰IÜ�I‰Ið		
óð rh   c                óŒ   • [         (       d  g[        U [         R                  [         R                  [         R                  45      $ rD  )rE  r"  Úfloat16Úfloat32Úfloat64rA  s    ri   Úis_numpy_float_typerS  ž  s4   € ßŠ2ØäØä�J‰JÜ�J‰JÜ�J‰Jð	
óð rh   c                ó   • g r   rN   rA  s    ri   Úis_lru_cache_wrapped_functionrU  ¬  s   € ð 25rh   c                ó   • g r   rN   rA  s    ri   rU  rU  ²  s   € ð 47rh   c                ó„   • [        U [        R                  5      =(       a     [        [        R
                  " U S5      5      $ )NÚ__wrapped__)r&  Ú	functoolsÚ_lru_cache_wrapperÚis_functionÚinspectÚgetattr_staticrA  s    ri   rU  rU  ¸  s6   € ô �eœY×9Ñ9Ó:÷ ¼{Ü×Ò˜u mÓ4ó@ð rh   r   Ú
_FuncTypesc                ó¢   • [        U 5      =(       d>    [        U [        R                  R                  [        R                  R
                  45      $ r   )r[  r&  r!  Ú_opsÚOpOverloadPacketÚ
OpOverloadrA  s    ri   Úis_function_or_wrapperrc  È  s;   € ô �uÓ÷ ¤Ø”—
‘
×+Ñ+¬U¯Z©Z×-BÑ-BÐCó"ð rh   c                ó’   • [        U [        R                  [        R                  [        R                  [        R
                  45      $ r   )r&  r=  ÚFunctionTypeÚBuiltinFunctionTypeÚMethodDescriptorTypeÚWrapperDescriptorTyperA  s    ri   r[  r[  Ð  s=   € ô Øä×ÑÜ×%Ñ%Ü×&Ñ&Ü×'Ñ'ð		
óð rh   )Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__z==z!=Ú<z<=Ú>z>=c                ó°   • [        U [        R                  [        R                  [        R                  [        R
                  [        R                  45      $ r   )r&  r=  ÚGetSetDescriptorTyperg  rh  ÚMemberDescriptorTyper   rA  s    ri   Úis_wrapper_or_member_descriptorrt  ò  sH   € ô Øô ×&Ñ&ä×&Ñ&ä×'Ñ'ä×&Ñ&ä×#Ñ#ð	
óð rh   c                ó   • [        U 5      S   $ r²   )Ú unwrap_with_attr_name_if_wrapper)Úfns    ri   Úunwrap_if_wrapperrx    s   € Ü+¨BÓ/°Ñ2Ð2rh   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)r[  r\  r]  )rw  Ú	attr_names     ri   rv  rv    sU   € ô �2‡�œ7×1Ò1°"Ð6KÈU×SÑSÜ×#Ò# BÐ(=¸rÓBˆØ)ˆ	ð ˆ=Ðð ˆ	Øˆ=Ðrh   c                óN   • [         (       d  g[        U [         R                  5      $ rD  )rE  r"  ÚndarrayrA  s    ri   Úis_numpy_ndarrayr~    s   € ßŠ2Øä�%œŸ™Ó$Ð$rh   c                óÊ   • [         R                  [         R                  R                  /[        R
                  Q7nU[         R                  R                  4-   n[        X5      $ )zCheck of obj is a tensor)	r!  ÚTensorÚnnÚ	ParameterrL   Útraceable_tensor_subclassesÚ_subclassesrO   r"  )r   Útensor_lists     ri   Úistensorr†  $  sU   € ô 	�‰Ü�‰×Ñð%ô 
×	+Ñ	+ñ%€Kð
 ¤×!2Ñ!2×!=Ñ!=Ð ?Ñ?€KÜ�#Ó#Ð#rh   c                ó"   • [        U [        5      $ r   )r&  r.   )Úmods    ri   Úis_lazy_moduler‰  /  s   € Ü�cœ?Ó+Ð+rh   rŸ  c                 ó   • [        U 6   g r   )rÒ   ©r6  s    ri   Ú
print_oncerŒ  3  s	   € ä	ˆ4‚Lrh   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   rN   r~  s   €ri   rë  Úmake_cell.<locals>.f<  s   ø€ Øˆrh   r4   r   )r“   r   )Ú__closure__rš  )r,  rë  r  s     @ri   Ú	make_cellr‘  8  s>   ø€ à€A÷ð �=‰=Ñ$¬¨Q¯]©]Ó);¸qÓ)@Ð@Ð@Ø�=‰=˜ÑÐrh   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     ri   r¦   Ú$proxy_args_kwargs.<locals>.<genexpr>E  s   é € Ð:²T¨cŸ<™<Ÿ>˜>²Tùó   ‚r4   ©Ú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È   r”  ÚNotImplementedErrorrÝ  rš  Úvariables.baser›  r…  ry  )	r6  r7  Ú
proxy_argsrÔ   r–  Úproxy_kwargsÚerš  r›  s	            ri   Úproxy_args_kwargsr§  C  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      $ ©NrN  ©r’   ©r  s    ri   Ú	to_int_msr¬  U  s   € Ø‘9ˆ4Ð/¤# a¨$¡h£-Ð/rh   c                ó(   • U c  S $ [        U S-  5      $ )Ni@B rª  r«  s    ri   Ú	to_int_usr®  [  s   € Ø‘9ˆ4Ð4¤# a¨)¡mÓ"4Ð4rh   r_   c                  ó†  • \ 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'   SHrDS\SI'   SHrES\SJ'   SrFS\SK'   SrGS\SL'   SrHS\SM'   SHrIS\SN'   SHrJS\SO'   SHrKS\SP'   SHrLS\SQ'   SHrMS\SR'   SHrNS\SS'   SrOS\ST'   SrPS\SU'   SrQSV\SW'   SrRS\SX'   SYrSS$\SZ'   SrTS\S['   SrUS$\S\'   SrVS$\S]'   SrWS\S^'   SrXS\S_'   SrYS\S`'   SrZS\Sa'   Sr[S\Sb'   Sr\S\Sc'   Sr]S\Sd'   Sr^S\Se'   Sr_S\Sf'   Sr`S\Sg'   SraS\Sh'   SrbS\Si'   SrcS\Sj'   SrdS\Sk'   SYreS$\Sl'   SrfS\Sm'   SrgS\Sn'   \hSqSo j5       riSprjg)rÚCompilationMetricsid  NúOptional[str]rP  Ú	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_configrR  Únum_triton_bundlesÚ!remote_fx_graph_cache_get_time_msÚ!remote_fx_graph_cache_put_time_msÚstart_time_usrO  Ú!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_versionr   Ú"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Ú!inductor_fx_local_cache_hit_countÚ"inductor_fx_local_cache_miss_countÚ"aotautograd_remote_cache_hit_countÚ#aotautograd_remote_cache_miss_countÚ!aotautograd_local_cache_hit_countÚ"aotautograd_local_cache_miss_countÚcuda_versionÚtriton_versionzOptional[dict[str, bool]]Úfeature_usageÚcompile_time_autotune_time_usFrQ  Ú
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    €„.ArN   ©Úmetrics    ri   Úus_to_sÚ*CompilationMetrics.create.<locals>.us_to_sÚ  s   € Ø#)Ñ#5�6˜C‘<Ð?¸4Ð?rh   c                ó   • U b  U S-  $ S $ r©  rN   r  s    ri   Úus_to_msÚ+CompilationMetrics.create.<locals>.us_to_msÝ  s   € Ø%+Ñ%7�6˜T‘>ÐA¸TÐArh   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    ri   Ú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   rN   )r¤   r  r  s     €ri   r¦   ÚGCompilationMetrics.create.<locals>.collection_to_str.<locals>.<genexpr>í  s   øé € ÐF²~¨t™H TŸN˜N²~ùó   ƒ)r  r   r“   r£   )r&  r“  r…  r¡   Úsorted)r  r  s    @ri   Úcollection_to_strÚ4CompilationMetrics.create.<locals>.collection_to_strà  s?   ø€ ô'ð ‰~Øä˜f¤s¬D k×2Ñ2Ø"à—8‘8ÔF´v¸f´~ÓFÓFÐFrh   c                ój   • U c  g  [         R                  " [        U 5      5      $ ! [         a     gf = fr  )ÚjsonÚdumpsr…  rç  r  s    ri   Ú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  rP  N)r  r:  r“   r»  )r  r:  r“   r:  )r  úOptional[Any]r“   r±  rN   )r…   r£   )	rs   rb  r  r  r%  r*  Úlegacy_metricsÚall_metricsrP  s	            ri   Ú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Ñ!ñ Ñ!�[Ñ!Ð!rh   rN   )rb  rV   r“   r°  )kr`   ra   rb   rc   rP  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Ô  rR  rÕ  rÖ  r×  rØ  rO  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õ  rö  r÷  rø  rù  rú  rû  rQ  rü  rý  rþ  rÿ  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  rš   r/  rg   rN   rh   ri   r°  r°  d  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�]Ó)Ø*.Ð˜-Ó.Ø89Ð&¨Ó9Ø9:Ð'¨Ó:Ø;?Ð)¨=Ó?Ø7;Ð% }Ó;Ø8<Ð&¨Ó<Ø78Ð% }Ó8Ø89Ð&¨Ó9Ø89Ð&¨Ó9Ø9:Ð'¨Ó:Ø78Ð% }Ó8Ø89Ð&¨Ó9Ø"&€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"rh   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Å  r…  rÆ  rÇ  rÈ  rÍ  rÓ  )rò  Úevent_loggerrð   s      ri   Ú#add_compilation_metrics_to_chromiumr8  0  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ð;  ò rh   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       ri   Úclean_for_jsonÚ6_get_dynamo_config_for_logging.<locals>.clean_for_jsona  sX   € ò
ˆ	ð2  Ÿg™gœiô
â'‘
�ØÑ#ó DˆC¤*¨U´C×"8Ñ"8”˜”¸eÒCÙ'ò
ð 	
ùó 
s
   ˜A§'AT©Ú	sort_keys©rN  rV   r“   rV   )rL   Úget_config_copyr(  r)  )rP  Úconfig_dicts     ri   Ú_get_dynamo_config_for_loggingrW  `  s-   € ô
ñ< !¤×!7Ò!7Ó!9Ó:€KÜ�:Š:�k¨TÑ2Ð2rh   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>  rL  rM  s       ri   rP  Ú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 pickledTrR  rT  )r!  ÚcompilerrL   rU  rú  ÚAttributeErrorr(  r)  )rP  Úcompiler_config_copyrV  s      ri   Ú_compiler_config_for_loggingr^  ƒ  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>.TypeSafeSerializeri¢  c                óD   >•  [         TU ]  U5      $ ! [         a     gf = f)NzValue is not JSON serializable)r°  r  rç  )r�  Úor¶  s     €ri   r  ÚI_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializer.default£  s)   ø€ ð8Ü‘w‘ qÓ)Ð)øÜó 8Ù7ð8ús   ƒ ’
žrN   )rc  r   r“   r   )r`   ra   rb   rc   r  rg   r¸  r¹  s   @ri   ÚTypeSafeSerializerra  ¢  s   ø† ÷	8õ 	8rh   re  Nz!Inductor Config cannot be pickledT)rs   ÚskipkeysrS  z(Inductor Config is not JSON serializable)r(  ÚJSONEncoderr“  r!  Ú	_inductorrL   rU  rú  r\  rî   ÚAssertionErrorrÈ   r&  r£   r�  r…  r)  rç  )re  Úkeys_to_scrubÚinductor_conf_strÚinductor_config_copyrÔ   r,  s         ri   Ú%_scrubbed_inductor_config_for_loggingrm  ›  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Ú_ManifoldCacherP  rØ  rN  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“  r…  )r  r  rq  s     €ri   r€  Ú,record_compilation_metrics.<locals>.<lambda>  sQ   ø€ ä#×*Ò*Ð+>Ó?×EÑEÔGô
âG‘�ð œ* Q¬×,Ñ,Œt�AŒw°!Ò3ÙGó
ùó 
s   ©/A)Úrecord_logging_overheadrP  )&r!  rh  ÚutilsÚ should_use_remote_fx_graph_cacheÚtorch._inductor.fb.remote_cachero  ÚModuleNotFoundErrorr…   rU  rV  rW  rb   r£   r®  rÔ  Úget_structured_logging_overheadrW  rL   Úsuppress_errorsÚinline_inbuilt_nn_modulesrm  r^  ÚversionÚcudar1   ÚtritonÚ__version__r;  r°  r/  r5  r·   rR  rQ  Útrace_structuredr8  rF  r(   )Ústart_time_nsÚend_time_nsrb  Úexc_typeÚ	exc_valuero  rì  rï  rP  Úcommon_metricsrr   rq  s              @ri   rÝ   rÝ   Ë  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c                ó²   • [        [        5      U :”  a)  [        R                  5         [        [        5      U :”  a  M)  [        R                  " [        U S9nUqg )Nr3  )rš  r5  Úpopleftr—   Údeque)Únew_sizeÚ	new_deques     ri   Úset_compilation_metrics_limitr�    sE   € ä
Ô"Ó
# hÓ
.Ü×$Ñ$Ô&ô Ô"Ó
# hÕ
.ä×!Ò!Ô"6¸xÑH€IØ$Ñrh   c                 ó,   • [         R                  5         g r   )r5  r€   rN   rh   ri   Úclear_compilation_metricsr‘  %  s   € ä×ÑÕ rh   c                 ó    • [        [        5      $ r   )r…  r5  rN   rh   ri   Úget_compilation_metricsr“  *  s   € ÜÔ$Ó%Ð%rh   c                  ó:  • \ 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 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.  aL  Logs chromium events to structured logs. tlparse will concatenate these into a perfetto UI link.

Also emits RecordFunction calls to torch.profiler when enabled.

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.
ri  )rÛ   Útlsri  r”  s    ri   Ú	get_stackÚChromiumEventLogger.get_stack7  s<   € ô
 �4—8‘8˜W×%Ñ%Ø—8‘8—>‘>Ð!àˆD�H‰HŒNØ—8‘8—>‘>Ð!rh   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)r˜  )r�  ri  s     ri   rù   Ú'ChromiumEventLogger.get_outermost_eventB  s!   € ð
 —‘Ó ˆÞ ˆu�Q‰xÐ* dÐ*rh   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Û   r—  rý   r”  s    ri   r÷   Ú,ChromiumEventLogger.get_pt2_compile_substackJ  sB   € ô
 �4—8‘8Ð3×4Ñ4Ø—8‘8×0Ñ0Ð0à,.ˆD�H‰HÔ)Ø—8‘8×0Ñ0Ð0rh   c                ó†   • [        U R                  S5      (       d  0 U R                  l        U R                  R                  $ )NÚ
event_data)rÛ   r—  rŸ  r”  s    ri   Úget_event_dataÚ"ChromiumEventLogger.get_event_dataU  s/   € Ü�t—x‘x ×.Ñ.Ø"$ˆD�H‰HÔØ�x‰x×"Ñ"Ð"rh   c                ó†   • [        U R                  S5      (       d  0 U R                  l        U R                  R                  $ )NÚrecord_functions)rÛ   r—  r£  r”  s    ri   Úget_record_functionsÚ(ChromiumEventLogger.get_record_functionsZ  s0   € Ü�t—x‘xÐ!3×4Ñ4Ø(*ˆD�H‰HÔ%Ø�x‰x×(Ñ(Ð(rh   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 )Nr4   rK   Ú-z*ChromiumEventLogger initialized with id %s)Ú	threadingÚlocalr—  r¯  rL   Úpt2_compile_id_prefixÚuuidÚuuid4Úid_r£   r�   rˆ  )r�  rL   s     ri   r�  ÚChromiumEventLogger.__init___  sd   € Ü—?’?Ó$ˆŒåð ×'×'Ø ×6Ñ6Ð7°q¼¿º»¸ÐGˆD�Häœ4Ÿ:š:›<Ó(ˆDŒHô 	�‰Ð=¸t¿x¹xÕHrh   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)r˜  rø   )r�  rð   r7  s      ri   r1  Ú&ChromiumEventLogger.try_add_event_datan  s'   € ð Ÿ^™^Ó-Ó-ØØ×Ò˜JÑ1¨&Ó1rh   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)r˜  rî   rs  r   rû   )r�  rð   r7  rŸ  s       ri   rø   Ú"ChromiumEventLogger.add_event_datav  su   € ð Ÿ^™^Ó-Ó-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð
 ×(Ñ(Ó*ˆ
ØÓ'Ø%'ˆJÑ"ØÑ×%Ñ% fÕ-rh   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)r˜  rî   rs  r   ©r�  rð   rÔ   rÕ   rŸ  s        ri   r  ÚChromiumEventLogger.incrementŠ  s�   € ð Ÿ^™^Ó-Ó-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð ×(Ñ(Ó*ˆ
ØÓ'Ø%'ˆJÑ"Ø Ñ,Ó,Ø*+ˆJÑ" 3Ñ'ØÑ˜sÓ# uÑ,Ô#rh   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)r˜  rî   rs  r   r“  r�  r·  s        ri   r  ÚChromiumEventLogger.add_to_setœ  s”   € ð Ÿ^™^Ó-Ó-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð
 ×(Ñ(Ó*ˆ
ØÓ'Ø%'ˆJÑ"Ø Ñ,Ó,Ü*-«%ˆJÑ" 3Ñ'ØÑ˜sÑ#×'Ñ'¨Õ.rh   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        [         R                  R                  R                  (       ak  [         R                  R                  R                  U5      nUR!                  5         X`R#                  5       U'   U(       a  [$        R&                  " U40 UD6  g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)
rP  ÚBN)r!  rU  rV  rW  r£   Ú_log_timed_eventr˜  r·   rø   r÷   r"  r#  r$  rB  rC  rD  rE  r¤  ré   r'  )r�  rð   rì   rñ   rô   rP  rG  s          ri   rS  Ú#ChromiumEventLogger.log_event_start²  sø   € ð   ×T¤5§=¡=×#?Ñ#?×#RÑ#RÓ#Tˆ
Ü!$ Z£ˆ�ÑØ×ÑØØØØô		
ð 	�‰Ó×Ñ 
Ô+à×Ò˜JÑ3¨(Ò3Þ Ø×)Ñ)Ó+×2Ñ2°:Ô>ô �>‰>×"Ñ"×7×7Ü—‘×#Ñ#×7Ñ7¸
ÓCˆBØ�L‰LŒNØ68×%Ñ%Ó'¨
Ñ3ö Ü"×;Ò;¸JÑSÈ(ÓSð ð 8rh   c                óh  • U R                  5       nU R                  5       nUR                  5         UR                  5         U R                  5       nUR                  5         U R	                  5       nU(       a;  UR                  5        H  nUR                  S S S 5        M     UR                  5         g g r   )r˜  r÷   r€   r   r¤  ry  rF  )r�  ri  ÚsubstackrŸ  r£  rG  s         ri   rŽ  ÚChromiumEventLogger.resetÚ  s‘   € ð —‘Ó ˆØ×0Ñ0Ó2ˆØ�‰ŒØ�‰ÔØ×(Ñ(Ó*ˆ
Ø×ÑÔà×4Ñ4Ó6ÐÞØ&×-Ñ-Ö/�Ø—‘˜D $¨Ö-ñ 0à×"Ñ"Õ$ð rh   c                óª  ^• 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         U R                  5       nTU;   a%  UR                  T5      nUR!                  SSS5        g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)
rP  Ú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)ri  rð   s    €ri   Ú	pop_stackÚ4ChromiumEventLogger.log_event_end.<locals>.pop_stack  s9   ø€ Ø  b¡	Ó)ô —‘ØTôð —	‘	”ð   b¡	×)rh   z7ChromiumEventLogger: Start event not in stack, ignoringN)ri  ú	list[str]r“   r”   )r!  rU  rV  rW  r£   r   rû   r½  r˜  r�   rã  r÷   r'   r­  rÆ  r¤  rF  )r�  rð   rì   rñ   r…  rô   rP  Úall_event_datarc  ÚeventrÇ  Úevent_stackrý   r£  rG  s    `             ri   r]  Ú!ChromiumEventLogger.log_event_endê  sI  ø€ ð&  ×T¤5§=¡=×#?Ñ#?×#RÑ#RÓ#Tˆ
Ü!$ Z£ˆ�Ñð ×,Ñ,Ó.ˆØ˜Ó'Ø+¨JÑ7ˆNØ˜zÑ*ð  ˆNà×Ñ˜hÔ'à×%Ñ%ØØØØó	
ˆ÷	ð —n‘nÓ&ˆð ˜[Ó(ô �K‰KÐQÔRØá�+Ôæ Ø#'×#@Ñ#@Ó#BÐ ÙÐ*Ô+Ü'Ø¨T¯X©X°}ôð !×$Ñ$Ô&ð 	�‰Ôð  ×4Ñ4Ó6ÐØÐ)Ó)Ø!×%Ñ% jÓ1ˆBØ�K‰K˜˜d DÕ)ð *rh   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.
rN  rp  r   )rr   Útsr6  ÚphÚcatÚtidÚpidÚchromium_eventc                 ó   >• T $ r   rN   ©rË  s   €ri   r€  Ú6ChromiumEventLogger._log_timed_event.<locals>.<lambda>P  ó   ø€ ™urh   F©Ú
payload_fnÚsuppress_contextÚexpect_trace_id)r!  rÔ  r„  r)   )r�  rð   rì   rÊ   rñ   rË  s        @ri   r½  Ú$ChromiumEventLogger._log_timed_event:  sY   ø€ ð Ø˜D‘.ØØà!ØØñ	
ˆô 	�‰×'Ñ'ØÜ$Ø"Ø!ð	 	(ñ 	
ô 	' uÔ-Øˆrh   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
NrP  rN  r6  rp  r   Úp)rr   rÏ  r6  rÐ  rÑ  rÒ  rÓ  ÚsrÔ  c                 ó   >• T $ r   rN   rÖ  s   €ri   r€  Ú7ChromiumEventLogger.log_instant_event.<locals>.<lambda>w  rØ  rh   FTrÙ  )
r£   r!  rU  rV  rW  rÔ  r„  r'   r÷   r­  )r�  rð   rì   rñ   rô   rP  rË  s         @ri   rï   Ú%ChromiumEventLogger.log_instant_eventW  s¥   ø€ ð ÑØˆHÜœŸ™×5Ñ5×HÑHÓJÓKˆ
Ø!+�ÑàØ˜D‘.ØØà!ØØØñ

ˆô 	�‰×'Ñ'ØÜ$Ø"Ø ð	 	(ñ 	
ö !ä'Ø�t×4Ñ4Ó6¸¿¹À'õð !rh   )r­  r—  )r“   rÉ  ©r“   r±  )r“   rV   )r“   z'dict[str, AbstractContextManager[None]]r•   )rð   r£   r7  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ñ   rV   rô   r<  rP  úOptional[CompileId]r“   r”   r   )rð   r£   rì   r’   rñ   rV   r…  r’   rô   r<  rP  ræ  r“   r”   )
rð   r£   rì   r’   rÊ   r£   rñ   úOptional[dict[str, Any]]r“   rV   rD  )
rð   r£   rì   r’   rñ   rç  rô   r<  r“   r”   )r`   ra   rb   rc   rä   r˜  rù   r÷   r   r¤  r�  r1  rø   r  r  rS  rŽ  r]  r½  rï   rg   rN   rh   ri   r•  r•  .  s¤  † ñô	"ô+ô	1ô#ô
)ô
Iô2ð.àð.ð ð.ð 
ô	.ô(-ð$/àð/ð ð/ð ð	/ð
 
ô/ð6 ',Ø*.ð&Tàð&Tð ð&Tð !ð	&Tð
  $ð&Tð (ð&Tð 
õ&TôP%ð. +/ðN*àðN*ð ðN*ð !ð	N*ð
 ðN*ð  $ðN*ð (ðN*ð 
õN*ðj .2ðàðð ðð ð	ð
 +ðð 
õðB .2à&+ð(àð(ð ð(ð +ð	(ð  $ð(ð 
÷(ð (rh   r•  zOptional[ChromiumEventLogger]ÚCHROMIUM_EVENT_LOGc                 ó0   • [         c
  [        5       q [         $ r   )rè  r•  rN   rh   ri   rí   rí   …  s   € äÑ!Ü0Ó2ÐÜÐrh   c                 ó   • [         S L$ r   )rè  rN   rh   ri   r0  r0  Œ  s   € ä TÐ)Ð)rh   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ì   rS  r]  rŽ  )rð   Úreset_event_log_on_exitrô   Úchromium_event_logÚchromium_start_times        ri   Úchromium_event_timedrï  ‘  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
)ÚCleanupHooki²  z,Remove a global variable when hook is calledrV   Úscoper£   rr   c                ór   • [         b  [         =R                  S-  sl        U R                  U R                  	 g r®   )ÚCleanupManagerr{   rò  rr   ©r�  r6  s     ri   Ú__call__ÚCleanupHook.__call__¹  s)   € äÑ%Ü× Ò  AÑ%Õ Ø�J‰J�t—y‘yÑ!rh   c                ó`   • X;  d   e[         =R                  S-  sl        X U'   [        X5      $ r®   )rô  r{   rñ  )rò  rr   r,  s      ri   r/  ÚCleanupHook.create¿  s1   € àÓ Ð Ð Ü×Ò Ñ!ÕØˆd‰Ü˜5Ó'Ð'rh   rN   N©r6  r   r“   r”   )rò  rV   rr   r£   r,  r   r“   rñ  )
r`   ra   rb   rc   rä   r™   rö  r@  r/  rg   rN   rh   ri   rñ  rñ  ²  s)   ‡ á6àÓØ
ƒIô"ð ó(ó ó(rh   rñ  c                  ó<   ^ • \ rS rSr% SrS\S'   SU 4S jjrSrU =r$ )rô  iÇ  r   zClassVar[CleanupManager]Úinstancec                ó^   >• U R                   U    H
  nU" 5         M     [        TU ]	  U5        g r   )ry  r°  r  )r�  r  r¸   r¶  s      €ri   r  ÚCleanupManager._remove_idË  s(   ø€ Ø—K‘K Ô$ˆDÙŽFñ %ä‰Ñ˜3Õrh   rN   r  )	r`   ra   rb   rc   r{   r™   r  rg   r¸  r¹  s   @ri   rô  rô  Ç  s   ø‡ Ø€EØ&Ó&÷ õ  rh   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)r  Úys     ri   Úclone_tensorr  Ô  sB   € à	�‰‹	× Ñ  §¡Ó1€AØ‡y‡y�Q—V‘VÑ'Ø—‘—‘“ˆŒØ€Hrh   c                ó¤   • [        X5      (       a$  [        X[        X5      R                  5       5        g[        X5      (       a  [	        X5        gg)z]Copy a single dynamo attribute from src to dst, or remove it from dst if src doesn't have it.N)rÛ   ÚsetattrÚgetattrÚcopyÚdelattr)ÚsrcÚdstÚattrs      ri   Ú_copy_dynamo_attrr  Ü  s=   € äˆs×ÑÜ�œ7 3Ó-×2Ñ2Ó4Õ5Ü	�×	Ñ	Ü�Õð 
rh   c                ó”   • [        XS5        [        XS5        [        XS5        [        XS5        [        XS5        [        XS5        g)zö
Copy dynamo-specific tensor attributes from src to dst.
These attributes are used for dynamic shape marking and must be preserved
when cloning or casting tensors. If src doesn't have an attribute but dst does,
the attribute is removed from dst.
Ú_dynamo_dynamic_indicesÚ_dynamo_unbacked_indicesÚ_dynamo_hint_overridesÚ_dynamo_shape_idsÚ_dynamo_strict_unbacked_indicesÚ_dynamo_weak_dynamic_indicesN)r  )r  r  s     ri   Úcopy_dynamo_tensor_attributesr  ä  sF   € ô �cÐ 9Ô:Ü�cÐ :Ô;Ü�cÐ 8Ô9Ü�cÐ 3Ô4Ü�cÐ AÔBÜ�cÐ >Õ?rh   ©Údtypec          	     ó2  ^• [        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        X5        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                ó  >• [         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        [        X5        U$ )Nr  )r!  r   r  r  r  r  Úclone_inputr  )r  r  r  s     €ri   Útorch_cloneÚ clone_input.<locals>.torch_cloneü  sX   ø€ Ü�KŠK˜‹NˆØ�9�9Ø×Ñ˜QŸ_™_Ô-Ø�9�9˜Ÿ™Ñ+Ü  §¡¨uÑ5ˆAŒFÜ% aÔ+Øˆrh   ÚxlaN)Úis_coalesced)Úlayoutc              3  ó6   #   • U  H  u  pUS -
  U-  v •  M     g7f)r4   NrN   )r¤   ÚshapeÚstrides      ri   r¦   Úclone_input.<locals>.<genexpr>%	  s   é € ð 
Ú6O¡] UˆU�Q‰Y˜&Ö Ò6Oùs   ‚é    )r  r-  r  ©r  útorch.Tensorr“   r(  )*rP   r!  Úno_gradr-  rÛ  r!  Ú
sparse_cooÚsparse_coo_tensorÚ_indicesrm   r#  r   r%   Ú
sparse_csrÚ
sparse_bsrÚcrow_indicesÚcol_indicesÚccol_indicesÚrow_indicesÚsparse_compressed_tensorry  r0   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  r  Úcompressed_indicesÚplain_indicesÚneeded_sizeÚresultÚcache_line_offsets    `      ri   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Ñ/Ü)¨!¯&©&¸Ñ>�”ô 	& aÔ0Ø÷s 
‰øôf ó 	"ñ ˜q“>Ñ!÷o 
‰ðf	"ú÷g 
�úsK   ±"NÁA3NÃC
NÆ.NÇC?NËBM'ÍNÍ'NÍ9NÎNÎNÎ
Nc                ó   • g r   rN   ©Úexample_inputss    ri   Úclone_inputsrE  A	  s   € ð rh   c                ó   • g r   rN   rC  s    ri   rE  rE  G	  s   € Ø:=rh   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'  rE  r!  r€  r  r…  Úrangerš  )rD  ÚresrÔ   rÕ   r6  s        ri   rE  rE  K	  s»   € äˆNÓœtÒ#Ü�>Ó"ˆØŸ)™)ž+‰JˆCÜ˜%¤×'Ñ'Ü'¨Ó.�“ä! %¬¯©×6Ñ6ÐC¼¸U»ÓCÐ6Ü& uÓ-�“ñ &ð ˆ
ä
ˆ~Ó
€CÜ”3�s“8Ž_ˆÜ�c‘fœeŸl™l×+Ó+Ü  ¡Ó(ˆC‹Fñ ð €Jrh   c           
     óÀ   •  U R                  5         g ! [         a@  nSSKJn  [        R
                  " SS[        U 5      5      nU" SSSU S3/ USS	9   S nAg S nAff = f)
Nr4   r™  z\(.*r¯  z(skip frame due to being in functorh modez(torch.compile cannot be run in context: z. Skipping frame.T)r�  rž  rŸ  r   r¡  Ú
skip_frame)r9  rî   rÝ  rš  Úrer³  rs  )r,  r¦  rš  Úfunctorch_subclass_names       ri   Úskip_frame_if_in_functorch_moderO  ^	  sb   € ð
Ø�‰�øÜó 
Ý&ô #%§&¢&¨°"´d¸3³iÓ"@ÐáØ>ØØBÐCZÐB[Ð[lÐmØØØ÷	
ûð
ús   ‚ “
A�6AÁ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[         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        [         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        [         R                  R                  5       (       a  [         R                  R                  W5        S S S 5        f ! , (       d  f       f = f= f7fr   )r!  rB  Ú_DisableFuncTorchry  Ú_python_dispatchÚ_disable_current_modesr   ÚrandomÚget_rng_staterO  r�  Úis_availableÚxpuÚset_rng_state)Údisable_functorchÚdisable_current_modesÚ	rng_stateÚcuda_rng_stateÚxpu_rng_states        ri   Úpreserve_rng_stater^  q	  sØ  é € äŸ™×2Ñ2ÐÜ!ŸK™K×8Ñ8×OÑOÐÙ	Õ	 Ñ"3Õ"5Ü—K’K¤§¡× :Ñ :Ó <Ó=ˆ	Ü'¨	Ô2Ü�:‰:×"Ñ"×$Ñ$Ü"Ÿ[š[¬¯©×)AÑ)AÓ)CÓDˆNÜ�9‰9×!Ñ!×#Ñ#Ü!ŸKšK¬¯	©	×(?Ñ(?Ó(AÓBˆM÷ #6×	 ð7Ûä�[‰[×)Ñ)×@Ñ@ÕBÜ�L‰L×&Ñ& yÔ1Ü�z‰z×&Ñ&×(Ñ(Ü—
‘
×(Ñ(¨Ô8Ü�y‰y×%Ñ%×'Ñ'Ü—	‘	×'Ñ'¨Ô6÷ CÐB÷ #6Õ"5ú×	 Õ	 ú÷ CÕBûŒU�[‰[×)Ñ)×@Ñ@ÕBÜ�L‰L×&Ñ& yÔ1Ü�z‰z×&Ñ&×(Ñ(Ü—
‘
×(Ñ(¨Ô8Ü�y‰y×%Ñ%×'Ñ'Ü—	‘	×'Ñ'¨Ô6÷ C×BÖBÿs�   ‚AL?ÁH3ÁC(H"Ä8H3Å L?Å	I Å(L?Å5B$IÈ	L?È"
H0	È,H3È3
IÈ=L?É
IÉL?É)L<É>B$L+Ì"	L<Ì+
L9Ì5L<Ì<L?c                ó
  • [        U [        R                  R                  R                  [        R                  R
                  R                  [        R                  R                  [        R                  R                  45      $ r   )	r&  r!  ÚjitÚ_traceÚTopLevelTracedModuleÚ_scriptÚRecursiveScriptModuleÚScriptFunctionÚScriptModule)Úmodel0s    ri   Úis_jit_modelrh  ‡	  sY   € ô Øä�I‰I×Ñ×1Ñ1Ü�I‰I×Ñ×3Ñ3Ü�I‰I×$Ñ$Ü�I‰I×"Ñ"ð		
óð rh   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)	rh  r!  r`  Útracerç  Úscriptr�   rè  Úerror)r3  rD  r™  s      ri   Útorchscriptrm  �	  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   )r\  Úgetfilerú  ÚOSError©r   s    ri   ro  ro  ¯	  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Û  rq  s    ri   Úis_namedtuplert  ¶	  s   € äœT #›YÓ'Ð'rh   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-namedtuplera   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     ri   r¦   Ú$is_namedtuple_cls.<locals>.<genexpr>Æ	  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   )rs  Ú__new__)r¤   rz  rs   s     €ri   r¦   r{  Ê	  s;   øé € ð !ò #˜ô	 *¨!Ó,÷ 5àŸK™K¨1¯9©9Ð4ô5ò #ùs   ƒ7:F)Ú
issubclassr'  r	  r&  ÚcallableÚ	__bases__Úanyrú  )rs   ÚmoduleÚbasess   `  ri   rs  rs  »	  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Ústeprw  c                  ó    • \ rS rSr% S\S'   Srg)Ú!namedtuple_fields.<locals>.Markeriä	  r’   ÚindexrN   N©r`   ra   rb   rc   r™   rg   rN   rh   ri   ÚMarkerrŠ  ä	  s   ‡ àŽ
rh   r�  rv  r   rÙ  )rÔ   )Úslicer~  r'  rÛ   rw  ru  Ú	dataclassra   r¢   rI  Ún_fieldsÚdirr&  r	  r‹  rš  r$  r…   )rs   r�  r   Úfieldsrr   s        ri   Únamedtuple_fieldsr“  Ù	  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Ð0rh   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   )r!  r)  rT  rX  r�  rV  Ú_versionr<  )Úparamr€  Úoriginal_valuer\  r[  Úsaved_states      €€€ri   ÚrestoreÚ"checkpoint_params.<locals>.restoreþ	  st   ø€ Ü�]Š]�_Ü�L‰L×&Ñ& yÔ1Ü�z‰z×&Ñ&×(Ñ(Ü—
‘
×(Ñ(¨Ô8Û2=Ñ.� Ø—>‘> WÕ,Ø—K‘K Ö/ñ 3>÷	 �_Ž_ús   —A8B1ÂB1Â1
B?r•   )r!  r)  r   rT  rU  r�  rV  rª   r«   Ú
parametersÚbuffersr–  )Úgmr—  rš  r\  r[  r™  s      @@@ri   Úcheckpoint_paramsrŸ  ó	  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  )r!  r�  rV  Úsynchronizerÿ  ÚgcÚcollectÚmanual_seedrë   Úperf_counterrI  )r3  rD  Útimesr¡  Út0rÙ  r@  Út1s           ri   Útimedr©  

  sŽ   € ô ‡z�z×Ñ× Ñ Ü—j‘j×,Ñ,‰äˆá„MÜ‡J‚J„LÜ	×Ò�dÔÜ	×	Ò	Ó	€BÜ�5Ž\ˆÙ˜Ð'ˆÙŽñ ô 
×	Ò	Ó	€BØ�2‘7ˆ?Ðrh   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¤   r  s     ri   r¦   Ú check_is_cuda.<locals>.<genexpr>
  s   é € ÐWÒ"V˜Q�yŽyÒ"Vùó   ‚T)Úallrª   r«   rœ  )rž  rD  s     ri   Úcheck_is_cudar±  
  s&   € ÜÑW¤)§/¢/°.Ç-Á-ÐPTÓBUÔ"VÓWÓWÐWrh   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 )
Nr4   r  rÅ  zlambda r   z: (Ú)Úrot_Ú_helper)rI  ÚreversedÚevalr¡   r`   )ró  r6  ÚvarsÚrotatedrw  s        ri   Ú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'  Ú	frozensetr°  r¢   Úis_safe_constantr&  ÚenumÚEnumrÛ  r!  ÚSizer?  Ú_GenericAliasr=  ÚGenericAliasr»  rŽ  r«  s    ri   r¾  r¾  N
  s{   € Üˆa”%œÐ#×$Ñ$Ü”3Ô'¨Ó+Ó,Ð,ÜØ	ä�I‰IÜÜ�J‰JÜ× Ñ Ü×Ñð	
ó	÷ ô 
Ø	Ü¤ Ñ'ó
ðrh   c                 ó
   • SS1$ ©Nr   r4   rN   rN   rh   ri   Úcommon_constantsrÆ  `
  s   € ð
 	
Ø	ð	ð rh   c                óò   • [        U [        R                  [        R                  45      =(       aG    [        U R                  [        R
                  R                  R                  R                  5      (       + $ r   )	r&  r!  ÚSymBoolÚSymIntr4  ÚnestedrÕ  Ú
nested_intÚNestedIntNoderA  s    ri   Úis_torch_symrÍ  j
  sP   € Ü�eœeŸm™m¬U¯\©\Ð:Ó;÷ ÄJØ�
‰
”E—L‘L×*Ñ*×5Ñ5×CÑCóEô Að rh   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       ;   $ )Nr4   )Ú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_modulerL   Úallow_unspec_int_on_nn_moduleÚ"is_unspecialized_builtin_nn_moduleÚis_unspecialized_nn_moduler&   rÆ  )rÕ   rÐ  rÏ  s      ri   Úis_int_specialization_caserØ  p
  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÷ ,ØÔ)Ó+Ñ+ð/rh   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 $ )Nr4   )ÚConstantVariableÚLazyVariableTrackerÚSymNodeVariable)Ú	variablesrÚ  rÛ  rÜ  r&  Úis_realizedÚoriginal_sourcer˜  rÍ  rL   Úspecialize_intrÛ  r’   rØ  r/  Úevaluate_expr)r–  rÚ  rÛ  rÜ  rÐ  rÕ   Úis_symnode_vts          ri   Úspecialize_symnoderã  �
  s²   € ßQÑQô �#×+Ñ+°C·O±O×4EÑ4Eð ×$Ñ$Ó&ˆØ×"Ñ"Ó$ˆä$ UÓ+÷ 
Ü×%Ñ%Ô%÷ >Ü�U“œsÐ"÷>ä.¨uÓ=Ô=ð 	ö ØˆJä�#×'Ñ'Ø×&Ñ& s×'8Ñ'8Ó':Ó;Ð;Ø€Jrh   c                ó’   • SSK Jn  [        U 5      n [        X5      (       a%  U R	                  5       (       a  U R                  5       $ U $ )Nr4   rD   )rÝ  rE   rã  r&  Úis_python_constantÚas_python_constant)r–  rE   s     ri   Úguard_if_dynrç  ¨
  s<   € Ý*ä
˜SÓ
!€Cä�#×'Ñ'¨C×,BÑ,B×,DÑ,DØ×%Ñ%Ó'Ð'à€Jrh   c                ój   • [        S [        R                  " XR                  5       5       5       5      $ )Nc              3  ó@   #   • U  H  oR                  5       v •  M     g 7fr   )rå  r­  s     ri   r¦   Ú&check_constant_args.<locals>.<genexpr>´
  s   é € ÐVÒ/U¨!×#Ñ#×%Ð%Ò/Uùr˜  )r°  rª   r«   ry  rþ  s     ri   Úcheck_constant_argsrë  ³
  s"   € ÜÑV¬y¯ª¸tÇ]Á]Ã_Ô/UÓVÓVÐVrh   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:„  $ )Nr4   rD   ©ÚUnspecializedPythonVariabler   F)	rÝ  rE   Úvariables.tensorrî  rª   r«   ry  r&  rå  )r6  r7  rE   rî  Úunspec_countr  s         ri   Úcheck_unspec_python_argsrñ  ·
  sd   € Ý*Ý=à€LÜ�_Š_˜T§=¡=£?Ö3ˆÜ�a×5Ñ5Ø˜AÑŠLÜ˜Q×0Ñ0°Q×5IÑ5I×5KÓ5KÙñ	 4ð
 ˜!ÑÐrh   c                ó¸   • SSK Jn  [        R                  " XR	                  5       5       H,  nUR                  5       (       a  M  [        X25      (       a  M,    g   g)Nr4   rí  FT)rï  rî  rª   r«   ry  rå  r&  )r6  r7  rî  r  s       ri   Úcheck_unspec_or_constant_argsró  Ä
  sA   € õ
 >ä�_Š_˜T§=¡=£?Ö3ˆØ×$Ñ$×&Ó&¬*°Q×*TÓ*TÙñ 4ð rh   c                ó~   ^• SSK Jm  [        U4S j[        R                  " XR                  5       5       5       5      $ )Nr4   )ÚNumpyNdarrayVariablec              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7fr   )r&  )r¤   r  rõ  s     €ri   r¦   Ú+check_numpy_ndarray_args.<locals>.<genexpr>Ô
  s#   øé € ð â7ˆAô 	�1Ð*×+Ð+Ú7ùs   ƒ)rï  rõ  r�  rª   r«   ry  )r6  r7  rõ  s     @ri   Úcheck_numpy_ndarray_argsrø  Ñ
  s/   ø€ Ý6äô ä—’ §}¡}£Ô7óó ð rh   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&  rH  r†  )rN  s    ri   Úbuiltin_dict_keysr  ÿ
  s#   € ä�aœ×ÑÐÐÜ�9‰9�Q‹<Ðrh   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&  rH  r"  r   rÈ   r†  r  )r   r  s     ri   Ú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_newr!  r�  ÚModuler�  )rs   r   s     ri   Únn_module_newr    s&   € Ü
�S‹/€Cä	‡H�H‡O�O×Ñ˜SÔ!Ø€Jrh   c                óN   • [         R                  " [        R                  U S5      $ r®   )rY  ÚreduceÚoperatorÚmul)Úits    ri   Úproductr    s   € Ü×ÒœHŸL™L¨"¨aÓ0Ð0rh   c                ó:   • U R                  5       u  nu  p4X4U-      $ r   )Ú
__reduce__)r  r‹  rÙ  r   r†  s        ri   Útuple_iterator_getitemr    s!   € Ø—}‘}“Ñ€A�vˆØ�u‰}ÑÐrh   c                óh   • [         R                  R                  [        R                  5      " U 5      $ r   )r!  Ú_dynamoÚdisableru  r’  r�   s    ri   Údataclass_fieldsr  "  s"   € Ü�=‰=× Ñ ¤×!3Ñ!3Ô4°SÓ9Ð9rh   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  r†  rˆ  r‡  )Ú
range_iterrÙ  Ú	range_objÚ	maybe_idxr†  r‡  rˆ  s          ri   Únormalize_range_iterr  )  sQ   € Ø!+×!6Ñ!6Ó!8Ñ€A�|ˆ	ð �O‰O˜yŸ~¨A°·±Ñ?Ñ?€EØ�>‰>€DØ�>‰>€DØ˜ÐÐrh   c                ó$   • U R                  U5      $ r   )Úas_subclass)rz  rs   s     ri   Úto_subclassr  7  s   € Ø�=‰=˜ÓÐrh   c                ó¨   • [         n[        U [        5      (       a  [        n[        [        R
                  " UR                  U 5      XS-   5      5      $ r®   )rH  r&  r   Únextrª   Úislicer†  )rN  ró  Ú
dict_classs      ri   Údict_keys_getitemr"  >  s@   € ô €JÜ�!”[×!Ñ!Ü ˆ
ä”	× Ò  §¡°Ó!3°Q¸A¹Ó>Ó?Ð?rh   c                ó   • [        U 5      U   $ r   ©r…  )rà  ró  s     ri   Úset_getitemr%  H  s   € ä�‹7�1‰:Ðrh   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`   rr   )rÕ   r©  rr   r,  rò  Ú
local_names         ri   Ú	enum_reprr*  M  sA   € ð �?‰?×#Ñ#€DØ
�*‰*€CÞ‰C˜c€EØ�7˜"˜T˜F # c UÐ+€JØÐrh   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)
r.  r$   r…   Ú	fake_modeÚ	shape_envr!  r   ÚexperimentalÚsymbolic_shapesÚcompute_unbacked_bindings)r4  r,  r.  r/  Úsymbol_to_paths        ri   Úset_example_valuer4  W  s~   € ð "/‡I�IˆoÑÜ×"Ò"Ó$×.Ñ.€IØÑ Ð Ð Ø×#Ñ#€Iô �8‰8× Ñ ×0Ñ0×JÑJØó
ð	
ˆõ 	
ð
 *8�	‰	Ð%Ò&ð	
rh   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,  r4   ©Úgraph_break_hintsr™  z:Cannot check Tensor object identity without its fake valuez/TensorVariable is missing a fake example_value.©r�  rž  rŸ  r   )r”  r4  r.  r…   rP   r¯  r7  rÝ  rš  r£   Ú
DYNAMO_BUG)ÚvtÚfake_tensorr7  rš  s       ri   Ú_get_fake_tensorr<  k  sb   € Ø—+‘+“-×$Ñ$×)Ñ)×-Ñ-¨oÓ>€KÜ�;×ÑÝ'Ý&áØPÜ˜Ó$ØIØ1Ð%×0Ñ0Ð1ò		
ð Ðrh   c                óf   • U R                  U5      u  p#n[        SX2-
  XDS:”  a  SOS-
  -   U-  5      $ )Nr   r4   rÅ  )ÚindicesÚmax)rà  Úseq_lenr†  r‡  rˆ  s        ri   Úslice_lengthrA  z  s9   € ØŸ	™	 'Ó*Ñ€E�Üˆq�4‘< 4°q³©1¸bÑ#AÑBÀtÑKÓLÐLrh   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: r‹  )Útorch._dynamo.excrC  Útorch._dynamo.variablesrÚ  rú  )Útxrr   ÚexpectÚactualrC  rÚ  Úmsg_strs          ri   Úraise_args_mismatchrK    sM   € õ ;Ý8ð >¸d¸Vð DØ�Hð Ø�Hð	ð ñ ÜØ
Ù˜wÓ'Ð(órh   c                ó‚  ^• SSK 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  SSKJn	  U	R	                  U[        R                  5      R                  X(T/0 5      n
Uc  U
nMƒ  U	R	                  U[        R                  5      R                  X*U/0 5      nM·     Uc  UR	                  S5      nU$ )Nr4   rD  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¤   r  Úsearchs     €ri   r¦   Ú iter_contains.<locals>.<genexpr>ž  sI   øé € ð 
ò �ð × Ñ Ó"÷ FØ×$Ñ$Ó&¨&×*CÑ*CÓ*EÑEôFâùs   ƒAAFTr   )ÚSourcelessBuilder)rÝ  rÚ  rå  r�  r/  Ú	is_tensorr<  Útorch._dynamo.variables.builderrP  r  ÚeqÚcall_functionÚor_)rÈ   rN  rG  Úcheck_tensor_identityrÚ  Úfound_constÚmust_check_tensor_idÚfoundr  rP  Úchecks    `         ri   Úiter_containsr[  •  s2  ø€ õ ,à× Ñ ×"Ñ"Üô 
ñ ó
ó 
ˆð
  ×&Ñ& {Ó3Ð3à ÐÞ ×!1Ñ!1×!3Ñ!3Ø#Ðä! &Ó)ˆà'+€EÛˆÞØ�{‰{�}‰}ØÔ-¨aÓ0Ò0Ø+×2Ñ2°4Ó8Ò8ñ 1ñ õ Jà%×,Ñ,¨R´·±Ó=×KÑKØ˜�K óˆEð ‰}Ø’à)×0Ñ0°´X·\±\ÓB×PÑPØ ˜¨ó’ñ ð" �}Ø ×'Ñ'¨Ó.ˆØ€Lrh   c                ót   • [        U [        R                  [        R                  R                  [
        45      $ )z4Returns whether it indexes dictionaries using its id)r&  r!  r€  r�  r  r   )r  s    ri   Ú	key_is_idr]  Â  s%   € ô �aœ%Ÿ,™,¬¯©¯©Ô9JÐKÓLÐLrh   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Õ   r  s     ri   Ú	key_to_idr_  É  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 < $ )Nr4   )Ú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     €ri   r¦   Úconst_repr.<locals>.<genexpr>Ñ  s   øé € ÐDÂ!¸Qœj¨°%Ö8Â!ùó   ƒÚ[Ú]Ú(z,)r³  rd  Ú'r¯  c                óz   • U R                   nUR                  nUS:X  a  UR                  $ US-   UR                  -   $ )NÚbuiltinsÚ.)r¶  ra   rb   )rc  Úklassr‚  s      ri   ÚfullnameÚconst_repr.<locals>.fullnameâ  s?   € Ø—K‘KˆEØ×%Ñ%ˆFØ˜Ó#Ø×)Ñ)Ð)Ø˜C‘< %×"4Ñ"4Ñ4Ð4rh   )rc  r   r“   r£   )Útrace_rulesra  r&  r…  r'  r¡   rš  r¿  rÀ  r*  Úreplacer`   rÛ  )r  r©  ra  Ú
elems_reprrr  s    `   ri   rf  rf  Í  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ñ ˜‹{Ðà‘ˆrh   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rc  re  rg  s     €ri   r¦   Ú!dict_keys_repr.<locals>.<genexpr>ï  s   øé € ÐGºJ°qœ
 1¨EÖ2ºJùri  rj  rk  )r¡   )Ú
const_keysr©  Úkeys_strs    ` ri   Údict_keys_reprr|  î  s&   ø€ Ø�x‰xÔG¹JÓGÓG€HØ�‰>˜CÑÐrh   Ú
__dict_key)ÚUnsupportedFakeTensorExceptionc                óP   • U S[        U5       SU R                  R                   3$ )NrÙ  Ú_c)r  ÚoutputrP  )rG  Úrootr   s      ri   Úget_safe_global_namerƒ  ù  s*   € ð ˆV�1”R˜“W�I˜R §	¡	× 4Ñ 4Ð5Ð6Ð6rh   c                ó$   • U H
  nX;   d  M
    g   grø  rN   )r  Ú
containersÚ	containers      ri   Úis_inr‡    s   € Ûˆ	ØÕÙñ  ð rh   )Ú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)r‡  rª   r{   ri  )Úprefixrˆ  r…  r6  Ú	candidates        ri   Úget_unique_name_wrtr�  
  s^   € ö ¤5¨Ð#=°*×#=Ð#=Øˆä�_Š_ÖˆØ�h˜a ˜s�Oˆ	Ü�YÐ, ×,Ò,ØÒñ ô
 ˜Ó
'Ð'rh   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)Nr4   r™  zEncountered exception (z!) during fake tensor propagation.z!Fake tensor propagation exceptionrœ  )r~  rÝ  rš  Úreasonr�   rã  r£   )rw  r¦  rš  rµ  s       ri   Úwrap_fake_exceptionr�    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
  Údeepcopyrq  s   €ri   r€  Ú)deepcopy_to_fake_tensor.<locals>.<lambda>1  s   ø€ ¬4¯=ª=¸Ô+=rh   )r!  r„  r;  ÚFakeCopyModer�  )r   r.  s   ` ri   Ú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
)r!  ÚsqrtÚmeanÚsquare)r  rJ  s     ri   Úrmser›  4  s'   € ô �:Š:”e—j’j¤§¢¨c©iÓ!8Ó9Ó:Ð:rh   c                ó   • [        U USUS9$ )Ng        )ÚtolÚ	equal_nan©Úsame)r  rJ  rž  s      ri   Úbitwise_samer¡  ;  s   € ÜØØØØñ	ð rh   g-Cëâ6?Tç®Gáz®ï?c                ój  ^ ^^^^^^^^^	^
^^^^• 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UU
4S j[        T TT5       5       5      $ [        T 5      R                  S:X  a4  [        T R                  TR                  TR                  TT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       H2  n[        T U   TU   TU   TT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(       GaÒ  T R4                  TR4                  :w  a  T	" ST R4                  TR4                  5        gT R4                  [
        R6                  :X  Gaz  T(       a  gT(       Ga  T T-  R9                  5       R+                  5       nT T-  R9                  5       R+                  5       nUS:X  a  [7        US:H  5      $ UU-  R;                  5       nUT:  a›  T	" SUT[=        UR;                  5       5      [=        UR;                  5       5      [=        T R9                  5       R;                  5       5      [=        TR9                  5       R;                  5       5      [        T R>                  5      5        gg[
        R@                  " T RC                  [
        RD                  S9TRC                  [
        RD                  S9TTTS9nU(       d  T	" S5        U$ T(       aö  T RG                  5       RC                  [
        RH                  5      m TRG                  5       RC                  [
        RH                  5      m[
        R@                  " T TTTSS9(       a  g[
        R                  RJ                  RM                  T TSSS9nUS:  a@  [N        RQ                  SURS                  5       RU                  5       R;                  5       5        [7        US:¬  5      $ T(       d  T RC                  TR4                  5      m [
        R@                  " T TTTTS9(       a  gTR4                  [
        RV                  :X  GaÏ  SnTRY                  5       R[                  5       (       d{  TRY                  5       R[                  5       (       dX  T RY                  5       R[                  5       (       a5  [
        R@                  " TRC                  TR4                  S9TUUTS9(       a  g[]        TT 5      R;                  5       n[^        RX                  " U5      (       a  [N        RQ                  S5        []        TT5      R;                  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  [^        RX                  " U5      (       aP  [^        RX                  " U5      (       a5  [
        R`                  Rb                  Rd                  Rf                  (       d  SnU(       d'  T	" SUUTRi                  5       TR4                  UTT
5        U$ T(       a  gT	" S T5        g[        T [j        [<        [        S5      [6        [
        Rl                  45      (       a*  T(       a  gT T:H  nU(       d  T	" S![        T 5      T T5        U$ [o        T 5      (       d  [q        T 5      (       al  T(       a0  [o        T5      (       d   [q        T5      (       d  T R;                  5       m [        T 5      [        T5      L =(       a    T T:H  nU(       d
  T	" S"T T5        U$ [s        T 5      (       aX  [        T 5      [        T5      L =(       a;    [        [
        Rt                  " T 5      [
        Rt                  " 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 Rv                   5       5      $ [y        S&[        T 5      R                   35      e))z-Check correctness to see if ref and res matchNztype mismatch rÎ   zLength mismatchFc              3  óV   >#   • U  H  u  pn[        UUUTT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_multiplierÚuse_iou_for_boolÚiou_thresholdNrŸ  )r¤   ÚaiÚbiÚ	fp64_refiÚcos_similarityrž  Úexact_dtyper¨  Úignore_non_fprª  r¦  Úrelax_numpy_equalityr�  r©  r§  s       €€€€€€€€€€€ri   r¦   Úsame.<locals>.<genexpr>`  sP   øé € ð ,
ò" &=Ñ!�˜	ô! ØØØØØØØØ$ØØ#Ø9aØ%9Ø!1Ø+öò  &=ùs   ƒ&)ÚQuestionAnsweringModelOutputr¥  zkeys mismatch z == )r®  r�  rž  r¯  r±  r°  r¦  r§  r¨  r©  rª  zAccuracy failed for key name %sTzelements mismatch c                óp   • [        U [        R                  5      (       a  U $ [        R                  " U 5      $ r   )r&  r!  r€  Útensor©rz  s    ri   Ú	to_tensorÚsame.<locals>.to_tensorª  s%   € Ü" 1¤e§l¡l×3Ñ3�1ÐH¼¿ºÀa»ÐHrh   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr   rN   )r¤   r,  r·  s     €ri   r¦   r²  ­  s   øé € ÐMÒ8L°™i¨Ÿn˜nÒ8Lùr#  zdtype mismatch %s, %sr   z^IoU accuracy failed: %.4f < %.2f (intersection=%d, union=%d, ref_sum=%d, res_sum=%d, shape=%s)r  )ÚatolÚrtolrž  z+Accuracy failed: uint8 tensor did not matchg�íµ ÷Æ°>)ÚdimÚepsr¢  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       @rN  é   rÅ  éþÿÿÿr4   g{®Gáz”?)r  r!  rP  Úbfloat16ÚnumelÚndimr#  )Ú
multiplierr¨  Úfp64_refr  rJ  r�  r§  s    €€€€€€ri   Úget_multiplierÚsame.<locals>.get_multiplier  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à (›?ð
 &)˜
Ø%Ð%rh   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©r®  r�  rž  r¯  r±  r°  r¦  r§  )Ú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)r   r	  )r¤   rÔ   r®  rž  r¯  rÇ  r°  r¦  r  r±  rJ  r�  r§  s     €€€€€€€€€€€ri   r¦   r²    sW   øé € ð 
ò $�ô Ü˜˜SÓ!Ü˜˜SÓ!Ü˜ #Ó&Ø-ØØ#Ø'Ø%9Ø+Ø#Ø9aöò $ùs   ƒ>Azunsupported type: )rz  r   r“   r(  )r“   Úfloat)=r&  r…  r'  r—   rŒ  r!  r�  ÚParameterListrÁ  rÛ  rš  r°  r4  r`   r   ÚlossrH  r“  r†  r$  r€  r×  r„  rO   Ú	is_sparseÚto_denser  r<  r‡   r  r’   r#  ÚallcloseÚtorJ  ÚflattenrQ  Ú
functionalÚcosine_similarityr�   rã  ÚdetachÚcpurR  Úisnanr�  r›  Úmathrh  rL   ÚcppÚinject_relu_bug_TESTING_ONLYr5  r£   r-  rN  rS  r~  Ú	as_tensorÚ__dict__rî   )r  rJ  rÇ  r®  r�  rž  r¯  r±  r°  r¦  r§  r¨  r©  rª  r  ÚintersectionÚunionÚiouÚrÚscoreÚ	loose_tolÚ	ref_errorÚ	res_errorrÈ  rÆ  Úpasses_testr·  s   ``````````````            @ri   r   r   D  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Ø)=Ø%5Ø"/÷ñ ñ" Ð;¸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Ô&Þ Øß#ð %(¨#¡I§?¡?Ó#4×#:Ñ#:Ó#<�LØ  3™YŸO™OÓ-×3Ñ3Ó5�EØ “zä# L°AÑ$5Ó6Ð6Ø'¨%Ñ/×5Ñ5Ó7�CØ˜]Ó*Ù!Ø|ØØ)Ü × 1Ñ 1Ó 3Ó4Ü §
¡
£Ó-Ü §¡£	§¡Ó 0Ó1Ü §¡£	§¡Ó 0Ó1Ü  §¡›Oô	ð  %Øä—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ÐErh   c                ó~   • U R                   R                  S5      S   nSU R                   SU SU R                   S3$ )NÚ/rÅ  rm  z' (rÏ   r³  )r³  ÚsplitrÚ  rÜ  )rÞ  Úshort_filenames     ri   Úformat_func_inforö  “  sD   € Ø×%Ñ%×+Ñ+¨CÓ0°Ñ4€NØˆt�|‰|ˆn˜C Ð/¨q°×1DÑ1DÐ0EÀQÐGÐGrh   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   )rL   Úrecompile_limitr;  r�  Úaccumulated_recompile_limit)ÚpriorÚprior_acc_limits     ri   Ú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     ri   Ú_get_debug_dirr  ·  sd   € ð 	Ü
×
Ñ
×
Ñ
Ó
!×
*Ñ
*Ð+AÓ
Bñ	Cð ñ	ô Œb�iŠi‹kÓ
ñ		ð ô �7‰7�<‰<˜Ó+Ð+rh   c                 ó8   • [         R                  n [        U 5      $ r   )rL   r?  r  )Ú
debug_roots    ri   rÆ  rÆ  Ã  s   € Ü×&Ñ&€JÜ˜*Ó%Ð%rh   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   r™  r4   r6  z Missing FakeTensor example valuez,`FakeTensor` example value was required for z but not available.r8  )r.  rP   rE  rš  r¯  r7  r£   r9  )r4  Úrequiredrš  r7  s       ri   Úextract_fake_example_valuer  È  sl   € Ø˜$Ÿ)™)Ó#¬°·	±	¸/Ñ0J×(KÑ(KØ�y‰y˜Ñ)Ð)Þ	Ý3å'áØ6Ü˜“IØFÀtÀfÐL_Ð`Ø1Ð%×0Ñ0Ð1ó		
ð rh   c                ó:   • [        U 5      UR                  L d   eU $ r   )rQ   r.  )r¦  rG  s     ri   Úensure_graph_faker  Ú  s   € Ü˜qÓ! R§\¡\Ò1Ð1Ð1Ø€Hrh   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$ )NrT  r,  Úget_attr)rð  r.  Úget_fake_valueÚtargetr�  Ú
nn_modulesr&  r!  r   ÚGraphModuler€  r  )ró  rž  rÓ   Úallow_non_graph_fakerG  s      €€ri   Ú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¨"Ó-Ð-Øˆ
rh   )ró  útorch.fx.Noder“   r   )r!  r   r4  Úmap_arg)rG  rï  r  r  s   ` ` ri   Úget_fake_values_from_nodesr  ß  s(   ù€ ÷ð ô" �8‰8�=‰=× Ñ  Ó.Ð.rh   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SUU4S j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à  r4   c              3  óP   >#   • U  H  u  pUR                   T:X  d  M  Uv •  M     g 7fr   )rr   )r¤   r  r  Úsym_names      €ri   r¦   ÚGget_concrete_sizes_from_symints.<locals>.replace_sym.<locals>.<genexpr>  s"   øé € ÐKÒ4‘4�1¸¿¹À(Ñ8J�Q‰QÒ4ùs   ƒ&�	&rl  z	: hint = r³  r   )Úgroupr  rÈ   r&  r’   r£   )Úmatchr,  r   r  Úbacked_var_to_vals     @€€ri   Úreplace_symÚ4get_concrete_sizes_from_symints.<locals>.replace_sym  sq   ù€ Ø�u—{‘{ 1“~Ð&Ð'ˆÜÜKÐ,×2Ñ2Ô4ÓKØó
ˆô �cœC ˜>×*Ñ*Ø�x�j 	¬#¨c«(¨°1Ð5Ð5Ø�{‰{˜1‹~Ðrh   )r#  r   r“   r£   )rM  Úsympy.core.numbersr  r/  r$  r³  )rµ  r.  rM  Úpatternr/  r%  r  r$  s         @@ri   Úget_concrete_sizes_from_symintsr)  ö  se   ù€ ó å*àÑØˆ
à€GØ×ÑÑ*Ð*Ð*Ø×#Ñ#€IØ!×3Ñ3Ð÷ð ð �&Š&� sÓ
+€CØ€Jrh   c           	     óÆ   • SSK JnJn   U " 5         [        S5      e! U a>  nU" [        U5      [	        USS 5      5      nUR                  UR                  5      S eS nAff = f)Nr4   )ÚTorchRuntimeErrorÚUnsupportedÚ
real_stackzshould be unreachable)rÝ  r+  r,  r£   r	  Úwith_tracebackÚ__traceback__ri  )Úgb_fnr+  r,  r¦  rÝ  s        ri   Ú(_wrap_graph_break_with_torch_runtime_errr1    s_   € ß3ð<ÙŒô Ð0Ó
1Ð1øð ó <Ù¤ A£¬°°<ÀÓ(FÓGˆØ× Ñ  §¡Ó1°tÐ;ûð<ús   Š œA ¢9AÁA c                óL  • [         R                  " 5       n [        XU5      UR                  R                  =R
                  [         R                  " 5       U-
  -  sl        $ ! UR                  R                  =R
                  [         R                  " 5       U-
  -  sl        f = fr   )rë   rì   Ú_get_fake_value_implr�  Úbytecode_tracing_timingsÚget_fake_value_ns)r4  rG  r  Ú_t0s       ri   r  r  $  so   € ô
 �,Š,‹.€CðUÜ# DÐ.BÓCà
�	‰	×*Ñ*×<Ò<ÄÇÂÃÐQTÑ@TÑTÖ<øˆ�	‰	×*Ñ*×<Ò<ÄÇÂÃÐQTÑ@TÑTÖ<ús   —A" Á"AB#c           	     ó  ^ ^^^^^^^^• SSK Jn  SSKJm  SSKJm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  [1        T5      S:”  aK  [3        TS   [        R4                  R6                  5      (       a  [9        TS   U5      4[;        TSS 5      -   mUS	:X  ab  TR<                  R>                  T R@                     m[C        T5      (       a#  [E        TS
5      (       a  TRG                  TT5        [9        TU5      mT RH                  S;   d  [K        S T 5       5      (       a  [;        S T 5       5      m U   [M        5          [O        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 [P         Ga’  nUmURR                  b  URR                  m[3        T[        RT                  RV                  RX                  5      (       až  TRZ                  [        R\                  R^                  R`                  Rb                  [        R\                  R^                  Rd                  Rb                  4;   a  S/nOS/nT" S[g        TRZ                  5      STRZ                   S3UTS9  GOn[3        T[        RT                  RV                  Rh                  5      (       a…  [        R                   R"                  Rj                  (       d.  T" S[g        TRZ                  5      STRZ                   S3S/TS9  GOäT" S[g        TRZ                  5      STRZ                   S3S/TS9  GO¶[3        T[        RT                  RV                  Rl                  5      (       a¯  TRZ                  nSn[3        U[        Rn                  Rp                  5      (       a\  [        Rr                  Ru                  URv                  RH                  URv                  Rx                  5      nUb  Uu  nnSU SU SU S3nT" S S!TRZ                   3SU S"3/TS9  OÔ[3        T[        Rz                  R|                  R~                  R€                  5      (       a  U" UR‚                  [g        T5      S#S$9e[3        TU5      (       a!  U" UR‚                  UR                  S   5      Ue[3        T[„        5      (       a5  S%[g        T5      ;   a&  T" S&S'T R@                   S(T 3S/ TR†                  QTS9  [‰        [g        U5      U5      m[‹        UUUU4S) j5        [�        S*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   )ÚValueRangeErrorr4   r6  )rš  r,  Ú	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     ri   r¦   Ú'_get_fake_value_impl.<locals>.<genexpr>p  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&  r!  ÚSymFloatr4  Úhintr×  r•  s     ri   r¦   rD  t  sG   é € ð 
ò �ô ˜c¤5§>¡>×2Ñ2°s·x±x·}±}Ñ7Pô �c”
àôò ùs   ‚AAc                 ó6   >• [        TR                  TT TT5      $ r   )Úrun_noder�  )r6  r7  Únnmoduler4  rG  s   €€€€€ri   r€  Ú&_get_fake_value_impl.<locals>.<lambda>€  s   ø€ œ §¡¨D°$¸ÀÔIrh   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: c                 ó0   >• T" SST/ TR                   QT S9$ )Nz)RuntimeError when making fake tensor callr¯  rœ  ©Ú
USER_ERROR)Úcauser7  rµ  rš  s   €€€€ri   r€  rK  ë  s%   ø€ ‘MØCØØØ5Ð)×4Ñ4Ð5Øòrh   zshould not reachable)rG  )OÚtorch.utils._sympy.value_rangesr8  r¯  r7  rÝ  rš  r,  r9  r:  rð  r.  rP   r  r6  r7  r!  r  rL   Úuse_graph_deduplicationÚtrack_nodes_for_deduplicationr5   r  r–  r.  rš  r&  r�  r  r–  r'  r�  r  r  r‰  rÛ   Ú_infer_parametersrr   r�  r   r�  rî   Ú	__cause__r„  r;  ÚDataDependentOutputExceptionÚfuncÚopsÚatenr  r  Ú_local_scalar_denser£   ÚDynamicOutputShapeExceptionÚ capture_dynamic_output_shape_opsÚUnsupportedOperatorExceptionr`  rb  rB  Ú_dispatch_pystubÚ_schemaÚoverload_namer   r0  r1  ÚGuardOnDataDependentSymNodeÚCONSTRAINT_VIOLATIONrú  rQ  r)  r1  ri  r/  Útree_map_onlyr€  rY  Úpartialr  Úregion_trackerÚtrack_node_mutations)r4  rG  r  r8  r,  r9  r:  rð  Úflat_args_kwargsr–  Úid_to_initial_versionr.  Úret_valr¦  r   Úimport_suggestionÚmaybe_pystubr‚  ÚctxrÙ  r6  rR  r7  r7  rµ  rJ  rš  s   ``                  @@@@@@@ri   r3  r3  0  s%  ÿø€ õ @å#ßIÓIà	�‰€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ô ñ 
ñ ó
ó 
ˆðv?ÚÔ0Õ2Ü)ßIÐIóˆG÷ 3�Yön  Ü× Ò Ü�L‰Lœ)×+Ò+Ô,=À"ÑEÀwó
ˆô
 	�‰×Ñ×4×4Ü�=‰=×Ñ×=×=à
�	‰	× Ñ ×5Ñ5ØØØ!ô	
ð €Nùòc!
÷V 3Õ2ú�Y�Yûð ó ØÜô 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Ð;ØØ5Ð)×4Ñ4Ð5Øòô .¬c°!«f°iÓ@ˆÜ0÷ô	
ô Ð3Ó4¸$Ð>ûð_o?ús[   Ã=L;ÄL;ÉM" ÉMÉM É,MÉ4M" Í 
M	Í
MÍ
MÍM" ÍM" Í"\Í3N\ Ü \c                 ó$   • [        [        SS 5      $ )NrÕ   )r	  Ú_current_noderN   rh   ri   Úget_current_noderq  
  s   € Ü”= '¨4Ó0Ð0rh   c              #  óv   #   • [        5       nU [        l         S v •  U[        l        g ! U[        l        f = f7fr   )rq  rp  rÕ   )r4  Úolds     ri   Úset_current_nodert    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  ap  [        TS   TR                  5      (       d'  SSKJn  SS	KJn  U" S
SU" S5      / UR                  Q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 aP  n	SSKJn  SS	KJn  / UR                  Qn
[!        U	[        5      (       a  U
SS/-  n
U" SSU" U	5      U
U	S9   Sn	A	NnS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  rs  )r¦  r6  r7  r4  rð  s    €€€€ri   Úmake_error_messageÚ$run_node.<locals>.make_error_message-  s=   ø€ àBÀ2À$ÀaÈÏÉÀ}ÐTVÐW[ÐV\Ð\`ÐagÐ`hÐhoÐpÜ�q“'ñðrh   r4   )r,  rT  Nr;  r   r6  r™  z/Missing attribute when running call_method noder¯  zattribute not definedr8  r<  r  Úplaceholderr,  zsIf the op is a custom op, did you implement a fake tensor implementation? (e.g. with `@my_custom_op.register_fake`)z;If the op is a PyTorch op, please file an issue to PyTorch.zGNotImplementedError/UnsupportedFakeTensorException when running FX noderœ  )r¦  r   r“   r£   )rð  rt  rÝ  r,  r  rÛ   r¯  r7  rš  rQ  r	  Úoutput_graphÚget_submoduler.  r¢  r~  r&  rç  rî   r.  r/  ri  )Útracerr4  r6  r7  rJ  rw  r,  r7  rš  r¦  r   rð  s    ```       @ri   rI  rI    s  û€ ð" 
�‰€Bä	˜$Õ	÷	ò 	õ 	%ð1	Ø�_Ó$Ø—{’{ DÐ3¨FÑ3÷ 
 Ñ	ð �}Ó$Ü˜t A™w¨¯©×4Ñ4Ý3Ý2á!Ø QØ "Ù$6Ð7NÓ$OØ=Ð 1× <Ñ <Ð=ò	ô ˜t A™w¨¯©Ô4°d¸1¸2°hÐIÀ&ÑI÷1 
 Ñ	ð2 �}Ó$ØÑ+Ð+Ð+Ù Ð0¨Ñ0÷7 
 Ñ	ð8 �zÓ!Ø×*Ñ*×8Ñ8¸¿¹ÓE÷; 
 Ñ	ð< �}Ó$Ø&¨$¯)©)Ó3Ð3Ð3Ø—y‘y Ñ1÷A 
 Ñ	ð< %÷= 
 ôz ˜Ó
Ðøô7 $Ô%CÐDó 	å+Ý*à3Ð'×2Ñ2Ð3ˆEÜ˜!Ô0×1Ñ1Øð@àQðñ �ñ ØaØÙ.¨qÓ1ØØ÷ûð ó 	ØÜó 	ÜÑ1°!Ó4Ó5×DÑDØ—‘óàðûð	ú÷q 
 Õ	úsZ   œG;¯EÁA,EÃEÃ"*EÄ&EÅG;ÅG8Å*AF5Æ0G;Æ5G8Ç+G3Ç3G8Ç8G;Ç;
H	c                óŽ  ^^	^
^• SSK Jm
  SSKJm  TR                  nX;   a  X    $ U R
                  n[        R                  R                  R                  U R                  U R                  4U4S j5      u  pEU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XV5      nXrU '   U$ ! [*         a$  nUm	[-        U	U
U4S	 j5        [/        S
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.
r4   r6  r™  c                ó   >• [        U T5      $ r   )Úget_real_value)ró  r|  s    €ri   r€  Ú get_real_value.<locals>.<lambda>z  s   ø€ ”.  FÔ+rh   ry  Úgraphargr<  Nc                 ó0   >• T" SSS/ TR                   QT S9$ )Nz7RuntimeError when trying to get real value from fx.Noder¯  rœ  rP  )Úexnr7  rš  s   €€€ri   r€  r€  ‘  s%   ø€ ‘MØQØØØ5Ð)×4Ñ4Ð5Øòrh   zshould not be reachable)r¯  r7  rÝ  rš  Úreal_value_cacherð  r!  r   r4  r  r6  r7  r.  Úexamplerz  r  r  r‰  r
  r“  rI  rî   r1  ri  )r4  r|  Úcacherð  r6  r7  Ú	nn_moduleÚ
real_valuer¦  rƒ  r7  rš  s    `       @@@ri   r  r  k  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Ó&àˆ	ðBÜ˜f d°&ÓDˆ
Ø ˆd‰ð Ðøô ó BØˆÜ0öô	
ô Ð6Ó7¸TÐAûðBús   ÄD Ä
EÄ D?Ä?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   )ÚFakeTensorConfigrP   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)rz  r�  rŠ  s     €ri   Ústack_or_hintÚ7assert_no_fake_params_or_buffers.<locals>.stack_or_hint   s/   ø€ Ø×!×!Ûà8¸×9NÒ9NÈqÏ~É~Ó9^Ð8_Ð`Ð`àcrh   zUnexpected fake buffer rÎ   zUnexpected fake param )rz  r   r“   r£   )Útorch._subclasses.fake_tensorrŠ  rP   Únamed_buffersÚnamed_parameters)rž  rP   r�  rr   Úbufferr—  rŠ  s         @ri   Ú assert_no_fake_params_or_buffersr–  �  s’   ø€ ßG÷dð ×(Ñ(Ö*‰ˆÙ˜6—?“?ð 	
Ø% d V¨1©]¸6Ó-BÐ,CÐDó	
Ð"ñ +ð ×*Ñ*Ö,‰ˆÙ˜5—>“>ð 	
Ø$ T F¨!©M¸%Ó,@Ð+AÐBó	
Ð!ò -rh   c                ó8   • U R                    SU R                   3$ )z1
Returns the fully qualified name of the object.
rp  )ra   rb   rq  s    ri   Úfqnr˜  ²  s!   € ð �n‰nÐ˜Q˜s×/Ñ/Ð0Ð1Ð1rh   c                ó\   • [         R                  R                  R                  (       a  U $ U$ r   )r!  r  rL   Úassume_static_by_default)Úcount1Úcount2s     ri   Úifdynstaticdefaultr�  ¹  s   € Ü‡}�}×Ñ×4×4Øˆàˆrh   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Ù  rp  Néýÿÿÿ)r$  r¤  ÚlistdirrÅ  rä  r   r£   Ú__file__rX  Ú	importlibÚimport_moduler`   )rˆ  ré  s     ri   Úimport_submoduler¤  À  st   € ô œ2Ÿ:š:¤b§g¡g§o¡o´d¼3ÀÇÁÓ6MÓ&NÓOÖPˆØ×Ñ˜U×#Ó#¨°©°sÕ(:Ü×#Ò# s§|¡| n°A°h¸sÀ°m°_Ð$EÖFò Qrh   c                ó*   • [        [        U 5      5      $ r   )Úclass_has_getattributerÛ  rA  s    ri   Úobject_has_getattributer§  É  s   € Ü!¤$ u£+Ó.Ð.rh   c                ó8   • [         R                  U S5      nX#U'   g )Nrè  )r=  Ú__getattribute__)r   rr   rÕ   rN  s       ri   Ú object_setattr_ignore_descriptorrª  Í  s   € ä×Ñ  ZÓ0€AØ€d‚Grh   c                ó’   •  [        [        R                  " U S5      [        R                  5      (       a  g g! [
         a     gf = f)Nr©  TF)r&  r\  r]  r=  re  r\  r�   s    ri   r¦  r¦  Ó  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__)r\  r]  rÛ  r\  r!  r�  r  r­  )rÕ   Úignore_nn_module_getattrÚ
getattr_fns      ri   Úget_custom_getattrr°  ß  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Ð   rN   N)r`   ra   rb   rc   Ú	PARAMETERÚ
NOT_TENSORÚNN_MODULE_PROPERTYrg   rN   rh   ri   r²  r²  ì  s   † Ø€IØ€JØÓrh   r²  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 )r²  r³  r´  rµ  ri  )r�  s    ri   Útensor_static_reason_to_messager·  ò  sJ   € ØÔ#×-Ñ-Ó-ØOØÔ#×.Ñ.Ó.ØCØÔ#×6Ñ6Ó6ØEÜ
˜?¨6¨(Ð3Ó
4Ð4rh   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.
r4   )Ú)is_from_unspecialized_param_buffer_sourceTrå  )rÐ  r¹  rÒ  rÔ  rÖ  rL   Ú&force_nn_module_property_static_shapesr²  rµ  rÛ  r!  r�  r‚  Úforce_parameter_static_shapesr³  r´  )rµ  rQ  Útensor_sourcer¹  s       ri   Útensor_always_has_static_shaper½  ü  s¥   € õ  Bð 	×"Ñ"×;Ñ;×=Ñ=Ø×%Ñ%×HÑH×JÑJÜ
×
7×
7ØÔ'×:Ñ:Ð:Ð:ô 	ˆV‹œŸ™×*Ñ*Ò*Ù4°]×CÑCÜ
×
.×
.ØÔ'×1Ñ1Ð1Ð1ÞØÔ'×2Ñ2Ð2Ð2Ørh   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:
)Úopcoderr   r  r6  r7  rœ   )r¨   r©   r£   r,   r1  rï  rð  rr   r  r6  r7  r+   ÚforwardÚ__code__r³  )r¨   ró  Ú
node_specsÚ	graph_strrJ  rž  s       €€ri   ÚinnerÚ(lazy_format_graph_tabular.<locals>.inner  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£   rI   )rJ  rž  rÅ  s   `` ri   Úlazy_format_graph_tabularrÈ    s   ù€ ÷Wð Wô" �eÓÐrh   c                óh   • U  SU SU SU S[         R                  " U5      R                  5        S3
$ )NrÎ   z line z 
rž   )ÚdisÚBytecode)r‹  rr   ré  Úline_norÞ  s        ri   Úformat_bytecoderÍ  3  s=   € ð ˆX�Q�t�f˜A˜h˜Z v¨g¨Y°c¼#¿,º,ÀtÓ:L×:PÑ:PÓ:RÐ9SÐSUÐVÐVrh   )Ú_forward_pre_hooksÚ_forward_pre_hooks_with_kwargsÚ_forward_hooks_with_kwargsÚ_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š  r!  r�  Úmodulesr‚  Ú_global_backward_hooksÚ_global_backward_pre_hooksrN   rh   ri   Únn_module_has_global_hooksrÜ  I  sS   € ô ÜŒE�H‰H×Ñ×#Ñ#×:Ñ:Ó;÷ 	CÜŒu�x‰x×Ñ×&Ñ&×AÑAÓBóð rh   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_namesr	  r·   )rˆ  Ú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              ri   Únn_module_get_all_hooksrë  R  sª   € ð ÐàÔ÷ 	'Ø$Ô$÷	'à&Ô&ð ö
 žoØ×"Ñ"Ô#5Ô6ÞžØ×"Ñ"Ô#6Ô7ÞØ×"Ñ"Ô#8Ô9à€IÛ-ˆÜ˜¨RÓ0ˆÛˆIØÑ#ˆDà×Ñ˜TÖ"ó ñ .ð Ðrh   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<  )rˆ  râ  rã  rä  ré  s        ri   Únnmodule_has_hooksrí  s  s&   € ô $ØØ/Ø1Ø5ñ	€Eô �‹;Ðrh   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     ri   r¦   Ú"to_numpy_helper.<locals>.<genexpr>Ž  ó   é € ÐAº5°Cœ?¨3×/Ð/º5ùr¯  )rP   r&  Útnpr}  rñ  rµ  r!  r€  Únumpyr'  r…  rÛ  rA  s    ri   rñ  rñ  …  s}   € äˆu‡~�~ØˆÜ�%œŸ™×%Ñ%Ü˜uŸ|™|Ó,Ð,Ü	�Eœ5Ÿ<™<×	(Ñ	(Ø�{‰{ ˆ{Ð&Ð&Ü	�EœE¤4˜=×	)Ñ	)Ü�EŒ{ÑA¹5ÓAÓAÐAàˆrh   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     ri   r¦   Ú"numpy_to_tensor.<locals>.<genexpr>›  rô  r¯  )
rE  r&  r}  r!  rç  rõ  rµ  r'  r…  rÛ  rA  s    ri   rù  rù  “  sr   € ä‰>Ðˆ>Ü�%œŸ™×$Ñ$Ü�Š˜uÓ%Ð%Ü�%œŸ™×%Ñ%Ø�|‰|ÐÜ	�EœE¤4˜=×	)Ñ	)Ü�EŒ{ÑA¹5ÓAÓAÐAàˆrh   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`   )r�  rë  s     ri   r�  Ú numpy_to_tensor_wrapper.__init__¡  s   € ØŒØ" T§V¡V§_¡_Ñ4ˆ�rh   c                ó6   • SU R                   R                   S3$ )Nz<Wrapped function <original ú>>r   r”  s    ri   Ú__repr__Ú numpy_to_tensor_wrapper.__repr__¥  s   € Ø-¨d¯f©f¯o©oÐ->¸bÐAÐArh   c                ó<   • U R                   " U0 UD6n[        U5      $ r   )rë  rù  ©r�  r6  r7  rÓ   s       ri   rö  Ú numpy_to_tensor_wrapper.__call__¨  s    € Ø�fŠf�dÐ%˜fÑ%ˆÜ˜sÓ#Ð#rh   )r`   rë  N)rë  úCallable[_P, R]r“   r”   rÇ  ©r6  r>  r7  r?  r“   r   )r`   ra   rb   rc   r�  r  rö  rg   rN   rh   ri   rü  rü     s   † ô5ôB÷$rh   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õ  r}  r	  rù  r!  r€  )r   rr   rÓ   s      ri   Únumpy_attr_wrapperr  ­  s^   € Ü�#”s—{‘{×#Ñ#Ü�cÓ ˆÜ˜sÓ#Ð#Ü	�CœŸ™×	&Ñ	&Ü”c—k’k #Ó&¨Ó-ˆÜ˜sÓ#Ð#ð 
'rh   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`   )r�  r  s     ri   r�  Únumpy_method_wrapper.__init__¹  s   € ØŒØ" T§[¡[Ñ0ˆ�rh   c                ó"   • SU R                    S3$ )Nz<Wrapped method <original r  ©r  r”  s    ri   r  Únumpy_method_wrapper.__repr__½  s   € Ø+¨D¯K©K¨=¸Ð;Ð;rh   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&  r!  r€  rõ  r}  r	  r  rù  )r�  r6  r7  r   Úmethod_callablerÓ   s         ri   rö  Únumpy_method_wrapper.__call__À  sX   € Ø�1‰gˆÜ�cœ5Ÿ<™<×(Ñ(Ü—+’+˜cÓ"ˆCÜ! #§{¡{Ó3ˆÙ˜t A B˜xÐ2¨6Ñ2ˆÜ˜sÓ#Ð#rh   )r`   r  N)r  r£   r“   r”   rÇ  )r6  r   r7  r   r“   r   ©	r`   ra   rb   rc   rä   r�  r  rö  rg   rN   rh   ri   r  r  ¶  s   † Ùqô1ô<÷$rh   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`   )r�  rð  s     ri   r�  Únumpy_operator_wrapper.__init__Ì  s   € ØŒØ" 2§;¡; -Ð0ˆ�rh   c                ó"   • SU R                    S3$ )Nz<Wrapped operator <original r  )r`   r”  s    ri   r  Únumpy_operator_wrapper.__repr__Ð  s   € Ø-¨d¯m©m¨_¸BÐ?Ð?rh   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&  r!  r€  rõ  r}  r•  s     ri   r¦   Ú2numpy_operator_wrapper.__call__.<locals>.<genexpr>×  s2   é € ð 
ÚRVÈ3¤
¨3´·±× =Ñ =ŒC�KŠK˜ÔÀ3ÔFÒRVùs   ‚AA)rð  rù  r  s       ri   rö  Únumpy_operator_wrapper.__call__Ó  s3   € ÞÐˆzñ
ÙRVó
ˆð �gŠg�tˆnˆÜ˜sÓ#Ð#rh   )r`   rð  N)rð  úCallable[..., Any]r“   r”   rÇ  r
  r  rN   rh   ri   r  r  É  s   † Ù[ô1ô@÷$rh   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&  rO   Ú_has_symbolic_sizes_stridesr5  r!  rÉ  r·   r4  r/  Ú	size_hintÚexprr$  Úempty_stridedr  r-  r  Úzero_)r  r5  rà  r$  r  s        ri   Ú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Ø€Hrh   c                ó   • U " U0 UD6$ r   rN   )rw  r6  r7  s      ri   Ú8_disable_side_effect_safety_checks_for_current_subtracerr,  þ  s   € ñ ˆtÐ�vÑÐrh   c                óL   • SS K nXR                  R                  R                  L $ r²   )Útorch.utils.checkpointry  Ú
checkpoint)r   r!  s     ri   Úis_utils_checkpointr0    s   € ã!à—+‘+×(Ñ(×3Ñ3Ð3Ð3rh   c                ó   • SSK Jn  XL $ )Nr   )Úinvoke_subgraph_placeholder)Ú'torch._higher_order_ops.invoke_subgraphr2  )r   r2  s     ri   Úis_invoke_subgraphr4    s   € ÝSàÐ-Ð-rh   c                 ód   • SSK Jn  UR                  " [        R                  R
                  40 U D6$ )Nr4   ©Ú TorchHigherOrderOperatorVariable)Úvariables.higher_order_opsr7  Úmaker!  Ú_higher_order_opsÚinvoke_subgraph)Úoptionsr7  s     ri   Úbuild_invoke_subgraph_variabler=    s/   € ÝLà+×0Ò0Ü×Ñ×/Ñ/ñà
ñð rh   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   r4   r6  )Útorch._higher_order_ops.wrapr:  Úwrapr8  r7  Útag_activation_checkpointr!  Ú
_functorchrL   Úfunctionalize_rng_opsÚwrap_activation_checkpointr9  )r<  Úhigher_order_opsr7  Úactivation_checkpoint_ops       ri   Úbuild_checkpoint_variablerG    s\   € ß;Ð;åLð
 	×2Ñ2ð ô ×Ñ×Ñ×4×4Ø#3×#NÑ#NÐ à+×0Ò0Ø ñà
ñð rh   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$ )Nr4   )Úis_dynamo_supportedrâ  )r�  rW  ÚmtiaF)Ú
eval_framerI  r!  r-  rÛ  r1   )Údevice_typerI  rÛ  Úcompile_supporteds       ri   Úis_compile_supportedrN  -  s`   € Ý/ä�<Š<˜Ó$×)Ñ)€DÙ+Ó-ÐØˆuƒ}Øð
 Ðð	 
Ð(Ó	(Ö->Ü&›LÐð Ðð "ÐØÐrh   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-8Nru  )Úerrors)Úencoderš  Údecode)r£   ÚoffsetÚas_utf8s      ri   Ú_fix_offsetrU  ?  s4   € ð �j‰j˜Ó!€GÜˆw�w˜Ð×&Ñ& w°yÐ&ÐAÓBÐBrh   c                  ó>   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg)	Ú_AnchorsiK  r’   Úleft_end_linenoÚleft_end_offsetÚright_start_linenoÚright_start_offsetrN   NrŒ  rN   rh   ri   rW  rW  K  s   ‡ ð ÓØÓØÓàÖrh   rW  c                óº  ^^• [         R                  S:¼  d   eSSKnSn UR                  SU -   S-   5      nUc   e[        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
)r4   rž   c                ó"   >• [        TU    U5      $ r   )rU  )ÚlinenorS  Úliness     €ri   Ú	normalizeÚ-_extract_anchors_from_expr.<locals>.normalizeq  s   ø€ Ü˜5 ™=¨&Ó1Ð1rh   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     €ri   Únext_valid_charÚ3_extract_anchors_from_expr.<locals>.next_valid_charv  sw   ø€ Ø”s˜5“zÓ! c¬S°°v±Ó-?Ó&?ØˆCØ�a‰KˆFð ”s˜5“zÓ! c¬S°°v±Ó-?Õ&?ð œ˜E›
Ó" s¬S°°v±Ó-?Ó'?Ð?Ð?Øˆ{Ðrh   c                ón   >• US-  nT" X5      u  pU [        T5      :  a  U[        TU    5      :  d   eX4$ r®   rd  ©r_  re  r`  rf  s     €€ri   r  Ú-_extract_anchors_from_expr.<locals>.increment~  sB   ø€ Øˆq‰ˆÙ% fÓ2‰ˆØœ˜E›
Ó" s¬S°°v±Ó-?Ó'?Ð?Ð?Øˆ{Ðrh   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Å  rd  ri  s     €€ri   ÚnextlineÚ,_extract_anchors_from_expr.<locals>.nextline…  sG   ø€ ØˆØ�!‰ˆÙ% fÓ2‰ˆØœ˜E›
Ó" s¬S°°v±Ó-?Ó'?Ð?Ð?Øˆ{Ðrh   r^   z)\#z\#rj  rl  )r_  r’   rS  r’   r“   r’   )r_  r’   re  r’   r“   ztuple[int, int])r;  r<  ÚastÚparseÚSyntaxErrorrš  Úbodyrô  r&  ÚExprrÕ   ÚBinOpr   r’   ÚleftÚ
end_linenoÚend_col_offsetÚisspacerW  Ú	SubscriptÚCallrY  )Úsegmentrn  Útreera  r  rl  Ú	statementr'  Ú
cur_linenoÚcur_colÚchÚ	right_colÚleft_linenoÚleft_colÚright_linenor`  rf  s                  @@ri   Ú_extract_anchors_from_exprr„  U  s¯  ù€ ô ×Ñ˜wÓ&Ð&Ð&ãà€Dðð �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àøôW ó Ùðús    O Ï
OÏOc           	     ó†  • [         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S5      (       a  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R1                  S	U
-  S
Xº-
  -  -   5        GO—XšS S-   nUR1                  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R3                  5       5      -
  nUR1                  S	U-  S
[)        U5      U-
  -  -   5        M†     XÎSU -  n[)        U5      [)        UR3                  5       5      -
  nUR1                  S	U-  S
UU-
  -  -   5        Sn [5        U5      nUc$  U Vs/ s H  nUR9                  S
S5      PM     nnGO=U Vs/ s H  n[;        U5      PM     nnUR<                  S:X  a  U=R>                  U
-  sl        UR@                  S:X  a  U=RB                  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RB                  :¼  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 ! [6         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_   é   )ru  ÚcolnoÚ	end_colnor   rž   r4   NÚ	positionsr¯  rÎ   Ú~Ú^)"r;  r<  r�  ÚFrameSummaryr³  r‰  r_  rÚ  ru  Ú
col_offsetrv  rŽ  r¡   Ú
splitlinesrI  Ú	linecacheÚgetlineÚrstripÚtextwrapÚdedentrš  ÚindentrÛ   rU  r·   Úlstripr„  ri  ru  r…  rX  rY  rZ  r[  )rÞ  ÚinstÚframe_summaryr@  r_  Ú
orig_linesÚorig_lines_dedentÚ
indent_lenr”  Ú
first_lineÚstart_offsetÚ
end_offsetrz  ÚmarkersÚ	last_lineÚlineÚ
num_spacesÚanchorsÚmarkerÚmutable_markersre  r6  s                         ri   Úget_instruction_source_311r¥  Õ  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˜×%Ñ%¨$¯.©.Ñ*DÐDÐDØ‡~�~×ÑÑ$Øô ×"Ò" 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# ÓZ4Ó0Z9ØZ>Ú#
Z1Ú0Z1c                ó\   • [        U [        R                  5      (       a  [        U SS 5      $ g )NÚ_dynamo_static_input_type)r&  r!  r€  r	  r¶  s    ri   Úget_static_address_typer¨  Y  s&   € Ü�!”U—\‘\×"Ñ"Ü�qÐ5°tÓ<Ð<àrh   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   )	r!  rB  r8   Ú	get_stateÚdefault_generatorrU  r�  Ú	set_staterX  )rÕ   ÚgettersÚsetterss      ri   Úis_rng_state_getter_or_setterr¯  `  sœ   € ô 	�‰×Ñ×$Ñ$Ü×Ñ×)Ñ)Ü×ÑÜ�
‰
× Ñ ð€Gô 	�‰×Ñ×$Ñ$Ü×Ñ×)Ñ)Ü×ÑÜ�
‰
× Ñ ð	€Gð Ð(�gÐ( Ñ(Ñ(Ð(rh   c                óÐ   • [        U [        R                  5      =(       aF    U R                  S:H  =(       a0    U R                  R
                  [        R                  R                  L $ )NÚ__get__)	r&  r=  r   r`   Ú__self__Ú__objclass__r!  rB  Ú_TensorBaserA  s    ri   Úis_tensor_base_attr_getterrµ  q  sK   € ä�5œ%×1Ñ1Ó2÷ 	@Ø�N‰N˜iÑ'÷	@à�N‰N×'Ñ'¬5¯8©8×+?Ñ+?Ð?ðrh   c                ó¤   •  [         R                  " [        R                  U 5      n[	        U5      [
        R                  L $ ! [         a     gf = frD  )r\  r]  r!  r€  rÛ  r=  rr  r\  )rr   r  s     ri   Úis_tensor_getset_descriptorr·  y  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Û   rA  s    ri   Úis_torch_function_objectrº  �  s   € Ü�5Ð.Ó/Ð/rh   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_valuer¹  F)rF  r¼  Ú&torch._dynamo.variables.torch_functionr½  rÞ  rÛ   r¾  r&  r	  Ú
class_typerÕ   r!  rB  Ú_disabled_torch_function_impl)r:  r¼  r½  rY  s       ri   Úhas_torch_functionrÂ  …  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àrh   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Ð  )r!  rU  r$   Útry_getÚtensor_to_contextr¼  Úfrom_tensor)rz  r.  rÅ  rÐ  Útracing_contexts        ri   Úto_fake_tensorrÊ  £  su   € ð ÐØ€FÜŸ-™-×6Ñ6×>Ñ>Ó@Ð@€Õ@Ø×1Ñ1Ó1Ø.×@Ñ@ÀÑCÐØ%×3Ñ3ˆFà× Ñ Ø	˜Ð1Að !ð ð rh   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§  r¦  r   rÛ   rÌ  rÍ  rA  s    ri   Úis_frozen_dataclassrÎ  ³  sn   € ä# EÓ*Ô*÷ 	.Ü& uÓ-Ô-÷	.ä˜Ó÷	.ô �EÐ1Ó2÷	.ô �E×.Ñ.°Ó9÷		.ð
 ×&Ñ&×-Ñ-ðrh   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Û   r	  ri  )r   Úattrsr  s      ri   Úget_first_attrrÑ  ¾  s=   € ó ˆÜ�3×ÓÜ˜3Ó%Ò%ñ ô ˜C˜5Ð EÀeÀWÐMÓ
NÐNrh   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Úcompilesr4   )r!  r  ry  rU   rh  Úcompile)Úgm_Úexample_inputs_s     ri   Úinner_compilerÚKmaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.inner_compilerÒ  s>   € Ü—‘×#Ñ#×,Ñ,Ð-@ÑAÀ*ÓMÐQRÑRÓMÜ—‘×.Ñ.¨sÓDÐDrh   )ÚbackendÚ	fullgraphÚdynamic)rØ  r   rÙ  r   r“   r   )r!  r×  )rž  rÚ  rÞ  rÝ  s     €€ri   Úcompiler_fnÚ3maybe_enable_compiled_autograd.<locals>.compiler_fnÑ  s#   ø€ ôEô —=’=Ø°iÈñð rh   )rž  r   r“   r   )r!  r  rÕ  Ú_enable)Úshould_enablerÝ  rÞ  rß  rn  s    ``  ri   Ú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à  rN   N)r`   ra   rb   rc   rg   rN   rh   ri   ÚInvalidræ  à  s   † Úrh   rç  )rH  r3   )rç  s    ri   Úinvalid_removeable_handlerè  Þ  s   € ô”$ô ô ™7›9Ó%Ð%rh   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&  r!  r�  r  r   r  r¶  r}  rè  )rˆ  Úproxys     ri   Únn_module_proxyrë  ê  s`   € Ü�cœ5Ÿ8™8Ÿ?™?×+Ñ+Øˆ
Ü�#”u—x‘x×+Ñ+×,Ñ,àˆ
Ø�M‰M×!Ñ! #§-¡-Ó0€EØ—\‘\€E„NØ€Lrh   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°  r�  rž  Úunflatten_fn)r�  rž  rï  r¶  s      €ri   r�  ÚGmWrapper.__init__ö  s   ø€ ô 	‰ÑÔØŒØ(Õrh   c                óT   • [        U5      nU R                  " U R                  U5      6 $ r   )r…  rž  rï  rõ  s     ri   rÁ  ÚGmWrapper.forwardý  s%   € ä˜t›*ˆØ�wŠw˜×)Ñ)¨$Ó/Ð0Ð0rh   )rž  rï  )rž  útorch.fx.GraphModulerï  zCallable[[list[Any]], Any]r“   r”   ©r6  r   r“   r   )r`   ra   rb   rc   r�  rÁ  rg   r¸  r¹  s   @ri   rí  rí  õ  s*   ø† ð)Ø&ð)Ø6Pð)à	÷)÷1ò 1rh   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.
ry  Ú	steal_argFr   c                ó*   • U S   [        U SS  5      -   $ rÅ  r$  r‹  s    ri   Ú
flatten_fnÚ(flatten_graph_inputs.<locals>.flatten_fn  s   € Ø˜‘7œT $ q r (›^Ñ+Ð+rh   c                ó   >• U S T /U TS  Q7$ r   rN   )Ú	flat_argsÚboxed_inputs_counts    €ri   rï  Ú*flatten_graph_inputs.<locals>.unflatten_fn  s#   ø€ ØÐ1Ð1Ð2ÐT°YÐ?QÐ?RÐ5SÑTÐTrh   )Útreespecc                 óZ   >• T" U 5      nT H  nX   R                  5         M     T" U5      $ r   )r€   )r6  rû  r6  Úcompiled_fnrø  Úinputs_idx_to_clears      €€€ri   ÚwrapperÚ%flatten_graph_inputs.<locals>.wrapper'  s1   ø€ Ù˜tÓ$ˆ	ó %ˆAØ‰G�M‰MŽOñ %ñ ˜9Ó%Ð%rh   rô  )rû  r   r“   r   )Ú	enumerater1  rï  rð  r.  r…   r!  r  rÕ  Úin_compiled_autograd_regionr&  r…  rš  rí  r/  r0  rY  rf  Útree_unflattenÚarg_tree_leaves)rž  r2  Ú
compile_gmr6  r4  rï  Úflat_inputsÚspecr  rü  r   rø  r  s            @@@@ri   Ú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&  r!  r   r  rÛ   r.  r…   )Úmaybe_gms    ri   Úget_locals_to_stealr  4  sB   € Ü�h¤§¡× 4Ñ 4×5Ñ5¼WÀXÈv×=VÑ=VØˆ	Ø�=‰=×ÑÐ.°Ó3Ð3rh   c                ó    • XR                   S'   g )Nr  ©r.  )rž  r  s     ri   Úset_locals_to_stealr  :  s   € Ø!0‡G�GÐÒrh   c                  ó(   • \ rS rSrSS jrSS jrSrg)ÚLiti>  c                ó   • Xl         g r   ©rà  )r�  rà  s     ri   r�  ÚLit.__init__?  s   € Ø�rh   c                ó   • U R                   $ r   r  r”  s    ri   r  ÚLit.__repr__B  s   € Ø�v‰vˆrh   r  N)rà  r£   r“   r”   rÇ  )r`   ra   rb   rc   r�  r  rg   rN   rh   ri   r  r  >  s   † ô÷rh   r  zset[str]Úwarn_once_cachec                ór   • U [         ;   a  g [         R                  U 5        [        R                  " XS-   S9  g )Nr4   )Ú
stacklevel)r  r�  ÚwarningsÚwarn)rµ  r  s     ri   Ú	warn_oncer  I  s-   € ð ŒoÓØÜ×Ñ˜ÔÜ‡M‚M�#¨q¡.Ó1rh   c                óR   • [         R                  " S5      nUR                  SU 5      $ )Nz\x1B[@-_][0-?]*[ -/]*[@-~]r¯  )rM  r×  r³  )ÚtextÚansi_escapes     ri   Ústrip_color_from_stringr#  U  s"   € ä—*’*Ð:Ó;€KØ�?‰?˜2˜tÓ$Ð$rh   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)r!  rB  Ú	_autogradÚ _saved_tensors_hooks_set_tracing)rú  s    ri   Ú+_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   )r!  rh  rL   ÚfreezingÚis_grad_enabledrN   rh   ri   Úis_parameter_freezingr+  e  s)   € Ü�?‰?×!Ñ!×*Ñ*×J´5×3HÒ3HÓ3JÔ/JÐJrh   c                 óf   • [        [        5       5       V s/ s H  n [        U 5      PM     sn $ s  sn f r   )rI  r   Ú get_torch_function_mode_stack_at)r6  s    ri   Úget_torch_function_mode_stackr.  i  s3   € ä5:Ô;TÓ;VÔ5WóÚ5W°Ô(¨Ö+Ñ5Wñð ùò s   –.c                ól   • U [        5       :  a  U S:¼  d   e[        R                  R                  U 5      $ r²   )r   r!  rB  Ú_get_function_stack_at)Úinds    ri   r-  r-  o  s/   € ØÔ*Ó,Ó,°¸³Ð9Ð9Ü�8‰8×*Ñ*¨3Ó/Ð/rh   c                ót   • [        [        5       5       H  n[        5         M     U  H  n[        U5        M     g r   )rI  r   r   r   )ri  rÙ  Úmodes      ri   Úset_torch_function_mode_stackr4  t  s/   € ÜÔ,Ó.Ö/ˆÜ!Ö#ñ 0ó ˆÜ% dÖ+ò rh   c                 óL   • [        [        5       5       H  n [        5         M     g r   )rI  r   r   )rÙ  s    ri   Úclear_torch_function_mode_stackr6  |  s   € ÜÔ,Ó.Ö/ˆÜ!Ö#ò 0rh   c                ó@   • [         R                  R                  U 5      $ r   )r!  ÚacceleratorÚcurrent_stream)r-  s    ri   Úget_current_streamr:  �  s   € Ü×Ñ×+Ñ+¨FÓ3Ð3rh   c                 ó   • [        5         g r   )Ú
breakpointr‹  s    ri   Ú_breakpoint_for_c_dynamor=  †  s   € Ü…Lrh   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^   r4   )ÚInternalTorchDynamoErrorz[Tensor subclass method __metadata_guard__ must take exactly two subclass metadata argumentsz?Tensor subclass method __metadata_guard__ must be a classmethod)	Ú__metadata_guard__r\  Ú	signaturerš  rœ  rÝ  r?  r²  r¶  )rÕ   rw  Úsigr?  s       ri   Úverify_guard_fn_signaturerC  Š  sk   € Ø	×	!Ñ	!€BÜ
×
Ò
˜BÓ
€CÜ
ˆ3�>‰>Ó˜aÓÝ1á&Øió
ð 	
ð 
‡{�{�e—o‘oÓ%Ý1á&ØMó
ð 	
ð &rh   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È   rH  r   ry  r†  Ú__iter__)Úuser_clss    ri   Ú#does_not_override_dict_iter_methodsrG  ›  s‰   € à�‰œ4Ÿ:™:¤{×'8Ñ'8Ð9Ñ9÷ 	GØ�O‰O¤§¡¬[×-?Ñ-?Ð@Ñ@÷	Gà�M‰MœdŸi™i¬×)9Ñ)9Ð:Ñ:÷	Gð ×Ñ¤$§-¡-´×1EÑ1EÐ!FÑFð	rh   c                ó$   • U R                  U5      $ r   )r5  ©r  r6  s     ri   Ú	call_sizerJ  §  s   € à�6‰6�!‹9Ðrh   c                ó$   • U R                  U5      $ r   )r$  rI  s     ri   Úcall_striderL  ¬  s   € à�8‰8�A‹;Ðrh   c                ó"   • U R                  5       $ r   )Ústorage_offsetr~  s    ri   Úcall_storage_offsetrO  ±  s   € à×ÑÓÐrh   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
  )rz  ÚKEYS_TO_COPYrÔ   Útensor_dicts       ri   Ú_extract_tensor_dictrT  ¸  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   )r!  rB  ÚStreamrþ  s     ri   Úbuild_streamrW  Å  s   € Ü�8‰8�?Š?˜DÐ+ FÑ+Ð+rh   c                óB   • [         R                  R                  " U 0 UD6$ r   )r!  rB  ÚEventrþ  s     ri   Úbuild_eventrZ  É  s   € Ü�8‰8�>Š>˜4Ð* 6Ñ*Ð*rh   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   r†  r^  r�   s    ri   r†  Ú#CompileTimeInstructionCounter.startÒ  s1   € à—Z‘Z !‘^ˆŒ
Ø�:‰:˜‹?Ü*×0Ò0Ó2ˆC�Gð rh   c                óÂ   • U R                   S-
  U l         U R                   S:X  a;  U =R                  [        R                  " U R                  5      -  sl        SU l        g g )Nr4   r   rÅ  )r`  r]  r   Úendr^  r�   s    ri   rc  Ú!CompileTimeInstructionCounter.endØ  sF   € à—Z‘Z !‘^ˆŒ
Ø�:‰:˜‹?Ø�LŠLÔ0×4Ò4°S·W±WÓ=Ñ=�LØˆC�Gð rh   c                ó   • SU l         g r²   ©r]  r�   s    ri   r€   Ú#CompileTimeInstructionCounter.clearß  s	   € àˆ�rh   c                ó   • U R                   $ r   rf  r�   s    ri   rÕ   Ú#CompileTimeInstructionCounter.valueã  s   € à�|‰|Ðrh   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   )rL   Ú%record_compile_time_instruction_countr†  rc  r�   s    ri   r´  Ú$CompileTimeInstructionCounter.recordç  sM   é € ð	Ü×;×;Ø—	‘	”Ûä×;×;Ø—‘•	ð <øŒv×;×;Ø—‘•	ð <üs   ‚A?„)A ­'A?Á(A<Á<A?rN   Nr•   r–   ©r“   úGenerator[None, None, None])r`   ra   rb   rc   r]  r™   r^  r`  rš   r†  rc  r€   rÕ   r   r´  rg   rN   rh   ri   r\  r\  Í  s„   ‡ Ø€HˆcÓØ€CˆƒMØ€Fàó3ó ð3ð
 óó ðð óó ðð óó ðð Øóó ó órh   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   )rp  r°  Ú__add__)r�  Úotherr¶  s     €ri   rr  ÚCompileCounterInt.__add__ô  s   ø€ Ü ¤¡¡°Ó!7Ó8Ð8rh   rN   )rs  r   r“   rp  )r`   ra   rb   rc   rr  rg   r¸  r¹  s   @ri   rp  rp  ó  s   ø† ÷9õ 9rh   rp  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     ri   Úset_feature_usery  ø  s.   € ô Ó×(Ñ(×*Ñ*ÜÓ×+Ñ+¨O¸WÕLð +rh   )Ú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$ )Nrz  r}  z;Invalid dynamo config optimize_ddp type type(optimize_ddp)=z.Invalid dynamo config optimize_ddp value mode=)rL   Úoptimize_ddpr&  r<  r£   rû  rÛ  r~  )r€  r3  s     ri   Úget_optimize_ddp_moder�  
  s|   € Ü×&Ñ&€LÜ�,¤×%Ñ%Þ".‰Ð4E‰Ü	�L¤#×	&Ñ	&Ø‰äØJ´t¸LÓ7IÑ6KÐLó
ð 	
ð Ô)Ó)ð Ø
9°D±7Ð;óÐ)ð €Krh   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)rL   Ú"fake_tensor_disable_inference_moder!  Úis_inference_mode_enabledÚinference_moder)  )Úis_inference_mode_ons    ri   Ú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)rL   rƒ  r!  r„  Ú
meta_utilsÚ$disable_inference_mode_for_fake_proprN   rh   ri   Ú*maybe_disable_inference_mode_for_fake_propr‹  3  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,  r,  r  )r4  s    ri   Úis_node_meta_validr�  A  s(   € Ø�4ˆ<×M˜?¨d¯i©iÑ7×M¸5ÀDÇIÁIÑ;MÐMrh   c                 ó   • [         $ r   ©Ú_error_on_graph_breakrN   rh   ri   Ú_get_error_on_graph_breakr‘  I  s   € Ü Ð rh   c                ó   • U q g r   r�  rA  s    ri   Ú_set_error_on_graph_breakr“  M  s   € à!Ñrh   c                 óô   • [         R                  R                  R                  (       a)  [         R                  R
                  R                  S5      O[        R                  " 5       n U R                  5         U $ )NzPregraph bytecode)
r!  r"  r#  r$  rB  rC  rD  rZ  ÚnullcontextrE  ©Úcms    ri   Úrecord_pregraph_bytecode_enterr˜  R  sS   € ô �>‰>×"Ñ"×7×7ô 	�‰×Ñ×.Ñ.Ð/BÔCä×#Ò#Ó%ð ð
 ‡L�L„NØ€Irh   c                ó*   • U R                  S S S 5        g r   )rF  r–  s    ri   Úrecord_pregraph_bytecode_exitrš  ]  s   € à‡K�K��d˜DÕ!rh   c                 ó0   • SSK Jn   U R                  " 5       $ )Nr   ©r$   )Útorch._guardsr$   Úget_traced_coderœ  s    ri   rž  rž  d  s   € Ý,à×)Ò)Ó+Ð+rh   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 )Nr4   r6  r™  Ú__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__r8  )r¯  r7  rÝ  rš  rÛ  rè  r…   ÚSUPPORTABLE)r   r:  r7  rš  Úis_overriddens        ri   Úraise_on_overridden_hashr£  j  so   € Ý#Ý"ä˜“I×&Ñ&×*Ñ*¨:°uÓ=€MæÙØBØ-¬d°3«i¨[Ð8NÈrÈdÐSØ6°r°dÐ:nÐoà_ðà"×.Ñ.ðó		
ð rh   )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“   rY   )r“   r    )r“   r!   )rr   r£   r“   úGenerator[Any, None, None])NFNNNNFN)rÔ   r£   r^  r±  rô   r<  rñ   zOptional[dict[str, object]]r_  r±  rP  ræ  rK  rÌ  r`  r<  ra  r±  r“   r¤  r;  )rs  zLiteral['str']rt  r<  r“   r£   )rs  zLiteral['csv']rt  r<  r“   ztuple[list[str], list[object]])r£   F)rs  r£   rt  r<  r“   z-Union[str, None, tuple[list[str], list[str]]])r“   zcontextlib.ExitStack)rÝ  rç  rÞ  r
   r“   r£   )ré  r£   rê  rA   r“   r”   )rñ  zfx.Graphr“   r’   )r  rR   r“   rR   )r  r   r“   r<  )r6  r   r7  r   r“   r”   )r   r=  r!  ztype[T]r“   ú	TypeIs[T])r   r=  r!  z)tuple[type[list[T]], type[tuple[T, ...]]]r“   r¥  )r   r=  r!  zIterable[type]r“   r<  )r   r=  r!  r   r“   r<  )r2  z collections.abc.Sequence[object]r3  ró  r“   zlist[Optional[torch.device]])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]])rw  r   r“   r   )rw  r   r“   ztuple[Any, Optional[str]])rÕ   r   r“   zTypeGuard[np.ndarray])r   r   r“   r<  )rˆ  r   r“   r<  rú  r   )r,  r   r“   ztypes.CellType)r6  r   r7  r   r“   z&tuple[tuple[Any, ...], dict[str, Any]])r  r»  r“   r:  )rò  r°  r“   r”   rä  )r…  r’   r†  r’   rb  rV   r‡  zOptional[type[BaseException]]rˆ  zOptional[BaseException]r“   r”   )r�  r’   r“   r”   )r“   zlist[CompilationMetrics])r“   r•  )r“   r<  )FF)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  zOptional[torch.dtype]r“   r(  )rD  z"dict[str, Union[T, tuple[T, ...]]]r“   zdict[str, list[T]])rD  zSequence[T]r“   zlist[T])rD  r   r“   r   )r,  r(  r“   r”   rm  )rg  r   r“   z™TypeIs[Union[torch.jit._trace.TopLevelTracedModule, torch.jit._script.RecursiveScriptModule, torch.jit.ScriptFunction[Any, Any], torch.jit.ScriptModule]])r3  r   rD  r   r™  r<  r“   r   )r   r   r“   r±  )rs   r   r“   r<  )rs   rÛ  r“   r„  )rž  ró  r“   zCallable[[], None])r4   )r3  r   rD  úIterable[Any]r¦  r’   r“   ztuple[Any, float])rž  ró  rD  r¦  r“   r<  )ró  r’   r“   r#  )r  r   r“   r<  )r“   zset[int])rÕ   r   r“   z-TypeGuard[Union[torch.SymBool, torch.SymInt]])rÕ   r   rÐ  r   r“   r<  )r–  r   r“   r   )r6  r¦  r7  zMapping[Any, Any]r“   r<  )rN  ú
dict[K, V]r“   zKeysView[K])r   r§  r“   z!Iterable[tuple[K, Union[V, Any]]])rs   r   r“   r   )r  zIterable[T]r“   r’   )r  r   r‹  r’   r“   r   )r  r   r“   ztuple[int, int, int])rz  r   rs   rÛ  r“   r   )rN  údict[Any, Any]ró  r’   r“   r   )rà  zset[T]ró  r’   r“   rR   )rÕ   r   r©  r<  r“   r£   )r4  r  r,  r   r“   r”   )r:  rE   r“   r   )rà  rŽ  r@  r’   r“   r’   )r¯  r¯  )
rG  rC   rr   r£   rH  r£   rI  r£   r“   r”   )
rÈ   r¦  rN  r   rG  rB   rV  r<  r“   r   )r  r   r“   z?TypeIs[Union[torch.Tensor, torch.nn.Module, MethodWrapperType]])rÕ   r   r“   ú	list[Any])r  r   r©  r   r“   r£   )rz  r   r©  r   r“   r£   )rG  rC   r‚  r£   r   r   r“   r£   )r  rR   r…  zContainer[T]r“   r<  )r‹  r£   r…  r   rˆ  r<  r“   r£   )rw  zCallable[[], Any]r“   r   )r   r   r.  ú,torch._subclasses.fake_tensor.FakeTensorModer“   r   )r  r(  rJ  r(  r“   r(  )r  r   rJ  r   rž  r<  r“   r<  )r  r   rJ  r   rÇ  r   r®  r<  r�  r×  rž  r<  r¯  r<  r±  r<  r°  r<  r¦  zCallable[..., None]r§  r<  r¨  r<  r©  r<  rª  r×  r“   r<  )rÞ  r
   r“   r£   )r  r£   r“   r£   rÇ  )T)r4  r  r  r<  r“   r   )r¦  r   rG  rC   r“   r   )rG  rC   rï  r   r  r<  r“   r   )rµ  r£   r.  zOptional[FakeTensorMode]r“   r£   )r0  zCallable[[], NoReturn]r“   r   )r4  r  rG  rC   r  r<  r“   r   )r“   úOptional[torch.fx.Node])r4  r  r“   rn  )r|  r   r4  r  r6  r   r7  r   rJ  r   r“   r   )r4  r  r|  r   r“   r   )rž  útorch.nn.Moduler“   r”   )r   r   r“   r£   )r›  r   rœ  r   r“   r   )rˆ  ztypes.ModuleTyper“   r”   )r   r   rr   r£   rÕ   r   r“   r”   )rs   rÛ  r“   r<  )rÕ   r   r®  r<  r“   r,  )r�  r²  r“   r£   )rµ  zUnion[torch.Tensor, Any]rQ  r<  r¼  r#   r“   z)tuple[bool, Optional[TensorStaticReason]])rJ  r£   rž  ró  r“   r   )r‹  r£   rr   r£   ré  r£   rÌ  r’   rÞ  r   r“   r£   )FFF)
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   rr   r£   r“   r   )r  r   r“   r   )rw  r	  r6  r>  r7  r?  r“   rS   )r<  r   r“   r   )rL  rF   r“   r   )r£   r£   rS  r’   r“   r’   )rz  r£   r“   zOptional[_Anchors])rÞ  ztypes.CodeTyper–  r@   r“   r£   )rz  r   r“   r   )rr   r£   r“   r<  )r:  rE   r“   r<  )rz  r(  r.  rª  r“   r   )r   r   rÐ  r£   r“   r   )TT)râ  r<  rÝ  r<  rÞ  r<  r“   r¤  )r“   r3   )rˆ  r   r“   r   )rž  ró  r2  r   r  zCallable[[Any, Any], Any]r“   r#  )r  r   r“   r©  )rž  ró  r  r©  r“   r”   )rµ  r£   r  r’   r“   r”   )r!  r£   r“   r£   )r“   r©  )r1  r’   r“   r   )ri  r©  r“   r”   )r-  ztorch.devicer“   útorch.Stream)rÕ   r   r“   r”   )rF  r   r“   r<  )r  r   r6  r’   r“   r’   )r  r   r“   r’   )rz  r(  r“   rV   )r6  ú
tuple[Any]r7  r¨  r“   r­  )r6  r®  r7  r¨  r“   ztorch.Event)rw  r£   rx  r<  r“   r”   )r4  r«  r“   r<  )rÕ   r<  r“   r”   )r“   úAbstractContextManager[None])r—  r¯  r“   r”   )r“   zOptional[list[CodeType]])r   r   r:  rE   r“   r”   (  rä   Ú
__future__r   Úatexitr—   rZ  r
  ru  r  rÊ  r¿  rY  r¢  r¢  r\  rª   r(  r�  rÈ  rä  r  r¤  rM  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   Útyping_extensionsr   r   r!  Útorch._functorch.configÚ%torch.fx.experimental.symbolic_shapesÚtorch.utils._pytreery  Ú_pytreer/  r   Útorch._Cr   r   r   r   Útorch._dispatch.pythonr   Útorch._dynamo.metrics_contextr    r!   r�  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._ordered_setr/   Útorch.utils._python_dispatchr0   Útorch.utils._tritonr1   r2   Útorch.utils.hooksr3   Úgraph_utilsr5   r>  Úcollections.abcr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   Ú%torch._dynamo.bytecode_transformationr@   Útorch._dynamo.replay_recordrA   Útorch._dynamo.symbolic_convertrB   rC   Útorch._dynamo.variables.baserE   Útorch._prims_commonrF   Útorch._subclassesrG   rö  rE  r|  Útorch._loggingÚtorch._numpyÚ_numpyrõ  rH   rJ   r¯  rL   ÚfftÚlinalgrT  rM   r™   ÚNP_TO_TNP_MODULEr’  rO   rP   rQ   r©   rR   rS   rT   r�  r  r­  Úunpatched_nn_module_getattrrö  Úunpatched_nn_module_callÚ
_call_implÚunpatched_nn_module_call_implr˜   rU   rW   Útroubleshooting_urlÚnnmodule_doc_urlÚnnmodule_doc_url_msgrË  r`   r�   rX   r×  rZ   r{   Útimer_counterrÀ  r\   rk   r¨   r¯   r°   r³   rµ   r¹   r¼   r¾   rÀ   rÂ   rÌ   rÖ   r©  rÜ   rÞ   rá   rã   ré   rY  rH  rp  ru  Úregisterr‰  ÚFloatTensorrQ  ÚDoubleTensorrR  ÚdoubleÚ
HalfTensorrP  ÚhalfÚBFloat16TensorrÃ  Ú
ByteTensorrJ  Ú
CharTensorrF  Ú
LongTensorrI  ÚlongÚ	IntTensorrH  r’   ÚShortTensorrG  ÚshortÚ
BoolTensorr<  Útensortype_to_dtyper‹  rª  r¨  r«  r×  ÚVERBOSEr²  Ú	Formatterr­  r¦  r×  rß  rì  rô  rö  rü  rÿ  r  r"  r'  r(  r<  ÚParamSpecArgsÚParamSpecKwargsÚTypeVarTupleÚTypeAliasTyper8  rB  rN  rS  rU  re  rf  rg  rh  r^  rc  r[  rS  ÚneÚltÚleÚgtÚgeÚcmp_name_to_op_mappingÚcmp_name_to_op_str_mappingrt  rx  rv  r~  r†  r‰  rŒ  r‘  r§  r¬  r®  r1  r�  r°  Ú!DEFAULT_COMPILATION_METRICS_LIMITrŒ  r5  r8  rW  r^  rm  rÝ   r�  r‘  r“  r•  rè  rí   r0  rï  rñ  rô  rü  r  r  r  r  rE  rO  r^  rh  rm  ro  rt  rs  r“  rŸ  r©  r±  rº  rB  r£   ru   rÛ  ÚEllipsisr¶  ÚNotImplementedr-  r  Úmemory_formatr!  ÚfinfoÚiinfoÚ	attentionÚ
SDPBackendr�  Ú_CudaDevicePropertiesr»  r‚  r�  Úlanguager¾  r†  rÆ  rÍ  rØ  rã  rç  rë  rñ  ró  rø  r†  rù  ry  rú  rÈ   rû  rü  Úiterrý  rI  rþ  Ú__length_hint__Útuple_iterator_lenr=  r}  r  rH  Údict_newr«   rè  r  Údict_methodsr“  Úset_methodsr½  Úfrozenset_methodsÚ	tuple_newÚtuple_methodsr…  Úlist_methodsr  Úlist_getitemÚstr_methodsÚenum_type_methodsrÿ  r   r  r  r  r  r  r  r  Ú	iter_nextr  r  Údict_getitemr@  r"  r%  r*  r4  r<  rA  rK  r[  r]  r_  rf  r|  ÚGLOBAL_KEY_PREFIXr~  rƒ  r‡  r�  r�  r–  r›  r¡  rl  r   rö  rü  Úorig_code_maprý  rþ  Úseen_code_mapr  rÆ  r  r  r  r)  r1  r  r3  rp  rq  rt  rI  r  r–  r˜  r�  r¤  r§  rª  r¦  r°  r²  r·  r½  rÈ  rÍ  rß  rà  rá  Úall_hook_namesrÜ  rë  rí  rñ  rù  rü  r  r  r  r*  r,  r0  r4  r=  rG  rN  rU  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+  r.  r-  r4  r6  r:  r=  rC  rG  Ú_disable_dynamorJ  rL  rO  rT  rW  rZ  r\  rp  ry  r~  r�  r‡  r‹  r�  r�  r‘  r“  r˜  rš  rž  r£  r  s   0ri   Ú<module>r	     s3  ðòõ #ã Û Û Û Û Û Û 
Û Û Û 	Û Û Û Û Û Û Û Û Û 	Û 	Û 
Û Û Û Û Û Û Û Û Û ß ,ß =Ý $Ý ß -÷÷ ÷ ó ÷ 0ã Û Û ,ß $Ð $Ý ÷ó õ <ß Oß ;Ñ ;Ý =÷õ ÷ GÝ &Ý 1Ý /Ý Fß >Ý -å 'ð 
××÷÷ ÷ õ BÝ;÷õ =Ý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ó ð %'Ð �>Ó &ð BÐ ØoÐ ØÐ.Ð/Ð/UÐVÐ Ø×Ó˜Ó!€ð 46Ð Ð0Ó 5ð
 .9×-DÓ-DÀUÓ-KÐ Ð*Ó Kà—“Ó!€ô�t—y’yô ÷%Jñ %JðP
Ø
7ð
à.ð
ð 	õ
ð €
õ õð ?CÐ Ð;Ó Bõ*õ$õ$ð €õõ
õ$ð> !—“Ó(Ð õ0õ8ô˜4Ÿ9š9ô ÷f#ñ f#ðR	 —O“OÓ%Ð ð ôó ðð. ð !%Ø"'Ø,0Ø.2Ø&*Ø"&Ø!Ø/3ñMQØ	ðMQð ðMQð  ð	MQð
 *ðMQð ,ðMQð $ðMQð  ðMQð ðMQð  -ðMQð  õMQó ðMQð` 
ß 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õ&ñ 27³Ð ˜Ó 8Ø×Ò�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ð Ñ ð ×Ò÷@"ð @"ó ñ@"ðF %'Ñ !ð ?J×>OÓ>OÙ,ñ?Ñ Ð;ó ö
-ö` 3öF3ö0-ð`O3ØðO3àðO3ð ðO3ð ,ð	O3ð
 'ðO3ð 
öO3öd%ö!ö
&÷Qò Qðh
 59Ñ Ð1Ó 8öö*ð
 ð %*Ø"'ñ'Øð'à!ð'ð  ð'ð  õ	'ó ñ'ð@ ×Ò÷(ð (ó ñ(ô( Ð+õ  ò )Ó*�Õ ööö@ð  8<ñKØðKØ4ðKà÷Kð\ 
ðØ6ðàôó 
ñð
 
Ü =ó 
Ù =öö&
ð& ô7ó ñ7ð*Øððö÷,ñ ö$ö(ö
ð< ×Ò�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�ò ˜dŸiši›×1Ò1×8Ò8Ô:óÚ:ˆvºhÀv×>N‡FÑ:ñÑ ñ ˆCƒL�ÙˆCƒL�öö
Göö1öö
:ñ �	ööñ ×Ò�ð ‡�‡‚ô@ó ñ@öö
ö8ö(öMð Øñ	Ø!ðà
ðð ðð ð	ð
 
÷ð4 #(ñ	*Øð*àð*ð 	ð*ð  ð	*ð
 	÷*ðZMØ
ðMàDöMö9ööB ð
 !Ñ ÷ =ö7öð <Añ(Øð(Ø!ð(Ø48ð(à÷(ö$
ð"?Ø	ð?ØEð?àö?ö;÷ñ ð Ø ØØØØ!&ØØ%(§Y¢YØ5:Ø!&Ø"ØðLFØ	ðLFà	ðLFð ðLFð ð	LFð
 
ðLFð ðLFð ðLFð ðLFð ðLFð #ðLFð /3ðLFð ðLFð ðLFð ðLFð 
÷LFö^
Hð
 ×Ñô=ó ñ=ñ  'Ó(�ð ;F×:QÓ:QÑRVÓ:W�Ð7Ó Wð LNÑ ÐHÓ Mñ 'Ó(�ð ‡‚ô,ó ñ,ö&÷
ñ ö$ð
/Ø!ð/Ø*-ð/ØEIð/àö/ð. Ø	ð Ø1ð à÷ ÷F2ð "'ñ	UØ
ð	Uà!ð	Uð ð	Uð 	÷		Uð 	Uð "'ñTØ
ðTà!ðTð ðTð 	÷	Tð Tðn —“Ó!�÷1ð õ"ó ñ"ðPØðPØ$ðPØ,/ðPØ9<ðPØHKðPà÷P÷f/÷d
÷*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ð
 Ñ ÷!÷"ð
 ×Òõó ñð ×Òõ"ó ñ"÷,÷
ð 
øðU_ ó Ø	ƒBðûð@ ó 	Úð	üòJRùò
 Oùòùò
 SùÚPùò Oùòs‘   Æ!AS, Æ&B*AS; òATò.ATóATó-ATôATô,ATõ"ATõ8ATö!ATö7AT÷/AT!øAT!ø?AT&ùAT&ÁS,AS8ÁS7AS8ÁS;ATÁTAT