Ë
    øÿæiøÐ ã                  óî'  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddlm!Z!m"Z" ddlm#Z#m$Z$ ddlm%Z% ddlm&Z& ddlm'Z'm(Z( dd	lm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 dd
l5m6Z6m7Z7 ddl8Z8ddl9Z8ddl:Z8ddl;m<c m=Z> ddl8m?Z? ddl@mAZAmBZBmCZCmDZD ddlEmFZF ddlGmHZHmIZI ddlJmKZKmLZLmMZM ddlNmOZO ddlPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZX ddlYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z` ddlambZbmcZc ddldmeZe ddlfmgZg ejÐ                  r>ddlimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZs ddltmuZu ddlvmwZw ddlxmyZymzZz ddl{m|Z| dd l}m~Z~ dd!lm€Z€ 	 ddl�Z‚	 ddl„Z8ddl…m†Z‡ dd"lJmˆZˆ dd#l„m‰Z‰ dd$lŠm‹Z‹ e‚rye‚e‚�j                  e‚�j                  e‚�j                  fZ�d%e�d&<   e‚e‡e‚�j                  e‡�j                  e‚�j                  e‡�j                  e‚�j                  e‡�j                  iZ‘nd'Z�i Z‘dd(l’m“Z“m”Z”m•Z•  e3d)«      Z— e3d*«      Z˜ e6d+«      Z™e8�j4                  �j6                  �j8                  Z�e8�j4                  �j6                  �j<                  ZŸe8�j4                  �j6                  �j@                  Z¡ e�jD                  ejB                  «      Z£d,e�d-<   i Z¤d.e�d/<   d0Z¥d1Z¦d2e¦› d3�Z§ e�jP                  e©«      Zªi Z«d4e�d5<    e�jD                  e¬«      Z­d6e�d7<    e�j\                  «       Z¯ G d8„ d9e
�j`                  «      Z± G d:„ d;«      Z²	 	 	 	 	 	 �djd<„Z³da´�dkd=„Zµ�dkd>„Z¶da·d?e�d@<   �dldA„Z¸�dmdB„Z¹�dkdC„Zºda»�dndD„Z¼�dodE„Z½�dkdF„Z¾ e�j~                  «       ZÀ�dpdG„ZÁ�dqdH„ZÂ G dI„ dJe
�j`                  «      ZÃ G dK„ dL«      ZÄ e�j~                  «       ZÅe$�drdM„«       ZÆe$	 	 	 	 	 	 	 	 �ds	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dtdO„«       ZÇe0�du�dvdP„«       ZÈe0	 �du	 	 	 	 	 �dwdQ„«       ZÈ	 �dx	 	 	 	 	 �dydR„ZÈe�j’                  �dkdS„«       ZÊe8�j–                  e8�j˜                  e8�jX                  fe8�jš                  e8�jœ                  e8�jž                  fe8�j                   e8�j¢                  e8�j¤                  fe8�j¦                  e8�j¨                  fe8�jª                  e8�j¬                  fe8�j®                  e8�j°                  fe8�j²                  e8�j´                  e8�j¶                  fe8�j¸                  e8�jº                  e8�j¼                  fe8�j¾                  e8�jÀ                  e8�jÂ                  fe8�jÄ                  e8�jÆ                  fi
Zä G dT„ dU«      Zå eå«       Zæ�dzdV„Zç�dkdW„Zè e�jÒ                  dXe�jÔ                  «      Zë G dY„ dZe�jØ                  «      Zí�dzd[„Zî�dzd\„Zï�d{d]„Zð�d|d^„Zñ�d}d_„Zò�d~d`„Zó�dda„Zô�d€db„Zõ G dc„ dd«      Zöe0�d�de„«       Z÷e0	 	 	 	 	 	 �d‚df„«       Z÷e0�dƒdg„«       Z÷�d„dh„Z÷ eø«       Zùdie�dj<   e�jô                  dkk\  rHe�jö                  e�jø                  ejl                  ejf                  e�jú                  e�jü                  fZù	 	 	 	 	 	 �d…dl„Zÿe�jô                  dmk\  reùejh                  fz  Zù�d†dn„�Z �d†do„�Z�d†dp„�Ze0	 	 	 	 �d‡dq„«       �Ze0	 	 	 	 �dˆdr„«       �Z	 	 	 	 �d†ds„�Ze4e�j                  e�j
                  e�j                  e�j                  f   �Zdte�du<   	 	 	 	 �d‰dv„�Z		 	 	 	 �dŠdw„�Z
e�j                  e�j                  e�j                  e�j                  e�j                  e�j                   dxœ�Zdydzd{d|d}d~dxœ�Z	 	 	 	 �d‹d„�Z�dŒd€„�Z�d�d�„�Z�dŽd‚„�Z�d�dƒ„�Z�d�d„„�Z ejL                  d…«      �d‘d†„«       �Z�d’�d“d‡„�Z�d”dˆ„�Z�d•d‰„�Z�d•dŠ„�Zd‹�Ze�j>                   G dŒ„ d�«      «       �Z dŽ�Z! e�jD                  �e!¬�«      �a#d�e�d‘<   �d–d’„�Z$�d—d“„�Z%�d—d”„�Z&�d—d•„�Z'	 	 	 	 	 	 	 	 	 	 	 	 �d˜d–„�Z(�d™d—„�Z)�dkd˜„�Z*�dšd™„�Z+ G dš„ d›«      �Z,d�a-dœe�d�<   �d›dž„�Z.�dœdŸ„�Z/e$	 	 �d�	 	 	 	 	 	 	 �džd „«       �Z0e�j>                   G d¡„ d¢«      «       �Z1 G d£„ d¤eö«      �Z2 �e2«       �e2�_3        �dŸd¥„�Z4�d d¦„�Z5�d¡d§„�Z6dd¨œ	 	 	 	 	 �d¢d©„�Z7e0	 	 	 	 �d£dª„«       �Z8e0�d¤d«„«       �Z8�d¥d¬„�Z8�d¦d­„�Z9e$�d§d®„«       �Z:	 	 	 	 �d¨d¯„�Z;�du�d©d°„�Z<�dªd±„�Z=�d�d²„�Z>�d«d³„�Z? ejL                  d«      �d¬dµ„«       �Z@�d­d¶„�ZA	 �d®	 	 	 	 	 	 	 �d¯d·„�ZB�d°d¸„�ZC e&d¹«      �d±dº„«       �ZDeÞe¬�eEeã�eF�eG �eHd«      �eI�j”                  �eK�j”                  ejN                  e8�j˜                  e8�jš                  e8�jœ                  e8�jž                  e8�j                   e8�j¢                  e8�j4                  �j¤                  �j¦                  e8�j¨                  �jª                  h�ZVd»e�d¼<    ec«       r0dd�lW�ZW�eV�j±                  �eW�j²                  �jš                  «       	 �d²d½„�ZZe�j¶                  �d³d¾„«       �Z\�d´d¿„�Z]�dµdÀ„�Z^�d¶dÁ„�Z_�d¶dÂ„�Z`�d·dÃ„�Za�d·dÄ„�Zb	 	 	 	 	 	 �d·dÅ„�Zc�d·dÆ„�Zd �eHi �jË                  «       «      �ZfdÇe�dÈ<    �eHi �jÏ                  «       «      �ZhdÉe�dÊ<    �eHi �jÓ                  «       «      �ZjdËe�dÌ<    �eH e"«       �jÏ                  «       «      �ZkdÉe�dÍ<    �eH �eld'«      «      �ZmdÎe�dÏ<    �eH �el �end«      «      «      �ZodÎe�dÐ<   �em�jà                  �Zq�er�jæ                  �Zt�eu�jæ                  �Zv e�jî                  �eu�jð                  �jÏ                  «       e"�jð                  �jÏ                  «       «      D � ch c]  }  �ey| «      r| ’Œ c} �Zz�e{�jð                  �jÏ                  «       D � ch c]  }  �ey| «      sŒ| ’Œ c} �Z|�e}�jð                  �jÏ                  «       D � ch c]  }  �ey| «      sŒ| ’Œ c} �Z~eø�jæ                  �Zeø�jð                  �jÏ                  «       D � ch c]  }  �ey| «      sŒ| ’Œ c} �Z€�e��jð                  �jÏ                  «       D � ch c]  }  �ey| «      sŒ| ’Œ c} �Z‚�e��j                  �Z„�eF�jð                  �jÏ                  «       D � ch c]  }  �ey| «      sŒ| ’Œ c} �Z… �eHe
�j`                  «      �jð                  �jÏ                  «       D � ch c]  }  �ey| «      sŒ| ’Œ c} �Z† e3dÑ«      �Z‡ e3dÒ«      �Zˆ�d¸dÓ„�Z‰�d¹dÔ„�ZŠ�dºdÕ„�Z‹�d»dÖ„�ZŒ�d¼d×„�Z��dºdØ„�ZŽ�e��Z��d½dÙ„�Z‘�d¾dÚ„�Z’�eu�j                  �Z“e8j~                  �j(                  �d¿dÛ„«       �Z•�dÀdÜ„�Z–�dÁdÝ„�Z—�dÂdÞ„�Z˜�dÃdß„�Z™�dÄdà„�Zš	 	 �dÅ	 	 	 	 	 	 	 	 	 �dÆdá„�Z›	 �du	 	 	 	 	 	 	 	 	 �dÇdâ„�Zœ	 	 	 	 �dÈdã„�Z��dÉdä„�Zž�dÊdå„�ZŸ�dËdæ„�Z dç�Z¡ddèl�m¢�Z¢ �dÌdé„�Z£�dÍdê„�Z¤dNdëœ	 	 	 	 	 	 	 �dÎdì„�Z¥�dÏdí„�Z¦	 	 	 	 	 	 �dÐdî„�Z§�dÑdï„�Z¨�du�dÒdð„�Z©ddNdñdNdòdNdNeª�jT                  dNdNdNdóf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dÓdô„�Z«�dÔdõ„�Z¬ejH                  �d§dö„«       �Z­ eö«       �Z® e�jD                  �e�«      �Z¯d÷e�dø<   g �Z°dùe�dú<    eö«       �Z±e�j¶                  �dÕdû„«       �Z²�dÖdü„�Z³�d×�dØdý„�Z´�dÙdþ„�Zµ	 	 	 	 	 	 	 	 �dÚdÿ„�Z¶	 	 	 	 	 	 �dÛ�d „�Z·�dÜ�d„�Z¸	 �du	 	 	 	 	 	 	 �dÝ�d„�Z¹	 �du	 	 	 	 	 	 	 �dÝ�d„�Zº e�j~                  «       �Z»�dÞ�d„�Z¼e$�dß�d„«       �Z½	 	 	 	 	 	 	 	 	 	 	 	 �dà�d„�Z¾�dá�d„�Z¿�dâ�d„�ZÀ�dã�d	„�ZÁ�dä�d
„�ZÂ�då�d„�ZÃ�d†�d„�ZÄ�dæ�d„�ZÅ�dç�d„�ZÆ	 �du	 	 	 	 	 �dè�d„�ZÇ G �d„ �de
�j`                  «      �ZÈ�dé�d„�ZÉ	 	 	 	 	 	 	 	 �dê�d„�ZÊ�dë�d„�ZË	 	 	 	 	 	 	 	 	 	 	 	 �dì�d„�ZÌg �d¢�ZÍ�d�dg�ZÎg �d¢�ZÏ�eÍ�eÎz   �eÏz   �ZÐ�dœ�d„�ZÑ	 	 	 �dí	 	 	 	 	 	 	 	 	 �dî�d„�ZÒ	 	 	 �dí	 	 	 	 	 	 	 	 	 �dï�d„�ZÓ�dð�d„�ZÔ�dð�d„�ZÕ G �d„ �d e,e™e˜f   «      �ZÖ�dñ�d!„�Z× G �d"„ �d#«      �ZØ G �d$„ �d%e,e™e˜f   «      �ZÙ�dò�d&„�ZÚ	 	 	 	 	 	 	 	 �dó�d'„�ZÛ�d��d(„�ZÜ�d��d)„�ZÝ�dô�d*„�ZÞ�dô�d+„�Zß�dõ�d,„�Zà�dö�d-„�Záe�j>                   G �d.„ �d/«      «       �Zâ�d÷�d0„�Zã�dø�d1„�Zä�dù�d2„�Zå�d†�d3„�Zæ�d†�d4„�Zç�dú�d5„�Zè�d†�d6„�Zé�dû�d7„�Zê	 	 	 	 	 	 �dü�d8„�Zë�d†�d9„�Zì�dý�d:„�ZíejH                  	 �dþ	 	 	 	 	 	 	 �dÿ�d;„«       �Zî�d �d<„�Zï�d�d=„�Zð G �d>„ �d?e8�j4                  �j6                  «      �Zñ	 	 	 	 	 	 	 	 �d�d@„�Zò�d�dA„�Zó�d�dB„�Zô G �dC„ �dD«      �Zõ �e{«       �Zö�dEe��dF<   �d®�d�dG„�Z÷�d�dH„�ZøejH                  �d§�dI„«       �Zù�dœ�dJ„�Zú�d�dK„�Zû�d�dL„�Zü�d	�dM„�Zý�dk�dN„�Zþ�d
�dO„�Zÿ�d‘�dP„�Z �d�dQ„�Z�d�dR„�Ze8�j                  �d�dS„«       �Ze8�j                  �d�dT„«       �Ze8�j                  �d�dU„«       �Z�d�dV„�Z�d�dW„�Z�d�dX„�Z	 G �dY„ �dZ«      �Z
 G �d[„ �d\eÞ«      �Z�d�d]„�Z�d^�Zd´e��d_<   �dÖ�d`„�Ze$�d§�da„«       �Ze$�d§�db„«       �Z�d�dc„�ZdN�a�dœ�dd„�Z�d�de„�Ze8�j                  �d�df„«       �Ze8�j                  �d�dg„«       �Z�d�dh„�Z�d�di„�Zy# eƒ$ r dZ‚Y �Œ$w xY w# e–$ r Y �ŒŠw xY wc c} w c c} w c c} w c c} w c c} w c c} w c c} w (  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                  ó   — e Zd ZdZdZdZy)ÚReInplaceTriggerr4   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚAUTO_FUNC_V1ÚAUTO_FUNC_V2Ú
TRITON_OPSrN   ó    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/_dynamo/utils.pyr\   r\   Á   s   „ Ø€LØ€LØ�Jre   r\   c                  ó¨   — e Zd ZU  ej                  e«      Zded<   ed
d„«       Z	edd„«       Z
edd„«       Zedd„«       Zedd„«       Zedd„«       Zy	)ÚReinplaceCountersz!collections.defaultdict[str, int]Ú_valuesc                óX   — |dk7  r%| j                   d|j                  › �xx   |z  cc<   y y ©Nr   Úmissed_bytes_©ri   Úname)ÚclsÚtriggerÚbytess      rf   Úadd_missed_bytesz"ReinplaceCounters.add_missed_bytesË   s-   € à�AŠ:Ø�K‰K˜-¨¯© ~Ð6Ó7¸5Ñ@Ô7ð re   c                óX   — |dk7  r%| j                   d|j                  › �xx   |z  cc<   y y ©Nr   Úmissed_tensors_rm   )ro   rp   Úcounts      rf   Úadd_missed_opportunitiesz*ReinplaceCounters.add_missed_opportunitiesÑ   s-   € à�AŠ:Ø�K‰K˜/¨'¯,©,¨Ð8Ó9¸UÑBÔ9ð re   c                ó8   — | j                   j                  «        y ©N)ri   Úclear©ro   s    rf   rz   zReinplaceCounters.clearÖ   s   € à�‰×ÑÕre   c                óx   — d}t         D ].  }|| j                  j                  d|j                  › �d«      z  }Œ0 |S rt   ©r\   ri   Úgetrn   ©ro   Úsumrp   s      rf   Úget_total_missedz"ReinplaceCounters.get_total_missedÚ   s:   € àˆß'ˆGØ�3—;‘;—?‘? _°W·\±\°NÐ#CÀQÓGÑG‰Cð (àˆ
re   c                óx   — d}t         D ].  }|| j                  j                  d|j                  › �d«      z  }Œ0 |S rk   r}   r   s      rf   Úget_total_missed_bytesz(ReinplaceCounters.get_total_missed_bytesá   s:   € àˆß'ˆGØ�3—;‘;—?‘? ]°7·<±<°.Ð#AÀ1ÓEÑE‰Cð (àˆ
re   c                óL   — | j                   rt        dd| j                   «       y y )NÚinductorÚreinplace_counters)ri   r*   r{   s    rf   ÚlogzReinplaceCounters.logè   s!   € ð �;Š;Ü˜:Ð';¸S¿[¹[ÕIð re   N)rp   r\   rq   ÚintÚreturnÚNone)rp   r\   rv   rˆ   r‰   rŠ   ©r‰   rŠ   ©r‰   rˆ   )r_   r`   ra   ÚcollectionsÚdefaultdictrˆ   ri   Ú__annotations__Úclassmethodrr   rw   rz   r�   rƒ   r‡   rN   re   rf   rh   rh   Ç   s˜   … Ø1H°×1HÑ1HÈÓ1M€GÐ.ÓMð òAó ðAð
 òCó ðCð òó ðð òó ðð òó ðð òJó ñJre   rh   c                óª   — 	 dd l }|j                  | |¬«      S # t        $ r0 dj                  d„ t        j                  |g| «      D «       «      cY S w xY w)Nr   ©ÚheadersÚ
c              3  óZ   K  — | ]#  }d j                  t        t        |«      «      –— Œ% y­w)ú, N)ÚjoinÚmapÚstr)Ú.0Úrows     rf   Ú	<genexpr>ztabulate.<locals>.<genexpr>ø   s$   è ø€ ð 
Ù0P¨ˆD�I‰I”cœ#˜s“m×$Ñ0Pùs   ‚)+)ÚtabulateÚImportErrorr—   Ú	itertoolsÚchain)Úrowsr“   r�   s      rf   r�   r�   ï   sZ   € ð
Ûà× Ñ  ¨wÐ Ó7Ð7øÜò 
Ø�y‰yñ 
Ü09·±ÀÀ	È4Ô0Pó
ó 
ò 	
ð
ús   ‚ ™6AÁAc                 ó   — t         dz   a y ©Nr4   )Ú
curr_framerN   re   rf   Úincrement_framer¥     s   € ä˜a‘�Jre   c                 óX   — t         j                  «        t        j                  «        day ©Nr   )rZ   rz   rX   r¤   rN   re   rf   Úreset_frame_countr¨     s   € ä×"Ñ"Ô$Ü×"Ñ"Ô$Ø�Jre   ú!Optional[list[Callable[[], str]]]Ú_recompile_user_contextsc                ó>   — t         €g a t         j                  | «       y)aj  
    Register a hook to be called when a recompile is triggered. The hook
    should return a string describing user contexts that are not available
    to the compiler, such as the current training epoch. This is useful for
    debugging and data analysis for recompile. For data retention purposes,
    the user context string is capped at 256 characters.
    N)rª   Úappend)Úhooks    rf   Ú(register_hook_for_recompile_user_contextr®     s   € ô  Ð'Ø#%Ð Ü×#Ñ# DÕ)re   c                 ó   — t         S ry   ©rª   rN   re   rf   Ú#get_hook_for_recompile_user_contextr±     s   € Ü#Ð#re   c                 ó   — da y)z@Clear any registered recompile user-context hooks (test helper).Nr°   rN   re   rf   Úreset_recompile_user_contextsr³   #  s
   € ð  $Ñre   c                ó   — t         | z  a y ry   )Úop_count)Úcnts    rf   Úincrement_op_countr·   ,  s   € ä��O�Hre   c                 ó¢   — i } t         j                  «       D ]  \  }}|dz  | |<   Œ | j                  dd«      | j                  dd«      z   | d<   | S )Nç    eÍÍAÚentire_frame_compiler   Úentire_backward_compileÚtotal_wall_time)rZ   Úitemsr~   )Útotal_by_keyÚphaseÚtimings      rf   Úcalculate_time_spentrÁ   3  sg   € Ø€LÜ1×7Ñ7Ö9‰ˆˆvà$ s™lˆ�UÒð :ð '3×&6Ñ&6Ø ó'à×ÑÐ2°AÓ6ñ'7€LÐ"Ñ#ð Ðre   c            	     óŠ   — t        «       } d}| j                  «       D ]  \  }}|› d|› dt        |d«      › �}Œ t        |«       y )NzTIMING:Ú Ú:é   )rÁ   r½   ÚroundÚprint)r¾   ÚoutÚkeyÚvalues       rf   Úprint_time_reportrË   E  sL   € Ü'Ó)€Là
€CØ"×(Ñ(Ö*‰
ˆˆUØ��Q�s�e˜1œU 5¨!›_Ð-Ð.‰ð +ô 
ˆ#…Jre   c                 ót   — t        t        d«      st        t        ¬«      t        _        t        j                  S )NÚmetrics_context©Úon_exit)ÚhasattrÚ_metrics_context_tlsr    Úrecord_compilation_metricsrÍ   rN   re   rf   Úget_metrics_contextrÓ   g  s-   € ÜÔ'Ð):Ô;Ü/=Ü.ô0
ÔÔ,ô  ×/Ñ/Ð/re   c                 ót   — t        t        d«      st        t        ¬«      t        _        t        j                  S )NÚruntime_metrics_contextrÎ   )rÐ   rÑ   r!   rÒ   rÕ   rN   re   rf   Úget_runtime_metrics_contextrÖ   o  s-   € ÜÔ'Ð)BÔCÜ7LÜ.ô8
ÔÔ4ô  ×7Ñ7Ð7re   c                  ó   — e Zd ZdZdZdZdZy)ÚCompileEventLogLevelzÿ
    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^   N)r_   r`   ra   Ú__doc__ÚCHROMIUMÚPT2_COMPILEÚCOMPILATION_METRICrN   re   rf   rØ   rØ   w  s   „ ñð €HØ€KØÑre   rØ   c                  óê  — e Zd ZdZedej                  f	 	 	 	 	 	 	 	 	 dd„«       Ze	 d	 	 	 	 	 	 	 	 	 dd„«       Ze	 d	 	 	 	 	 	 	 dd„«       Z	e	 	 	 	 	 	 	 	 	 	 dd„«       Z
edej                  f	 	 	 	 	 	 	 dd„«       Ze	 	 	 	 	 	 	 	 	 	 dd	„«       Zeej                  f	 	 	 	 	 	 	 dd
„«       Zedd„«       Zedd„«       Zedd„«       Zeddd„«       Ze	 d	 	 	 	 	 	 	 dd„«       Zedd„«       Zedd„«       Zy)ÚCompileEventLoggeraÞ  
    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                óÚ   — |€t        j                  «       }t        «       }|t        j                  k(  rd}n!|t        j
                  k(  rd}nt        d«      ‚|j                  | |||«       y )NFTzjCannot log instant event at COMPILATION_METRIC level. Please choose one of CHROMIUM_EVENT or COMPILE_EVENT)ÚtimeÚtime_nsÚget_chromium_event_loggerrØ   rÚ   rÛ   ÚRuntimeErrorÚlog_instant_event)Ú
event_nameÚmetadatará   Ú	log_levelÚchromium_logÚlog_pt2_compile_events         rf   rä   z$CompileEventLogger.log_instant_eventž  sp   € ð ˆ?Ü—l‘l“nˆGÜ0Ó2ˆØÔ,×5Ñ5Ò5Ø$)Ñ!ØÔ.×:Ñ:Ò:Ø$(Ñ!äØ|óð ð 	×&Ñ&Ø˜ Ð+@õ	
re   c                ó  — t        «       }|j                  «       }|t        j                  k(  r |j                  | fi |¤Ž y|t        j
                  k(  r4|j                  «       }| |vrt        d| «      ‚ |j                  | fi |¤Ž y|t        j                  k(  sJ ‚|j                  «       }| |k7  rt        d«      ‚t        «       }|j                  «       st        d«      ‚|j                  ||«        |j                  | fi |¤Ž y)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           rf   Úadd_datazCompileEventLogger.add_data´  s   € ô 1Ó2ˆØ+×DÑDÓFÐàÔ,×5Ñ5Ò5Ø'ˆL×'Ñ'¨
Ñ?°hÓ?ØÔ.×:Ñ:Ò:Ø#/×#HÑ#HÓ#JÐ ØÐ!5Ñ5Ü"ðAð ó	ð ð (ˆL×'Ñ'¨
Ñ?°hÓ?àÔ 4× GÑ GÒGÐGÐGØ$×8Ñ8Ó:ˆIà˜YÒ&Ü"ðBóð ô 2Ó3ˆOØ"×.Ñ.Ô0Ü"Øqóð ð
 ×"Ñ" 8¨YÔ7Ø'ˆL×'Ñ'¨
Ñ?°hÓ?re   c                ó~   — t        «       j                  «       }|€t        d«      ‚t        j                  || |fi |¤Ž y)zC
        Syntactic sugar for logging to the toplevel event
        NzWNo toplevel event active. Please only call this function within a dynamo_timed context.)râ   rí   rã   rÞ   ró   )rç   rð   ræ   rò   s       rf   Úadd_toplevelzCompileEventLogger.add_toplevelâ  sD   € ô .Ó/×CÑCÓEˆ	ØÐÜØióð ô 	×#Ñ# I¨y¸)ÑPÀxÓPre   c                óŠ  — t        «       }|t        j                  k(  s|t        j                  k(  r|j	                  | ||«       y|t        j
                  k(  sJ ‚|j                  «       }| |k7  rt        d«      ‚t        «       }|j                  «       st        d«      ‚|j	                  ||«       |j	                  | ||«       y)z:
        Increments an existing field, or adds it
        z°Log level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `increment_toplevel` directly.úhNo metrics context is in progress. Please only call this function within a metrics context/dynamo_timed.N)
râ   rØ   rÚ   rÛ   Ú	incrementrÜ   rí   rã   rÓ   rî   ©rå   rç   rÉ   rÊ   rè   rò   rÍ   s          rf   rø   zCompileEventLogger.incrementð  sÄ   € ô 1Ó2ˆàÔ-×6Ñ6Ò6ØÔ0×<Ñ<Ò<à×"Ñ" :¨s°EÕ:àÔ 4× GÑ GÒGÐGÐGØ$×8Ñ8Ó:ˆIØ˜YÒ&Ü"ð}óð ô
 2Ó3ˆOØ"×.Ñ.Ô0Ü"Ø~óð ð ×%Ñ% c¨5Ô1Ø×"Ñ" :¨s°EÕ:re   r4   c                ó‚   — t        «       }|j                  «       }|€t        d«      ‚t        j	                  ||| |«       y)zX
        Increments a value on the toplevel metric. By default, logs to metric.
        Nú_No toplevel event active. Please only call this function within a metrics context/dynamo_timed.)râ   rí   rã   rÞ   rø   ©rÉ   rÊ   rç   rè   rò   s        rf   Úincrement_toplevelz%CompileEventLogger.increment_toplevel  sF   € ô 1Ó2ˆØ ×4Ñ4Ó6ˆ	ØÐÜØqóð ô 	×$Ñ$ Y°	¸3ÀÕFre   c                óŠ  — t        «       }|t        j                  k(  s|t        j                  k(  r|j	                  | ||«       y|t        j
                  k(  sJ ‚|j                  «       }| |k7  rt        d«      ‚t        «       }|j                  «       st        d«      ‚|j	                  ||«       |j	                  | ||«       y)zl
        Add metadata <value> to a set of values with key <key>. Creates a set if it doesn't exist.
        z¯Log level is COMPILATION_METRIC, but event_name isn't the toplevel event. CompilationMetrics must be logged to the toplevel event. Consider using `add_to_set_metric` directly.r÷   N)
râ   rØ   rÚ   rÛ   Ú
add_to_setrÜ   rí   rã   rÓ   rî   rù   s          rf   rÿ   zCompileEventLogger.add_to_set   sÄ   € ô 1Ó2ˆàÔ-×6Ñ6Ò6ØÔ0×<Ñ<Ò<à×#Ñ# J°°UÕ;àÔ 4× GÑ GÒGÐGÐGØ$×8Ñ8Ó:ˆIØ˜YÒ&Ü"ð|óð ô
 2Ó3ˆOØ"×.Ñ.Ô0Ü"Ø~óð ð ×&Ñ& s¨EÔ2Ø×#Ñ# J°°UÕ;re   c                ó‚   — t        «       }|j                  «       }|€t        d«      ‚t        j	                  ||| |«       y)z±
        Same as add to set, just does it automatically to the toplevel event instead of having to explicitly name it.
        Defaults to COMPILATION_METRIC log level.
        Nrû   )râ   rí   rã   rÞ   rÿ   rü   s        rf   Úadd_to_set_toplevelz&CompileEventLogger.add_to_set_toplevel?  sF   € ô 1Ó2ˆØ ×4Ñ4Ó6ˆ	ØÐÜØqóð ô 	×%Ñ% i°¸CÀÕGre   c                óR   — t        j                  | t        j                  fddi|¤Ž y)zÓ
        Add <metadata> to <event_name> in chromium. Each key/value of metadata will appear in the chromium trace.
        <event_name> should be the name of a timed event span passed to `dynamo_timed`.
        rð   FN)rÞ   ró   rØ   rÚ   ©rå   ræ   s     rf   ÚchromiumzCompileEventLogger.chromiumS  s.   € ô 	×#Ñ#ØÔ,×5Ñ5ñ	
ØAFð	
ØJRó	
re   c                óR   — t        j                  | t        j                  fddi|¤Ž y)aƒ  
        Add <metadata> to <event_name> in chromium and PT2 Compile Events.
        Each key/value of metadata will appear in the chromium trace. Each kwarg name becomes
        a column in PT2 Compile Events, with the corresponding kwarg value.
        <event_name> should be the name of a timed event span passed to `dynamo_timed`,
        with log_to_pt2_compile_events=True.
        rð   FN)rÞ   ró   rØ   rÛ   r  s     rf   Úpt2_compilezCompileEventLogger.pt2_compile]  s.   € ô 	×#Ñ#ØÔ,×8Ñ8ñ	
ØDIð	
ØMUó	
re   c                ó(  — t         j                  j                  j                  rb|r_dj	                  d„ |j                  «       D «       «      }t         j                  j                  j                  | › d|› �«      5  	 ddd«       yyy# 1 sw Y   yxY w)aM  
        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  ó0   K  — | ]  \  }}|› d |› �–— Œ y­w)Ú=NrN   )rš   ÚkÚvs      rf   rœ   z>CompileEventLogger.add_record_function_data.<locals>.<genexpr>w  s!   è ø€ Ð$MÑ<L±D°A°q¨ s¨!¨A¨3¤ZÑ<Lùs   ‚z_data: N)ÚtorchÚautogradÚprofilerÚ_is_profiler_enabledr—   r½   Úrecord_function)rå   ræ   Úmetadata_strs      rf   Úadd_record_function_dataz+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                óN   — t        j                  t        j                  | fi |¤Ž y)a6  
        Add <metadata> to the CompilationMetrics context. Also logs to PT2 Compile Events
        and chromium.
        Each key/value of metadata will appear in the chromium trace. Each kwarg name becomes
        a column in PT2 Compile Events and Dynamo Compile, with the corresponding kwarg value.
        N)rÞ   rõ   rØ   rÜ   )rð   ræ   s     rf   Úcompilation_metricz%CompileEventLogger.compilation_metric}  s%   € ô 	×'Ñ'Ü ×3Ñ3°Yñ	
ØBJó	
re   c                óP   — t         j                  | ||t        j                  «       y)zØ
        Log an instant event to chromium logs with name <event_name> at time <time_ns>. The `args` field in
        Perfetto will point to metadata. <time_ns> should be a value obtained from time.time_ns().
        N)rÞ   rä   rØ   rÚ   )rå   ræ   rá   s      rf   ÚinstantzCompileEventLogger.instant‰  s"   € ô 	×,Ñ,Ø˜ 'Ô+?×+HÑ+Hõ	
re   c                óT   — t        «       syt        «       } |j                  | fi |¤Ž y)zô
        Adds to an existing pt2_compile event, but silently returns if the event doesn't exist
        or ChromiumEventLogger is not initialized.
        This function is syntactic sugar for chromium_event_logger().try_add_event_data.
        N)Úchromium_event_log_activerâ   Útry_add_event_data)rå   ræ   rè   s      rf   Útry_add_pt2_compilez&CompileEventLogger.try_add_pt2_compile•  s*   € ô )Ô*ØÜ0Ó2ˆØ'ˆ×'Ñ'¨
Ñ?°hÓ?re   c                ó`   — t        «       syt        «       }|j                  «       sy | |i |¤Ž y)zŠ
        Special function that quietly runs a given method, returning if CHROMIUM_EVENT_LOG is None or metrics context is not set
        N)r  rÓ   rî   )Ú	method_fnÚargsÚkwargsrÍ   s       rf   Útry_zCompileEventLogger.try_¡  s1   € ô
 )Ô*ØÜ-Ó/ˆØ×*Ñ*Ô,ØÙ�4Ð"˜6Ó"re   )
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Š   ry   )rå   r™   ræ   rV   rá   r   r‰   rŠ   )r  zCallable[_P, Any]r  ú_P.argsr  ú	_P.kwargsr‰   rŠ   )r_   r`   ra   rÙ   ÚstaticmethodrØ   rÚ   rä   ró   rõ   rø   rÜ   rý   rÿ   r  r  r  r  r  r  r  r  rN   re   rf   rÞ   rÞ   …  s¡  „ ñð0 ð "&Ø*>×*GÑ*Gð	
Øð
à ð
ð ð
ð (ð	
ð
 
ò
ó ð
ð* ð  ð+@Øð+@à'ð+@ð ð+@ð ð	+@ð
 
ò+@ó ð+@ðZ à;@ðQØ'ðQØ48ðQØNTðQà	òQó ðQð ð;Øð;Ø$8ð;Ø?Bð;ØKNð;à	ò;ó ð;ð< ð Ø*>×*QÑ*QðGØðGàðGð (ðGð 
ò	Gó ðGð  ð<Øð<Ø$8ð<Ø?Bð<ØKNð<à	ò<ó ð<ð< ð +?×*QÑ*QðHØðHàðHð (ðHð 
ò	Hó ðHð& ò
ó ð
ð ò

ó ð

ð òó ðð$ ó	
ó ð	
ð àLPð	
Øð	
Ø#1ð	
Ø<Ið	
à	ò	
ó ð	
ð ò	@ó ð	@ð ò	#ó ñ	#re   rÞ   c              #  ó0  K  — t         j                  j                  j                  rRt         j                  j
                  j                  | «      }|j                  «        	 d–— |j                  ddd«       yd–— y# |j                  ddd«       w xY w­w)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__)rn   Úrfs     rf   Úcompile_time_record_functionr.  ±  sl   è ø€ ô ‡~�~×Ñ×3Ò3Ü�X‰X×Ñ×3Ñ3°DÓ9ˆØ
�‰Œð	*Ûà�K‰K˜˜d DÕ)äøð �K‰K˜˜d DÕ)üs   ‚ABÁ!A> Á%BÁ>BÂBFc	           
   #  ó"  K  — |r|}	| }
n| }	d}
| t         vr	g t         | <   t         |    }i }|r|j                  |«       |
r|j                  d|
i«       |�|j                  d|i«       t        «       }t        j                  «       }|j                  |	||||«       t        | › d�«      g}|r1|r|n| }|j                  t        d|› �«      j                  «       «       t        j                  j                  j                  «       du}|r®|j                  d«      sJ ‚t        t         d«      sdt         _        t         xj"                  d	z  c_        t         j"                  d	k(  rT|j                  t        d
«      j                  «       «       |s*d}|j                  t        |«      j                  «       «       	 t%        j&                  «       5 }|D ]  }|j)                  |«       Œ d–— ddd«       t        j                  «       }||z
  }|j                  |dz  «       |j+                  |	|i |||«       |rÁt,        |	xx   |z  cc<   t         xj"                  d	z  c_        t         j"                  dk(  }|dz  }|rAt/        «       }|j1                  «       rb|j3                  ||«       |rM|j3                  d|«       yt5        «       }|j3                  ||«       |r|d| dœ}|j3                  d||«       yyyyy# 1 sw Y   �ŒxY w# t        j                  «       }||z
  }|j                  |dz  «       |j+                  |	|i |||«       |rÁt,        |	xx   |z  cc<   t         xj"                  d	z  c_        t         j"                  dk(  }|dz  }|rCt/        «       }|j1                  «       r(|j3                  ||«       |r|j3                  d|«       w w w t5        «       }|j3                  ||«       |r|d| dœ}|j3                  d||«       w w w xY w­w)aÄ  
    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_startr.  r¬   r-   Úguardr  Ú_guardsÚCompileContextÚcurrent_compile_idÚendswithrÐ   Ú_dynamo_timed_tlsr3  Ú
contextlibÚ	ExitStackÚenter_contextÚlog_event_endrZ   rÓ   rî   rø   rÖ   )rÉ   Ú
phase_nameré   ræ   Údynamo_compile_column_usr6  r1  Úlog_waitcounterÚwaitcounter_name_overriderå   r0  ÚmetricsÚevent_metadatarè   Ústart_nsÚcx_mgrsÚwc_nameÚis_compile_timeÚ
runtime_wcÚstackÚcxÚend_nsÚtime_spent_nsÚis_outer_eventr5  rÍ   Úruntime_contextÚextras                               rf   Údynamo_timedrV  É  s  è ø€ ñl Øˆ
Ø‰àˆ
Øˆà
Ô*Ñ*Ø(*Ô  Ñ%ä& sÑ+€GØ€NÙØ×Ñ˜hÔ'ÙØ×Ñ˜y¨'Ð2Ô3ØÐØ×Ñ˜}¨kÐ:Ô;ä(AÓ(C€LÜ�|‰|‹~€HØ× Ñ Ø�H˜nÐ.CÀ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ô Ô(¨'Ô2Ø&'ÔÔ#Ü×Ò 1Ñ$Õô ×"Ñ" aÒ'Ø�N‰Nœ<Ð(MÓN×TÑTÓVÔWÙ"ØM�
Ø—‘œ|¨JÓ7×=Ñ=Ó?Ô@ð(QÜ×!Ñ!Ô# uÛ�Ø×#Ñ# BÕ'ð ã÷ $ô
 —‘“ˆØ Ñ)ˆØ�‰�} sÑ*Ô+Ø×"Ñ"Ø˜  HÐ.CÀZô	
ñ $ô % ZÓ0°MÑAÓ0ô ×#Ò# qÑ(Õ#Ü.×4Ñ4¸Ñ9ˆNà'¨4Ñ/ˆKÙÜ"5Ó"7�Ø"×.Ñ.Ô0Ø#×-Ñ-Ð.FÈÔTÙ%Ø'×1Ñ1°-ÀÕMä"=Ó"?�Ø×)Ñ)Ð*BÀKÔPÙ!à&0Ø&*Ø*5 oñ�Eð
 $×-Ñ-¨m¸[È%ÕPð "ð &ð 1ð $÷ $Ñ#ûô
 —‘“ˆØ Ñ)ˆØ�‰�} sÑ*Ô+Ø×"Ñ"Ø˜  HÐ.CÀZô	
ñ $ô % ZÓ0°MÑAÓ0ô ×#Ò# qÑ(Õ#Ü.×4Ñ4¸Ñ9ˆNà'¨4Ñ/ˆKÙÜ"5Ó"7�Ø"×.Ñ.Ô0Ø#×-Ñ-Ð.FÈÔTÙ%Ø'×1Ñ1°-ÀÕMð &ð 1ô
 #>Ó"?�Ø×)Ñ)Ð*BÀKÔPÙ!à&0Ø&*Ø*5 oñ�Eð
 $×-Ñ-¨m¸[È%ÕPð "ð- $üs8   ‚F4PÆ7L ÇK7Ç(L Ç0DPË7LË<L ÌDPÐPc                 ó   — y ry   rN   ©ÚreprÚ	aggregates     rf   Úcompile_timesr[  Z  s   € ØILre   c                 ó   — y ry   rN   rX  s     rf   r[  r[  ^  s   € ð &)re   c                óN  ‡— t         fdˆfd„}| dk(  r9t        D �cg c]  }| |t        |   d„ ¬«      f‘Œ }}d}|t        |d¬«      z  }|S | dk(  rKt        j                  «       D �cg c]  } ||d	„ ¬«      ‘Œ }}t	        t        j                  «       «      }||fS y
c c}w c c}w )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                ó`   •— ‰r |t        | «      «      S dj                  t        || «      «      S )Nr–   )r€   r—   r˜   )ÚvaluesÚitem_fnrZ  s     €rf   Úfmt_fnzcompile_times.<locals>.fmt_fnu  s+   ø€ ÙÙœ3˜v›;Ó'Ð'Ø�y‰yœ˜W fÓ-Ó.Ð.re   c                ó
   — | d›S )Nz.4frN   ©Úxs    rf   Ú<lambda>zcompile_times.<locals>.<lambda>|  s
   € ÈÈ3ÈÀjre   )r`  z!TorchDynamo compilation metrics:
)ÚFunctionzRuntimes (s)r’   Úcsvc                ó
   — | d›S )Nz.6frN   rc  s    rf   re  zcompile_times.<locals>.<lambda>„  s
   € ¨1¨S¨'¨
re   N)r_  zlist[float]r`  zCallable[[float], str]r‰   r™   )r™   rX   r�   r_  ÚlistÚkeys)	rY  rZ  ra  r
  r¡   rÈ   r  r_  r“   s	    `       rf   r[  r[  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                 óD   — t         j                  t        dd¬«      «       y )Nr™   TrX  )r‡   Úinfor[  rN   re   rf   Údump_compile_timesrm  Œ  s   € ä‡H�HŒ] °Ô6Õ7re   c                  ó&   — e Zd Zddd„Zdd„Zdd„Zy)	ÚDuplicateWarningCheckerc                ó2   — || _         | j                  «        y ry   )ÚmaxsizeÚreset)Úselfrq  s     rf   Ú__init__z DuplicateWarningChecker.__init__   s   € ØˆŒØ�
‰
�re   c                ó"   — t        «       | _        y ry   )r   Úset©rs  s    rf   rr  zDuplicateWarningChecker.reset¤  s   € Ü*5«-ˆ�re   c                ó^  — || j                   v r/| j                   j                  |d¬«       t        j                  syyd | j                   |<   t	        | j                   «      | j
                  kD  r?| j                   j                  d¬«       t	        | j                   «      | j
                  kD  rŒ?y)NT)ÚlastF)rv  Úmove_to_endrL   ÚverboseÚlenrq  Úpopitem©rs  rÉ   s     rf   ÚaddzDuplicateWarningChecker.add§  s„   € Ø�$—(‘(‰?Ø�H‰H× Ñ  ¨4Ð Ô0Ü—>’>Øð
 ð !ˆD�H‰H�S‰MÜ�d—h‘h“- $§,¡,Ò.Ø—‘× Ñ  eÐ Ô,ô �d—h‘h“- $§,¡,Ó.àre   N)é   )rq  rˆ   r‰   rŠ   r‹   )rÉ   z!Union[str, tuple[object, object]]r‰   r"  )r_   r`   ra   rt  rr  r  rN   re   rf   ro  ro  Ÿ  s   „ ôó8ô	re   ro  c                 óˆ   — t         j                  j                  dd«      dk(  } | r
t        «       S t	        j
                  «       S )NÚTORCH_COMPILE_DEBUGÚ0Ú1)ÚosÚenvironr~   Úadd_file_handlerr@  rA  )Úcompile_debugs    rf   Úsetup_compile_debugr‰  ¶  s7   € Ü—J‘J—N‘NÐ#8¸#Ó>À#ÑE€MáÜÓ!Ð!ä×ÑÓ!Ð!re   c                 ó,   — t         j                  «        y ry   )Úgraph_break_dup_warning_checkerrr  rN   re   rf   Úreset_graph_break_dup_checkerrŒ  ¿  s   € Ü#×)Ñ)Õ+re   z§
    \x1B            # ESC
    \[              # [
    [0-?]*          # Parameter bytes
    [ -/]*          # Intermediate bytes
    [@-~]           # Final byte
    c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚStripAnsiFormatterz0Logging formatter that strips ANSI escape codes.c                óN   •— t         ‰| �  |«      }t        j                  d|«      S )NÚ )ÚsuperÚformatÚANSI_ESCAPE_PATTERNÚsub)rs  ÚrecordÚmsgÚ	__class__s      €rf   r’  zStripAnsiFormatter.formatÓ  s$   ø€ Ü‰g‰n˜VÓ$ˆÜ"×&Ñ& r¨3Ó/Ð/re   )r•  zlogging.LogRecordr‰   r™   )r_   r`   ra   rÙ   r’  Ú__classcell__©r—  s   @rf   rŽ  rŽ  Ð  s   ø„ Ù:÷0ñ 0re   rŽ  c                 óÀ  ‡‡— t         j                  j                  t        «       d«      } t        j                  | d¬«       t        j                  t         j                  j                  | d«      «      Š‰j                  t        d«      «       t        j                  d«      Š‰j                  ‰«       t        j                  «       }|j                  ˆˆfd„«       |S )NÚtorchdynamoT©Úexist_okz	debug.logz%(message)sztorch._dynamoc                 ó&   •— ‰j                  ‰ «      S ry   ©ÚremoveHandler©Úlog_file_handlerÚloggers   €€rf   re  z"add_file_handler.<locals>.<lambda>â  s   ø€ ˜v×3Ñ3Ð4DÔEre   )r…  Úpathr—   Úget_debug_dirÚmakedirsÚloggingÚFileHandlerÚsetFormatterrŽ  Ú	getLoggerÚ
addHandlerr@  rA  Úcallback)Úlog_pathÚ	exitstackr¢  r£  s     @@rf   r‡  r‡  Ø  s�   ù€ Ü�w‰w�|‰|œM›O¨]Ó;€HÜ‡K�K� 4Õ(ä×*Ñ*¬2¯7©7¯<©<¸À+Ó+NÓOÐØ×!Ñ!Ô"4°]Ó"CÔDÜ×Ñ˜Ó/€FØ
×ÑÐ&Ô'ä×$Ñ$Ó&€IØ×ÑÔEÔFØÐre   c                 óB  ‡‡— t        j                  «       } t        j                  �xt	        j
                  t        j                  «      Št        j                  j                  j                  «       D ](  Š‰j                  ‰«       | j                  ˆˆfd„«       Œ* | S | S )Nc                 ó&   •— ‰j                  ‰ «      S ry   rŸ  r¡  s   €€rf   re  z setup_log_file.<locals>.<lambda>ì  s   ø€  v×';Ñ';Ð<LÔ'Mre   )r@  rA  rL   Úlog_file_namer§  r¨  r  Ú_loggingÚ	_internalÚget_loggersr«  r¬  )r®  r¢  r£  s    @@rf   Úsetup_log_filerµ  æ  s}   ù€ Ü×$Ñ$Ó&€IÜ×ÑÐ'Ü"×.Ñ.¬v×/CÑ/CÓDÐÜ—n‘n×.Ñ.×:Ñ:Ö<ˆFØ×ÑÐ.Ô/Ø×ÑÔMÕNð =ð ÐàÐre   c                ó|   — t        «       › d|j                  › dt        | «      j                  › d|j                  › d�S )Nz/error_recordings/Ú_z.rec)r¥  Úco_nameÚtyper_   Úco_firstlineno)ÚexcÚcodes     rf   Úgen_record_file_namer½  ò  sB   € Ü‹oÐð Ø‡�€ˆa”�S“	×"Ñ"Ð# 1 T×%8Ñ%8Ð$9¸ð?ð ?re   c                óˆ  — 	 t         j                  j                  | «      rt        j	                  d| «       y t        j
                  t         j                  j                  | «      d¬«       t        | d«      5 }|j                  |«       d d d «       y # 1 sw Y   y xY w# t        $ r t        j                  d| «       Y y w xY w)Nz9Unable to write execution record %s; file already exists.Trœ  Úwbz#Unable to write execution record %s)r…  r¤  Úexistsr‡   Úwarningr¦  ÚdirnameÚopenÚdumpÚ	ExceptionÚ	exception)ÚfilenameÚexec_recordÚfs      rf   Úwrite_record_to_filerÊ  ÷  s‹   € ð
GÜ�7‰7�>‰>˜(Ô#Ü�K‰KØKÈXõô �K‰KœŸ™Ÿ™¨Ó1¸DÕAÜ�h Ô%¨Ø× Ñ  Ô#÷ &×%Ñ%ûäò GÜ�‰Ð;¸XÖFðGús5   ‚5B ¸A B Á8BÂ
B ÂBÂB ÂB ÂCÃ Cc                óT   — d}| j                   D ]  }d|j                  v sŒ|dz  }Œ |S )Nr   Úcallr4   )ÚnodesÚop)ÚgÚcÚns      rf   Úcount_callsrÒ    s0   € Ø	€AØ�WŒWˆØ�Q—T‘TŠ>Ø�‰F‰Að ð €Hre   c                ó   — | S ry   rN   rc  s    rf   ÚidentityrÔ    s   € Ø€Hre   c                óN   — 	 t        | «       y# t        $ r Y yt        $ r Y yw xY w©NTF)ÚhashÚ	TypeErrorÚ
ValueErrorrc  s    rf   ÚhashablerÚ    s.   € ðÜˆQŒØøÜò Ùäò Ùðús   ‚ Ž	$™$£$c                  ó   — y ry   rN   ©r  r  s     rf   ÚnothingrÝ    s   € Øre   c                  óJ   — e Zd ZdZd
d„Zdd„Zddd„Zdd„Zdd„Zdd„Z	d
d	„Z
y)ÚExactWeakKeyDictionaryz\Similar to weakref.WeakKeyDictionary, but use `is`/`id` rather than `==` to compare equalityc                ó    — i | _         i | _        y ry   ©r_  Úrefsrw  s    rf   rt  zExactWeakKeyDictionary.__init__#  s   € Ø&(ˆŒØ;=ˆ�	re   c                ó2   — | j                   t        |«         S ry   )r_  Úidr~  s     rf   Ú__getitem__z"ExactWeakKeyDictionary.__getitem__'  s   € Ø�{‰{œ2˜c›7Ñ#Ð#re   Nc                óL   — | j                   j                  t        |«      |«      S ry   )r_  r~   rä  )rs  rÉ   Údefaults      rf   r~   zExactWeakKeyDictionary.get*  s   € Ø�{‰{�‰œr #›w¨Ó0Ð0re   c                ó0   — t        |«      | j                  v S ry   )rä  r_  r~  s     rf   Ú__contains__z#ExactWeakKeyDictionary.__contains__-  s   € Ü�#‹w˜$Ÿ+™+Ð%Ð%re   c                ó¦   ‡ ‡— t        |«      Š‰‰ j                  vr't        j                  |ˆˆ fd„«      ‰ j                  ‰<   |‰ j                  ‰<   y )Nc                ó&   •— ‰j                  ‰«      S ry   )Ú
_remove_id)ÚrefÚidxrs  s    €€rf   re  z4ExactWeakKeyDictionary.__setitem__.<locals>.<lambda>3  s   ø€ ¸$¿/¹/È#Ô:Nre   )rä  râ  Úweakrefrí  r_  )rs  rÉ   rÊ   rî  s   `  @rf   Ú__setitem__z"ExactWeakKeyDictionary.__setitem__0  s?   ù€ Ü�‹gˆØ�d—i‘iÑÜ$Ÿ[™[¨Ô.NÓOˆD�I‰I�c‰NØ ˆ�‰�CÒre   c                ór   — || j                   v r| j                   |= || j                  v r| j                  |= y y ry   rá  )rs  rî  s     rf   rì  z!ExactWeakKeyDictionary._remove_id6  s6   € Ø�$—+‘+ÑØ—‘˜CÐ Ø�$—)‘)ÑØ—	‘	˜#‘ð re   c                ól   — | j                   j                  «        | j                  j                  «        y ry   )râ  rz   r_  rw  s    rf   rz   zExactWeakKeyDictionary.clear<  s    € Ø�	‰	�‰ÔØ�‰×ÑÕre   r‹   )rÉ   r   r‰   r   ry   )rÉ   r   rç  r   r‰   r   )rÉ   r   r‰   r"  )rÉ   r   rÊ   r   r‰   rŠ   ©rî  rˆ   r‰   rŠ   )r_   r`   ra   rÙ   rt  rå  r~   ré  rð  rì  rz   rN   re   rf   rß  rß     s(   „ Ùfó>ó$ô1ó&ó!óôre   rß  c                 ó   — y ry   rN   ©ÚobjÚallowed_typess     rf   Úistyperø  A  s   € Ø>Are   c                 ó   — y ry   rN   rõ  s     rf   rø  rø  E  s   € ð re   c                 ó   — y ry   rN   rõ  s     rf   rø  rø  K  s   € Ø@Cre   c                ól   — t        |t        t        t        f«      rt	        | «      |v S t	        | «      |u S )zisinstance() without subclasses)Ú
isinstanceÚtupleri  rv  r¹  rõ  s     rf   rø  rø  O  s1   € ä�-¤%¬¬sÐ!3Ô4Ü�C‹y˜MÐ)Ð)Ü�‹9˜Ð%Ð%re   ztuple[Any, ...]Ú_builtin_final_typing_classes©r^   é   c                óÔ  — t        j                  | «      d   t        |j                  j                  «      D �cg c]   }d|j
                  v sŒ|j
                  d   ‘Œ" c}z   }t        t        |D �cg c]  }t        |d«      sŒ|j                  ‘Œ c}«      «      }|D �cg c]/  }t        |t        j                  «      sŒ|j                  dk7  sŒ.|‘Œ1 c}d gz   S c c}w c c}w c c}w )Nr   ÚvalÚdeviceÚmeta)ÚpytreeÚtree_flattenri  ÚgraphrÍ  r  r/   rÐ   r  rü  r  r¹  )ÚinputsÚmodelÚnodeÚ
all_inputsÚiÚdevicess         rf   Úget_inputs_devicesr  f  sÙ   € ô ×$Ñ$ VÓ,¨QÑ/Ü%)¨%¯+©+×*;Ñ*;Ô%<ó3Ù%<˜TÀÈÏÉÒ@Rˆ�	‰	�%ÓÐ%<ñ3ñ €Jô -1Ü¡jÓI¡j ´G¸A¸xÕ4H�A—H“H jÑIÓJó-€Gñ óÙˆaœz¨!¬U¯\©\Õ:¸q¿v¹vÈÓ?OŠ�7ñà	ˆñð ùò3ùò Jùòs)   ¹CÁCÁ1C ÂC Â C%Ã C%ÃC%)r^   é   c                óî   — t         j                  dk\  rt        | t        «      ryt        | t        j
                  t        j                  f«      xs& | t        j                  u xs | t        j                  u S )Nrÿ  T)
ÚsysÚversion_inforü  rþ  ÚtypesÚ	UnionTypeÚtypingÚ_Finalr   r   ©rÊ   s    rf   Ú	is_typingr  y  s]   € ô ×Ñ˜7Ò"¤z°%Ô9VÔ'WØä�5œ5Ÿ?™?¬F¯M©MÐ:Ó;ò 	!Ø”F—N‘NÐ"ò	!à”F—L‘LÐ ðre   c                ó  — t         syt        | t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  f«      S ©NF)
Únprø  Úint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64r  s    rf   Úis_numpy_int_typer$  ‹  sU   € ÝØäØä�G‰GÜ�H‰HÜ�H‰HÜ�H‰HÜ�H‰HÜ�I‰IÜ�I‰IÜ�I‰Ið		
óð re   c                ó‚   — t         syt        | t         j                  t         j                  t         j                  f«      S r  )r  rø  Úfloat16Úfloat32Úfloat64r  s    rf   Úis_numpy_float_typer)  ž  s2   € ÝØäØä�J‰JÜ�J‰JÜ�J‰Jð	
óð re   c                 ó   — y ry   rN   r  s    rf   Úis_lru_cache_wrapped_functionr+  ¬  s   € ð 25re   c                 ó   — y ry   rN   r  s    rf   r+  r+  ²  s   € ð 47re   c                óx   — t        | t        j                  «      xr t        t	        j
                  | d«      «      S )NÚ__wrapped__)rü  Ú	functoolsÚ_lru_cache_wrapperÚis_functionÚinspectÚgetattr_staticr  s    rf   r+  r+  ¸  s6   € ô �eœY×9Ñ9Ó:ò ¼{Ü×Ñ˜u mÓ4ó@ð re   r   Ú
_FuncTypesc                ó˜   — t        | «      xs> t        | t        j                  j                  t        j                  j
                  f«      S ry   )r1  rü  r  Ú_opsÚOpOverloadPacketÚ
OpOverloadr  s    rf   Úis_function_or_wrapperr9  È  s;   € ô �uÓò ¤Ø”—
‘
×+Ñ+¬U¯Z©Z×-BÑ-BÐCó"ð re   c                ó’   — t        | t        j                  t        j                  t        j                  t        j
                  f«      S ry   )rü  r  ÚFunctionTypeÚBuiltinFunctionTypeÚMethodDescriptorTypeÚWrapperDescriptorTyper  s    rf   r1  r1  Ð  s=   € ô Øä×ÑÜ×%Ñ%Ü×&Ñ&Ü×'Ñ'ð		
óð re   )Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__z==z!=Ú<z<=Ú>z>=c                ó°   — t        | t        j                  t        j                  t        j                  t        j
                  t        j                  f«      S ry   )rü  r  ÚGetSetDescriptorTyper=  r>  ÚMemberDescriptorTyper   r  s    rf   Úis_wrapper_or_member_descriptorrJ  ò  sH   € ô Øô ×&Ñ&ä×&Ñ&ä×'Ñ'ä×&Ñ&ä×#Ñ#ð	
óð re   c                ó   — t        | «      d   S r§   )Ú unwrap_with_attr_name_if_wrapper)Úfns    rf   Úunwrap_if_wrapperrN    s   € Ü+¨BÓ/°Ñ2Ð2re   c                óŒ   — t        | «      r4t        j                  | dd«      rt        j                  | d| «      } d}| |fS d }| |fS )NÚ_torchdynamo_inlineF)r1  r2  r3  )rM  Ú	attr_names     rf   rL  rL    sT   € ô �2„œ7×1Ñ1°"Ð6KÈUÔSÜ×#Ñ# BÐ(=¸rÓBˆØ)ˆ	ð ˆyˆ=Ðð ˆ	Øˆyˆ=Ðre   c                óD   — t         syt        | t         j                  «      S r  )r  rø  Úndarrayr  s    rf   Úis_numpy_ndarrayrT    s   € ÝØä�%œŸ™Ó$Ð$re   c                óÌ   — t         j                  t         j                  j                  gt        j
                  ¢­}|t         j                  j                  fz   }t        | |«      S )zCheck of obj is a tensor)	r  ÚTensorÚnnÚ	ParameterrL   Útraceable_tensor_subclassesÚ_subclassesrO   rø  )rö  Útensor_lists     rf   Úistensorr\  $  sW   € ô 	�‰Ü�‰×Ñð%ô 
×	+Ñ	+ñ%€Kð
 ¤×!2Ñ!2×!=Ñ!=Ð ?Ñ?€KÜ�#�{Ó#Ð#re   c                ó"   — t        | t        «      S ry   )rü  r.   )Úmods    rf   Úis_lazy_moduler_  /  s   € Ü�cœ?Ó+Ð+re   r€  c                 ó   — t        | Ž  y ry   )rÇ   ©r  s    rf   Ú
print_oncerb  3  s	   € ä	ˆ4‚Lre   c                ó~   ‡— | Šdˆfd„}|j                   �t        |j                   «      dk(  sJ ‚|j                   d   S )zNSome black magic to create a cell object that usually only exists in a closurec                 ó   •— ‰ S ry   rN   rc  s   €rf   rÉ  zmake_cell.<locals>.f<  s   ø€ Øˆre   r4   r   )r‰   r   )Ú__closure__r|  )r  rÉ  rd  s     @rf   Ú	make_cellrf  8  s>   ø€ à€Aõð �=‰=Ð$¬¨Q¯]©]Ó);¸qÒ)@Ð@Ð@Ø�=‰=˜ÑÐre   c                óB  — 	 t        d„ | D «       «      }|j                  «       D ��ci c]  \  }}||j                  «       “Œ }}}||fS c c}}w # t        $ rF}ddlm} ddlm}  |dd || Ž › d |t        |j                  «       «      Ž › �dg |¬	«       Y d }~y d }~ww xY w)
Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wry   )Úas_proxy©rš   Úargs     rf   rœ   z$proxy_args_kwargs.<locals>.<genexpr>E  s   è ø€ Ð:±T¨c˜3Ÿ<™<Ÿ>±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½   ri  ÚNotImplementedErrorr»  rn  Úvariables.basero  ri  r_  )	r  r  Ú
proxy_argsrÉ   rk  Úproxy_kwargsÚern  ro  s	            rf   Úproxy_args_kwargsr{  C  s¦   € ð
ÜÑ:±TÓ:Ó:ˆ
Ø<B¿L¹L¼NÔK¹N±°°S˜˜SŸ\™\›^Ñ+¸NˆÑKØ˜<Ð'Ð'ùó Løäò 

Ý&Ý+áØ<Ø*©7°D¨>Ð*:¸!¹GÄTÈ&Ï-É-Ë/ÓEZÐ<[Ð;\Ð]ØQØØ÷	
ò 	
ûð	

ús(   ‚%A §A	ÁA Á	A Á	BÁ<BÂBc                ó&   — | €d S t        | dz  «      S ©Nr4  ©rˆ   ©r  s    rf   Ú	to_int_msr€  U  s   € Ø�9ˆ4Ð/¤# a¨$¡h£-Ð/re   c                ó&   — | €d S t        | dz  «      S )Ni@B r~  r  s    rf   Ú	to_int_usr‚  [  s   € Ø�9ˆ4Ð4¤# a¨)¡mÓ"4Ð4re   r^   c                  ó|  — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   dZ
ded
<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded <   dZded!<   dZded"<   dZ d#ed$<   dZ!ded%<   dZ"ded&<   dZ#d#ed'<   dZ$d#ed(<   dZ%d#ed)<   dZ&ded*<   dZ'ded+<   dZ(d#ed,<   dZ)ded-<   dZ*ded.<   dZ+ded/<   dZ,ded0<   dZ-ded1<   dZ.ded2<   dZ/ded3<   dZ0ded4<   dZ1ded5<   dZ2ded6<   dZ3ded7<   dZ4ded8<   dZ5ded9<   dZ6ded:<   dZ7ded;<   dZ8ded<<   dZ9ded=<   dZ:ded><   dZ;ded?<   dZ<ded@<   dZ=dedA<   dZ>dedB<   e?Z@dCedD<   dZAdedE<   dZBdedF<   dGZCdedH<   dGZDdedI<   dZEdedJ<   dZFdedK<   dZGdedL<   dGZHdedM<   dGZIdedN<   dGZJdedO<   dGZKdedP<   dGZLdedQ<   dGZMdedR<   dZNdedS<   dZOdedT<   dZPdUedV<   dZQdedW<   dXZRd#edY<   dZSdedZ<   dZTd#ed[<   dZUd#ed\<   dZVded]<   dZWded^<   dZXded_<   dZYded`<   dZZdeda<   dZ[dedb<   dZ\dedc<   dZ]dedd<   dZ^dede<   dZ_dedf<   dZ`dedg<   dZadedh<   dZbdedi<   dZcdedj<   dXZdd#edk<   dZededl<   dZfdedm<   egdodn„«       Zhy)pÚCompilationMetricsNúOptional[str]r6  Ú	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_configr8  Únum_triton_bundlesÚ!remote_fx_graph_cache_get_time_msÚ!remote_fx_graph_cache_put_time_msÚstart_time_usr5  Ú!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_usFr7  Ú
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                ó²  — dd„}dd„}dd„}dd„} ||j                  d«      «       ||j                  d«      «       ||j                  d«      «       ||j                  d«      «       ||j                  d	«      «       ||j                  d
«      «       ||j                  d«      «       ||j                  d«      «       ||j                  d«      «      dœ	}i |¥|¥} ||j                  d«      «      |d<    ||j                  d«      «      |d<    ||j                  d«      «      |d<   |j                  d«      }|rt        |«      nd|d<    | di |¤ŽS )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                ó   — | �| dz  S d S )Ng    €„.ArN   ©Úmetrics    rf   Úus_to_sz*CompilationMetrics.create.<locals>.us_to_sÚ  s   € Ø#)Ð#5�6˜C‘<Ð?¸4Ð?re   c                ó   — | �| dz  S d S r}  rN   ræ  s    rf   Úus_to_msz+CompilationMetrics.create.<locals>.us_to_msÝ  s   € Ø%+Ð%7�6˜T‘>ÐA¸TÐAre   c                ó†   ‡— dd„Š| €y t        | t        t        f«      sydj                  ˆfd„t	        | «      D «       «      S )Nc                ó8   — 	 t        | «      S # t        $ r Y yw xY w©Nú	<unknown>)r™   rÅ  )Úitems    rf   Úsafe_strzFCompilationMetrics.create.<locals>.collection_to_str.<locals>.safe_strá  s#   € ð'Ü˜t›9Ð$øÜ ò 'Ù&ð'ús   ‚
 �	˜rî  Ú,c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wry   rN   )rš   rï  rð  s     €rf   rœ   zGCompilationMetrics.create.<locals>.collection_to_str.<locals>.<genexpr>í  s   øè ø€ ÐF±~¨t™H TŸN±~ùó   ƒ)rï  r   r‰   r™   )rü  rv  ri  r—   Úsorted)rç  rð  s    @rf   Úcollection_to_strz4CompilationMetrics.create.<locals>.collection_to_strà  s<   ø€ ó'ð ˆ~Øä˜f¤s¬D kÔ2Ø"à—8‘8ÓF´v¸f´~ÓFÓFÐFre   c                ód   — | €y 	 t        j                  t        | «      «      S # t        $ r Y yw xY wrí  )ÚjsonÚdumpsri  rÅ  ræ  s    rf   Úcollection_to_json_strz9CompilationMetrics.create.<locals>.collection_to_json_strï  s4   € Øˆ~Øð#Ü—z‘z¤$ v£,Ó/Ð/øÜò #Ù"ð#ús   …# £	/®/r¬  r­  r®  r¯  r°  rµ  r·  r¸  r¶  )	r�  r‘  r’  r“  r”  r¢  rª  r«  r£  rÄ  rÅ  r×  r6  N)rç  r   r‰   r�  )rç  r   r‰   r   )rç  úOptional[Any]r‰   r…  rN   )r~   r™   )	ro   rH  rè  rê  rõ  rù  Úlegacy_metricsÚall_metricsr6  s	            rf   ÚcreatezCompilationMetrics.createÒ  sŒ  € ó	@ó	Bó	Gó	#ñ " '§+¡+¨oÓ">Ó?Ù+2Ø—‘Ð?Ó@ó,ñ '.Ø—‘ÐEÓFó'ñ (/Ø—‘ÐAÓBó(ñ  'Ø—‘ÐJÓKó ñ *1Ø—‘Ð>Ó?ó*ñ 2:Ø—‘Ð?Ó@ó2ñ 2:Ø—‘Ð?Ó@ó2ñ .5Ø—‘Ð<Ó=ó.ñ/
ˆð8 4˜Ð3¨7Ð3ˆñ <MØ�O‰OÐ?Ó@ó<
ˆÐ7Ñ8ñ =NØ�O‰OÐ@ÓAó=
ˆÐ8Ñ9ñ 9OØ�O‰OÐ<Ó=ó9
ˆÐ4Ñ5ð !—_‘_ \Ó2ˆ
Ù7A¤C¨
¤OÀtˆ�LÑ!ñ Ñ!�[Ñ!Ð!re   )rH  rV   r‰   r„  )ir_   r`   ra   r6  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¨  r8  r©  rª  r«  r¬  r5  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Ï  r7  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  r�   rý  rN   re   rf   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"re   r„  é@   ©Úmaxlenz%collections.deque[CompilationMetrics]Ú_compilation_metricsc                óº  — t        «       }|j                  «       }|sy|j                  || j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   | j"                  | j$                  �t'        | j$                  «      nd| j(                  �t'        | j(                  «      nd| j*                  �t'        | j*                  «      nd| j,                  | j.                  | j0                  ¬«       y)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™  ri  rš  r›  rœ  r¡  r§  )rÐ  Úevent_loggerrå   s      rf   Ú#add_compilation_metrics_to_chromiumr  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ð;  õ re   c                 ól   — dd„}  | t        j                  «       «      }t        j                  |d¬«      S )Nc           	     óœ   — h d£}| j                  «       D ��ci c]'  \  }}||vr|t        |t        «      rt        |«      n|“Œ) c}}S c c}}w )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_fp64rY  Úreorderable_logging_functionsÚnontraceable_tensor_subclassesÚ)_autograd_backward_strict_mode_banned_opsÚ+inject_BUILD_SET_unimplemented_TESTING_ONLY©r½   rü  rv  rô  ©ÚdÚ	blocklistrÉ   rÊ   s       rf   Úclean_for_jsonz6_get_dynamo_config_for_logging.<locals>.clean_for_jsona  sV   € ò
ˆ	ð2  Ÿg™gœiô
á'‘
��UØ˜)Ñ#ð ¤*¨U´CÔ"8”˜”¸eÑCØ'ò
ð 	
ùó 
s   ˜,AT©Ú	sort_keys©r  rV   r‰   rV   )rL   Úget_config_copyr÷  rø  )r  Úconfig_dicts     rf   Ú_get_dynamo_config_for_loggingr#  `  s-   € ó
ñ< !¤×!7Ñ!7Ó!9Ó:€KÜ�:‰:�k¨TÔ2Ð2re   c                 óú   — dd„} t         j                  j                  sy 	 t         j                  j                  j                  «       } | |«      }t        j                  |d¬«      S # t        t
        f$ r Y yw xY w)Nc           	     óš   — dh}| j                  «       D ��ci c]'  \  }}||vr|t        |t        «      rt        |«      n|“Œ) c}}S c c}}w )Nr  r  r  s       rf   r  z4_compiler_config_for_logging.<locals>.clean_for_json„  sY   € àð
ˆ	ð  Ÿg™gœiô
á'‘
��UØ˜)Ñ#ð ¤*¨U´CÔ"8”˜”¸eÑCØ'ò
ð 	
ùó 
s   —,Az!Compiler Config cannot be pickledTr  r   )r  ÚcompilerrL   r!  rØ  ÚAttributeErrorr÷  rø  )r  Úcompiler_config_copyr"  s      rf   Ú_compiler_config_for_loggingr)  ƒ  sn   € ó	
ô �>‰>× Ò Øð3Ü$Ÿ~™~×4Ñ4×DÑDÓFÐñ !Ð!5Ó6€KÜ�:‰:�k¨TÔ2Ð2øô	 ”~Ð&ò 3Ù2ð3ús   ¡(A( Á(A:Á9A:c                 ó@  —  G d„ dt         j                  «      } t        «       }d}d}t        j                  j
                  r)	 t        j                  j
                  j                  «       }|�~	 |j                  «       D ]E  \  }}t        |t        «      s|j                  |«       t        |t        «      sŒ8t        |«      ||<   ŒG |D ]  }||= Œ t        j                   || dd¬«      }|S |S # t        t        t        t        f$ r d}Y ŒŸw xY w# t"        $ r d}Y |S w xY w)zN
    Method to parse and scrub uninteresting configs from inductor config
    c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )úA_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializerc                óB   •— 	 t         ‰| �  |«      S # t        $ r Y yw xY w)NzValue is not JSON serializable)r‘  rç  rÅ  )rs  Úor—  s     €rf   rç  zI_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializer.default£  s)   ø€ ð8Ü‘w‘ qÓ)Ð)øÜò 8Ù7ð8ús   ƒ ’	�)r.  r   r‰   r   )r_   r`   ra   rç  r˜  r™  s   @rf   ÚTypeSafeSerializerr,  ¢  s   ø„ ÷	8ñ 	8re   r/  Nz!Inductor Config cannot be pickledT)ro   Úskipkeysr  z(Inductor Config is not JSON serializable)r÷  ÚJSONEncoderrv  r  Ú	_inductorrL   r!  rØ  r'  rã   ÚAssertionErrorr½   rü  r™   r  ri  rø  rÅ  )r/  Úkeys_to_scrubÚinductor_conf_strÚinductor_config_copyrÉ   r  s         rf   Ú%_scrubbed_inductor_config_for_loggingr7  ›  s*  € ô8œT×-Ñ-ô 8ô "›e€MØÐØÐä‡�×Òð	DÜ#(§?¡?×#9Ñ#9×#IÑ#IÓ#KÐ ð Ð'ð	KØ0×6Ñ6Ö8‘��SÜ! #¤sÔ+Ø!×%Ñ% cÔ*ä˜c¤3Õ'Ü04°S³	Ð(¨Ò-ð 9ó %�Ø(¨Ñ-ð %ô !%§
¡
Ø$Ø&ØØô	!Ðð ÐÐÐøô1 œ>¬<¼ÐHò 	DØ CÒð	Dûô* ò 	Kà JÑØÐð	Kús+   Á(C- Á.AD Â63D Ã-DÄ
DÄDÄDc                óT  ‡— t         j                  j                  j                  «       r	 ddlm} |}d}nd }d }|j                  d«      }|s(t         j                  j                  j                  «       }i d|“d| dz  “d|dz  “d|r|j                  nd “d	|rt        |«      nd “d
t        t         j                  j                  «       «      “dt!        «       “dt"        j$                  “dt"        j&                  “dt)        «       “dt+        «       “dt         j,                  j.                  “dt1        «       rt2        j4                  nd“d|“d|“dt6        j,                  “dt         j4                  “}	t8        j;                  i |	¥|¥«      Št<        j?                  ‰«       d}
‰j@                  du rd|
z   }
‰jB                  du r|
dz   }
t         j                  jE                  |
ˆfd„d|¬«       tG        ‰«       t"        jH                  rtK        ‰«       y y # t        $ r d }d }Y �Œìw xY w)Nr   )ÚREMOTE_CACHE_VERSIONÚ_ManifoldCacher6  r¬  r4  rº  r•  r–  r¶  r§  r¤  r¥  r¿  r¨  rÌ  rÍ  r�  rÀ  rÃ  rÚ  râ  Úcompilation_metricsFÚbwd_TÚ_runtimec            	     ó´   •— t        j                  ‰«      j                  «       D � �ci c]#  \  } }| t        |t        «      rt        |«      n|“Œ% c}} S c c}} w ry   )ÚdataclassesÚasdictr½   rü  rv  ri  )r
  r  r;  s     €rf   re  z,record_compilation_metrics.<locals>.<lambda>  sP   ø€ ä#×*Ñ*Ð+>Ó?×EÑEÔGô
áG‘��1ð œ* Q¬Ô,Œt�AŒw°!Ñ3ØGó
ùó 
s   ¨(A)Úrecord_logging_overheadr6  )&r  r2  ÚutilsÚ should_use_remote_fx_graph_cacheÚtorch._inductor.fb.remote_cacher9  ÚModuleNotFoundErrorr~   r;  r<  r=  ra   r™   r‚  r²  Úget_structured_logging_overheadr#  rL   Úsuppress_errorsÚinline_inbuilt_nn_modulesr7  r)  ÚversionÚcudar1   ÚtritonÚ__version__r  r„  rý  r  r¬   r8  r7  Útrace_structuredr  r  r(   )Ústart_time_nsÚend_time_nsrH  Úexc_typeÚ	exc_valuer9  rÀ  rÃ  r6  Úcommon_metricsrn   r;  s              @rf   rÒ   rÒ   Ë  sn  ø€ ô ‡�×Ñ×=Ñ=Ô?ð	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   «
H ÈH'È&H'c                ó°   — t        t        «      | kD  r't        j                  «        t        t        «      | kD  rŒ't        j                  t        | ¬«      }|ay )Nr   )r|  r  Úpopleftr�   Údeque)Únew_sizeÚ	new_deques     rf   Úset_compilation_metrics_limitrX    sE   € ä
Ô"Ó
# hÒ
.Ü×$Ñ$Ô&ô Ô"Ó
# hÓ
.ä×!Ñ!Ô"6¸xÔH€IØ$Ñre   c                 ó,   — t         j                  «        y ry   )r  rz   rN   re   rf   Úclear_compilation_metricsrZ  %  s   € ä×ÑÕ re   c                 ó    — t        t        «      S ry   )ri  r  rN   re   rf   Úget_compilation_metricsr\  *  s   € ÜÔ$Ó%Ð%re   c                  ó  — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
	 	 	 	 	 	 dd	„Zdd
„Z	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 d d„Zy)!ÚChromiumEventLoggera\  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                ó¨   — t        | j                  d«      r| j                  j                  S g | j                  _        | j                  j                  S )z]
        The main event stack, with every chromium event.
        Logged to tlparse.
        rO  )rÐ   ÚtlsrO  rw  s    rf   Ú	get_stackzChromiumEventLogger.get_stack7  s9   € ô
 �4—8‘8˜WÔ%Ø—8‘8—>‘>Ð!àˆD�H‰HŒNØ—8‘8—>‘>Ð!re   c                ó4   — | j                  «       }|r|d   S dS )zv
        Get the outermost event name (i.e. the longest running event)
        or None if the stack is empty.
        r   N)ra  )rs  rO  s     rf   rí   z'ChromiumEventLogger.get_outermost_eventB  s!   € ð
 —‘Ó ˆÙ ˆu�Q‰xÐ* dÐ*re   c                ó¨   — t        | j                  d«      r| j                  j                  S g | j                  _        | j                  j                  S )zq
        A smaller subset of the main stack that gets used to log
        PT2 Compile Events internally.
        rñ   )rÐ   r`  rñ   rw  s    rf   rë   z,ChromiumEventLogger.get_pt2_compile_substackJ  s?   € ô
 �4—8‘8Ð3Ô4Ø—8‘8×0Ñ0Ð0à,.ˆD�H‰HÔ)Ø—8‘8×0Ñ0Ð0re   c                ó|   — t        | j                  d«      si | j                  _        | j                  j                  S )NÚ
event_data)rÐ   r`  re  rw  s    rf   Úget_event_dataz"ChromiumEventLogger.get_event_dataU  s,   € Ü�t—x‘x Ô.Ø"$ˆD�H‰HÔØ�x‰x×"Ñ"Ð"re   c                ó|   — t        | j                  d«      si | j                  _        | j                  j                  S )NÚrecord_functions)rÐ   r`  rh  rw  s    rf   Úget_record_functionsz(ChromiumEventLogger.get_record_functionsZ  s-   € Ü�t—x‘xÐ!3Ô4Ø(*ˆD�H‰HÔ%Ø�x‰x×(Ñ(Ð(re   c                ó0  — t        j                  «       | _        ddlm} |j
                  r)|j
                  › dt        j                  «       › �| _        n"t        t        j                  «       «      | _        t        j                  d| j                  «       y )Nr4   rK   Ú-z*ChromiumEventLogger initialized with id %s)Ú	threadingÚlocalr`  r�  rL   Úpt2_compile_id_prefixÚuuidÚuuid4Úid_r™   r‡   rl  )rs  rL   s     rf   rt  zChromiumEventLogger.__init___  sd   € Ü—?‘?Ó$ˆŒåð ×'Ò'Ø ×6Ñ6Ð7°q¼¿¹»¸ÐGˆD�Häœ4Ÿ:™:›<Ó(ˆDŒHô 	�‰Ð=¸t¿x¹xÕHre   c                óP   — || j                  «       vry | j                  |fi |¤Ž y)zd
        Same as add_event_data, but will silently not log if the event isn't in the stack.
        N)ra  rì   )rs  rå   r  s      rf   r  z&ChromiumEventLogger.try_add_event_datan  s+   € ð ˜TŸ^™^Ó-Ñ-ØØˆ×Ñ˜JÑ1¨&Ó1re   c                óÔ   — || j                  «       vr)t        dt        |«      › d| j                  «       › d�«      ‚| j                  «       }||vri ||<   ||   j	                  |«       y)zz
        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)ra  rã   rY  rf  rï   )rs  rå   r  re  s       rf   rì   z"ChromiumEventLogger.add_event_datav  s}   € ð ˜TŸ^™^Ó-Ñ-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð
 ×(Ñ(Ó*ˆ
Ø˜ZÑ'Ø%'ˆJ�zÑ"Ø�:Ñ×%Ñ% fÕ-re   c                óê   — || j                  «       vr)t        dt        |«      › d| j                  «       › d�«      ‚| j                  «       }||vri ||<   |||   vrd||   |<   ||   |xx   |z  cc<   y)zK
        Increment an integer event data field by the given amount
        rt  ru  rv  r   N)ra  rã   rY  rf  ©rs  rå   rÉ   rÊ   re  s        rf   rø   zChromiumEventLogger.incrementŠ  s›   € ð ˜TŸ^™^Ó-Ñ-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð ×(Ñ(Ó*ˆ
Ø˜ZÑ'Ø%'ˆJ�zÑ"Ø�j Ñ,Ñ,Ø*+ˆJ�zÑ" 3Ñ'Ø�:Ñ˜sÓ# uÑ,Ô#re   c                ó  — || j                  «       vr)t        dt        |«      › d| j                  «       › d�«      ‚| j                  «       }||vri ||<   |||   vrt	        «       ||   |<   ||   |   j                  |«       y)zR
        Add a value to a set within a event_name's metadata if it exists
        rt  ru  rv  N)ra  rã   rY  rf  rv  r  rx  s        rf   rÿ   zChromiumEventLogger.add_to_setœ  s    € ð ˜TŸ^™^Ó-Ñ-ÜØœ˜jÓ)Ð*¨(°4·>±>Ó3CÐ2Dð EKð Kóð ð
 ×(Ñ(Ó*ˆ
Ø˜ZÑ'Ø%'ˆJ�zÑ"Ø�j Ñ,Ñ,Ü*-«%ˆJ�zÑ" 3Ñ'Ø�:Ñ˜sÑ#×'Ñ'¨Õ.re   Nc                óZ  — |xs( t         j                  j                  j                  «       }t	        |«      |d<   | j                  ||d|«       | j                  «       j                  |«        | j                  |fi |¤Ž |r| j                  «       j                  |«       t         j                  j                  j                  rft         j                  j                  j                  |«      }|j!                  «        || j#                  «       |<   |rt%        j&                  |fi |¤Ž yyy)a‰  
        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)
        r6  ÚBN)r  r;  r<  r=  r™   Ú_log_timed_eventra  r¬   rì   rë   r  r  r  r(  r)  r*  r+  ri  rÞ   r  )rs  rå   rá   ræ   ré   r6  r-  s          rf   r9  z#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ˆD×%Ñ%Ó'¨
Ñ3ñ Ü"×;Ñ;¸JÑSÈ(ÓSð ð 8re   c                óZ  — | j                  «       }| j                  «       }|j                  «        |j                  «        | j                  «       }|j                  «        | j	                  «       }|r9|j                  «       D ]  }|j                  d d d «       Œ |j                  «        y y ry   )ra  rë   rz   rf  ri  r_  r,  )rs  rO  Úsubstackre  rh  r-  s         rf   rr  zChromiumEventLogger.resetÚ  s‘   € ð —‘Ó ˆØ×0Ñ0Ó2ˆØ�‰ŒØ�‰ÔØ×(Ñ(Ó*ˆ
Ø×ÑÔà×4Ñ4Ó6ÐÙØ&×-Ñ-Ö/�Ø—‘˜D $¨Õ-ð 0à×"Ñ"Õ$ð re   c                óˆ  ‡— |xs( t         j                  j                  j                  «       }t	        |«      |d<   | j                  «       }‰|v r	|‰   }|‰= ni }|j                  |«       | j                  ‰|d|«      }	dˆfd„}
| j                  «       }‰|vrt        j                  d«       y |
|«       |r@| j                  «       } |
|«       t        |	|| j                  |«       |j                  «        |j                  «        | j                  «       }‰|v r%|j                  ‰«      }|j!                  ddd«       yy)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)
        r6  ÚEc                ót   •— ‰| d   k7  r/t         j                  d«       | j                  «        ‰| d   k7  rŒ.y y )Néÿÿÿÿz>ChromiumEventLogger: Detected overlapping events, fixing stack)r‡   rÁ  Úpop)rO  rå   s    €rf   Ú	pop_stackz4ChromiumEventLogger.log_event_end.<locals>.pop_stack  s9   ø€ Ø  b¡	Ò)ô —‘ØTôð —	‘	”ð   b¡	Õ)re   z7ChromiumEventLogger: Start event not in stack, ignoringN)rO  ú	list[str]r‰   rŠ   )r  r;  r<  r=  r™   rf  rï   r|  ra  r‡   rÁ  rë   r'   rq  rƒ  ri  r,  )rs  rå   rá   ræ   rN  ré   r6  Úall_event_datarI  Úeventr„  Úevent_stackrñ   rh  r-  s    `             rf   rC  z!ChromiumEventLogger.log_event_endê  sL  ø€ ð&  Ò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Õ)ð *re   c                ó„   ‡— ||dz  ||ddddœŠt         j                  j                  dˆfd„dd¬«       t        ‰«       ‰S )	za
        Logs a timed event in chromium format. See log_event_start, log_event_end, etc.
        r4  rV  r   )rn   Útsr  ÚphÚcatÚtidÚpidÚchromium_eventc                 ó   •— ‰ S ry   rN   ©r‡  s   €rf   re  z6ChromiumEventLogger._log_timed_event.<locals>.<lambda>P  ó   ø€ ™ure   F©Ú
payload_fnÚsuppress_contextÚexpect_trace_id)r  r²  rM  r)   )rs  rå   rá   r¿   ræ   r‡  s        @rf   r|  z$ChromiumEventLogger._log_timed_event:  sY   ø€ ð Ø˜D‘.ØØà!ØØñ	
ˆô 	�‰×'Ñ'ØÛ$Ø"Ø!ð	 	(ô 	
ô 	' uÔ-Øˆre   c           	     ó4  ‡— |€i }t        t        j                  j                  j	                  «       «      }||d<   ||dz  |ddddddœŠt        j
                  j                  d	ˆfd
„dd¬«       |r't        ‰| j                  «       | j                  |«       yy)aZ  
        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
        Nr6  r4  r  rV  r   Úp)rn   rŠ  r  r‹  rŒ  r�  rŽ  Úsr�  c                 ó   •— ‰ S ry   rN   r‘  s   €rf   re  z7ChromiumEventLogger.log_instant_event.<locals>.<lambda>w  r’  re   FTr“  )
r™   r  r;  r<  r=  r²  rM  r'   rë   rq  )rs  rå   rá   ræ   ré   r6  r‡  s         @rf   rä   z%ChromiumEventLogger.log_instant_eventW  s§   ø€ ð ÐØˆHÜœŸ™×5Ñ5×HÑHÓJÓKˆ
Ø!+ˆ�ÑàØ˜D‘.ØØà!ØØØñ

ˆô 	�‰×'Ñ'ØÛ$Ø"Ø ð	 	(ô 	
ñ !ä'Ø�t×4Ñ4Ó6¸¿¹À'õð !re   )r‰   r…  ©r‰   r…  )r‰   rV   )r‰   z'dict[str, AbstractContextManager[None]]r‹   )rå   r™   r  r   r‰   rŠ   )rå   r™   rÉ   r™   rÊ   rˆ   r‰   rŠ   )rå   r™   rÉ   r™   rÊ   r   r‰   rŠ   ©FN)rå   r™   rá   rˆ   ræ   rV   ré   r"  r6  úOptional[CompileId]r‰   rŠ   ry   )rå   r™   rá   rˆ   ræ   rV   rN  rˆ   ré   r"  r6  r�  r‰   rŠ   )
rå   r™   rá   rˆ   r¿   r™   ræ   úOptional[dict[str, Any]]r‰   rV   r  )
rå   r™   rá   rˆ   ræ   rž  ré   r"  r‰   rŠ   )r_   r`   ra   rÙ   ra  rí   rë   rf  ri  rt  r  rì   rø   rÿ   r9  rr  rC  r|  rä   rN   re   rf   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à&+ð(àð(ð ð(ð +ð	(ð  $ð(ð 
ô(re   r^  zOptional[ChromiumEventLogger]ÚCHROMIUM_EVENT_LOGc                 ó.   — t         €
t        «       a t         S ry   )rŸ  r^  rN   re   rf   râ   râ   …  s   € äÐ!Ü0Ó2ÐÜÐre   c                 ó   — t         d uS ry   )rŸ  rN   re   rf   r  r  Œ  s   € ä TÐ)Ð)re   c           	   #  ól  K  — t        «       }t        j                  «       }|j                  | |i |«       	 d–— |j	                  | t        j                  «       i ||«       |r|j                  «        yy# |j	                  | t        j                  «       i ||«       |r|j                  «        w w xY w­w)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á   r9  rC  rr  )rå   Úreset_event_log_on_exitré   Úchromium_event_logÚchromium_start_times        rf   Úchromium_event_timedr¦  ‘  s´   è ø€ ô 3Ó4ÐÜŸ,™,›.ÐØ×&Ñ&ØØØ
Øô	ð'Ûà×(Ñ(ØÜ�L‰L‹NØØØ!ô	
ñ #Ø×$Ñ$Õ&ð #øð 	×(Ñ(ØÜ�L‰L‹NØØØ!ô	
ñ #Ø×$Ñ$Õ&ð #üs   ‚3B4¶A5 º;B4Á5<B1Â1B4c                  ó@   — e Zd ZU dZded<   ded<   d	d„Zed
d„«       Zy)ÚCleanupHookz,Remove a global variable when hook is calledrV   Úscoper™   rn   c                óp   — t         �t         xj                  dz  c_        | j                  | j                  = y r£   )ÚCleanupManagerrv   r©  rn   ©rs  r  s     rf   Ú__call__zCleanupHook.__call__¹  s)   € äÐ%Ü× Ò  AÑ%Õ Ø�J‰J�t—y‘yÑ!re   c                ób   — || vsJ ‚t         xj                  dz  c_        || |<   t        | |«      S r£   )r«  rv   r¨  )r©  rn   r  s      rf   rý  zCleanupHook.create¿  s7   € à˜5Ñ Ð Ð Ü×Ò Ñ!ÕØˆˆd‰Ü˜5 $Ó'Ð're   N©r  r   r‰   rŠ   )r©  rV   rn   r™   r  r   r‰   r¨  )r_   r`   ra   rÙ   r�   r­  r&  rý  rN   re   rf   r¨  r¨  ²  s)   … á6àÓØ
ƒIó"ð ò(ó ñ(re   r¨  c                  ó0   ‡ — e Zd ZU dZded<   dˆ fd„Zˆ xZS )r«  r   zClassVar[CleanupManager]Úinstancec                óZ   •— | j                   |   D ]	  } |«        Œ t        ‰| �	  |«       y ry   )r_  r‘  rì  )rs  rî  r­   r—  s      €rf   rì  zCleanupManager._remove_idË  s(   ø€ Ø—K‘K Ô$ˆDÙ�Fð %ä‰Ñ˜3Õre   ró  )r_   r`   ra   rv   r�   rì  r˜  r™  s   @rf   r«  r«  Ç  s   ø… Ø€EØ&Ó&÷ ñ  re   r«  c                óÆ   — | j                  «       j                  | j                  «      }| j                  r+| j                  �| j                  j                  «       |_        |S )z!Clone the tensor and its gradient)ÚcloneÚrequires_grad_Úrequires_gradÚis_leafÚgrad)rd  Úys     rf   Úclone_tensorrº  Ô  sB   € à	�‰‹	× Ñ  §¡Ó1€AØ‡y‚y�Q—V‘VÐ'Ø—‘—‘“ˆŒØ€Hre   c                óš   — t        | |«      r&t        ||t        | |«      j                  «       «       yt        ||«      rt	        ||«       yy)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      rf   Ú_copy_dynamo_attrrÃ  Ü  sA   € äˆs�DÔÜ��Tœ7 3¨Ó-×2Ñ2Ó4Õ5Ü	��dÔ	Ü��TÕð 
re   c                ó    — t        | |d«       t        | |d«       t        | |d«       t        | |d«       t        | |d«       t        | |d«       y)a
  
    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     rf   Úcopy_dynamo_tensor_attributesrË  ä  sR   € ô �c˜3Ð 9Ô:Ü�c˜3Ð :Ô;Ü�c˜3Ð 8Ô9Ü�c˜3Ð 3Ô4Ü�c˜3Ð AÔBÜ�c˜3Ð >Õ?re   ©Údtypec          	     óâ  ‡— t        | «      r| S d
ˆfd„}t        j                  «       5  | j                  j                  dk(  r || «      cddd«       S | j
                  t        j                  u rbt        j                   || j                  «       «       || j                  «       «      | j                  | j                  «       ¬«      cddd«       S t        | «      rÄ| j
                  t        j                  t        j                  hv r!| j                  «       }| j!                  «       }n | j#                  «       }| j%                  «       }t        j&                   ||«       ||«       || j)                  «       «      | j                  | j
                  ¬«      cddd«       S t+        | «      r || «      cddd«       S t-        d„ t/        | j1                  «       | j3                  «       «      D «       «      }| j4                  rt        j6                  |dz   f| «      }n3t        j8                  |dz   ‰xs | j:                  | j                  ¬«      }| j=                  «       |j=                  «       z
  dz  | j?                  «       z  }|jA                  | j1                  «       | j3                  «       |«       	 |jC                  | jE                  «       «       | jF                  r|jI                  | jJ                  «       | jF                  r(| jL                  �tO        | jL                  ‰¬	«      |_&        tS        | |«       |cddd«       S # tP        $ r  || «      cY cddd«       S w xY w# 1 sw Y   yxY w)zcopy while preserving stridesc                ó   •— t        j                  | «      }| j                  r|j                  | j                  «       | j                  r(| j
                  �t        | j
                  ‰¬«      |_        t        | |«       |S )NrÌ  )r  r´  r·  rµ  r¶  r¸  Úclone_inputrË  )rd  r¹  rÍ  s     €rf   Útorch_clonez clone_input.<locals>.torch_cloneü  sZ   ø€ Ü�K‰K˜‹NˆØ�9Š9Ø×Ñ˜QŸ_™_Ô-Ø�9Š9˜Ÿ™Ð+Ü  §¡¨uÔ5ˆAŒFÜ% a¨Ô+Øˆre   ÚxlaN)Úis_coalesced)Úlayoutc              3  ó2   K  — | ]  \  }}|d z
  |z  –— Œ y­w)r4   NrN   )rš   ÚshapeÚstrides      rf   rœ   zclone_input.<locals>.<genexpr>%	  s"   è ø€ ð 
Ù6O¡] U¨FˆU�Q‰Y˜&Õ Ñ6Oùó   ‚é    )rÍ  r  rÌ  ©rd  útorch.Tensorr‰   rÛ  )*rP   r  Úno_gradr  r¹  rÔ  Ú
sparse_cooÚsparse_coo_tensorÚ_indicesri   rÖ  rÓ  r%   Ú
sparse_csrÚ
sparse_bsrÚcrow_indicesÚcol_indicesÚccol_indicesÚrow_indicesÚsparse_compressed_tensorr_  r0   r€   ÚzipÚsizer×  Úis_quantizedÚempty_quantizedÚemptyrÍ  Údata_ptrÚelement_sizeÚas_strided_Úcopy_r´  r·  rµ  r¶  r¸  rÐ  rã   rË  )rd  rÍ  rÑ  Úcompressed_indicesÚplain_indicesÚneeded_sizeÚresultÚcache_line_offsets    `      rf   rÐ  rÐ  ó  s§  ø€ ô
 ˆq„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   ©!M%ÁA4M%ÃCM%Æ!M%Æ=C6M%Ê4A:MÌ.M%ÍM"ÍM%Í!M"Í"M%Í%M.c                 ó   — y ry   rN   ©Úexample_inputss    rf   Úclone_inputsrø  A	  s   € ð re   c                 ó   — y ry   rN   rö  s    rf   rø  rø  G	  s   € Ø:=re   c                óÆ  — t        | «      t        u r|t        | «      }|j                  «       D ]\  \  }}t        |t        «      rt        |«      ||<   Œ%t        |t        j                  «      sJ t        |«      «       ‚t        |«      ||<   Œ^ |S t        | «      }t        t        |«      «      D ]1  }t        ||   t        j                  «      sŒ!t        ||   «      ||<   Œ3 |S ry   )r¹  Údictr½   rü  rý  rø  r  rV  rÐ  ri  Úranger|  )r÷  ÚresrÉ   rÊ   r  s        rf   rø  rø  K	  s¾   € äˆNÓœtÑ#Ü�>Ó"ˆØŸ)™)ž+‰JˆC�Ü˜%¤Ô'Ü'¨Ó.��C’ä! %¬¯©Ô6ÐC¼¸U»ÓCÐ6Ü& uÓ-��C’ð &ð ˆ
ä
ˆ~Ó
€CÜ”3�s“8Ž_ˆÜ�c˜!‘fœeŸl™lÕ+Ü   Q¡Ó(ˆC�ŠFð ð €Jre   c           	     óÂ   — 	 | j                  «        y # t        $ rB}ddlm} t	        j
                  ddt        | «      «      } |ddd|› d�g |d¬	«       Y d }~y d }~ww xY w)
Nr4   rm  z\(.*r�  z(skip frame due to being in functorh modez(torch.compile cannot be run in context: z. Skipping frame.T)rq  rr  rs  rt  ru  Ú
skip_frame)rì  rã   r»  rn  Úrer”  rY  )r  rz  rn  Úfunctorch_subclass_names       rf   Úskip_frame_if_in_functorch_moder  ^	  sg   € ð
Ø�‰�øÜò 
Ý&ô #%§&¡&¨°"´d¸3³iÓ"@ÐáØ>ØØBÐCZÐB[Ð[lÐmØØØ÷	
ò 	
ûð
ús   ‚ “	Aœ8AÁAc               #  ó  K  — t         j                  j                  } t         j                  j                  j
                  } |«       5   | «       5  t        j                  t         j                  j                  «       «      }t        |«       t         j                  j                  «       r1t        j                  t         j                  j                  «       «      }t         j                  j                  «       r1t        j                  t         j                  j                  «       «      }d d d «       d d d «       	 d –— t         j                  j                  j                  «       5  t         j                  j                  «       t         j                  j                  «       rt         j                  j                  «       t         j                  j                  «       rt         j                  j                  «       d d d «       y # 1 sw Y   ŒáxY w# 1 sw Y   ŒåxY w# 1 sw Y   y xY w# t         j                  j                  j                  «       5  t         j                  j                  «       t         j                  j                  «       rt         j                  j                  «       t         j                  j                  «       rt         j                  j                  «       d d d «       w # 1 sw Y   w xY wxY w­wry   )r  r(  Ú_DisableFuncTorchrB  Ú_python_dispatchÚ_disable_current_modesr´  ÚrandomÚget_rng_stater  rJ  Úis_availableÚxpuÚset_rng_state)Údisable_functorchÚdisable_current_modesÚ	rng_stateÚcuda_rng_stateÚxpu_rng_states        rf   Ú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
ÁHÁCHÄ+HÄ3L
Ä<H/ Å (L
Å(BH#È	L
ÈH	ÈHÈH ÈL
È#H,È(L
È/)LÉBK;Ë2	LË;LÌ LÌL
c                ó
  — t        | t        j                  j                  j                  t        j                  j
                  j                  t        j                  j                  t        j                  j                  f«      S ry   )	rü  r  ÚjitÚ_traceÚTopLevelTracedModuleÚ_scriptÚRecursiveScriptModuleÚScriptFunctionÚScriptModule)Úmodel0s    rf   Úis_jit_modelr  ‡	  sY   € ô Øä�I‰I×Ñ×1Ñ1Ü�I‰I×Ñ×3Ñ3Ü�I‰I×$Ñ$Ü�I‰I×"Ñ"ð		
óð re   c                ó6  — t        | «      r| S 	 t        j                  j                  | |«      S # t        $ r` 	 t        j                  j                  | «      cY S # t        $ r1 |rt        j                  d«       nt        j                  d«       Y Y y w xY ww xY w)Nz	jit errorz0Both torch.jit.trace and torch.jit.script failed)	r  r  r  ÚtracerÅ  Úscriptr‡   rÆ  Úerror)r	  r÷  r{  s      rf   Útorchscriptr   �	  s‡   € Ü�EÔàˆð	NÜ�y‰y�‰˜u nÓ5Ð5øÜò Nð	NÜ—9‘9×#Ñ# EÓ*Ò*øÜò 	NÙÜ—‘˜kÕ*ä—	‘	ÐLÔMùØð	NúðNús,   �/ ¯	B¹AÁBÁ6BÂBÂBÂBc                óX   — 	 t        j                  | «      S # t        t        f$ r Y y w xY wry   )r2  ÚgetfilerØ  ÚOSError©rö  s    rf   r"  r"  ¯	  s-   € ðÜ�‰˜sÓ#Ð#øÜ”wÐò Ùðús   ‚ —)¨)c                ó*   — t        t        | «      «      S )zLTest if an object is a namedtuple or a torch.return_types.* quasi-namedtuple)Úis_namedtuple_clsr¹  r$  s    rf   Úis_namedtupler'  ¶	  s   € äœT #›YÓ'Ð're   c                óH  ‡ — 	 t        ‰ t        «      r�t        ‰ dd«      }|dv ryt        t        ‰ dd«      t        «      rTt	        t        ‰ dd«      «      r>t        d„ ‰ j
                  D «       «      }|t        fk(  ry|rt        ˆ fd„|D «       «      ryy	# t        $ r Y y	w xY w)
zhTest if an object is a namedtuple or a (torch.return_types|torch.autograd.forward_ad).* quasi-namedtupler`   N)útorch.return_typesztorch.autograd.forward_adTÚ_fieldsÚ_makec              3  ó2   K  — | ]  }|t         usŒ|–— Œ y ­wry   )r   )rš   Úts     rf   rœ   z$is_namedtuple_cls.<locals>.<genexpr>Æ	  s   è ø€ ÐK© A¸!Ä7Ò:Jœa©ùs   ‚�c              3  óh   •K  — | ])  }t        |«      xr ‰j                  |j                  u –— Œ+ y ­wry   )r&  Ú__new__)rš   r-  ro   s     €rf   rœ   z$is_namedtuple_cls.<locals>.<genexpr>Ê	  s<   øè ø€ ð !ñ #˜ô	 *¨!Ó,ò 5àŸK™K¨1¯9©9Ð4ó5ñ #ùs   ƒ/2F)Ú
issubclassrý  r½  rü  ÚcallableÚ	__bases__ÚanyrØ  )ro   ÚmoduleÚbasess   `  rf   r&  r&  »	  s°   ø€ ðÜ�cœ5Ô!Ü˜S ,°Ó5ˆFØÐLÑLØÜœ' # y°$Ó7¼Ô?ÄHÜ˜˜W dÓ+ôEô ÑK¨¯ªÓKÓK�ØœU˜HÒ$àÙœSó !ñ #ó!ô ð  ð øô ò ØØðús   ƒ!B ¥AB Á=B Â	B!Â B!útuple[str, ...]c                ó  — | t         u ryt        | t        «      sJ ‚t        | d«      r| j                  S t
        j                   G d„ d«      «       }| j                  dk(  sJ ‚ | t        |t        | j                  «      «      «      }i }t        |«      D ];  }|d   dk7  sŒt        t        ||«      |«      sŒ#t        ||«      j                  ||<   Œ= t        |«      | j                  k(  sJ ‚t        t!        ||j"                  ¬«      «      S )	zIGet the fields of a namedtuple or a torch.return_types.* quasi-namedtuple)ÚstartÚstopÚstepr*  c                  ó   — e Zd ZU ded<   y)ú!namedtuple_fields.<locals>.Markerrˆ   ÚindexN©r_   r`   ra   r�   rN   re   rf   ÚMarkerr<  ä	  s   … àŒ
re   r?  r)  r   r·  )rÉ   )Úslicer0  rý  rÐ   r*  r?  Ú	dataclassr`   r˜   rü  Ún_fieldsÚdirrü  r½  r=  r|  rô  r~   )ro   r?  rö  Úfieldsrn   s        rf   Únamedtuple_fieldsrE  Ù	  sð   € ð Œe�|Ø(ä�cœ5Ô!Ð!Ð!Üˆs�IÔà�{‰{Ðä×Ñ÷ð ó ðð �>‰>Ð1Ò1Ð1Ð1Ù
Œc�&œ% §¡Ó-Ó.Ó
/€CØ€FÜ�C–ˆØ�‰7�c‹>œj¬°°dÓ);¸VÕDÜ" 3¨Ó-×3Ñ3ˆF�4ŠLð ô ˆv‹;˜#Ÿ,™,Ò&Ð&Ð&Ü”˜ F§J¡JÔ/Ó0Ð0re   c           	     ó8  ‡‡‡— t        j                  «       5  t        j                  t         j                  j	                  «       «      Št         j
                  j                  «       r1t        j                  t         j
                  j	                  «       «      Št        j                  | j                  «       | j                  «       «      D �cg c]$  }||j                  t        j                  |«      f‘Œ& c}Šd d d «       dˆˆˆfd„}|S c c}w # 1 sw Y   ŒxY w)Nc                 ój  •— t        j                  «       5  t         j                  j                  ‰«       t         j                  j                  «       rt         j                  j                  ‰«       ‰D ]'  \  } }}| j                  |k7  sŒ| j                  |«       Œ) 	 d d d «       y # 1 sw Y   y xY wry   )r  rÜ  r  r  rJ  r	  Ú_versionrï  )ÚparamrI  Úoriginal_valuer  r  Úsaved_states      €€€rf   Úrestorez"checkpoint_params.<locals>.restoreþ	  ss   ø€ Ü�]‰]�_Ü�L‰L×&Ñ& yÔ1Ü�z‰z×&Ñ&Ô(Ü—
‘
×(Ñ(¨Ô8Û2=Ñ.��w Ø—>‘> WÓ,Ø—K‘K Õ/ñ 3>÷	 �_‰_ús   –A5B)ÂB)Â)B2r‹   )r  rÜ  r´  r  r  rJ  r	  rŸ   r    Ú
parametersÚbuffersrH  )ÚgmrI  rL  r  r  rK  s      @@@rf   Úcheckpoint_paramsrP  ó	  s½   ú€ Ü	�‰�Ü—K‘K¤§¡× :Ñ :Ó <Ó=ˆ	Ü�:‰:×"Ñ"Ô$Ü"Ÿ[™[¬¯©×)AÑ)AÓ)CÓDˆNô #Ÿ™¨¯©«¸"¿*¹*»,ÔGó
ñ H�ð �E—N‘N¤E§K¡K°Ó$6Ò7àGñ
ˆ÷	 
÷0ð €Nùò
÷	 
ˆús   ˜B5DÃ)DÃ6DÄDÄDc                óv  — t         j                  j                  «       rt         j                  j                  }nt        } |«        t        j                  «        t        j                  d«       t        j                  «       }t        |«      D ]  } | |Ž } |«        Œ t        j                  «       }||z
  fS )Ni9  )r  rJ  r	  ÚsynchronizerÝ  ÚgcÚcollectÚmanual_seedrà   Úperf_counterrü  )r	  r÷  ÚtimesrR  Út0r·  ró  Út1s           rf   ÚtimedrZ  

  s�   € ô ‡z�z×ÑÔ Ü—j‘j×,Ñ,‰äˆá„MÜ‡J�J„LÜ	×Ñ�dÔÜ	×	Ñ	Ó	€BÜ�5Ž\ˆÙ˜Ð'ˆÙ�ð ô 
×	Ñ	Ó	€BØ�2˜‘7ˆ?Ðre   c           	     ól   — t        d„ t        j                  || j                  d«      «      D «       «      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wry   )Úis_cuda©rš   rd  s     rf   rœ   z check_is_cuda.<locals>.<genexpr>
  s   è ø€ ÐWÑ"V˜Qˆq�y�yÑ"Vùs   ‚T)ÚallrŸ   r    rM  )rO  r÷  s     rf   Úcheck_is_cudar`  
  s(   € ÜÑW¤)§/¡/°.À"Ç-Á-ÐPTÓBUÔ"VÓWÓWÐWre   rÙ  c                óò   — | dkD  sJ ‚t        | «      D �cg c]  }d|› �‘Œ	 }}t        |dd  |d d z   «      }t        ddj                  |«      › ddj                  |«      › d�«      }d| › d	�|_        |S c c}w )
Nr4   r  r‚  zlambda rñ  z: (Ú)Úrot_Ú_helper)rü  ÚreversedÚevalr—   r_   )rÑ  r  ÚvarsÚrotatedrM  s        rf   Úrot_n_helperri  !
  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   •A4z	set[type]Úcommon_constant_typesc                ó.  — t        | t        t        f«      rt        t	        t
        | «      «      S t        | t        j                  t        t        j                  t        j                  t        j                  f«      xs t        | t         t"        hz  «      S ry   )rø  rý  Ú	frozensetr_  r˜   Úis_safe_constantrü  ÚenumÚEnumr¹  r  ÚSizer  Ú_GenericAliasr  ÚGenericAliasrj  r@  r  s    rf   rm  rm  N
  sx   € Üˆa”%œÐ#Ô$Ü”3Ô'¨Ó+Ó,Ð,ÜØ	ä�I‰IÜÜ�J‰JÜ× Ñ Ü×Ñð	
ó	ò ô 
Ø	Ü¤ Ñ'ó
ðre   c                 ó
   — ddhS ©Nr   r4   rN   rN   re   rf   Úcommon_constantsru  `
  s   € ð
 	
Ø	ð	ð re   c                óà   — t        | t        j                  t        j                  f«      xrC t        | j                  t        j
                  j                  j                  j                  «       S ry   )	rü  r  ÚSymBoolÚSymIntr
  Únestedr³  Ú
nested_intÚNestedIntNoder  s    rf   Úis_torch_symr|  j
  sP   € Ü�eœeŸm™m¬U¯\©\Ð:Ó;ò ÄJØ�
‰
”E—L‘L×*Ñ*×5Ñ5×CÑCóEð Að re   c                óì  — ddl m} t        j                  «       j                   xrÎ |j
                  j                  «        xs± |j
                  j                  «       xr t        j                   xs‚ |j
                  j                  «       xr t        j                   xsS |j
                  j                  «       xr t        j                   xs$  ||«      xs t        d«       xr | t        «       v S )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&   ru  )rÊ   r  r~  s      rf   Ú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ò ,ØÔ)Ó+Ð+ð/re   c                óp  — ddl m}m}m} t	        | |«      rt| j                  «       sd| j                  «       }| j                  «       }t        |«      xs3 t        j                   xr  t        |«      t        u xr t        ||«       }|s| S t	        | |«      r|j                  | j                  «       «      S | S )Nr4   )ÚConstantVariableÚLazyVariableTrackerÚSymNodeVariable)Ú	variablesr‰  rŠ  r‹  rü  Úis_realizedÚoriginal_sourcerJ  r|  rL   Úspecialize_intr¹  rˆ   r‡  rý  Úevaluate_expr)rk  r‰  rŠ  r‹  r  rÊ   Úis_symnode_vts          rf   Úspecialize_symnoder’  �
  s°   € ßQÑQô �#Ð*Ô+°C·O±OÔ4Eð ×$Ñ$Ó&ˆØ×"Ñ"Ó$ˆä$ UÓ+ò 
Ü×%Ñ%Ð%ò >Ü�U“œsÐ"ò>ä.¨u°fÓ=Ð=ð 	ñ ØˆJä�#�Ô'Ø×&Ñ& s×'8Ñ'8Ó':Ó;Ð;Ø€Jre   c                ó€   — ddl m} t        | «      } t        | |«      r | j	                  «       r| j                  «       S | S )Nr4   rD   )rŒ  rE   r’  rü  Úis_python_constantÚas_python_constant)rk  rE   s     rf   Úguard_if_dynr–  ¨
  s8   € Ý*ä
˜SÓ
!€Cä�#�Ô'¨C×,BÑ,BÔ,DØ×%Ñ%Ó'Ð'à€Jre   c                ój   — t        d„ t        j                  | |j                  «       «      D «       «      S )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wry   )r”  r^  s     rf   rœ   z&check_constant_args.<locals>.<genexpr>´
  s   è ø€ ÐVÑ/U¨!ˆq×#Ñ#×%Ñ/Uùrl  )r_  rŸ   r    r_  rÜ  s     rf   Úcheck_constant_argsr™  ³
  s$   € ÜÑV¬y¯©¸tÀVÇ]Á]Ã_Ô/UÓVÓVÐVre   c                óÚ   — ddl m} ddlm} d}t	        j
                  | |j                  «       «      D ]2  }t        ||«      r|dz  }Œt        ||«      r|j                  «       rŒ2 y |dkD  S )Nr4   rD   ©ÚUnspecializedPythonVariabler   F)	rŒ  rE   Úvariables.tensorrœ  rŸ   r    r_  rü  r”  )r  r  rE   rœ  Úunspec_countrd  s         rf   Úcheck_unspec_python_argsrŸ  ·
  sb   € Ý*Ý=à€LÜ�_‰_˜T 6§=¡=£?Ö3ˆÜ�aÐ4Ô5Ø˜AÑ‰LÜ˜Q Ô0°Q×5IÑ5IÕ5KÙð	 4ð
 ˜!ÑÐre   c                ó    — ddl m} t        j                  | |j	                  «       «      D ]!  }|j                  «       rŒt        ||«      rŒ! y y)Nr4   r›  FT)r�  rœ  rŸ   r    r_  r”  rü  )r  r  rœ  rd  s       rf   Úcheck_unspec_or_constant_argsr¡  Ä
  s@   € õ
 >ä�_‰_˜T 6§=¡=£?Ö3ˆØ×$Ñ$Õ&¬*°QÐ8SÕ*TÙð 4ð re   c                ó|   ‡— ddl mŠ t        ˆfd„t        j                  | |j                  «       «      D «       «      S )Nr4   )ÚNumpyNdarrayVariablec              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wry   )rü  )rš   rd  r£  s     €rf   rœ   z+check_numpy_ndarray_args.<locals>.<genexpr>Ô
  s!   øè ø€ ð á7ˆAô 	�1Ð*×+Ù7ùs   ƒ)r�  r£  r3  rŸ   r    r_  )r  r  r£  s     @rf   Úcheck_numpy_ndarray_argsr¥  Ñ
  s1   ø€ Ý6äó ä—‘  v§}¡}£Ô7óó ð re   ztype[KeysView[Any]]Ú	dict_keysztype[ValuesView[Any]]Údict_valuesztype[ItemsView[Any, Any]]Ú
dict_itemsÚodict_valuesztype[Iterator[Any]]Útuple_iteratorÚrange_iteratorÚKÚVc                óP   — t        | t        «      sJ ‚t        j                  | «      S ry   )rü  rû  rj  )r  s    rf   Úbuiltin_dict_keysr¯  ÿ
  s    € ä�aœÔÐÐÜ�9‰9�Q‹<Ðre   c                óŠ  — t        | t        «      sJ ‚t        | t        t        f«      r| j	                  «       S t        | t        «      r9t        j
                  | «      D �cg c]  }|t        j                  | |«      f‘Œ c}S t        j                  | «      D �cg c]  }|t        j                  | |«      f‘Œ c}S c c}w c c}w ry   )rü  rû  rø  r   r½   rj  rå  )rö  r
  s     rf   Úget_items_from_dictr±    s¨   € ä�cœ4Ô Ð Ð Üˆc”Dœ+Ð&Ô'Ø�y‰y‹{ÐÜ	�CœÔ	%ä>I×>NÑ>NÈsÔ>SÓTÑ>S¸�”K×+Ñ+¨C°Ó3Ò4Ð>SÑTÐTô 8<·y±yÀ´~ÓF±~°!�”D×$Ñ$ S¨!Ó,Ò-°~ÑFÐFùò Uùò Gs   Á B;ÂC c                ón   — t        | «      }t        j                  j                  j	                  |«       |S ry   )Ú
object_newr  rW  ÚModulert  )ro   rö  s     rf   Únn_module_newrµ    s&   € Ü
�S‹/€Cä	‡H�H‡O�O×Ñ˜SÔ!Ø€Jre   c                óL   — t        j                  t        j                  | d«      S r£   )r/  ÚreduceÚoperatorÚmul)Úits    rf   Úproductr»    s   € Ü×ÑœHŸL™L¨"¨aÓ0Ð0re   c                ó>   — | j                  «       \  }\  }}|||z      S ry   )Ú
__reduce__)rº  r=  r·  rö  r8  s        rf   Útuple_iterator_getitemr¾    s%   € Ø—}‘}“Ñ€A�vˆˆuØˆu�u‰}ÑÐre   c                óf   — t        j                  j                  t        j                  «      | «      S ry   )r  Ú_dynamoÚdisabler?  rD  r{   s    rf   Údataclass_fieldsrÂ  "  s"   € Ü�=‰=× Ñ ¤×!3Ñ!3Ó4°SÓ9Ð9re   c                ó¨   — | j                  «       \  }\  }}|j                  |xs d|j                  z  z   }|j                  }|j                  }|||fS r§   )r½  r8  r:  r9  )Ú
range_iterr·  Ú	range_objÚ	maybe_idxr8  r9  r:  s          rf   Únormalize_range_iterrÇ  )  sU   € Ø!+×!6Ñ!6Ó!8Ñ€A�|ˆ	�Yð �O‰O˜yš~¨A°·±Ñ?Ñ?€EØ�>‰>€DØ�>‰>€DØ�4˜ÐÐre   c                ó$   — | j                  |«      S ry   )Úas_subclass)r-  ro   s     rf   Úto_subclassrÊ  7  s   € Ø�=‰=˜ÓÐre   c                óž   — t         }t        | t        «      rt        }t        t	        j
                  |j                  | «      ||dz   «      «      S r£   )rû  rü  r   ÚnextrŸ   Úislicerj  )r  rÑ  Ú
dict_classs      rf   Údict_keys_getitemrÏ  >  s?   € ô €JÜ�!”[Ô!Ü ˆ
ä”	× Ñ  §¡°Ó!3°Q¸¸A¹Ó>Ó?Ð?re   c                ó   — t        | «      |   S ry   ©ri  )r™  rÑ  s     rf   Úset_getitemrÒ  H  s   € ä�‹7�1‰:Ðre   c                ój   — | j                   j                  }| j                  }|rdnd}|› d|› d|› �}|S )NÚLÚGz["z"].)r—  r_   rn   )rÊ   rm  rn   r  r©  Ú
local_names         rf   Ú	enum_reprr×  M  sA   € ð �?‰?×#Ñ#€DØ
�*‰*€CÙ‰C˜c€EØ�7˜"˜T˜F # c UÐ+€JØÐre   c                ó
  — || j                   d<   t        j                  «       j                  }|€J ‚|j                  }t
        j                  j                  j                  j                  ||«      x}r|| j                   d<   y y )NÚexample_valueÚunbacked_bindings)
r  r$   r~   Ú	fake_modeÚ	shape_envr  r   ÚexperimentalÚsymbolic_shapesÚcompute_unbacked_bindings)r
  rÙ  rÛ  rÜ  Úsymbol_to_paths        rf   Úset_example_valuerá  W  s„   € ð "/€D‡I�IˆoÑÜ×"Ñ"Ó$×.Ñ.€IØÐ Ð Ð Ø×#Ñ#€Iô �8‰8× Ñ ×0Ñ0×JÑJØ�}ó
ð	
ˆð 	
ð
 *8ˆ�	‰	Ð%Ò&ð	
re   c                óÜ   — | j                  «       j                  j                  j                  d«      }t	        |«      s-ddlm} ddlm}  |dt        |«      dg |j                  ¢¬«       |S )NrÙ  r4   ©Úgraph_break_hintsrm  z:Cannot check Tensor object identity without its fake valuez/TensorVariable is missing a fake example_value.©rq  rr  rs  rt  )ri  r
  r  r~   rP   r�  rä  r»  rn  r™   Ú
DYNAMO_BUG)ÚvtÚfake_tensorrä  rn  s       rf   Ú_get_fake_tensorré  k  s_   € Ø—+‘+“-×$Ñ$×)Ñ)×-Ñ-¨oÓ>€KÜ�;ÔÝ'Ý&áØPÜ˜Ó$ØIØ1Ð%×0Ñ0Ð1õ		
ð Ðre   c                ój   — | j                  |«      \  }}}t        d||z
  ||dkD  rdndz
  z   |z  «      S )Nr   r4   r‚  )ÚindicesÚmax)r™  Úseq_lenr8  r9  r:  s        rf   Úslice_lengthrî  z  s?   € ØŸ	™	 'Ó*Ñ€Eˆ4�Üˆq�4˜%‘< 4°°q²©1¸bÑ#AÑBÀtÑKÓLÐLre   c                ó^   — ddl m} ddlm} d|› d|› d|› �} |t        |  ||«      g¬«       y )Nr   )Úraise_observed_exception©r‰  z3wrong number of arguments or keyword arguments for z() call.
  Expect: z
  Actual: ra  )Útorch._dynamo.excrð  Útorch._dynamo.variablesr‰  rØ  )Útxrn   ÚexpectÚactualrð  r‰  Úmsg_strs          rf   Úraise_args_mismatchrø    sM   € õ ;Ý8ð >¸d¸Vð DØ�Hð Ø�Hð	ð ñ ÜØ
Ù˜wÓ'Ð(öre   c                óB  ‡— ddl m} ‰j                  «       r%t        ˆfd„| D «       «      }|j	                  |«      S d}|r‰j                  «       rd}t        ‰«      Šd }| D ]§  }|r2|j                  «       sŒ‰t        |«      u sŒ$|j	                  d«      c S ddlm}	 |	j	                  |t        j                  «      j                  ||‰gi «      }
|€|
}Œu|	j	                  |t        j                  «      j                  ||
|gi «      }Œ© |€|j	                  d«      }|S )Nr4   rñ  c              3  ó„   •K  — | ]7  }|j                  «       xr! |j                  «       ‰j                  «       k(  –— Œ9 y ­wry   )r”  r•  )rš   rd  Úsearchs     €rf   rœ   z iter_contains.<locals>.<genexpr>ž  sJ   øè ø€ ð 
ñ �ð × Ñ Ó"ò FØ×$Ñ$Ó&¨&×*CÑ*CÓ*EÑEóFáùs   ƒ=A FTr   )ÚSourcelessBuilder)rŒ  r‰  r”  r3  rý  Ú	is_tensorré  Útorch._dynamo.variables.builderrü  r¸  ÚeqÚcall_functionÚor_)r½   rû  rô  Úcheck_tensor_identityr‰  Úfound_constÚmust_check_tensor_idÚfoundrd  rü  Úchecks    `         rf   Úiter_containsr  •  s!  ø€ õ ,à× Ñ Ô"Üó 
ñ ó
ó 
ˆð
  ×&Ñ& {Ó3Ð3à ÐÙ ×!1Ñ!1Ô!3Ø#Ðä! &Ó)ˆà'+€EÛˆÙØ�{‰{�}ØÔ-¨aÓ0Ò0Ø+×2Ñ2°4Ó8Ò8åIà%×,Ñ,¨R´·±Ó=×KÑKØ�Q˜�K óˆEð ˆ}Ø‘à)×0Ñ0°´X·\±\ÓB×PÑPØ˜ ˜¨ó‘ð ð" €}Ø ×'Ñ'¨Ó.ˆØ€Lre   c                ót   — t        | t        j                  t        j                  j                  t
        f«      S )z4Returns whether it indexes dictionaries using its id)rü  r  rV  rW  r´  r   )r
  s    rf   Ú	key_is_idr	  Â  s%   € ô �aœ%Ÿ,™,¬¯©¯©Ô9JÐKÓLÐLre   c                óX   — | D �cg c]  }t        |«      rt        |«      n|‘Œ c}S c c}w ry   )r	  rä  )rÊ   r
  s     rf   Ú	key_to_idr  É  s)   € Ù27Ó8±%¨Q”Y˜q”\ŒBˆqŒE qÑ(°%Ñ8Ð8ùÒ8s   …'c               óÈ  ‡— ddl m} t        | t        t        f«      r\dj                  ˆfd„| D «       «      }t        | t        «      rd|› d�S t        | t        «      sJ ‚t        | «      dk(  rd|› d�S d|› d	�S t        | t        j                  «      rt        | ‰¬
«      j                  dd«      S  || «      r| j                  S t        | t        «      rdd„} || «      S | ›S )Nr4   )Úis_builtin_callablerñ  c              3  ó8   •K  — | ]  }t        |‰¬ «      –— Œ y­w©©rm  N©Ú
const_repr©rš   r™  rm  s     €rf   rœ   zconst_repr.<locals>.<genexpr>Ñ  s   øè ø€ ÐDÁ!¸Qœj¨°%×8Ð8Á!ùó   ƒÚ[Ú]Ú(z,)rb  r  Ú'r�  c                óx   — | j                   }|j                  }|dk(  r|j                  S |dz   |j                  z   S )NÚbuiltinsÚ.)r—  r`   ra   )r.  Úklassr4  s      rf   Úfullnamezconst_repr.<locals>.fullnameâ  s?   € Ø—K‘KˆEØ×%Ñ%ˆFØ˜Ò#Ø×)Ñ)Ð)Ø˜C‘< %×"4Ñ"4Ñ4Ð4re   )r.  r   r‰   r™   )Útrace_rulesr  rü  ri  rý  r—   r|  rn  ro  r×  Úreplacer_   r¹  )rd  rm  r  Ú
elems_reprr  s    `   rf   r  r  Í  sØ   ø€ Ý0ä�!”dœE�]Ô#Ø—X‘XÓDÁ!ÓDÓDˆ
Ü�aœÔØ�z�l !Ð$Ð$ä˜a¤Ô'Ð'Ð'Ü�1‹v˜Š{Ø˜:˜, bÐ)Ð)à˜:˜, aÐ(Ð(Ü	�A”t—y‘yÔ	!ô ˜ %Ô(×0Ñ0°°bÓ9Ð9Ù	˜QÔ	Ø�z‰zÐÜ	�A”tÔ	ó	5ñ ˜‹{Ðà�ˆre   c               óH   ‡— dj                  ˆfd„| D «       «      }d|z   dz   S )Nrñ  c              3  ó8   •K  — | ]  }t        |‰¬ «      –— Œ y­wr  r  r  s     €rf   rœ   z!dict_keys_repr.<locals>.<genexpr>ï  s   øè ø€ ÐG¹J°qœ
 1¨E×2Ð2¹Jùr  r  r  )r—   )Ú
const_keysrm  Úkeys_strs    ` rf   Údict_keys_reprr%  î  s&   ø€ Ø�x‰xÓG¹JÓGÓG€HØ�‰>˜CÑÐre   Ú
__dict_key)ÚUnsupportedFakeTensorExceptionc                óP   — |› dt        |«      › d| j                  j                  › �S )Nr·  Ú_c)rä  Úoutputr6  )rô  Úrootrö  s      rf   Úget_safe_global_namer,  ù  s*   € ð ˆV�1”R˜“W�I˜R §	¡	× 4Ñ 4Ð5Ð6Ð6re   c                ó   — |D ]  }| |v sŒ y yrÖ  rN   )rï  Ú
containersÚ	containers      rf   Úis_inr0    s   € Ûˆ	Ø�9ÒÙð  ð re   )Úrequires_suffixc               ó˜   — |st        | g|¢­Ž s| S t        j                  «       D ]  }| › d|› �}t        |g|¢­Ž rŒ|c S  t        d«      ‚)zm
    Return a name that starts with `prefix` and is not in any of the
    `containers` (e.g., map, set).
    r·  Úunreachable)r0  rŸ   rv   r3  )Úprefixr1  r.  r  Ú	candidates        rf   Úget_unique_name_wrtr6  
  sX   € ñ ¤5¨Ð#=°*Ó#=Øˆä�_‰_ÖˆØ�h˜a ˜s�Oˆ	Ü�YÐ, Ô,ØÒð ô
 ˜Ó
'Ð're   c                óÔ   — 	  | «       S # t         $ rU}ddlm} d|j                  › d�}t        j                  |«        |dt        |j                  «      |g |¬«       Y d }~y d }~ww xY w)Nr4   rm  zEncountered exception (z!) during fake tensor propagation.z!Fake tensor propagation exceptionrp  )r'  r»  rn  Úreasonr‡   rÁ  r™   )rM  rz  rn  r–  s       rf   Úwrap_fake_exceptionr9    sd   € ð
Ù‹tˆøÜ)ò 
Ý&à'¨¯© zÐ1RÐSˆÜ�‰�CÔÙØ7Ü˜Ÿ™“MØØØ÷	
ò 	
ûð
ús   ‚	 ‰	A'’AA"Á"A'c                óž   ‡ — t         j                  j                  j                  |«      5  t	        ˆ fd„«      cd d d «       S # 1 sw Y   y xY w)Nc                 ó.   •— t        j                  ‰ «      S ry   )r¾  Údeepcopyr$  s   €rf   re  z)deepcopy_to_fake_tensor.<locals>.<lambda>1  s   ø€ ¬4¯=©=¸Ô+=re   )r  rZ  rè  ÚFakeCopyModer9  )rö  rÛ  s   ` rf   Údeepcopy_to_fake_tensorr>  -  s4   ø€ ô 
×	Ñ	×	&Ñ	&×	3Ñ	3°IÕ	>Ü"Ó#=Ó>÷ 
?×	>Ò	>ús   «AÁAc                ó~   — t        j                  t        j                  t        j                  | |z
  «      «      «      S )z+
    Calculate root mean squared error
    )r  ÚsqrtÚmeanÚsquare)rí  rý  s     rf   ÚrmserC  4  s)   € ô �:‰:”e—j‘j¤§¡¨c°C©iÓ!8Ó9Ó:Ð:re   c                ó    — t        | |d|¬«      S )Ng        )ÚtolÚ	equal_nan©Úsame)rí  rý  rF  s      rf   Úbitwise_samerI  ;  s   € ÜØØØØô	ð re   g-Cëâ6?Tç®Gáz®ï?c                ó¢  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡— ‰€‰ Št        ‰ t        t        t        j                  t
        j                  j                  t
        j                  f«      r¦t        ‰t        t        t        j                  f«      sJ dt        ‰ «      › dt        ‰«      › �«       ‚t        ‰ «      t        ‰«      k7  r	 ‰	d«       yt        ‰ «      t        ‰«      k(  xr) t        ˆˆˆˆˆˆˆ	ˆˆˆˆ
fd„t        ‰ ‰‰«      D «       «      S t        ‰ «      j                  dk(  r7t        ‰ j                  ‰j                  ‰j                  ‰‰‰‰‰‰‰	‰
‰‰‰¬«      S t        ‰ t         «      rÌt        ‰t         «      sJ ‚t#        ‰ j%                  «       «      t#        ‰j%                  «       «      k(  s;J d	t#        ‰ j%                  «       «      › d
t#        ‰j%                  «       «      › �«       ‚t'        ‰ j%                  «       «      D ]/  }t        ‰ |   ‰|   ‰|   ‰‰‰‰‰‰‰	‰
‰‰‰¬«      rŒ& ‰	d|«        y yt        ‰ t"        «      rIt        ‰t"        «      sJ ‚t#        ‰ «      t#        ‰«      k(  sJ dt#        ‰ «      › d
t#        ‰«      › �«       ‚yt        ‰ t
        j(                  t*        f«      �r‘t        ‰ t
        j,                  j.                  «      rJ ‚t        ‰t
        j,                  j.                  «      rJ ‚d'd„Šˆfd„‰ ‰‰fD «       \  Š ŠŠ‰ j0                  r.‰j0                  sJ ‚‰ j3                  «       Š ‰j3                  «       Št        ‰t
        j(                  «      sJ dt        ‰ «      › dt        ‰«      › �«       ‚‰�rÇ‰ j4                  ‰j4                  k7  r ‰	d‰ j4                  ‰j4                  «       y‰ j4                  t
        j6                  k(  �rq‰ry‰�r	‰ ‰z  j9                  «       j+                  «       }‰ ‰z  j9                  «       j+                  «       }|dk(  rt7        |dk(  «      S ||z  j;                  «       }|‰k  r› ‰	d|‰t=        |j;                  «       «      t=        |j;                  «       «      t=        ‰ j9                  «       j;                  «       «      t=        ‰j9                  «       j;                  «       «      t        ‰ j>                  «      «       yyt        j@                  ‰ jC                  t
        jD                  ¬«      ‰jC                  t
        jD                  ¬«      ‰‰‰¬«      }|s ‰	d«       |S ‰rõ‰ jG                  «       jC                  t
        jH                  «      Š ‰jG                  «       jC                  t
        jH                  «      Št        j@                  ‰ ‰‰‰d¬«      ryt
        j                  jJ                  jM                  ‰ ‰dd¬«      }|dk  r@tN        jQ                  d|jS                  «       jU                  «       j;                  «       «       t7        |dk\  «      S ‰s‰ jC                  ‰j4                  «      Š t        j@                  ‰ ‰‰‰‰¬«      ry‰j4                  t
        jV                  k(  �r˜d}‰jY                  «       j[                  «       sq‰jY                  «       j[                  «       sS‰ jY                  «       j[                  «       r5t        j@                  ‰jC                  ‰j4                  ¬«      ‰||‰¬«      ryt]        ‰‰ «      j;                  «       }t_        jX                  |«      rtN        jQ                  d«       t]        ‰‰«      j;                  «       }d(ˆˆˆ ˆˆˆ
fd„} |«       }|||z  ‰dz  z   k  }|s\‰rZt_        jX                  |«      rEt_        jX                  |«      r0t
        j`                  jb                  jd                  jf                  sd}|s' ‰	d||‰ji                  «       ‰j4                  |‰‰
«       |S ‰ry ‰	d ‰«       yt        ‰ tj        t<        t        d«      t6        t
        jl                  f«      r ‰ry‰ ‰k(  }|s ‰	d!t        ‰ «      ‰ ‰«       |S to        ‰ «      stq        ‰ «      rS‰r&to        ‰«      stq        ‰«      s‰ j;                  «       Š t        ‰ «      t        ‰«      u xr ‰ ‰k(  }|s
 ‰	d"‰ ‰«       |S ts        ‰ «      rTt        ‰ «      t        ‰«      u xr< t        t        jt                  ‰ «      t        jt                  ‰«      ‰‰‰‰‰‰‰‰	‰
¬#«      S t        ‰ «      j                  d$v r@t        ‰ «      t        ‰«      u sJ ‚t        ˆˆˆˆˆˆ	ˆ ˆˆˆˆ
fd%„‰ jv                  D «       «      S ty        d&t        ‰ «      j                  › �«      ‚))z-Check correctness to see if ref and res matchNztype mismatch rÃ   zLength mismatchFc              3  óX   •K  — | ]!  \  }}}t        |||‰‰‰‰‰‰‰
‰‰‰‰	¬ «      –— Œ# y­w)©Ú	log_errorÚ(use_larger_multiplier_for_smaller_tensorÚforce_max_multiplierÚuse_iou_for_boolÚiou_thresholdNrG  )rš   ÚaiÚbiÚ	fp64_refiÚcos_similarityrF  Úexact_dtyperP  Úignore_non_fprR  rN  Úrelax_numpy_equalityrE  rQ  rO  s       €€€€€€€€€€€rf   rœ   zsame.<locals>.<genexpr>`  sX   øè ø€ ð ,
ñ" &=Ñ!��B˜	ô! ØØØØØØØØ$ØØ#Ø9aØ%9Ø!1Ø+÷ð ñ  &=ùs   ƒ'*ÚQuestionAnsweringModelOutputrM  zkeys mismatch z == )rV  rE  rF  rW  rY  rX  rN  rO  rP  rQ  rR  zAccuracy failed for key name %sTzelements mismatch c                ód   — t        | t        j                  «      r| S t        j                  | «      S ry   )rü  r  rV  Útensor©r-  s    rf   Ú	to_tensorzsame.<locals>.to_tensorª  s"   € Ü" 1¤e§l¡lÔ3�1ÐH¼¿¹Àa»ÐHre   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wry   rN   )rš   r  r^  s     €rf   rœ   zsame.<locals>.<genexpr>­  s   øè ø€ ÐMÑ8L°™i¨Ÿ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ÚrtolrF  z+Accuracy failed: uint8 tensor did not matchg�íµ ÷Æ°>)ÚdimÚepsrJ  zSimilarity score=%sg{®Gáz¤?z=Found nan in reference. Consider running in higher precision.c                 ór  •— ‰ry‰j                   t        j                  t        j                  fv rdnd} ‰r‰j	                  «       dk  rd} | S ‰r‰j	                  «       dk  rd} | S ‰j	                  «       dk  s;‰j
                  dk(  r'‰j                  d	   ‰j                  d
   cxk(  rdk(  sn ‰dk\  rd} | S )Nç      $@g      @g       @é
   iô  g       @r4  é   r‚  éþÿÿÿr4   g{®Gáz”?)rÍ  r  r&  Úbfloat16ÚnumelÚndimrÖ  )Ú
multiplierrP  Úfp64_refrí  rý  rE  rO  s    €€€€€€rf   Úget_multiplierz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à (š?ð
 &)˜
Ø%Ð%re   re  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©rV  rE  rF  rW  rY  rX  rN  rO  )ÚMaskedLMOutputÚSeq2SeqLMOutputÚ!CausalLMOutputWithCrossAttentionsÚLongformerMaskedLMOutputÚ	InstancesÚSquashedNormalÚBoxesÚNormalÚTanhTransformÚFooÚVariablec              3  ó†   •K  — | ]8  }t        t        ‰|«      t        ‰
|«      t        ‰|«      ‰‰‰‰‰	‰‰‰¬ «      –— Œ: y­w)ro  N)rH  r½  )rš   rÉ   rV  rF  rW  rm  rX  rN  rí  rY  rý  rE  rO  s     €€€€€€€€€€€rf   rœ   zsame.<locals>.<genexpr>  s]   øè ø€ ð 
ñ $�ô Ü˜˜SÓ!Ü˜˜SÓ!Ü˜ #Ó&Ø-ØØ#Ø'Ø%9Ø+Ø#Ø9a÷ð ñ $ùs   ƒ>Azunsupported type: )r-  r   r‰   rÛ  )r‰   Úfloat)=rü  ri  rý  r�   rU  r  rW  ÚParameterListrp  r¹  r|  r_  rç  r_   rH  Úlossrû  rv  rj  rô  rV  r|  rZ  rO   Ú	is_sparseÚto_denserÍ  r"  r€   rï  rˆ   rÖ  ÚallcloseÚtor   Úflattenr'  Ú
functionalÚcosine_similarityr‡   rÁ  ÚdetachÚcpur(  Úisnanr3  rC  Úmathr2  rL   ÚcppÚinject_relu_bug_TESTING_ONLYrè  r™   r  r$  r)  rT  Ú	as_tensorÚ__dict__rã   )rí  rý  rm  rV  rE  rF  rW  rY  rX  rN  rO  rP  rQ  rR  r
  ÚintersectionÚunionÚiouÚrÚscoreÚ	loose_tolÚ	ref_errorÚ	res_errorrn  rl  Úpasses_testr^  s   ``````````````            @rf   rH  rH  D  sK  ÿþ€ ð" ÐØˆÜØŒ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ÙØØ�3‰JˆÙÙÐ6¼¸S»	À3ÈÔLØˆÜ	˜3Ô	Ô#6°sÔ#;ÙÜ˜cÔ"Ô&9¸#Ô&>à—(‘(“*ˆCÜ�#‹Yœ$˜s›)Ð#Ò5¨#°©*ˆÙÙÐ9¸3ÀÔDØˆÜ	˜#Ô	Ü�S“	œT #›YÐ&ò 
¬DÜ�O‰O˜CÓ Ü�O‰O˜CÓ ØØ)ØØØ#Ø!5Ø'ØØ5]ô-
ð 	
ô 
ˆc‹×	Ñ	ð  ñ 
ô �C‹yœD ›IÑ%Ð%Ð%Ü÷ 
õ 
ð —|’|ó
ó 
ð 	
ô" Ð/´°S³	×0BÑ0BÐ/CÐDÓEÐEre   c                ó~   — | j                   j                  d«      d   }d| j                  › d|› d| j                  › d�S )NÚ/r‚  r  z' (rÄ   rb  )r‡  Úsplitr¸  rº  )r¼  Úshort_filenames     rf   Úformat_func_infor›  “  sD   € Ø×%Ñ%×+Ñ+¨CÓ0°Ñ4€NØˆt�|‰|ˆn˜C Ð/¨q°×1DÑ1DÐ0EÀQÐGÐGre   c               #  ó  K  — t         j                  } t        j                  t         _        t         j                  }t        j                  t         _        	 d –— | t         _        |t         _        y # | t         _        |t         _        w xY w­wry   )rL   Úrecompile_limitr  rq  Úaccumulated_recompile_limit)ÚpriorÚprior_acc_limits     rf   Údisable_cache_limitr¡  ˜  s_   è ø€ ä×"Ñ"€Eä Ÿ[™[„FÔÜ×8Ñ8€Oä),¯©„FÔ&ð=Ûà!&ŒÔØ-<ŒÕ*øð "'ŒÔØ-<ŒÕ*üs   ‚ABÁA1 ÁBÁ1B	Â	Bz'collections.defaultdict[Any, list[Any]]Úguard_failuresz3list[torch._dynamo.output_graph.GraphCompileReason]Úgraph_break_reasonsc                óä   — dt         j                   j                  «       j                  d«      z   dz   t        t	        j
                  «       «      z   }t        j                  j                  | |«      S )NÚrun_z%Y_%m_%d_%H_%M_%S_%fz-pid_)ÚdatetimeÚnowÚstrftimer™   r…  Úgetpidr¤  r—   )Úroot_dirÚdir_names     rf   Ú_get_debug_dirr¬  ·  sf   € ð 	Ü
×
Ñ
×
Ñ
Ó
!×
*Ñ
*Ð+AÓ
Bñ	Cð ñ	ô Œb�i‰i‹kÓ
ñ		ð ô �7‰7�<‰<˜ (Ó+Ð+re   c                 ó8   — t         j                  } t        | «      S ry   )rL   r  r¬  )Ú
debug_roots    rf   r¥  r¥  Ã  s   € Ü×&Ñ&€JÜ˜*Ó%Ð%re   c                óÖ   — d| j                   v r't        | j                   d   «      r| j                   d   S |r2ddlm} ddlm}  |dt        | «      d| › d�g |j                  ¢¬	«       y y )
NrÙ  r   rm  r4   rã  z Missing FakeTensor example valuez,`FakeTensor` example value was required for z but not available.rå  )r  rP   rò  rn  r�  rä  r™   ræ  )r
  Úrequiredrn  rä  s       rf   Úextract_fake_example_valuer±  È  si   € Ø˜$Ÿ)™)Ñ#¬°·	±	¸/Ñ0JÔ(KØ�y‰y˜Ñ)Ð)Ù	Ý3å'áØ6Ü˜“IØFÀtÀfÐL_Ð`Ø1Ð%×0Ñ0Ð1ö		
ð re   c                ó8   — t        | «      |j                  u sJ ‚| S ry   )rQ   rÛ  )rz  rô  s     rf   Úensure_graph_faker³  Ú  s   € Ü˜qÓ! R§\¡\Ñ1Ð1Ð1Ø€Hre   c                óh   ‡ ‡— dˆˆ fd„}t         j                  j                  j                  ||«      S )Nc                óâ  •— | j                   dk(  rd| j                  vrt        | ‰‰«      S | j                   dk(  r}d| j                  vro| j                  ‰j                  j
                  v sJ ‚‰j                  j
                  | j                     }t        |t        j                  j                  «      sJ ‚|S | j                  d   }‰s&t        |t        j                  «      rt        |‰«      S |S )Nr   rÙ  Úget_attr)rÎ  r  Úget_fake_valueÚtargetr*  Ú
nn_modulesrü  r  r   ÚGraphModulerV  r³  )rÑ  rO  rÈ   Úallow_non_graph_fakerô  s      €€rf   Úvisitz)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ØˆIà�f‰f�_Ñ%ˆÙ#¬
°3¼¿¹Ô(EÜ$ S¨"Ó-Ð-Øˆ
re   )rÑ  útorch.fx.Noder‰   r   )r  r   r
  Úmap_arg)rô  rÍ  r»  r¼  s   ` ` rf   Úget_fake_values_from_nodesr¿  ß  s%   ù€ öô" �8‰8�=‰=× Ñ  ¨Ó.Ð.re   c                ó¬   ‡‡— ddl }ddlmŠ |€| S d}|j                  €J ‚|j                  }|j                  Šdˆˆfd„} |j
                  ||| «      } | S )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                óÞ   •‡— d| j                  d«      › �Št        ˆfd„‰j                  «       D «       d «      }t        |t        ‰f«      rd‰› dt        |«      › d�S | j                  d«      S )Nr™  r4   c              3  óH   •K  — | ]  \  }}|j                   ‰k(  sŒ|–— Œ y ­wry   )rn   )rš   r
  r  Úsym_names      €rf   rœ   zGget_concrete_sizes_from_symints.<locals>.replace_sym.<locals>.<genexpr>  s#   øè ø€ ÐKÑ4‘4�1�a¸¿¹À(Ó8JŒQÑ4ùs   ƒ"›"r  z	: hint = rb  r   )ÚgrouprÌ  r½   rü  rˆ   r™   )Úmatchr  rÄ  rÁ  Úbacked_var_to_vals     @€€rf   Úreplace_symz4get_concrete_sizes_from_symints.<locals>.replace_sym  sn   ù€ Ø�u—{‘{ 1“~Ð&Ð'ˆÜÛKÐ,×2Ñ2Ô4ÓKØó
ˆô �cœC ˜>Ô*Ø�x�j 	¬#¨c«(¨°1Ð5Ð5Ø�{‰{˜1‹~Ðre   )rÆ  r   r‰   r™   )r   Úsympy.core.numbersrÁ  rÜ  rÇ  r”  )r–  rÛ  r   ÚpatternrÜ  rÈ  rÁ  rÇ  s         @@rf   Úget_concrete_sizes_from_symintsrË  ö  sd   ù€ ó å*àÐØˆ
à€GØ×ÑÐ*Ð*Ð*Ø×#Ñ#€IØ!×3Ñ3Ðöð ˆ"�&‰&�˜+ sÓ
+€CØ€Jre   c           	     óÄ   — ddl m}m} 	  | «        t        d«      ‚# |$ r>} |t        |«      t	        |dd «      «      }|j                  |j                  «      d ‚d }~ww xY w)Nr4   )ÚTorchRuntimeErrorÚUnsupportedÚ
real_stackzshould be unreachable)r»  rÍ  rÎ  r™   r½  Úwith_tracebackÚ__traceback__r3  )Úgb_fnrÍ  rÎ  rz  r»  s        rf   Ú(_wrap_graph_break_with_torch_runtime_errrÓ    s_   € ß3ð<ÙŒô Ð0Ó
1Ð1øð ò <Ù¤ A£¬°°<ÀÓ(FÓGˆØ× Ñ  §¡Ó1°tÐ;ûð<ús   Š œA¡9AÁAc                óH  — t        j                  «       }	 t        | ||«      |j                  j                  xj
                  t        j                  «       |z
  z  c_        S # |j                  j                  xj
                  t        j                  «       |z
  z  c_        w xY wry   )rà   rá   Ú_get_fake_value_implr*  Úbytecode_tracing_timingsÚget_fake_value_ns)r
  rô  r»  Ú_t0s       rf   r·  r·  $  sq   € ô
 �,‰,‹.€CðUÜ# D¨"Ð.BÓCà
�	‰	×*Ñ*×<Ò<ÄÇÁÃÐQTÑ@TÑTÖ<øˆ�	‰	×*Ñ*×<Ò<ÄÇÁÃÐQTÑ@TÑTÖ<ús   –A! Á!A B!c           	     ó8  ‡ ‡‡‡‡‡‡‡‡— ddl m} ddlmŠ ddlmŠm}m}m} ‰ j                  }d‰ j                  v r't        ‰ j                  d   «      r‰ j                  d   S t        ‰‰ j                  ‰ j                  f|«      \  ŠŠt        j                   j"                  j$                  s$t        j                   j"                  j&                  rGt        ‰t)        ‰ i «      |«      }|D �	ci c]$  }	t        |	«      sŒt+        |	«      |	j,                  “Œ& }
}	ng }i }
dŠ‰j.                  }|€J ‚|dk(  rTt1        ‰«      dkD  rFt3        ‰d   t        j4                  j6                  «      rt9        ‰d   |«      ft;        ‰dd «      z   Š|d	k(  rX‰j<                  j>                  ‰ j@                     ŠtC        ‰«      rtE        ‰d
«      r‰jG                  ‰‰«       t9        ‰|«      Š‰ jH                  dv stK        d„ ‰D «       «      rt;        d„ ‰D «       «      Š	 |5  tM        «       5  tO        ˆˆˆˆ ˆfd„«      }ddd«       ddd«       |s>t�        j�                  t        j’                  t•        j–                  t˜        ‰¬+«      «      }t        j                   j"                  j$                  s$t        j                   j"                  j&                  r'‰j<                  jš                  j�                  ‰ ||
«       S c c}	w # 1 sw Y   ŒÇxY w# 1 sw Y   ŒËxY w# |$ r ‚ tP        $ �ru}|Š|jR                  �|jR                  Št3        ‰t        jT                  jV                  jX                  «      rŸ‰jZ                  t        j\                  j^                  j`                  jb                  t        j\                  j^                  jd                  jb                  fv rdg}ndg} ‰dtg        ‰jZ                  «      d‰jZ                  › d�|‰¬«       �nWt3        ‰t        jT                  jV                  jh                  «      r†t        j                   j"                  jj                  s1 ‰dtg        ‰jZ                  «      d‰jZ                  › d�dg‰¬«       �nÔ ‰dtg        ‰jZ                  «      d‰jZ                  › d�dg‰¬«       �n£t3        ‰t        jT                  jV                  jl                  «      r¬‰jZ                  }d}t3        |t        jn                  jp                  «      r[t        jr                  ju                  |jv                  jH                  |jv                  jx                  «      }|�|\  }}d|› d|› d|› d�} ‰d d!‰jZ                  › �d|› d"�g‰¬«       nÉt3        ‰t        jz                  j|                  j~                  j€                  «      r ||j‚                  tg        ‰«      d#¬$«      ‚t3        ‰|«      r! ||j‚                  |j                  d   «      |‚t3        ‰t„        «      r6d%tg        ‰«      v r) ‰d&d'‰ j@                  › d(‰› �dg ‰j†                  ¢‰¬«       t‰        tg        |«      |«      Št‹        ˆˆˆˆfd)„«       t�        d*«      d‚d}~ww xY w),az  
    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   rã  )rn  rÎ  Ú	UserErrorÚUserErrorTyperÙ  NÚcall_methodÚcall_moduleÚ_initialize_hook)ÚinterpolateÚ
is_integerÚwrapped_gradientc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wry   )rü  Úcomplex)rš   Úas     rf   rœ   z'_get_fake_value_impl.<locals>.<genexpr>p  s   è ø€ ð MÙ(, 1Œ
�1”g×©ùrl  c              3  ó–   K  — | ]A  }t        |t        j                  «      r!|j                  j                  �t        |«      n|–— ŒC y ­wry   )rü  r  ÚSymFloatr
  Úhintr|  rj  s     rf   rœ   z'_get_fake_value_impl.<locals>.<genexpr>t  sE   è ø€ ð 
ñ �ô ˜c¤5§>¡>Ô2°s·x±x·}±}Ð7Pô �c”
àóñ ùs   ‚AA	c                 ó6   •— t        ‰j                  ‰‰ ‰‰«      S ry   )Úrun_noder*  )r  r  Únnmoduler
  rô  s   €€€€€rf   re  z&_get_fake_value_impl.<locals>.<lambda>€  s   ø€ œ §¡¨D°$¸ÀÔIre   zkEnable tracing of data-dependent output operators with `torch._dynamo.config.capture_scalar_outputs = True`z’Consider wrapping the operator into a PyTorch-understood custom operator (see https://pytorch.org/tutorials/advanced/custom_ops_landing_page.html)zData dependent operatorz
Operator `zP` has a non-Tensor output whose value is dependent on the data of Tensor inputs.rp  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                 ó6   •—  ‰dd‰g ‰j                   ¢‰ ¬«      S )Nz)RuntimeError when making fake tensor callr�  rp  ©Ú
USER_ERROR)Úcauserä  r–  rn  s   €€€€rf   re  z&_get_fake_value_impl.<locals>.<lambda>ë  s%   ø€ ‘MØCØØØ5Ð)×4Ñ4Ð5Øõre   zshould not reachable)rô  )OÚtorch.utils._sympy.value_rangesrÚ  r�  rä  r»  rn  rÎ  rÛ  rÜ  rÎ  r  rP   r¿  r  r  r  rÀ  rL   Úuse_graph_deduplicationÚtrack_nodes_for_deduplicationr5   rä  rH  rÛ  r|  rü  rW  r´  r>  rý  r*  r¹  r¸  r_  rÐ   Ú_infer_parametersrn   r3  r   r9  rã   Ú	__cause__rZ  rè  ÚDataDependentOutputExceptionÚfuncÚopsÚatenrï  rç  Ú_local_scalar_denser™   ÚDynamicOutputShapeExceptionÚ capture_dynamic_output_shape_opsÚUnsupportedOperatorExceptionr6  r8  r(  Ú_dispatch_pystubÚ_schemaÚoverload_namer   rÝ  rÞ  ÚGuardOnDataDependentSymNodeÚCONSTRAINT_VIOLATIONrØ  rñ  rË  rÓ  r3  r  Útree_map_onlyrV  r/  Úpartialr³  Úregion_trackerÚtrack_node_mutations)r
  rô  r»  rÚ  rÎ  rÛ  rÜ  rÎ  Úflat_args_kwargsrk  Úid_to_initial_versionrÛ  Úret_valrz  rt  Úimport_suggestionÚmaybe_pystubr4  Úctxr·  r  rò  rä  r  r–  rë  rn  s   ``                  @@@@@@@rf   rÕ  rÕ  0  sí  ÿø€ õ @å#ßIÓIà	�‰€Bð ˜$Ÿ)™)Ñ#¬°·	±	¸/Ñ0JÔ(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ä'¨¨Q©°Ó;Ð=ÄÀdÈ1È2ÀhÃÑOˆà	ˆ]ÒØ—9‘9×'Ñ'¨¯©Ñ4ˆä˜(Ô#¬°Ð:LÔ(Mð
 ×&Ñ& x°Ô6ô +¨8°YÓ?ˆà‡y�yÐEÑEÌñ MÙ(,óMô Jô ñ 
ñ ó
ó 
ˆðv?ÚÔ0Õ2Ü)ß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Ü$Ÿ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?úsU   Ã,K8Ã=K8ÈL ÈL	È$K=È7L	È?L Ë=L	ÌL	Ì	LÌL ÌZÌ$M0ZÚZc                 ó$   — t        t        dd «      S )NrÊ   )r½  Ú_current_noderN   re   rf   Úget_current_noder  
  s   € Ü”= '¨4Ó0Ð0re   c              #  óv   K  — t        «       }| t        _        	 d –— |t        _        y # |t        _        w xY w­wry   )r  r  rÊ   )r
  Úolds     rf   Úset_current_noder    s.   è ø€ ä
Ó
€CØ„MÔð"Ûà!ŒÕø˜cŒÕüs   ‚9™) �9©6¶9c           	     ó   ‡‡‡‡— ‰j                   Št        ‰«      5  dˆˆˆˆfd„}ddlm} 	 ‰dk(  r ‰j                  ‰i ‰¤Žcddd«       S ‰dk(  rnt        ‰d   ‰j                  «      s*ddlm} dd	lm}  |d
d |d«      g |j                  ¢¬«        t        ‰d   ‰j                  «      ‰dd i ‰¤Žcddd«       S ‰dk(  r|€J ‚ |‰i ‰¤Žcddd«       S ‰dk(  r.| j                  j                  ‰j                  «      cddd«       S ‰dk(  r(d‰j                  v sJ ‚‰j                  d   cddd«       S 	 ddd«       t+        ‰«      ‚# t        t        f$ rN}	ddlm} dd	lm} g |j                  ¢}
t!        |	t        «      r|
ddgz  }
 |dd ||	«      |
|	¬«       Y d}	~	Œkd}	~	w|$ r ‚ t"        $ r0}	t%         ||	«      «      j'                  |	j(                  «      |	‚d}	~	ww xY w# 1 sw Y   t+        ‰«      ‚xY w)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   •— d‰› d‰j                   › d‰› d‰› d�	t        | «      z   S )Nz0Dynamo failed to run FX node with fake tensors: rÃ   z(*z, **z): got )r¸  rY  )rz  r  r  r
  rÎ  s    €€€€rf   Úmake_error_messagez$run_node.<locals>.make_error_message-  s=   ø€ àBÀ2À$ÀaÈÏÉÀ}ÐTVÐW[ÐV\Ð\`ÐagÐ`hÐhoÐpÜ�q“'ñðre   r4   )rÎ  r   NrÝ  r   rã  rm  z/Missing attribute when running call_method noder�  zattribute not definedrå  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 noderp  )rz  r   r‰   r™   )rÎ  r  r»  rÎ  r¸  rÐ   r�  rä  rn  rñ  r½  Úoutput_graphÚget_submoduler  rv  r'  rü  rÅ  rã   rÐ  rÑ  r3  )Útracerr
  r  r  rë  r  rÎ  rä  rn  rz  rt  rÎ  s    ```       @rf   rê  rê    s)  û€ ð" 
�‰€Bä	˜$Õ	÷	ð 	õ 	%ð1	Ø�_Ò$Ø"�t—{‘{ DÐ3¨FÑ3÷ 
 Ñ	ð �}Ò$Ü˜t A™w¨¯©Ô4Ý3Ý2á!Ø QØ "Ù$6Ð7NÓ$OØ=Ð 1× <Ñ <Ð=õ	ð 5”w˜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Øð@àQðñ �ñ ØaØÙ.¨qÓ1ØØ÷ò ûð ò 	ØÜò 	ÜÑ1°!Ó4Ó5×DÑDØ—‘óàðûð	ú÷q 
 ôz ˜Ó
ÐúsZ   œG*­EÁA)EÃ EÃ)EÄ#EÄ:G*ÅG'ÅAF&Æ!G*Æ&G'Æ7+G"Ç"G'Ç'G*Ç*G=c                ó|  ‡‡	‡
‡— ddl mŠ
 ddlmŠ ‰j                  }| |v r||    S | j
                  }t        j                  j                  j                  | j                  | j                  fˆfd„«      \  }}|dk(  r'd| j                  v r| j                  d   j                  S |dk(  rM‰j                  j                  | j                      }t#        |«      st%        j&                  |«      }n ||i |¤Ž nd}	 t)        ‰| |||«      }||| <   |S # t*        $ r#}|Š	t-        ˆ	ˆ
ˆfd	„«       t/        d
«      d‚d}~ww xY w)z‘
    Run the actual computation represented by `node` and return the result.
    This will execute any dependent nodes in the graph as well.
    r4   rã  rm  c                ó   •— t        | ‰«      S ry   )Úget_real_value)rÑ  r  s    €rf   re  z get_real_value.<locals>.<lambda>z  s   ø€ ”.  FÔ+re   r  ÚgraphargrÞ  Nc                 ó6   •—  ‰dddg ‰j                   ¢‰ ¬«      S )Nz7RuntimeError when trying to get real value from fx.Noder�  rp  rð  )Úexnrä  rn  s   €€€rf   re  z get_real_value.<locals>.<lambda>‘  s%   ø€ ‘MØQØØØ5Ð)×4Ñ4Ð5Øõre   zshould not be reachable)r�  rä  r»  rn  Úreal_value_cacherÎ  r  r   r
  r¾  r  r  r  Úexampler  r¹  r¸  r_  r¾  r<  rê  rã   rÓ  r3  )r
  r  ÚcacherÎ  r  r  Ú	nn_moduleÚ
real_valuerz  r!  rä  rn  s    `       @@@rf   r  r  k  s4  û€ õ
 $Ý"à×#Ñ#€EØˆu�}Ø�T‰{Ðà	�‰€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ˆ
Ø ˆˆd‰ð Ðøô ò BØˆÜ0õô	
ô Ð6Ó7¸TÐAûðBús   Ã9D Ä	D;ÄD6Ä6D;c                óî   ‡— ddl mŠm} dˆfd„}| j                  «       D ]   \  }} ||«      sŒJ d|› d ||«      › �«       ‚ | j	                  «       D ]   \  }} ||«      sŒJ d|› d ||«      › �«       ‚ y )Nr   )ÚFakeTensorConfigrP   c                ód   •— ‰j                   r#dd l}d |j                  | j                  «      › �S y)Nr   z"FAKE TENSOR CREATION TRACEBACK: 
 zNEnable TORCH_FAKE_TENSOR_DEBUG=1 to get creation stack traces on fake tensors.)ÚdebugÚ	tracebackÚformat_listÚ_debug_trace)r-  r+  r(  s     €rf   Ústack_or_hintz7assert_no_fake_params_or_buffers.<locals>.stack_or_hint   s2   ø€ Ø×!Ò!Ûà8Ð9N¸×9NÑ9NÈqÏ~É~Ó9^Ð8_Ð`Ð`àcre   zUnexpected fake buffer rÃ   zUnexpected fake param )r-  r   r‰   r™   )Útorch._subclasses.fake_tensorr(  rP   Únamed_buffersÚnamed_parameters)rO  rP   r.  rn   ÚbufferrI  r(  s         @rf   Ú assert_no_fake_params_or_buffersr3  �  s’   ø€ ßGõdð ×(Ñ(Ö*‰ˆˆfÙ˜6•?ð 	
Ø% d V¨1©]¸6Ó-BÐ,CÐDó	
Ð"ð +ð ×*Ñ*Ö,‰ˆˆeÙ˜5•>ð 	
Ø$ T F¨!©M¸%Ó,@Ð+AÐBó	
Ð!ñ -re   c                ó8   — | j                   › d| j                  › �S )z9
    Returns the fully qualified name of the object.
    r  )r`   ra   r$  s    rf   Úfqnr5  ²  s!   € ð �n‰nÐ˜Q˜s×/Ñ/Ð0Ð1Ð1re   c                óR   — t         j                  j                  j                  r| S |S ry   )r  rÀ  rL   Úassume_static_by_default)Úcount1Úcount2s     rf   Úifdynstaticdefaultr:  ¹  s   € Ü‡}�}×Ñ×4Ò4Øˆàˆre   c           
     ó8  — t        t        j                  t        j                  j	                  t        t        | j                  «      «      «      «      D ]D  }|j                  d«      sŒ|d   dk7  sŒt        j                  | j                  › d|dd › �«       ŒF y)z@
    Ensure all the files in a given submodule are imported
    z.pyr   r·  r  Néýÿÿÿ)rô  r…  Úlistdirr¤  rÂ  r   r™   Ú__file__r>  Ú	importlibÚimport_moduler_   )r^  rÇ  s     rf   Úimport_submodulerA  À  sq   € ô œ2Ÿ:™:¤b§g¡g§o¡o´d¼3ÀÇÁÓ6MÓ&NÓOÖPˆØ×Ñ˜UÕ#¨°©°sÓ(:Ü×#Ñ# s§|¡| n°A°h¸sÀ°m°_Ð$EÕFñ Qre   c                ó*   — t        t        | «      «      S ry   )Úclass_has_getattributer¹  r  s    rf   Úobject_has_getattributerD  É  s   € Ü!¤$ u£+Ó.Ð.re   c                ó:   — t         j                  | d«      }|||<   y )Nr�  )r#  Ú__getattribute__)rö  rn   rÊ   r  s       rf   Ú object_setattr_ignore_descriptorrG  Í  s   € ä×Ñ  ZÓ0€AØ€A€d‚Gre   c                ó„   — 	 t        t        j                  | d«      t        j                  «      ry	 y# t
        $ r Y yw xY w)NrF  TF)rü  r2  r3  r  r;  r'  r{   s    rf   rC  rC  Ó  sO   € ðÜÜ×"Ñ" 3Ð(:Ó;Ü×Ñô
ð ð	
ð øô ò ØØðús   ‚.3 ³	?¾?c                ó¼   — 	 t        j                  t        | «      d«      }|r(|t        j
                  j                  j                  u rd }|S # t        $ r d }Y Œ9w xY w)NÚ__getattr__)r2  r3  r¹  r'  r  rW  r´  rJ  )rÊ   Úignore_nn_module_getattrÚ
getattr_fns      rf   Úget_custom_getattrrM  ß  sX   € ðÜ×+Ñ+¬D°«K¸ÓGˆ
ñ   J´%·(±(·/±/×2MÑ2MÑ$Màˆ
ØÐøô ò ØŠ
ðús   ‚A ÁAÁAc                  ó   — e Zd ZdZdZdZy)ÚTensorStaticReasonr]   rg  rÅ   N)r_   r`   ra   Ú	PARAMETERÚ
NOT_TENSORÚNN_MODULE_PROPERTYrN   re   rf   rO  rO  ì  s   „ Ø€IØ€JØÑre   rO  c                ó–   — | t         j                  k(  ry| t         j                  k(  ry| t         j                  k(  ryt	        d| › �«      ‚)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 )rO  rP  rQ  rR  r3  )r8  s    rf   Útensor_static_reason_to_messagerT  ò  sJ   € ØÔ#×-Ñ-Ò-ØOØÔ#×.Ñ.Ò.ØCØÔ#×6Ñ6Ò6ØEÜ
˜?¨6¨(Ð3Ó
4Ð4re   c                ó‚  — ddl m} |j                  j                  «       s|j                  j	                  «       r"t
        j                  rdt        j                  fS t        | «      t        j                  j                  u s ||«      r"t
        j                  rdt        j                  fS |sdt        j                  fS y)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  rV  r�  rƒ  r…  rL   Ú&force_nn_module_property_static_shapesrO  rR  r¹  r  rW  rX  Úforce_parameter_static_shapesrP  rQ  )r\  rý  Útensor_sourcerV  s       rf   Útensor_always_has_static_shaperZ  ü  sœ   € õ  Bð 	×"Ñ"×;Ñ;Ô=Ø×%Ñ%×HÑHÔJÜ
×
7Ò
7ØÔ'×:Ñ:Ð:Ð:ô 	ˆV‹œŸ™×*Ñ*Ñ*Ù4°]ÔCÜ
×
.Ò
.ØÔ'×1Ñ1Ð1Ð1ÙØÔ'×2Ñ2Ð2Ð2Øre   c                ó*   ‡ ‡— dˆ ˆfd„}t        |«      S )Nc                 óŒ  •— 	 ddl m }  ‰j                  j
                  D �cg c];  }|j                  |j                  |j                  |j                  |j                  g‘Œ= }} | |g d¢¬«      }t        ‰‰j                  j                  j                  |«      S # t        $ r dt        t        ‰‰«      «      z   cY S w xY wc c}w )Nr   )r�   zkTabulate module missing, please install tabulate to log the graph in tabular format, logging code instead:
)Úopcodern   r¸  r  r  r’   )r�   rž   r™   r,   r  rÍ  rÎ  rn   r¸  r  r  r+   ÚforwardÚ__code__r‡  )r�   rÑ  Ú
node_specsÚ	graph_strr0  rO  s       €€rf   Úinnerz(lazy_format_graph_tabular.<locals>.inner  s·   ø€ ð	Ý)ð ACÇÁÇÂó
Ù@N¸1ˆQ�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   )r0  rO  rb  s   `` rf   Úlazy_format_graph_tabularrd    s   ù€ öWô" �eÓÐre   c                óf   — | › d|› d|› d|› dt        j                  |«      j                  «       › d�
S )NrÃ   z line z 
r”   )ÚdisÚBytecode)r4  rn   rÇ  Úline_nor¼  s        rf   Úformat_bytecoderi  3  s=   € ð ˆX�Q�t�f˜A˜h˜Z v¨g¨Y°c¼#¿,¹,ÀtÓ:L×:PÑ:PÓ:RÐ9SÐSUÐVÐVre   )Ú_forward_pre_hooksÚ_forward_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                 óô   — t        t        t        j                  j                  j
                  j                  «      xs7 t        t        j                  j                  j
                  j                  «      «      S ry   )r"  r|  r  rW  Úmodulesr4  Ú_global_backward_hooksÚ_global_backward_pre_hooksrN   re   rf   Únn_module_has_global_hooksrx  I  sS   € ô ÜŒE�H‰H×Ñ×#Ñ#×:Ñ:Ó;ò 	CÜŒu�x‰x×Ñ×&Ñ&×AÑAÓBóð re   c                ó  — g }| xr | xr | }|s|r|j                  t        «       |s|r|j                  t        «       |r|j                  t        «       g }|D ],  }t	        | |g «      }|D ]  }	||	   }
|j                  |
«       Œ Œ. |S )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              rf   Únn_module_get_all_hooksr‡  R  s®   € ð ÐàÐò 	'Ø$Ð$ò	'à&Ð&ð ñ
 ™oØ×"Ñ"Ô#5Ô6Ù™Ø×"Ñ"Ô#6Ô7ÙØ×"Ñ"Ô#8Ô9à€IÛ-ˆÜ˜˜^¨RÓ0ˆÛˆIØ˜Ñ#ˆDà×Ñ˜TÕ"ñ ð .ð Ðre   c                ó6   — t        | |||¬«      }t        |«      S )zL
    Helper function to check if a module has any hooks attached to it.
    )r~  r  r€  )r‡  r"  )r^  r~  r  r€  r…  s        rf   Únnmodule_has_hooksr‰  s  s&   € ô $ØØ/Ø1Ø5ô	€Eô �‹;Ðre   c                ó2  — t        | «      r| S t        | t        j                  «      rt	        | j
                  «      S t        | t        j                  «      r| j                  d¬«      S t        | t        t        f«      r t        | «      d„ | D «       «      S | S )z0Convert tensor and tnp.ndarray to numpy.ndarray.T)Úforcec              3  ó2   K  — | ]  }t        |«      –— Œ y ­wry   )Úto_numpy_helper©rš   rö  s     rf   rœ   z"to_numpy_helper.<locals>.<genexpr>Ž  ó   è ø€ ÐA¹5°Cœ?¨3×/¹5ùrØ  )rP   rü  ÚtnprS  r�  r\  r  rV  Únumpyrý  ri  r¹  r  s    rf   r�  r�  …  st   € äˆu„~ØˆÜ�%œŸ™Ô%Ü˜uŸ|™|Ó,Ð,Ü	�Eœ5Ÿ<™<Ô	(Ø�{‰{ ˆ{Ó&Ð&Ü	�EœE¤4˜=Ô	)ØŒt�E‹{ÑA¹5ÓAÓAÐAàˆre   c                ó  — t         €J ‚t        | t         j                  «      rt        j                  | «      S t        | t
        j                  «      r| j                  S t        | t        t        f«      r t        | «      d„ | D «       «      S | S )zeConvert tnp.ndarray to tensor, leave other types intact. If a list/tuple, loop through it to convert.c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wry   )Únumpy_to_tensorrŽ  s     rf   rœ   z"numpy_to_tensor.<locals>.<genexpr>›  r�  rØ  )
r  rü  rS  r  rŒ  r�  r\  rý  ri  r¹  r  s    rf   r”  r”  “  sk   € äˆ>Ðˆ>Ü�%œŸ™Ô$Ü�‰˜uÓ%Ð%Ü�%œŸ™Ô%Ø�|‰|ÐÜ	�EœE¤4˜=Ô	)ØŒt�E‹{ÑA¹5ÓAÓAÐAàˆre   c                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)Únumpy_to_tensor_wrapperc                óN   — || _         d| j                   j                  z   | _        y ©NÚwrapped_©rÉ  r_   )rs  rÉ  s     rf   rt  z numpy_to_tensor_wrapper.__init__¡  s   € ØˆŒØ" T§V¡V§_¡_Ñ4ˆ�re   c                ó6   — d| j                   j                  › d�S )Nz<Wrapped function <original ú>>rš  rw  s    rf   Ú__repr__z numpy_to_tensor_wrapper.__repr__¥  s   € Ø-¨d¯f©f¯o©oÐ->¸bÐAÐAre   c                ó<   —  | j                   |i |¤Ž}t        |«      S ry   )rÉ  r”  ©rs  r  r  rÈ   s       rf   r­  z numpy_to_tensor_wrapper.__call__¨  s"   € Øˆd�f‰f�dÐ%˜fÑ%ˆÜ˜sÓ#Ð#re   N)rÉ  úCallable[_P, R]r‰   rŠ   rc  ©r  r$  r  r%  r‰   r   )r_   r`   ra   rt  r�  r­  rN   re   rf   r–  r–     s   „ ó5óBô$re   r–  c                óî   — t        | t        j                  «      rt        | |«      }t	        |«      S t        | t
        j                  «      r*t        t        j                  | «      |«      }t	        |«      S y ry   )rü  r�  rS  r½  r”  r  rV  )rö  rn   rÈ   s      rf   Únumpy_attr_wrapperr£  ­  sZ   € Ü�#”s—{‘{Ô#Ü�c˜4Ó ˆÜ˜sÓ#Ð#Ü	�CœŸ™Ô	&Ü”c—k‘k #Ó&¨Ó-ˆÜ˜sÓ#Ð#ð 
're   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	Únumpy_method_wrapperzgConvert obj from torch.Tensor to tnp.ndarray and call method. Then convert result back to torch.Tensor.c                ó:   — || _         d| j                   z   | _        y r˜  )Úmethodr_   )rs  r§  s     rf   rt  znumpy_method_wrapper.__init__¹  s   € ØˆŒØ" T§[¡[Ñ0ˆ�re   c                ó"   — d| j                   › d�S )Nz<Wrapped method <original rœ  ©r§  rw  s    rf   r�  znumpy_method_wrapper.__repr__½  s   € Ø+¨D¯K©K¨=¸Ð;Ð;re   c                óÂ   — |d   }t        |t        j                  «      rt        j                  |«      }t        || j                  «      } ||dd  i |¤Ž}t        |«      S rt  )rü  r  rV  r�  rS  r½  r§  r”  )rs  r  r  rö  Úmethod_callablerÈ   s         rf   r­  znumpy_method_wrapper.__call__À  sW   € Ø�1‰gˆÜ�cœ5Ÿ<™<Ô(Ü—+‘+˜cÓ"ˆCÜ! # t§{¡{Ó3ˆÙ˜t A B˜xÐ2¨6Ñ2ˆÜ˜sÓ#Ð#re   N)r§  r™   r‰   rŠ   rc  )r  r   r  r   r‰   r   ©r_   r`   ra   rÙ   rt  r�  r­  rN   re   rf   r¥  r¥  ¶  s   „ Ùqó1ó<ô$re   r¥  c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	Únumpy_operator_wrapperzQImplements dunder methods for tnp.ndarray via functions from the operator libraryc                ó:   — || _         d|j                  › �| _        y r˜  )rÎ  r_   )rs  rÎ  s     rf   rt  znumpy_operator_wrapper.__init__Ì  s   € ØˆŒØ" 2§;¡; -Ð0ˆ�re   c                ó"   — d| j                   › d�S )Nz<Wrapped operator <original rœ  )r_   rw  s    rf   r�  znumpy_operator_wrapper.__repr__Ð  s   € Ø-¨d¯m©m¨_¸BÐ?Ð?re   c                óP   — |rJ ‚d„ |D «       } | j                   |Ž }t        |«      S )Nc              3  ó~   K  — | ]5  }t        |t        j                  «      rt        j                  |«      n|–— Œ7 y ­wry   )rü  r  rV  r�  rS  rj  s     rf   rœ   z2numpy_operator_wrapper.__call__.<locals>.<genexpr>×  s0   è ø€ ð 
ÙRVÈ3¤
¨3´·±Ô =ŒC�K‰K˜ÔÀ3ÓFÑRVùs   ‚;=)rÎ  r”  rŸ  s       rf   r­  znumpy_operator_wrapper.__call__Ó  s5   € ÙÐˆzñ
ÙRVó
ˆð ˆd�g‰g�tˆnˆÜ˜sÓ#Ð#re   N)rÎ  úCallable[..., Any]r‰   rŠ   rc  r¡  r¬  rN   re   rf   r®  r®  É  s   „ Ù[ó1ó@ô$re   r®  c                óB  — t        | t        «      s| S | j                  �rg }| j                  «       D ]v  }t        |t        j
                  «      rI|j                  |j                  j                  j                  |j                  j                  «      «       Œf|j                  |«       Œx g }| j                  «       D ]v  }t        |t        j
                  «      rI|j                  |j                  j                  j                  |j                  j                  «      «       Œf|j                  |«       Œx n | j                  «       }| j                  «       }t	        j                  ||| j                  | j                  | j                  ¬«      }|j!                  «        |S )N)rÍ  r  r¶  )rü  rO   Ú_has_symbolic_sizes_stridesrè  r  rx  r¬   r
  rÜ  Ú	size_hintÚexprr×  Úempty_stridedrÍ  r  r¶  Úzero_)rd  rè  r™  r×  r¹  s        rf   Údefakerº  Þ  s   € Ü�aœÔ$Øˆð 	×$Ó$ØˆØ—‘–ˆAÜ˜!œUŸ\™\Ô*Ø—‘˜AŸF™F×,Ñ,×6Ñ6°q·v±v·{±{ÓCÕDà—‘˜A•ð	 ð
 ˆØ—‘–ˆAÜ˜!œUŸ\™\Ô*Ø—‘˜aŸf™f×.Ñ.×8Ñ8¸¿¹¿¹ÓEÕFà—‘˜aÕ ñ	 ð �v‰v‹xˆØ—‘“ˆÜ×ÑØØØ�g‰gØ�x‰xØ—o‘oô	€Að ‡G�G„IØ€Hre   c                ó   —  | |i |¤ŽS ry   rN   )rM  r  r  s      rf   Ú8_disable_side_effect_safety_checks_for_current_subtracerr¼  þ  s   € ñ ˆtÐ�vÑÐre   c                óN   — dd l }| |j                  j                  j                  u S r§   )Útorch.utils.checkpointrB  Ú
checkpoint)rö  r  s     rf   Úis_utils_checkpointrÀ    s    € ã!à�%—+‘+×(Ñ(×3Ñ3Ð3Ð3re   c                ó   — ddl m} | |u S )Nr   )Úinvoke_subgraph_placeholder)Ú'torch._higher_order_ops.invoke_subgraphrÂ  )rö  rÂ  s     rf   Úis_invoke_subgraphrÄ    s   € ÝSàÐ-Ð-Ð-re   c                 ód   — ddl m}  |j                  t        j                  j
                  fi | ¤ŽS )Nr4   ©Ú TorchHigherOrderOperatorVariable)Úvariables.higher_order_opsrÇ  Úmaker  Ú_higher_order_opsÚinvoke_subgraph)ÚoptionsrÇ  s     rf   Úbuild_invoke_subgraph_variablerÍ    s2   € ÝLà0Ð+×0Ñ0Ü×Ñ×/Ñ/ñà
ñð re   c                 ó¾   — dd l mc m} ddlm} |j
                  }t        j                  j                  j                  r|j                  } |j                  |fi | ¤ŽS )Nr   r4   rÆ  )Útorch._higher_order_ops.wraprÊ  ÚwraprÈ  rÇ  Útag_activation_checkpointr  Ú
_functorchrL   Úfunctionalize_rng_opsÚwrap_activation_checkpointrÉ  )rÌ  Úhigher_order_opsrÇ  Úactivation_checkpoint_ops       rf   Úbuild_checkpoint_variabler×    s_   € ß;Ð;åLð
 	×2Ñ2ð ô ×Ñ×Ñ×4Ò4Ø#3×#NÑ#NÐ à0Ð+×0Ñ0Ø ñà
ñð re   c                ó–   — ddl m} t        j                  | «      j                  } |«       }|dk(  r	 |S |dv r|rt        «       }|S d}|S )Nr4   )Úis_dynamo_supportedr‡  )rJ  r
  ÚmtiaF)Ú
eval_framerÙ  r  r  r¹  r1   )Údevice_typerÙ  r¹  Úcompile_supporteds       rf   Úis_compile_supportedrÞ  -  s`   € Ý/ä�<‰<˜Ó$×)Ñ)€DÙ+Ó-ÐØˆu‚}Øð
 Ðð	 
Ð(Ñ	(Ñ->Ü&›LÐð Ðð "ÐØÐre   c                ób   — | j                  d«      }t        |d| j                  dd¬«      «      S )zê
    Convert byte offset `offset` of `str` into character offset.
    Byte offset is used for 3.11+ instruction column data.
    Takes things like unicode characters into consideration.

    Unchanged from CPython implementation.
    zutf-8Nr  )Úerrors)Úencoder|  Údecode)r™   ÚoffsetÚas_utf8s      rf   Ú_fix_offsetrå  ?  s4   € ð �j‰j˜Ó!€GÜˆw�w˜Ð×&Ñ& w°yÐ&ÓAÓBÐBre   c                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)Ú_Anchorsrˆ   Úleft_end_linenoÚleft_end_offsetÚright_start_linenoÚright_start_offsetNr>  rN   re   rf   rç  rç  K  s   … ð ÓØÓØÓàÔre   rç  c                ój  ‡‡— t         j                  dk\  sJ ‚ddl}d}	 |j                  d| z   dz   «      }|€J ‚t        |j                  «      dk7  ry| j                  d«      Šdˆfd„}dˆfd	„Šdˆˆfd
„}dˆˆfd„}|j                  d   }t        ||j                  «      �r|j                  }t        ||j                  «      �rt        t        |j                  j                  «      dz
  }|j                  j                   €J ‚ |||j                  j                   «      }	 ‰||	«      \  }}	‰|   |	   x}
j#                  «       s|
dv r;|
dv r |||	«      \  }}	n |||	«      \  }}	‰|   |	   x}
j#                  «       rŒ6|
dv rŒ;|	dz   }|t        ‰|   «      k  r!‰|   |   x}
j#                  «       s	|
dvr|dz  }t%        ||	||«      S t        ||j&                  «      r×t        t        |j                  j                  «      dz
  }|j                  j                   €J ‚ |||j                  j                   «      } ‰||«      \  }}‰|   |   dk7  r |||«      \  }}‰|   |   dk7  rŒt        t        |j                  «      dz
  }|j                   €J ‚ |||j                   «      }t%        ||||«      S t        ||j(                  «      r×t        t        |j*                  j                  «      dz
  }|j*                  j                   €J ‚ |||j*                  j                   «      } ‰||«      \  }}‰|   |   dk7  r |||«      \  }}‰|   |   dk7  rŒt        t        |j                  «      dz
  }|j                   €J ‚ |||j                   «      }t%        ||||«      S y# t        $ r Y yw xY w)a  
    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        ‰|    |«      S ry   )rå  )Úlinenorã  Úliness     €rf   Ú	normalizez-_extract_anchors_from_expr.<locals>.normalizeq  s   ø€ Ü˜5 ™=¨&Ó1Ð1re   c                óÚ   •— | t        ‰«      k  r8|t        ‰|    «      k\  r'd}| dz  } | t        ‰«      k  r|t        ‰|    «      k\  rŒ'| t        ‰«      k  r|t        ‰|    «      k  sJ ‚| |fS rt  ©r|  )rï  Úcolrð  s     €rf   Únext_valid_charz3_extract_anchors_from_expr.<locals>.next_valid_charv  sy   ø€ Ø”s˜5“zÒ! c¬S°°v±Ó-?Ò&?ØˆCØ�a‰KˆFð ”s˜5“zÒ! c¬S°°v±Ó-?Ó&?ð œ˜E›
Ò" s¬S°°v±Ó-?Ò'?Ð?Ð?Ø�sˆ{Ðre   c                óp   •— |dz  } ‰| |«      \  } }| t        ‰«      k  r|t        ‰|    «      k  sJ ‚| |fS r£   ró  ©rï  rô  rð  rõ  s     €€rf   rø   z-_extract_anchors_from_expr.<locals>.increment~  sH   ø€ Øˆq‰ˆÙ% f¨cÓ2‰ˆ�Øœ˜E›
Ò" s¬S°°v±Ó-?Ò'?Ð?Ð?Ø�sˆ{Ðre   c                ót   •— d}| dz  }  ‰| |«      \  } }| t        ‰«      k  r|t        ‰|    «      k  sJ ‚| |fS rt  ró  r÷  s     €€rf   Únextlinez,_extract_anchors_from_expr.<locals>.nextline…  sM   ø€ ØˆØ�!‰ˆÙ% f¨cÓ2‰ˆ�Øœ˜E›
Ò" s¬S°°v±Ó-?Ò'?Ð?Ð?Ø�sˆ{Ðre   r]   z)\#z\#r  r  )rï  rˆ   rã  rˆ   r‰   rˆ   )rï  rˆ   rô  rˆ   r‰   ztuple[int, int])r  r  ÚastÚparseÚSyntaxErrorr|  Úbodyr™  rü  ÚExprrÊ   ÚBinOpr   rˆ   ÚleftÚ
end_linenoÚend_col_offsetÚisspacerç  Ú	SubscriptÚCallrù  )Úsegmentrú  Útreerñ  rø   rù  Ú	statementr·  Ú
cur_linenoÚcur_colÚchÚ	right_colÚleft_linenoÚleft_colÚright_linenorð  rõ  s                  @@rf   Ú_extract_anchors_from_exprr  U  sÈ  ù€ ô ×Ñ˜wÒ&Ð&Ð&ãà€Dðð �y‰y˜ ™¨5Ñ0Ó1ˆð ÐÐÐä
ˆ4�9‰9ƒ~˜ÒØà�M‰M˜$Ó€Eõ2õ
ööð —	‘	˜!‘€IÜ�)˜SŸX™XÕ&Ø�‰ˆÜ�d˜CŸI™IÕ&ô œc 4§9¡9×#7Ñ#7Ó8¸1Ñ<ˆJØ—9‘9×+Ñ+Ð7Ð7Ð7Ù 
¨D¯I©I×,DÑ,DÓEˆGÙ"1°*¸gÓ"FÑˆJ˜ð ˜zÑ*¨7Ñ3Ð3�2×<Ñ<Ô>À"ÈÁ,Ø˜‘;Ù*2°:¸wÓ*GÑ'�J¡á*3°JÀÓ*HÑ'�J ð	 ˜zÑ*¨7Ñ3Ð3�2×<Ñ<Õ>À"ÈÂ,ð   !™ˆIàœC  jÑ 1Ó2Ò2Ø$ ZÑ0°Ñ;Ð;˜×DÑDÔFØ˜e‘Oà˜Q‘�	ô ˜J¨°¸YÓGÐGÜ˜˜cŸm™mÔ,ô œs D§J¡J×$9Ñ$9Ó:¸QÑ>ˆKØ—:‘:×,Ñ,Ð8Ð8Ð8Ù  ¨d¯j©j×.GÑ.GÓHˆHÙ$3°KÀÓ$JÑ!ˆK˜Ø˜Ñ$ XÑ.°#Ò5Ù(1°+¸xÓ(HÑ%�˜Xð ˜Ñ$ XÑ.°#Ó5ô  ¤ T§_¡_Ó5¸Ñ9ˆLØ×&Ñ&Ð2Ð2Ð2Ù! ,°×0CÑ0CÓDˆIÜ˜K¨°<ÀÓKÐKÜ˜˜cŸh™hÔ'ô
 œs D§I¡I×$8Ñ$8Ó9¸AÑ=ˆKØ—9‘9×+Ñ+Ð7Ð7Ð7Ù  ¨d¯i©i×.FÑ.FÓGˆHÙ$3°KÀÓ$JÑ!ˆK˜Ø˜Ñ$ XÑ.°#Ò5Ù(1°+¸xÓ(HÑ%�˜Xð ˜Ñ$ XÑ.°#Ó5ô  ¤ T§_¡_Ó5¸Ñ9ˆLØ×&Ñ&Ð2Ð2Ð2Ù! ,°×0CÑ0CÓDˆIÜ˜K¨°<ÀÓKÐKàøôW ò Ùðús   ŸN& Î&	N2Î1N2c                ó*  — t         j                  dk\  �r¬t        j                  | j                  |j
                  j                  | j                  |j
                  j                  |j
                  j                  |j
                  j                  ¬«      }t        j                  |g«      d   }dj                  |j                  «       dd «      }t        |j
                  j                  |j
                  j                  dz   «      D �cg c]0  }t        j                   | j                  |«      j#                  «       ‘Œ2 }}t%        j&                  dj                  |«      «      j                  «       }t)        |d   «      t)        |d   «      z
  }|d   d| }t%        j*                  t%        j&                  |«      |«      }|S t-        |d«      r|j
                  €J ‚|j
                  j                  €yt        j                   | j                  |j
                  j                  «      j#                  «       }	|j
                  j                  €|	S |j
                  j                  �|j
                  j                  €|	S t/        |	|j
                  j                  «      }
d}d}g }|j
                  j                  |j
                  j                  k(  rDt/        |	|j
                  j                  «      }|	|
| }|j1                  d	|
z  d
||
z
  z  z   «       �n—|	|
d dz   }|j1                  d	|
z  d
t)        |	«      |
z
  z  z   «       t        j                   | j                  |j
                  j                  «      j#                  «       }t/        ||j
                  j                  «      }t        |j
                  j                  dz   |j
                  j                  «      D ]ƒ  }t        j                   | j                  |«      j#                  «       }||dz   z  }t)        |«      t)        |j3                  «       «      z
  }|j1                  d	|z  d
t)        |«      |z
  z  z   «       Œ… ||d| z  }t)        |«      t)        |j3                  «       «      z
  }|j1                  d	|z  d
||z
  z  z   «       d}	 t5        |«      }|€!|D �cg c]  }|j9                  d
d«      ‘Œ }}�n%|D �cg c]  }t;        |«      ‘Œ }}|j<                  dk(  r|xj>                  |
z  c_        |j@                  dk(  r|xjB                  |
z  c_!        t        t)        |«      «      D ]�  }t        t)        ||   «      «      D ]t  }||j<                  k  rŒ||j<                  k(  r||j>                  k  rŒ2||j@                  k(  r||jB                  k\  rŒQ||j@                  kD  rŒa||   |   d
k(  sŒmd||   |<   Œv Œ’ |D �cg c]  }dj                  |«      ‘Œ }}d}t        t)        |«      «      D ]X  }|t        j                   | j                  |j
                  j                  |z   «      j#                  «       dz   z  }|||   dz   z  }ŒZ |S c c}w # t6        $ r Y �ŒÌw xY wc c}w c c}w c c}w )aÈ  
    Python 3.11+ only. Returns lines of source code (from code object `code`)
    corresponding to `inst`'s location data, and underlines relevant code to `inst`.

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

    We need our own implementation in < 3.13 since `format_frame_summary` in
    Python's `traceback` module doesn't handle multi-line expressions
    (and their anchor extraction code is not completely correct).
    )r^   é   )r  ÚcolnoÚ	end_colnor   r”   r4   NÚ	positionsr�  rÃ   Ú~Ú^)"r  r  r+  ÚFrameSummaryr‡  r  rï  r¸  r  Ú
col_offsetr  r,  r—   Ú
splitlinesrü  Ú	linecacheÚgetlineÚrstripÚtextwrapÚdedentr|  ÚindentrÐ   rå  r¬   Úlstripr  r3  r  ri  rè  ré  rê  rë  )r¼  ÚinstÚframe_summaryró  rï  Ú
orig_linesÚorig_lines_dedentÚ
indent_lenr   Ú
first_lineÚstart_offsetÚ
end_offsetr  ÚmarkersÚ	last_lineÚlineÚ
num_spacesÚanchorsÚmarkerÚmutable_markersrô  r  s                         rf   Úget_instruction_source_311r1  Õ  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¨4¯>©>×+DÑ+DÓE€Lð €Jà€Gà€Gð ‡~�~× Ñ  D§N¡N×$9Ñ$9Ò9Ü  ¨T¯^©^×-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ó
ç
‰&‹(ð 	ô ! ¨D¯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Ø�t˜d‘{Ñ"ˆGä˜T›¤S¨¯©«Ó%7Ñ7ˆJØ�N‰N˜3 Ñ+¨c´S¸³YÀÑ5KÑ.LÑLÕMð Rð 	�9˜[˜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*   Ä5Y1Ò+Y6 Ò<ZÓZ×$ZÙ6	ZÚZc                óR   — t        | t        j                  «      rt        | dd «      S y )NÚ_dynamo_static_input_type)rü  r  rV  r½  r]  s    rf   Úget_static_address_typer4  Y  s#   € Ü�!”U—\‘\Ô"Ü�qÐ5°tÓ<Ð<àre   c                ó¬  — t         j                  j                  j                  t         j                  j                  t         j
                  t         j                  j
                  f}t         j                  j                  j                  t         j                  j                  t         j                  t         j                  j                  f}| g |¢|¢­v S ry   )	r  r(  r8   Ú	get_stateÚdefault_generatorr  rJ  Ú	set_stater  )rÊ   ÚgettersÚsetterss      rf   Úis_rng_state_getter_or_setterr;  `  sœ   € ô 	�‰×Ñ×$Ñ$Ü×Ñ×)Ñ)Ü×ÑÜ�
‰
× Ñ ð€Gô 	�‰×Ñ×$Ñ$Ü×Ñ×)Ñ)Ü×ÑÜ�
‰
× Ñ ð	€Gð Ð(�gÐ( Ñ(Ð(Ð(re   c                ó¼   — t        | t        j                  «      xrA | j                  dk(  xr0 | j                  j
                  t        j                  j                  u S )NÚ__get__)	rü  r  r   r_   Ú__self__Ú__objclass__r  r(  Ú_TensorBaser  s    rf   Úis_tensor_base_attr_getterrA  q  sK   € ä�5œ%×1Ñ1Ó2ò 	@Ø�N‰N˜iÑ'ò	@à�N‰N×'Ñ'¬5¯8©8×+?Ñ+?Ð?ðre   c                ó    — 	 t        j                  t        j                  | «      }t	        |«      t
        j                  u S # t        $ r Y yw xY wr  )r2  r3  r  rV  r¹  r  rH  r'  )rn   rÂ  s     rf   Úis_tensor_getset_descriptorrC  y  sD   € ðÜ×%Ñ%¤e§l¡l°DÓ9ˆÜ�D‹zœU×7Ñ7Ð7Ð7øÜò Ùðús   ‚>A Á	AÁAc                ó   — t        | d«      S )NÚ__torch_function__)rÐ   r  s    rf   Úis_torch_function_objectrF  �  s   € Ü�5Ð.Ó/Ð/re   c                óV  — ddl m} ddlm} | j	                  «       s&t        | d«      r�t        | j                  «       d«      rgd }t        | |«      rt        | j                  dd «      }n#t        | |«      rt        | j                  dd «      }|d t        j                  j                  fvS y)Nr   )ÚUserDefinedObjectVariable)ÚTensorWithTFOverrideVariableÚ
peek_valuerE  F)ró  rH  Ú&torch._dynamo.variables.torch_functionrI  r�  rÐ   rJ  rü  r½  Ú
class_typerÊ   r  r(  Ú_disabled_torch_function_impl)rç  rH  rI  rù  s       rf   Úhas_torch_functionrN  …  s�   € õ BÝSð 
‡~�~ÔÜ��LÔ!¤g¨b¯m©m«oÐ?SÔ&TàˆÜ�bÐ6Ô7Ü˜2Ÿ=™=Ð*>ÀÓE‰Dä˜Ð5Ô6Ü˜2Ÿ8™8Ð%9¸4Ó@ˆDà˜D¤%§(¡(×"HÑ"HÐIÐIÐIàre   c                óÚ   — d }d }t         j                  j                  j                  «       x}r)| |j                  v r|j                  |    }|j
                  }|j                  | d||¬«      S )NF)Ústatic_shapesÚsymbolic_contextr  )r  r;  r$   Útry_getÚtensor_to_contextrY  Úfrom_tensor)r-  rÛ  rQ  r  Útracing_contexts        rf   Úto_fake_tensorrV  £  sy   € ð ÐØ€FÜŸ-™-×6Ñ6×>Ñ>Ó@Ð@€Ð@Ø�×1Ñ1Ñ1Ø.×@Ñ@ÀÑCÐØ%×3Ñ3ˆFà× Ñ Ø	˜Ð1AÈ&ð !ó ð re   c                óÌ   — t        | «       xrW t        | «       xrI t        | «      xr< t        | d«      xr. t        | j                  d«      xr | j                  j
                  S )NÚ__dataclass_params__Úfrozen)rD  rC  r   rÐ   rX  rY  r  s    rf   Úis_frozen_dataclassrZ  ³  sn   € ä# EÓ*Ð*ò 	.Ü& uÓ-Ð-ò	.ä˜Óò	.ô �EÐ1Ó2ò	.ô �E×.Ñ.°Ó9ò		.ð
 ×&Ñ&×-Ñ-ðre   c                ód   — |D ]  }t        | |«      sŒt        | |«      c S  t        | › d|› �«      ‚)zX
    Return the first available attribute or throw an exception if none is present.
    z% does not has any of the attributes: )rÐ   r½  r3  )rö  ÚattrsrÂ  s      rf   Úget_first_attrr]  ¾  s>   € ó ˆÜ�3˜ÕÜ˜3 Ó%Ò%ð ô ˜C˜5Ð EÀeÀWÐMÓ
NÐNre   c              #  ó°   ‡‡K  — | sd –— y dˆˆfd„}t         j                  j                  j                  |«      5 }|–— d d d «       y # 1 sw Y   y xY w­w)Nc                ó>   •— dd„}t        j                  | |‰‰¬«      S )Nc                ó¦   — t         j                  j                  j                  d   dxx   dz  cc<   t         j                  j                  | |«      S )NÚcompiled_autogradÚcompilesr4   )r  rÀ  rB  rU   r2  Úcompile)Úgm_Úexample_inputs_s     rf   Úinner_compilerzKmaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.inner_compilerÒ  s@   € Ü—‘×#Ñ#×,Ñ,Ð-@ÑAÀ*ÓMÐQRÑRÓMÜ—‘×.Ñ.¨s°OÓDÐDre   )ÚbackendÚ	fullgraphÚdynamic)rd  r   re  r   r‰   r   )r  rc  )rO  rf  ri  rh  s     €€rf   Úcompiler_fnz3maybe_enable_compiled_autograd.<locals>.compiler_fnÑ  s%   ø€ óEô —=‘=Ø˜N°iÈôð re   )rO  r   r‰   r   )r  rÀ  ra  Ú_enable)Úshould_enablerh  ri  rj  r  s    ``  rf   Úmaybe_enable_compiled_autogradrm  É  sA   ùè ø€ ñ Üö	ô �]‰]×,Ñ,×4Ñ4°[ÔAÀSØŠI÷ B×AÑAüs   „8A¼A
Á	AÁ
AÁAc                 ó@   —  G d„ dt         «      } t         | «       «      S )Nc                  ó   — e Zd Zy)ú*invalid_removeable_handle.<locals>.InvalidN)r_   r`   ra   rN   re   rf   ÚInvalidrp  à  s   „ Øre   rq  )rû  r3   )rq  s    rf   Úinvalid_removeable_handlerr  Þ  s   € ô”$ô ô ™7›9Ó%Ð%re   c                ó
  — t        | t        j                  j                  «      s| S t        | t        j                  j
                  «      r| S | j                  j                  | j                  «      }| j                  |_        |S ry   )	rü  r  rW  r´  r   rº  r—  r/  r�  )r^  Úproxys     rf   Únn_module_proxyru  ê  sZ   € Ü�cœ5Ÿ8™8Ÿ?™?Ô+Øˆ
Ü�#”u—x‘x×+Ñ+Ô,àˆ
Ø�M‰M×!Ñ! #§-¡-Ó0€EØ—\‘\€E„NØ€Lre   c                  ó4   ‡ — e Zd Z	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )Ú	GmWrapperc                ó>   •— t         ‰| �  «        || _        || _        y ry   )r‘  rt  rO  Úunflatten_fn)rs  rO  ry  r—  s      €rf   rt  zGmWrapper.__init__ö  s   ø€ ô 	‰ÑÔØˆŒØ(ˆÕre   c                óT   — t        |«      } | j                  | j                  |«      Ž S ry   )ri  rO  ry  r¬  s     rf   r^  zGmWrapper.forwardý  s'   € ä˜t›*ˆØˆt�w‰w˜×)Ñ)¨$Ó/Ð0Ð0re   )rO  útorch.fx.GraphModulery  zCallable[[list[Any]], Any]r‰   rŠ   ©r  r   r‰   r   )r_   r`   ra   rt  r^  r˜  r™  s   @rf   rw  rw  õ  s%   ø„ ð)Ø&ð)Ø6Pð)à	õ)÷1re   rw  c                óŠ  ‡	‡
‡‡— t        | j                  j                  «      D ��cg c]2  \  }}|j                  dk(  r|j                  j                  dd«      r|‘Œ4 c}}Št        j                  j                  j                  rO‰dgk(  sJ ‚t        |d   t        «      sJ ‚t        |d   «      Š	d	d„Šd
ˆ	fd„} |t        | |«       ‰|«      «      Š
n`t        j                  |«      \  }}t!        j"                  t        j$                  |¬«      } |t        | |«      |«      Š
t        j&                  Šd	ˆ
ˆˆfd„}|S c c}}w )z—
    Mutate inputs so that they are flat and wrap gm such that it
    accepts those inputs.  This is needed for graphs that take
    bumpy inputs.
    r  Ú	steal_argFr   c                ó*   — | d   t        | dd  «      z   S rt  rÑ  ra  s    rf   Ú
flatten_fnz(flatten_graph_inputs.<locals>.flatten_fn  s   € Ø˜‘7œT $ q r (›^Ñ+Ð+re   c                ó   •— | d ‰ g| ‰d  ¢­S ry   rN   )Ú	flat_argsÚboxed_inputs_counts    €rf   ry  z*flatten_graph_inputs.<locals>.unflatten_fn  s#   ø€ ØÐ1Ð1Ð2ÐT°YÐ?QÐ?RÐ5SÑTÐTre   )Útreespecc                 óX   •—  ‰| «      }‰D ]  }| |   j                  «        Œ  ‰|«      S ry   )rz   )r  r‚  r  Úcompiled_fnr€  Úinputs_idx_to_clears      €€€rf   Úwrapperz%flatten_graph_inputs.<locals>.wrapper'  s3   ø€ Ù˜tÓ$ˆ	ó %ˆAØ�‰G�M‰M�Oð %ñ ˜9Ó%Ð%re   r|  )r‚  r   r‰   r   )Ú	enumerater  rÍ  rÎ  r  r~   r  rÀ  ra  Úin_compiled_autograd_regionrü  ri  r|  rw  r  r  r/  r  Útree_unflattenÚarg_tree_leaves)rO  r  Ú
compile_gmr  r
  ry  Úflat_inputsÚspecrˆ  rƒ  r†  r€  r‡  s            @@@@rf   Úflatten_graph_inputsr�    s  û€ ô ! §¡§¡Ô0ôá0‰GˆAˆtØ�7‰7�mÒ#¨¯	©	¯©°kÀ5Ô(Iò 	
Ø0òÐô ‡}�}×&Ñ&×BÒBð # q cÒ)Ð)Ð)Ü˜& ™)¤TÔ*Ð*Ð*Ü  ¨¡›^Ðó	,õ	Uñ !¤¨2¨|Ó!<¹jÈÓ>PÓQ‰ô #×/Ñ/°Ó7Ñˆ�TÜ ×(Ñ(¬×)>Ñ)>ÈÔNˆÙ ¤¨2¨|Ó!<¸kÓJˆä×+Ñ+ˆ
÷&ð €NùóMs   §7D?c                óž   — t        | t        j                  j                  «      rt	        | d«      sg S | j
                  j                  dg «      S )Nr  Úlocals_to_steal)rü  r  r   rº  rÐ   r  r~   )Úmaybe_gms    rf   Úget_locals_to_stealr”  4  s<   € Ü�h¤§¡× 4Ñ 4Ô5¼WÀXÈvÔ=VØˆ	Ø�=‰=×ÑÐ.°Ó3Ð3re   c                ó"   — || j                   d<   y )Nr’  ©r  )rO  r’  s     rf   Úset_locals_to_stealr—  :  s   € Ø!0€B‡G�GÐÒre   c                  ó   — e Zd Zdd„Zdd„Zy)ÚLitc                ó   — || _         y ry   ©r™  )rs  r™  s     rf   rt  zLit.__init__?  s	   € Øˆ�re   c                ó   — | j                   S ry   r›  rw  s    rf   r�  zLit.__repr__B  s   € Ø�v‰vˆre   N)r™  r™   r‰   rŠ   rc  )r_   r`   ra   rt  r�  rN   re   rf   r™  r™  >  s   „ óôre   r™  zset[str]Úwarn_once_cachec                ót   — | t         v ry t         j                  | «       t        j                  | |dz   ¬«       y )Nr4   )Ú
stacklevel)r�  r  ÚwarningsÚwarn)r–  rŸ  s     rf   Ú	warn_oncer¢  I  s/   € ð ŒoÑØÜ×Ñ˜ÔÜ‡M�M�# *¨q¡.Ö1re   c                óP   — t        j                  d«      }|j                  d| «      S )Nz\x1B[@-_][0-?]*[ -/]*[@-~]r�  )r   rc  r”  )ÚtextÚansi_escapes     rf   Ústrip_color_from_stringr¦  U  s"   € ä—*‘*Ð:Ó;€KØ�?‰?˜2˜tÓ$Ð$re   c               #  ó  K  — 	 t         j                  j                  j                  d«      } d –— t         j                  j                  j                  | «       y # t         j                  j                  j                   «       w xY w­w)NT)r  r(  Ú	_autogradÚ _saved_tensors_hooks_set_tracing)rŸ  s    rf   Ú+_disable_saved_tensors_hooks_during_tracingrª  [  sY   è ø€ ðCÜ—‘×"Ñ"×CÑCÀDÓIˆÛä�‰×Ñ×;Ñ;¸EÕBøŒ�‰×Ñ×;Ñ;¸EÕBüs   ‚B	„-A ±*B	Á+BÂB	c                 óx   — t         j                  j                  j                  xr t        j                  «        S ry   )r  r2  rL   ÚfreezingÚis_grad_enabledrN   re   rf   Úis_parameter_freezingr®  e  s)   € Ü�?‰?×!Ñ!×*Ñ*ÒJ´5×3HÑ3HÓ3JÐ/JÐJre   c                 ó`   — t        t        «       «      D � cg c]  } t        | «      ‘Œ c} S c c} w ry   )rü  r   Ú get_torch_function_mode_stack_at)r  s    rf   Úget_torch_function_mode_stackr±  i  s3   € ä5:Ô;TÓ;VÔ5WóÙ5W°Ô(¨Õ+Ð5Wñð ùò s   –+c                óh   — | t        «       k  r| dk\  sJ ‚t        j                  j                  | «      S r§   )r   r  r(  Ú_get_function_stack_at)Úinds    rf   r°  r°  o  s/   € ØÔ*Ó,Ò,°¸²Ð9Ð9Ü�8‰8×*Ñ*¨3Ó/Ð/re   c                ól   — t        t        «       «      D ]  }t        «        Œ | D ]  }t        |«       Œ y ry   )rü  r   r   r   )rO  r·  Úmodes      rf   Úset_torch_function_mode_stackr·  t  s/   € ÜÔ,Ó.Ö/ˆÜ!Õ#ð 0ó ˆÜ% dÕ+ñ re   c                 óH   — t        t        «       «      D ]  } t        «        Œ y ry   )rü  r   r   )r·  s    rf   Úclear_torch_function_mode_stackr¹  |  s   € ÜÔ,Ó.Ö/ˆÜ!Õ#ñ 0re   c                ó@   — t         j                  j                  | «      S ry   )r  ÚacceleratorÚcurrent_stream)r  s    rf   Úget_current_streamr½  �  s   € Ü×Ñ×+Ñ+¨FÓ3Ð3re   c                 ó   — t        «        y ry   )Ú
breakpointra  s    rf   Ú_breakpoint_for_c_dynamorÀ  †  s   € Ü…Lre   c                óà   — | j                   }t        j                  |«      }t        |j                  «      dk7  rddlm}  |d«      ‚|j                  | j                  k7  rddlm}  |d«      ‚y )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__r2  Ú	signaturer|  rM  r»  rÂ  r>  r—  )rÊ   rM  ÚsigrÂ  s       rf   Úverify_guard_fn_signaturerÆ  Š  sk   € Ø	×	!Ñ	!€BÜ
×
Ñ
˜BÓ
€CÜ
ˆ3�>‰>Ó˜aÒÝ1á&Øió
ð 	
ð 
‡{�{�e—o‘oÒ%Ý1á&ØMó
ð 	
ð &re   c                ón  — | j                   t        j                   t        j                   fv xrˆ | j                  t        j                  t        j                  fv xrZ | j                  t        j                  t        j                  fv xr, | j
                  t        j
                  t        j
                  fv S ry   )r½   rû  r   r_  rj  Ú__iter__)Úuser_clss    rf   Ú#does_not_override_dict_iter_methodsrÊ  ›  s‰   € à�‰œ4Ÿ:™:¤{×'8Ñ'8Ð9Ð9ò 	GØ�O‰O¤§¡¬[×-?Ñ-?Ð@Ð@ò	Gà�M‰MœdŸi™i¬×)9Ñ)9Ð:Ð:ò	Gð ×Ñ¤$§-¡-´×1EÑ1EÐ!FÐFð	re   c                ó$   — | j                  |«      S ry   )rè  ©rd  r  s     rf   Ú	call_sizerÍ  §  s   € à�6‰6�!‹9Ðre   c                ó$   — | j                  |«      S ry   )r×  rÌ  s     rf   Úcall_striderÏ  ¬  s   € à�8‰8�A‹;Ðre   c                ó"   — | j                  «       S ry   )Ústorage_offsetrc  s    rf   Úcall_storage_offsetrÒ  ±  s   € à×ÑÓÐre   c                ó–   — ddg}|D �ci c]4  }|| j                   v sŒ|t        j                  | j                   |   «      “Œ6 }}|S c c}w )Nr3  Útag)r�  r¾  )r-  ÚKEYS_TO_COPYrÉ   Útensor_dicts       rf   Ú_extract_tensor_dictr×  ¸  s\   € à#Øð€Lñ 4@óÙ3?¨CÀ3È!Ï*É*ÒCTˆŒT�Y‰Y�q—z‘z #‘Ó'Ñ'°<ð ð ð Ðùò	s
   ‰A�%Ac                ó@   — t        j                  j                  | i |¤ŽS ry   )r  r(  ÚStreamrÜ  s     rf   Úbuild_streamrÚ  Å  s   € Ü�8‰8�?‰?˜DÐ+ FÑ+Ð+re   c                ó@   — t        j                  j                  | i |¤ŽS ry   )r  r(  ÚEventrÜ  s     rf   Úbuild_eventrÝ  É  s   € Ü�8‰8�>‰>˜4Ð* 6Ñ*Ð*re   c                  ó’   — e Zd ZU dZded<   dZded<   dZedd„«       Zedd„«       Z	edd„«       Z
edd	„«       Zeedd
„«       «       Zy)ÚCompileTimeInstructionCounterr   rˆ   Ú_counterr‚  Ú_idc                ó~   — | j                   dz   | _         | j                   dk(  rt        j                  «       | _        y y r£   )Ú_depthr   r8  rá  r{   s    rf   r8  z#CompileTimeInstructionCounter.startÒ  s1   € à—Z‘Z !‘^ˆŒ
Ø�:‰:˜Š?Ü*×0Ñ0Ó2ˆC�Gð re   c                ó¾   — | j                   dz
  | _         | j                   dk(  r:| xj                  t        j                  | j                  «      z  c_        d| _        y y )Nr4   r   r‚  )rã  rà  r   Úendrá  r{   s    rf   rå  z!CompileTimeInstructionCounter.endØ  sF   € à—Z‘Z !‘^ˆŒ
Ø�:‰:˜Š?Ø�LŠLÔ0×4Ñ4°S·W±WÓ=Ñ=�LØˆC�Gð re   c                ó   — d| _         y r§   ©rà  r{   s    rf   rz   z#CompileTimeInstructionCounter.clearß  s	   € àˆ�re   c                ó   — | j                   S ry   rç  r{   s    rf   rÊ   z#CompileTimeInstructionCounter.valueã  s   € à�|‰|Ðre   c              #  óä   K  — 	 t         j                  r| j                  «        d –— t         j                  r| j                  «        y y # t         j                  r| j                  «        w w xY w­wry   )rL   Ú%record_compile_time_instruction_countr8  rå  r{   s    rf   r•  z$CompileTimeInstructionCounter.recordç  sN   è ø€ ð	Ü×;Ò;Ø—	‘	”Ûä×;Ò;Ø—‘•	ð <øŒv×;Ò;Ø—‘•	ð <üs   ‚A0„$A
 ¨"A0Á
#A-Á-A0Nr‹   rŒ   ©r‰   úGenerator[None, None, None])r_   r`   ra   rà  r�   rá  rã  r�   r8  rå  rz   rÊ   r   r•  rN   re   rf   rß  rß  Í  s„   … Ø€HˆcÓØ€CˆƒMØ€Fàò3ó ð3ð
 òó ðð òó ðð òó ðð Øòó ó ñre   rß  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚCompileCounterIntc                ó4   •— t        t        ‰| �	  |«      «      S ry   )rî  r‘  Ú__add__)rs  Úotherr—  s     €rf   rð  zCompileCounterInt.__add__ô  s   ø€ Ü ¤¡¡°Ó!7Ó8Ð8re   )rñ  r   r‰   rî  )r_   r`   ra   rð  r˜  r™  s   @rf   rî  rî  ó  s   ø„ ÷9ñ 9re   rî  c                ól   — t        «       j                  «       rt        «       j                  d| |«       yy)zQ
    Records whether we are using a feature
    Generally a feature is a JK.
    rÎ  N)rÓ   rî   Úset_key_value)ÚfeatureÚusages     rf   Úset_feature_userö  ø  s-   € ô Ó×(Ñ(Ô*ÜÓ×+Ñ+¨O¸WÀeÕLð +re   )Úddp_optimizerÚpython_reducerÚ'python_reducer_without_compiled_forwardÚno_optimizationÚ_ddp_optimization_modec                 óÌ   — t         j                  } t        | t        «      r| rdnd}n*t        | t        «      r| }nt        dt        | «      ›�«      ‚|t        v s
J d|›�«       ‚|S )Nr÷  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ý  r¶  s     rf   Úget_optimize_ddp_moderþ  
  sv   € Ü×&Ñ&€LÜ�,¤Ô%Ù".‰Ð4E‰Ü	�L¤#Ô	&Ø‰äØJ´t¸LÓ7IÐ6KÐLó
ð 	
ð Ô)Ñ)ð Ø
9°D°7Ð;óÐ)ð €Kre   c               #  ó  K  — t         j                  xr t        j                  «       } | r@t        j                  d«      5  t        j
                  «       5  d–— ddd«       ddd«       yd–— y# 1 sw Y   ŒxY w# 1 sw Y   yxY w­w)ar  
    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    rf   Úmaybe_disable_inference_moder    se   è ø€ ô 	×1Ñ1ÒW´e×6UÑ6UÓ6Wð ñ ä× Ñ  Õ'Ü�M‰M�Oã÷ ÷ (Ð'ô
 	÷	 ˆOú÷ (Ð'üs5   ‚>BÁ A<ÁA0ÁA<Á"BÁ0A9	Á5A<Á<BÂBc               #  ó¸   K  — t         j                  r6t        j                  j                  j                  «       5  d–— ddd«       yd–— y# 1 sw Y   yxY w­w)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  rZ  Ú
meta_utilsÚ$disable_inference_mode_for_fake_proprN   re   rf   Ú*maybe_disable_inference_mode_for_fake_propr  3  sC   è ø€ ô ×0Ò0Ü×Ñ×)Ñ)×NÑNÕPÛ÷ QÐPô 	÷ QÐPüs   ‚9A»AÁ AÁAÁAc                óJ   — | d u xs d| j                   v xs d| j                   v S )NrÙ  r  r–  )r
  s    rf   Úis_node_meta_validr
  A  s(   € Ø�4ˆ<ÒM˜?¨d¯i©iÐ7ÒM¸5ÀDÇIÁIÐ;MÐMre   c                 ó   — t         S ry   ©Ú_error_on_graph_breakrN   re   rf   Ú_get_error_on_graph_breakr  I  s   € Ü Ð re   c                ó   — | a y ry   r  r  s    rf   Ú_set_error_on_graph_breakr  M  s   € à!Ñre   c                 óè   — t         j                  j                  j                  r)t         j                  j
                  j                  d«      nt        j                  «       } | j                  «        | S )NzPregraph bytecode)
r  r  r  r  r(  r)  r*  r@  Únullcontextr+  ©Úcms    rf   Úrecord_pregraph_bytecode_enterr  R  sS   € ô �>‰>×"Ñ"×7Ò7ô 	�‰×Ñ×.Ñ.Ð/BÔCä×#Ñ#Ó%ð ð
 ‡L�L„NØ€Ire   c                ó*   — | j                  d d d «       y ry   )r,  r  s    rf   Úrecord_pregraph_bytecode_exitr  ]  s   € à‡K�K��d˜DÕ!re   c                 ó0   — ddl m}   | j                  «       S )Nr   ©r$   )Útorch._guardsr$   Úget_traced_coder  s    rf   r  r  d  s   € Ý,à)ˆ>×)Ñ)Ó+Ð+re   c                óÄ   — ddl m} ddlm} t	        | «      j
                  j                  dd«      }|r- |ddt	        | «      › d|› �d	|› d
�dg|j                  ¢¬«       y y )Nr4   rã  rm  Ú__hash__Fz,User-defined object with overridden __hash__zhashing object of type=z and variable tracker zFound a user-defined object z4 with overridden __hash__ when attempting to hash itzMDynamo does not support hashing user-defined objects with overridden __hash__rå  )r�  rä  r»  rn  r¹  r�  r~   ÚSUPPORTABLE)rö  rç  rä  rn  Úis_overriddens        rf   Úraise_on_overridden_hashr   j  so   € Ý#Ý"ä˜“I×&Ñ&×*Ñ*¨:°uÓ=€MáÙØBØ-¬d°3«i¨[Ð8NÈrÈdÐSØ6°r°dÐ:nÐoà_ðà"×.Ñ.ðö		
ð re   )r¡   z-Union[list[tuple[str, Any]], list[list[Any]]]r“   z!Union[tuple[str, ...], list[str]]r‰   r™   r‹   )r­   zCallable[[], str]r‰   rŠ   )r‰   r©   )r¶   rˆ   r‰   rŠ   )r‰   rY   )r‰   r    )r‰   r!   )rn   r™   r‰   úGenerator[Any, None, None])NFNNNNFN)rÉ   r™   rD  r…  ré   r"  ræ   zOptional[dict[str, object]]rE  r…  r6  r�  r1  r   rF  r"  rG  r…  r‰   r!  r!  )rY  zLiteral['str']rZ  r"  r‰   r™   )rY  zLiteral['csv']rZ  r"  r‰   ztuple[list[str], list[object]])r™   F)rY  r™   rZ  r"  r‰   z-Union[str, None, tuple[list[str], list[str]]])r‰   zcontextlib.ExitStack)r»  rÅ  r¼  r
   r‰   r™   )rÇ  r™   rÈ  rA   r‰   rŠ   )rÏ  zfx.Graphr‰   rˆ   )rd  rR   r‰   rR   )rd  r   r‰   r"  )r  r   r  r   r‰   rŠ   )rö  r#  r÷  ztype[T]r‰   ú	TypeIs[T])rö  r#  r÷  z)tuple[type[list[T]], type[tuple[T, ...]]]r‰   r"  )rö  r#  r÷  zIterable[type]r‰   r"  )rö  r#  r÷  r   r‰   r"  )r  z collections.abc.Sequence[object]r	  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]])rM  r   r‰   r   )rM  r   r‰   ztuple[Any, Optional[str]])rÊ   r   r‰   zTypeGuard[np.ndarray])rö  r   r‰   r"  )r^  r   r‰   r"  r¯  ry   )r  r   r‰   ztypes.CellType)r  r   r  r   r‰   z&tuple[tuple[Any, ...], dict[str, Any]])r  r�  r‰   r   )rÐ  r„  r‰   rŠ   r›  )rN  rˆ   rO  rˆ   rH  rV   rP  zOptional[type[BaseException]]rQ  zOptional[BaseException]r‰   rŠ   )rV  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Š   )rd  rÛ  rÍ  zOptional[torch.dtype]r‰   rÛ  )r÷  z"dict[str, Union[T, tuple[T, ...]]]r‰   zdict[str, list[T]])r÷  zSequence[T]r‰   zlist[T])r÷  r   r‰   r   )r  rÛ  r‰   rŠ   rë  )r  r   r‰   z™TypeIs[Union[torch.jit._trace.TopLevelTracedModule, torch.jit._script.RecursiveScriptModule, torch.jit.ScriptFunction[Any, Any], torch.jit.ScriptModule]])r	  r   r÷  r   r{  r"  r‰   r   )rö  r   r‰   r…  )ro   r   r‰   r"  )ro   r¹  r‰   r6  )rO  r{  r‰   zCallable[[], None])r4   )r	  r   r÷  úIterable[Any]rW  rˆ   r‰   ztuple[Any, float])rO  r{  r÷  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"  )rk  r   r‰   r   )r  r#  r  zMapping[Any, Any]r‰   r"  )r  ú
dict[K, V]r‰   zKeysView[K])rö  r$  r‰   z!Iterable[tuple[K, Union[V, Any]]])ro   r   r‰   r   )rº  zIterable[T]r‰   rˆ   )rº  r   r=  rˆ   r‰   r   )rÄ  r   r‰   ztuple[int, int, int])r-  r   ro   r¹  r‰   r   )r  údict[Any, Any]rÑ  rˆ   r‰   r   )r™  zset[T]rÑ  rˆ   r‰   rR   )rÊ   r   rm  r"  r‰   r™   )r
  r½  rÙ  r   r‰   rŠ   )rç  rE   r‰   r   )r™  r@  rí  rˆ   r‰   rˆ   )r�  r�  )
rô  rC   rn   r™   rõ  r™   rö  r™   r‰   rŠ   )
r½   r#  rû  r   rô  rB   r  r"  r‰   r   )r
  r   r‰   z?TypeIs[Union[torch.Tensor, torch.nn.Module, MethodWrapperType]])rÊ   r   r‰   ú	list[Any])rd  r   rm  r   r‰   r™   )r#  r   rm  r   r‰   r™   )rô  rC   r+  r™   rö  r   r‰   r™   )rï  rR   r.  zContainer[T]r‰   r"  )r4  r™   r.  r   r1  r"  r‰   r™   )rM  zCallable[[], Any]r‰   r   )rö  r   rÛ  ú,torch._subclasses.fake_tensor.FakeTensorModer‰   r   )rí  rÛ  rý  rÛ  r‰   rÛ  )rí  r   rý  r   rF  r"  r‰   r"  )rí  r   rý  r   rm  r   rV  r"  rE  r|  rF  r"  rW  r"  rY  r"  rX  r"  rN  zCallable[..., None]rO  r"  rP  r"  rQ  r"  rR  r|  r‰   r"  )r¼  r
   r‰   r™   )rª  r™   r‰   r™   rc  )T)r
  r½  r°  r"  r‰   r   )rz  r   rô  rC   r‰   r   )rô  rC   rÍ  r   r»  r"  r‰   r   )r–  r™   rÛ  zOptional[FakeTensorMode]r‰   r™   )rÒ  zCallable[[], NoReturn]r‰   r   )r
  r½  rô  rC   r»  r"  r‰   r   )r‰   úOptional[torch.fx.Node])r
  r½  r‰   rì  )r  r   r
  r½  r  r   r  r   rë  r   r‰   r   )r
  r½  r  r   r‰   r   )rO  útorch.nn.Moduler‰   rŠ   )rö  r   r‰   r™   )r8  r   r9  r   r‰   r   )r^  ztypes.ModuleTyper‰   rŠ   )rö  r   rn   r™   rÊ   r   r‰   rŠ   )ro   r¹  r‰   r"  )rÊ   r   rK  r"  r‰   rú  )r8  rO  r‰   r™   )r\  zUnion[torch.Tensor, Any]rý  r"  rY  r#   r‰   z)tuple[bool, Optional[TensorStaticReason]])r0  r™   rO  r{  r‰   r   )r4  r™   rn   r™   rÇ  r™   rh  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   rn   r™   r‰   r   )rd  r   r‰   r   )rM  r   r  r$  r  r%  r‰   rS   )rÌ  r   r‰   r   )rÜ  rF   r‰   r   )r™   r™   rã  rˆ   r‰   rˆ   )r  r™   r‰   zOptional[_Anchors])r¼  ztypes.CodeTyper"  r@   r‰   r™   )r-  r   r‰   r   )rn   r™   r‰   r"  )rç  rE   r‰   r"  )r-  rÛ  rÛ  r'  r‰   r   )rö  r   r\  r™   r‰   r   )TT)rl  r"  rh  r"  ri  r"  r‰   r!  )r‰   r3   )r^  r   r‰   r   )rO  r{  r  r   r�  zCallable[[Any, Any], Any]r‰   r³  )r“  r   r‰   r&  )rO  r{  r’  r&  r‰   rŠ   )r–  r™   rŸ  rˆ   r‰   rŠ   )r¤  r™   r‰   r™   )r‰   r&  )r´  rˆ   r‰   r   )rO  r&  r‰   rŠ   )r  ztorch.devicer‰   útorch.Stream)rÊ   r   r‰   rŠ   )rÉ  r   r‰   r"  )rd  r   r  rˆ   r‰   rˆ   )rd  r   r‰   rˆ   )r-  rÛ  r‰   rV   )r  ú
tuple[Any]r  r%  r‰   r*  )r  r+  r  r%  r‰   ztorch.Event)rô  r™   rõ  r"  r‰   rŠ   )r
  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�   r@  r¾  r?  r¦  rf  rn  r/  rS  r?  r2  rŸ   r÷  r  r§  r‰  r¸  r…  r   r  r  rl  rà   r+  r  r  ro  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._pytreerB  Ú_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‘  r  rE  Útorch._loggingÚtorch._numpyÚ_numpyr�  rH   rJ   r�  rL   ÚfftÚlinalgr  rM   r�   ÚNP_TO_TNP_MODULEr/  rO   rP   rQ   rž   rR   rS   rT   rW  r´  rJ  Ú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   rv   Útimer_counterro  r\   rh   r�   r¤   r¥   r¨   rª   r®   r±   r³   rµ   r·   rÁ   rË   rm  rÑ   rÓ   rÖ   rØ   rÞ   r?  r.  rV  r[  Úregisterrm  ÚFloatTensorr'  ÚDoubleTensorr(  ÚdoubleÚ
HalfTensorr&  ÚhalfÚBFloat16Tensorri  Ú
ByteTensorr   Ú
CharTensorr  Ú
LongTensorr  ÚlongÚ	IntTensorr  rˆ   ÚShortTensorr  ÚshortÚ
BoolTensorr"  Útensortype_to_dtypero  r‹  r‰  rŒ  rc  ÚVERBOSEr“  Ú	FormatterrŽ  r‡  rµ  r½  rÊ  rÒ  rÔ  rÚ  rÝ  rß  rø  rý  rþ  r  ÚParamSpecArgsÚParamSpecKwargsÚTypeVarTupleÚTypeAliasTyper  r  r$  r)  r+  r;  r<  r=  r>  r4  r9  r1  rÿ  ÚneÚltÚleÚgtÚgeÚcmp_name_to_op_mappingÚcmp_name_to_op_str_mappingrJ  rN  rL  rT  r\  r_  rb  rf  r{  r€  r‚  rþ  rA  r„  Ú!DEFAULT_COMPILATION_METRICS_LIMITrU  r  r  r#  r)  r7  rÒ   rX  rZ  r\  r^  rŸ  râ   r  r¦  r¨  r«  r±  rº  rÃ  rË  rÐ  rø  r  r  r  r   r"  r'  r&  rE  rP  rZ  r`  ri  rä  r™   rq   r¹  ÚEllipsisr—  ÚNotImplementedr  rÍ  Úmemory_formatrÔ  ÚfinfoÚiinfoÚ	attentionÚ
SDPBackendrJ  Ú_CudaDevicePropertiesrj  rK  r  Úlanguagerm  r$  ru  r|  r‡  r’  r–  r™  rŸ  r¡  r¥  rj  r¦  r_  r§  r½   r¨  r©  Úiterrª  rü  r«  Ú__length_hint__Útuple_iterator_lenr#  r/  r³  rû  Údict_newr    r�  r1  Údict_methodsrv  Úset_methodsrl  Úfrozenset_methodsÚ	tuple_newÚtuple_methodsri  Ú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×  rá  ré  rî  rø  r  r	  r  r  r%  ÚGLOBAL_KEY_PREFIXr'  r,  r0  r6  r9  r>  rC  rI  r  rH  r›  r¡  Úorig_code_mapr¢  r£  Úseen_code_mapr¬  r¥  r±  r³  r¿  rË  rÓ  r·  rÕ  r  r  r  rê  r  r3  r5  r:  rA  rD  rG  rC  rM  rO  rT  rZ  rd  ri  r{  r|  r}  Úall_hook_namesrx  r‡  r‰  r�  r”  r–  r£  r¥  r®  rº  r¼  rÀ  rÄ  rÍ  r×  rÞ  rå  rç  r  r1  r4  r;  rA  rC  rF  rN  rV  rZ  r]  rm  rr  ru  rw  r�  r”  r—  r™  r�  r¢  r¦  rª  r®  r±  r°  r·  r¹  r½  rÀ  rÆ  rÊ  Ú_disable_dynamorÍ  rÏ  rÒ  r×  rÚ  rÝ  rß  rî  rö  rû  rþ  r  r  r
  r  r  r  r  r  r  r   r©  s   0rf   Ú<module>r‘     s  ðòõ #ã Û Û Û Û Û Û 
Û Û Û 	Û Û Û Û Û Û Û Û Û 	Û 	Û 
Û Û Û Û Û Û Û Û Û ß ,ß =Ý $Ý ß -÷÷ ÷ ó ÷ 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Ð Ø %§¢§¢× :Ò :Ð à7N°{×7NÒ7NØ×Ñó8€Ð
4ó ð %'Ð �>Ó &ð BÐ ØoÐ ØÐ.Ð/Ð/UÐVÐ Ø€g×Ò˜Ó!€ð 46Ð Ð0Ó 5ð
 .E¨[×-DÒ-DÀUÓ-KÐ Ð*Ó Kà�	—’Ó!€ô�t—y’yô ÷%Jñ %JðP
Ø
7ð
à.ð
ð 	ô
ð €
ô ôð ?CÐ Ð;Ó Bô*ô$ô$ð €ôô
ô$ð> '�y—’Ó(Ð ô0ô8ô˜4Ÿ9š9ô ÷f#ñ f#ðR	 $�I—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ðÐ ÷ñ ñ( #:Ó";Ð ô"ô,ð
 !�b—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 %'Ñ !ð ?P¸k×>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ð
 ×Ñó=ó ñ=ñ  'Ó(�ð ;R¸+×:QÒ:QÑRVÓ:W�Ð7Ó Wð LNÑ ÐHÓ Mñ 'Ó(�ð ‡‚ó,ó ñ,õ&÷
õ$ð
/Ø!ð/Ø*-ð/ØEIð/àõ/ð. Ø	ð Ø1ð àö öF2ð "'ñ	UØ
ð	Uà!ð	Uð ð	Uð 	ö		Uð "'ñ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Š   ÆAN: Æ!B%AO ð&AOñAOñ*AOòAOò AOóAO#ó#AO#ô
AO(ôAO(õAO-õAO-öAO2ö%AO2ÁN:AOÁOAOÁOAOÁOAO