§
    ŠŠtjñ ã                  ó6'  — 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/m0Z0m1Z1m2Z2 dd
l3m4Z4m5Z5 ddl6Z6ddl7Z6ddl8Z6ddl9m:c m;Z< ddl6m=Z= ddl>m?Z?m@Z@mAZAmBZB ddlCmDZD ddlEmFZFmGZG ddlHmIZImJZJmKZK ddlLmMZM ddlNmOZOmPZPmQZQmRZRmSZS ddlTmUZUmVZV ddlWmXZX ddlYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z`maZa ddlbmcZc ddldmeZe ejf        r<ddlgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZq ddlrmsZs ddltmuZu ddlvmwZw ddlxmyZy dd lzm{Z{ dd!l|m}Z} 	 ddl~Zn# e€$ r dZY nw xY w	 ddl�Z6ddl‚mƒZ„ dd"lHm…Z… dd#l�m†Z† dd$l‡mˆZˆ erCe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’ n# e“$ r Y nw xY w e2d)¦  «        Z” e2d*¦  «        Z• e2d+¦  «        Z– e2d,¦  «        Z— e2d-¦  «        Z˜ e2d.¦  «        Z™ e2d/¦  «        Zš e2d0¦  «        Z› e2d1¦  «        Zœ e2d2¦  «        Z� e2d3¦  «        Zž e2d4¦  «        ZŸ e4d5¦  «        Z e6j¡        j¢        j£        Z¤e6j¡        j¢        j¥        Z¦e6j¡        j¢        j§        Z¨ ej©        ej!        ¦  «        Zªd6e�d7<   i Z«d8e�d9<   d:Z¬d;Z­d<e­› d=�Z® ej¯        e°¦  «        Z±i Z²d>e�d?<    ej©        e³¦  «        Z´d@e�dA<    ejµ        ¦   «         Z¶ G dB„ dCe
j·        ¦  «        Z¸ G dD„ dE¦  «        Z¹�d¸dL„Zºda»�d¹dN„Z¼�d¹dO„Z½da¾dPe�dQ<   �dºdT„Z¿�d»dU„ZÀ�d¹dV„ZÁdaÂ�d¼dY„ZÃ�d½dZ„ZÄ�d¹d[„ZÅ ejÆ        ¦   «         ZÇ�d¾d]„ZÈ�d¿d_„ZÉ G d`„ dae
j·        ¦  «        ZÊ G db„ dc¦  «        ZË ejÆ        ¦   «         ZÌe$�dÀdf„¦   «         ZÍe$	 	 	 	 	 	 	 	 �dÁ�dÂdv„¦   «         ZÎe/�dÃ�dÄdz„¦   «         ZÏe/	 �dÃ�dÅd}„¦   «         ZÏ	 �dÆ�dÇd„ZÏejÐ        �d¹d€„¦   «         ZÑe6jÒ        e6jÓ        e6j³        fe6jÔ        e6jÕ        e6jÖ        fe6j×        e6jØ        e6jÙ        fe6jÚ        e6jÛ        fe6jÜ        e6jÝ        fe6jÞ        e6jß        fe6jà        e6já        e6jâ        fe6jã        e6jä        e6jå        fe6jæ        e6jç        e6jè        fe6jé        e6jê        fi
Zë G d�„ d‚¦  «        Zì eì¦   «         Zí�dÈd„„Zî�d¹d…„Zï ejð        d†ejñ        ¦  «        Zò G d‡„ dˆejó        ¦  «        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ü G dž„ dŸ¦  «        Zýe/�dÏd¥„¦   «         Zþe/�dÐd§„¦   «         Zþe/�dÑdª„¦   «         Zþe/�dÒd­„¦   «         Zþe/�dÓd°„¦   «         Zþe/�dÔd³„¦   «         Zþe/�dÕd¶„¦   «         Zþe/�dÖd¹„¦   «         Zþe/�d×d¼„¦   «         Zþe/�dØd¿„¦   «         Zþe/�dÙdÂ„¦   «         Zþe/�dÚdÄ„¦   «         Zþ�dÛdÅ„Zþ eÿ¦   «         �Z dÆe�dÇ<   e�j        dÈk    r+e�j        e�j        ej4        ej2        e�j        e�j        f�Z �dÜdÎ„�Ze�j        dÏk    r�e e�j        fz  �Z �dÝdÑ„�Z�dÝdÒ„�Z	�dÝdÓ„�Z
�dÞdÙ„�Z�dßdÚ„�Ze/�dàdÝ„¦   «         �Ze/�dádß„¦   «         �Z�dÝdà„�Z e �j        ¦   «         �Zdáe�dâ<   �dâdä„�Z�dÝdå„�Ze�j        e�j        z  e�j        z  e�j        z  �Zdæe�dç<   �dãdé„�Z�dädë„�Ze�j        e�j        e�j        e�j        e�j        e�j        dìœ�Zdídîdïdðdñ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( ej&        �d¦  «        �dí�d„¦   «         �Z)�dî�dï�d„�Z*�dð�d„�Z+�dñ�d„�Z,�dñ�d„�Z-�d�Z.e�j/         G �d„ �d¦  «        ¦   «         �Z0�d�Z1 e�j2        �e1�¬¦  «        �a3�de��d<   �dò�d„�Z4�dó�d„�Z5�dó�d„�Z6�dó�d„�Z7�dó�d„�Z8�dô�d!„�Z9�dõ�d#„�Z:�d¹�d$„�Z;�dö�d&„�Z< G �d'„ �d(¦  «        �Z=d�a>�d)e��d*<   �d÷�d+„�Z?�dø�d,„�Z@e$	 	 �dù�dú�d/„¦   «         �ZAe�j/         G �d0„ �d1¦  «        ¦   «         �ZB G �d2„ �d3eý¦  «        �ZC �eC¦   «         �eC�_D        �dû�d5„�ZE�dü�d9„�ZF�dý�d:„�ZGd�d;œ�dþ�d>„�ZHe/�dÿ�dB„¦   «         �ZIe/�d �dE„¦   «         �ZI�d�dF„�ZI�d�dG„�ZJe$�d�dI„¦   «         �ZK�d�dL„�ZL�dÃ�d�dN„�ZM�d�dO„�ZN�dë�dP„�ZO�d�dR„�ZP ej&        d¦  «        �d�dU„¦   «         �ZQ�d	�dX„�ZR	 �d
�d�d\„�ZS�d�d]„�ZT e&�d^¦  «        �d�da„¦   «         �ZUeåe³�eVeê�eW�eX �eYd¦  «        �eZ�j[        �e\�j[        ej'        e6�j]        e6�j^        e6�j_        e6�j`        e6�ja        e6�jb        e6j¡        �jc        �jd        e6�je        �jf        e6j:        j;        �jg        e6j:        j;        �jh        e6j:        j;        �ji        h�Zj�dbe��dc<    ea¦   «         r*dd�lk�Zk�ej� l                    �ek�jm        �j^        ¦  «         	 �d�dd„�Zne�jo        �d�df„¦   «         �Zp�d�dh„�Zq�d�dj„�Zr�d�dl„�Zs�d�dm„�Zt�d�do„�Zu�d�dp„�Zv�d�dq„�Zw�d�dr„�Zx �eYi � y                    ¦   «         ¦  «        �Zz�dse��dt<    �eYi � {                    ¦   «         ¦  «        �Z|�due��dv<    �eYi � }                    ¦   «         ¦  «        �Z~�dwe��dx<    �eY e"¦   «         � {                    ¦   «         ¦  «        �Z�due��dy<    �eY �e€d'¦  «        ¦  «        �Z��dze��d{<    �eY �e€ �e‚d¦  «        ¦  «        ¦  «        �Zƒ�dze��d|<   �e��j„        �Z…�e†�j‡        �Zˆ�e‰�j‡        �ZŠ�d}„  e�j‹        �e‰�jŒ        � {                    ¦   «         e"�jŒ        � {                    ¦   «         ¦  «        D ¦   «         �Z��d~„ �eŽ�jŒ        � {                    ¦   «         D ¦   «         �Z��d„ �e��jŒ        � {                    ¦   «         D ¦   «         �Z‘�d€„ �e’�jŒ        � {                    ¦   «         D ¦   «         �Z“�d�„ �e”�jŒ        � {                    ¦   «         D ¦   «         �Z•eÿ�j‡        �Z–�d‚„ eÿ�jŒ        � {                    ¦   «         D ¦   «         �Z—�dƒ„ �e˜�jŒ        � {                    ¦   «         D ¦   «         �Z™�e˜�jš        �Z›�d„„ �eW�jŒ        � {                    ¦   «         D ¦   «         �Zœ�d…„  �eYe
j·        ¦  «        �jŒ        � {                    ¦   «         D ¦   «         �Z� e2�d†¦  «        �Zž e2�d‡¦  «        �ZŸ�d�d‹„�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ª�d�dŸ„�Z«�e‰�jš        �Z¬e6j=        �j­        �d�d¡„¦   «         �Z®�d�d¤„�Z¯�d�d¦„�Z°�d �dª„�Z±�d!�d«„�Z²�d"�d®„�Z³	 	 �d#�d$�d²„�Z´	 �dÃ�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½dg�dÇœ�d,�dÊ„�Z¾�d-�dÌ„�Z¿�d.�dÏ„�ZÀ�d/�dÒ„�ZÁ�dÃ�d0�dÔ„�ZÂddg�dÕdg�dÖdgdge±�jÃ        dgdgdg�d×f�d1�då„�ZÄ�d2�dæ„�ZÅej$        �d�dç„¦   «         �ZÆ eý¦   «         �ZÇ ej©        �e˜¦  «        �ZÈ�dèe��dé<   g �ZÉ�dêe��dë<    eý¦   «         �ZÊe�jo        �d3�dí„¦   «         �ZË�d4�dî„�ZÌ�d5�d6�dð„�ZÍ�d7�dò„�ZÎ�d8�dõ„�ZÏ�d9�dø„�ZÐ�d:�dü„�ZÑ	 �dÃ�d;�dý„�ZÒ	 �dÃ�d;�dþ„�ZÓ ejÆ        ¦   «         �ZÔ�d<�d „�ZÕe$�d=�d„¦   «         �ZÖ�d>�d„�Z×�d?�d„�ZØ�d@�d„�ZÙ�dA�d„�ZÚ�dB�d„�ZÛ�dC�d„�ZÜ�dÝ�d„�ZÝ�dD�d„�ZÞ�dE�d„�Zß�dF�d„�Zà	 �dÃ�dG�d„�Zá G �d„ �de
j·        ¦  «        �Zâ�dH�d„�Zã�dI�d„�Zä�dJ�d!„�Zå�dK�d#„�Zæg �d$¢�Zç�d%�d&g�Zèg �d'¢�Zé�eç�eèz   �eéz   �Zê�dø�d(„�Zë	 	 	 �dL�dM�d,„�Zì	 	 	 �dL�dN�d-„�Zí�dO�d.„�Zî�dO�d/„�Zï G �d0„ �d1e,e eŸf         ¦  «        �Zð�dP�d2„�Zñ G �d3„ �d4¦  «        �Zò G �d5„ �d6e,e eŸf         ¦  «        �Zó ej&        d�¬7¦  «        �dQ�d9„¦   «         �Zô ej&        �d:�¬7¦  «        �dR�d=„¦   «         �Zõ�dS�d>„�Zö�dë�d?„�Z÷�dT�dA„�Zø�dU�dB„�Zù�dV�dF„�Zú�dë�dG„�Zû�dë�dH„�Zü�dW�dJ„�Zý�dW�dK„�Zþ�dX�dN„�Zÿ�dY�dP„�Z e�j/         G �dQ„ �dR¦  «        ¦   «         �Z�dZ�dU„�Z	 	 	 �d[�dV�dWœ�d\�d]„�Z�d]�da„�Z�d^�db„�Z�dÝ�dc„�Z�dÝ�dd„�Z�d_�de„�Z�dF�df„�Z	�dÝ�dg„�Z
�d`�dh„�Z�da�di„�Z�dÝ�dj„�Z�db�dl„�Zej$        	 �dc�dd�dp„¦   «         �Z�de�dr„�Z�df�ds„�Z G �dt„ �due6j¡        j¢        ¦  «        �Z�dg�dx„�Z�dh�dz„�Z�di�d|„�Z G �d}„ �d~¦  «        �Z �eŽ¦   «         �Z�de��d€<   �d
�dj�d‚„�Z�dk�d„„�Zej$        �d�d…„¦   «         �Z�dø�d†„�Z�dl�d‡„�Z�dm�d‰„�Z�dn�d‹„�Z�d¹�dŒ„�Z�do�d�„�Z �dí�d‘„�Z!�dp�d’„�Z"�dq�d”„�Z#e6�j$        �dr�d–„¦   «         �Z%e6�j$        �dr�d—„¦   «         �Z&e6�j$        �ds�d˜„¦   «         �Z'�dt�d™„�Z(�du�d›„�Z)�dv�d�„�Z* G �dž„ �dŸ¦  «        �Z+ G �d „ �d¡eå¦  «        �Z,�dw�d¤„�Z-�d¥�Z.�dTe��d¦<   �d4�d§„�Z/e$�d�d¨„¦   «         �Z0e$�d�d©„¦   «         �Z1�dx�dª„�Z2dg�a3�dø�d«„�Z4�dy�d¬„�Z5 ej&        d¦  «        �dø�d­„¦   «         �Z6e6�j$        �dz�d¯„¦   «         �Z7e6�j$        �d{�d±„¦   «         �Z8�d|�d³„�Z9�dÝ�d´„�Z:�d}�d·„�Z;dS (~  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ÚoverloadÚ	TypeAliasÚ	TypeGuardÚTypeVar)Ú	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)ÚInstructionTranslatorBase©ÚVariableTracker)ÚDeviceLikeType)ÚFakeTensorMode)Údetect_fake_mode©Ú
LazyString©Úconfigztuple[types.ModuleType, ...]ÚNP_SUPPORTED_MODULES© )Ú
FakeTensorÚis_fakeÚmaybe_get_fake_modeÚTÚT1ÚT2ÚT3ÚT4ÚT5ÚT6ÚT7ÚT8ÚT9ÚT10Ú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dS )ÚReInplaceTriggerr2   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚAUTO_FUNC_V1ÚAUTO_FUNC_V2Ú
TRITON_OPSrK   ó    úQ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/utils.pyrc   rc   Æ   s   € € € € € Ø€LØ€LØ€J€J€Jrl   rc   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dS )ÚReinplaceCountersz!collections.defaultdict[str, int]Ú_valuesÚtriggerrc   ÚbytesÚintÚreturnÚNonec                óP   — |dk    r| j         d|j        › �xx         |z  cc<   d S d S ©Nr   Úmissed_bytes_©rp   Úname)Úclsrq   rr   s      rm   Úadd_missed_bytesz"ReinplaceCounters.add_missed_bytesÐ   sA   € à�AŠ:ˆ:ØŒKÐ6¨¬Ð6Ð6Ð7Ð7Ô7¸5Ñ@Ð7Ð7Ñ7Ð7Ð7ð ˆ:rl   Úcountc                óP   — |dk    r| j         d|j        › �xx         |z  cc<   d S d S ©Nr   Úmissed_tensors_ry   )r{   rq   r}   s      rm   Úadd_missed_opportunitiesz*ReinplaceCounters.add_missed_opportunitiesÖ   sA   € à�AŠ:ˆ:ØŒKÐ8¨'¬,Ð8Ð8Ð9Ð9Ô9¸UÑBÐ9Ð9Ñ9Ð9Ð9ð ˆ:rl   c                ó8   — | j                              ¦   «          d S ©N)rp   Úclear©r{   s    rm   r„   zReinplaceCounters.clearÛ   s   € àŒ×ÒÑÔÐÐÐrl   c                ój   — d}t           D ](}|| j                             d|j        › �d¦  «        z  }Œ)|S r   ©rc   rp   Úgetrz   ©r{   Úsumrq   s      rm   Úget_total_missedz"ReinplaceCounters.get_total_missedß   sD   € àˆÝ'ð 	Hð 	HˆGØ�3”;—?’?Ð#C°W´\Ð#CÐ#CÀQÑGÔGÑGˆCˆCØˆ
rl   c                ój   — d}t           D ](}|| j                             d|j        › �d¦  «        z  }Œ)|S rw   r‡   r‰   s      rm   Úget_total_missed_bytesz(ReinplaceCounters.get_total_missed_bytesæ   sD   € àˆÝ'ð 	Fð 	FˆGØ�3”;—?’?Ð#A°7´<Ð#AÐ#AÀ1ÑEÔEÑEˆCˆCØˆ
rl   c                óD   — | j         rt          dd| j         ¦  «         d S d S )NÚinductorÚreinplace_counters)rp   r(   r…   s    rm   ÚlogzReinplaceCounters.logí   s6   € ð Œ;ð 	JÝ˜:Ð';¸S¼[ÑIÔIÐIÐIÐIð	Jð 	Jrl   N)rq   rc   rr   rs   rt   ru   )rq   rc   r}   rs   rt   ru   ©rt   ru   ©rt   rs   )rf   rg   rh   ÚcollectionsÚdefaultdictrs   rp   Ú__annotations__Úclassmethodr|   r�   r„   r‹   r�   r‘   rK   rl   rm   ro   ro   Ì   s  € € € € € € Ø1H°Ô1HÈÑ1MÔ1M€GÐMÐMÐMÑMð ðAð Að Añ „[ðAð
 ðCð Cð Cñ „[ðCð ðð ð ñ „[ðð ðð ð ñ „[ðð ðð ð ñ „[ðð ðJð Jð Jñ „[ðJð Jð Jrl   ro   Úrowsú'list[tuple[str, Any]] | list[list[Any]]Úheadersútuple[str, ...] | list[str]rt   Ústrc                óÀ   — 	 dd l }|                      | |¬¦  «        S # t          $ r6 d                     d„ t          j        |g| ¦  «        D ¦   «         ¦  «        cY S w xY w)Nr   ©rš   ú
c              3  óf   K  — | ],}d                       t          t          |¦  «        ¦  «        V — Œ-dS )ú, N)ÚjoinÚmaprœ   )Ú.0Úrows     rm   ú	<genexpr>ztabulate.<locals>.<genexpr>ý   sG   è è € ð 
ð 
Ø),ˆD�IŠI•c�#˜s‘m”mÑ$Ô$ð
ð 
ð 
ð 
ð 
ð 
rl   )ÚtabulateÚImportErrorr¢   Ú	itertoolsÚchain)r˜   rš   r§   s      rm   r§   r§   ô   sŽ   € ð
Øˆˆˆà× Ò  ¨wÐ Ñ7Ô7Ð7øÝð 
ð 
ð 
Ø�yŠyð 
ð 
Ý09´ÀÀ	È4Ñ0PÔ0Pð
ñ 
ô 
ñ 
ô 
ð 	
ð 	
ð 	
ð
øøøs   ‚ �=AÁAru   c                 ó   — t           dz   a d S ©Nr2   )Ú
curr_framerK   rl   rm   Úincrement_framer®     s   € å˜a‘€J€J€Jrl   c                 ón   — t                                ¦   «          t                               ¦   «          dad S ©Nr   )ra   r„   r_   r­   rK   rl   rm   Úreset_frame_countr±     s/   € å×"Ò"Ñ$Ô$Ð$Ý×"Ò"Ñ$Ô$Ð$Ø€J€J€Jrl   úlist[Callable[[], str]] | NoneÚ_recompile_user_contextsÚhookúCallable[[], str]c                óL   — t           €g a t                                | ¦  «         dS )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)r´   s    rm   Ú(register_hook_for_recompile_user_contextr¸     s*   € õ  Ð'Ø#%Ð Ý×#Ò# DÑ)Ô)Ð)Ð)Ð)rl   c                 ó   — t           S rƒ   ©r³   rK   rl   rm   Ú#get_hook_for_recompile_user_contextr»   $  s   € Ý#Ð#rl   c                 ó
   — da dS )z@Clear any registered recompile user-context hooks (test helper).Nrº   rK   rl   rm   Úreset_recompile_user_contextsr½   (  s   € ð  $ÐÐÐrl   Úcntrs   c                ó   — t           | z  a d S rƒ   )Úop_count)r¾   s    rm   Úincrement_op_countrÁ   1  s   € å��O€H€H€Hrl   c                 ó¸   — i } t                                ¦   «         D ]\  }}|dz  | |<   Œ|                      dd¦  «        |                      dd¦  «        z   | d<   | S )Nç    eÍÍAÚentire_frame_compiler   Úentire_backward_compileÚtotal_wall_time)ra   Úitemsrˆ   )Útotal_by_keyÚphaseÚtimings      rm   Úcalculate_time_spentrË   8  sx   € Ø€LÝ1×7Ò7Ñ9Ô9ð +ð +‰ˆˆvØ$ s™lˆ�UÑÐà&2×&6Ò&6Ø ñ'ô 'à×ÒÐ2°AÑ6Ô6ñ'7€LÐ"Ñ#ð Ðrl   c            	     ó¨   — t          ¦   «         } d}|                      ¦   «         D ]\  }}|› d|› dt          |d¦  «        › �}Œt          |¦  «         d S )NzTIMING:ú ú:é   )rË   rÇ   ÚroundÚprint)rÈ   ÚoutÚkeyÚvalues       rm   Úprint_time_reportrÕ   H  se   € Ý'Ñ)Ô)€Là
€CØ"×(Ò(Ñ*Ô*ð /ð /‰
ˆˆUØÐ.Ð.�sÐ.Ð.�U 5¨!™_œ_Ð.Ð.ˆˆå	ˆ#�J„J€J€J€Jrl   r   c                 ó‚   — t          t          d¦  «        st          t          ¬¦  «        t          _        t          j        S )NÚmetrics_context©Úon_exit)ÚhasattrÚ_metrics_context_tlsr   Úrecord_compilation_metricsr×   rK   rl   rm   Úget_metrics_contextrÝ   j  s<   € ÝÕ'Ð):Ñ;Ô;ð 
Ý/=Ý.ð0
ñ 0
ô 0
ÕÔ,õ  Ô/Ð/rl   r   c                 ó‚   — t          t          d¦  «        st          t          ¬¦  «        t          _        t          j        S )NÚruntime_metrics_contextrØ   )rÚ   rÛ   r   rÜ   rß   rK   rl   rm   Úget_runtime_metrics_contextrà   r  s<   € ÝÕ'Ð)BÑCÔCð 
Ý7LÝ.ð8
ñ 8
ô 8
ÕÔ4õ  Ô7Ð7rl   c                  ó   — e Zd ZdZdZdZdZdS )Ú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
    r2   rd   re   N)rf   rg   rh   Ú__doc__ÚCHROMIUMÚPT2_COMPILEÚCOMPILATION_METRICrK   rl   rm   râ   râ   z  s,   € € € € € ðð ð €HØ€KØÐÐÐrl   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d0d„¦   «         Zeej        fd1d„¦   «         Zed2d„¦   «         Zed2d„¦   «         Zed2d„¦   «         Zed+d3d „¦   «         Ze	 d4d5d!„¦   «         Zed2d"„¦   «         Zed6d)„¦   «         ZdS )7Ú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)
    NÚ
event_namerœ   Úmetadatar]   Útime_nsú
int | NoneÚ	log_levelrâ   rt   ru   c                óæ   — |€t          j        ¦   «         }t          ¦   «         }|t          j        k    rd}n"|t          j        k    rd}nt          d¦  «        ‚|                     | |||¦  «         d S )NFTzjCannot log instant event at COMPILATION_METRIC level. Please choose one of CHROMIUM_EVENT or COMPILE_EVENT)Útimerë   Úget_chromium_event_loggerrâ   rä   rå   ÚRuntimeErrorÚlog_instant_event)ré   rê   rë   rí   Úchromium_logÚlog_pt2_compile_events         rm   rò   z$CompileEventLogger.log_instant_event¡  s’   € ð ˆ?Ý”l‘n”nˆGÝ0Ñ2Ô2ˆØÕ,Ô5Ò5Ð5Ø$)Ð!Ð!ØÕ.Ô:Ò:Ð:Ø$(Ð!Ð!åØ|ñô ð ð 	×&Ò&Ø˜ Ð+@ñ	
ô 	
ð 	
ð 	
ð 	
rl   FÚ	overwriteÚboolÚobjectc                óZ  — t          ¦   «         }|                     ¦   «         }|t          j        k    r |j        | fi |¤Ž dS |t          j        k    r8|                     ¦   «         }| |vrt          d| ¦  «        ‚ |j        | fi |¤Ž dS |t          j        k    rt          d|› �¦  «        ‚| 	                    ¦   «         }| |k    rt          d¦  «        ‚t          ¦   «         }|                     ¦   «         st          d¦  «        ‚|                     ||¦  «          |j        | fi |¤Ž dS )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_timedú1Expected log_level to be COMPILATION_METRIC, got zµ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æ   ÚAssertionErrorÚget_outermost_eventrÝ   Úin_progressÚupdate)ré   rí   rõ   rê   ró   Úpt2_compile_substackÚ	top_eventr×   s           rm   Úadd_datazCompileEventLogger.add_data·  s�  € õ 1Ñ2Ô2ˆØ+×DÒDÑFÔFÐàÕ,Ô5Ò5Ð5Ø'ˆLÔ'¨
Ð?Ð?°hÐ?Ð?Ð?Ð?Ð?ØÕ.Ô:Ò:Ð:Ø#/×#HÒ#HÑ#JÔ#JÐ ØÐ!5Ð5Ð5Ý"ðAð ñ	ô ð ð (ˆLÔ'¨
Ð?Ð?°hÐ?Ð?Ð?Ð?Ð?àÕ0ÔCÒCÐCÝ$ØSÈ	ÐSÐSñô ð ð %×8Ò8Ñ:Ô:ˆIà˜YÒ&Ð&Ý"ðBñô ð õ 2Ñ3Ô3ˆOØ"×.Ò.Ñ0Ô0ð Ý"Øqñô ð ð
 ×"Ò" 8¨YÑ7Ô7Ð7Ø'ˆLÔ'¨
Ð?Ð?°hÐ?Ð?Ð?Ð?Ð?rl   c                ó�   — t          ¦   «                              ¦   «         }|€t          d¦  «        ‚t          j        || |fi |¤Ž dS )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       rm   Úadd_toplevelzCompileEventLogger.add_toplevelè  s[   € õ .Ñ/Ô/×CÒCÑEÔEˆ	ØÐÝØiñô ð õ 	Ô# I¨y¸)ÐPÐPÀxÐPÐPÐPÐPÐPrl   rÓ   rÔ   rs   c                óæ  — t          ¦   «         }|t          j        k    s|t          j        k    r|                     | ||¦  «         dS |t          j        k    rt          d|› �¦  «        ‚|                     ¦   «         }| |k    rt          d¦  «        ‚t          ¦   «         }| 
                    ¦   «         st          d¦  «        ‚|                     ||¦  «         |                     | ||¦  «         dS )z:
        Increments an existing field, or adds it
        rù   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  r×   s          rm   r  zCompileEventLogger.incrementö  s  € õ 1Ñ2Ô2ˆàÕ-Ô6Ò6Ð6ØÕ0Ô<Ò<Ð<à×"Ò" :¨s°EÑ:Ô:Ð:Ð:Ð:àÕ0ÔCÒCÐCÝ$ØSÈ	ÐSÐSñô ð ð %×8Ò8Ñ:Ô:ˆIØ˜YÒ&Ð&Ý"ð}ñô ð õ
 2Ñ3Ô3ˆOØ"×.Ò.Ñ0Ô0ð Ý"Ø~ñô ð ð ×%Ò% c¨5Ñ1Ô1Ð1Ø×"Ò" :¨s°EÑ:Ô:Ð:Ð:Ð:rl   r2   c                ó¦   — t          ¦   «         }|                     ¦   «         }|€t          d¦  «        ‚t                               ||| |¦  «         dS )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        rm   Úincrement_toplevelz%CompileEventLogger.increment_toplevel  s]   € õ 1Ñ2Ô2ˆØ ×4Ò4Ñ6Ô6ˆ	ØÐÝØqñô ð õ 	×$Ò$ Y°	¸3ÀÑFÔFÐFÐFÐFrl   r   c                óæ  — t          ¦   «         }|t          j        k    s|t          j        k    r|                     | ||¦  «         dS |t          j        k    rt          d|› �¦  «        ‚|                     ¦   «         }| |k    rt          d¦  «        ‚t          ¦   «         }| 
                    ¦   «         st          d¦  «        ‚|                     ||¦  «         |                     | ||¦  «         dS )zl
        Add metadata <value> to a set of values with key <key>. Creates a set if it doesn't exist.
        rù   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þ   r  s          rm   r  zCompileEventLogger.add_to_set)  s  € õ 1Ñ2Ô2ˆàÕ-Ô6Ò6Ð6ØÕ0Ô<Ò<Ð<à×#Ò# J°°UÑ;Ô;Ð;Ð;Ð;àÕ0ÔCÒCÐCÝ$ØSÈ	ÐSÐSñô ð ð %×8Ò8Ñ:Ô:ˆIØ˜YÒ&Ð&Ý"ð|ñô ð õ
 2Ñ3Ô3ˆOØ"×.Ò.Ñ0Ô0ð Ý"Ø~ñô ð ð ×&Ò& s¨EÑ2Ô2Ð2Ø×#Ò# J°°UÑ;Ô;Ð;Ð;Ð;rl   c                ó¦   — t          ¦   «         }|                     ¦   «         }|€t          d¦  «        ‚t                               ||| |¦  «         dS )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        rm   Úadd_to_set_toplevelz&CompileEventLogger.add_to_set_toplevelK  s]   € õ 1Ñ2Ô2ˆØ ×4Ò4Ñ6Ô6ˆ	ØÐÝØqñô ð õ 	×%Ò% i°¸CÀÑGÔGÐGÐGÐGrl   c                óD   — t          j        | t          j        fddi|¤Ž dS )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     rm   ÚchromiumzCompileEventLogger.chromium_  sA   € õ 	Ô#ØÕ,Ô5ð	
ð 	
ØAFð	
ØJRð	
ð 	
ð 	
ð 	
ð 	
rl   c                óD   — t          j        | t          j        fddi|¤Ž dS )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     rm   Úpt2_compilezCompileEventLogger.pt2_compilei  sA   € õ 	Ô#ØÕ,Ô8ð	
ð 	
ØDIð	
ØMUð	
ð 	
ð 	
ð 	
ð 	
rl   c                ó&  — t           j        j        j        rx|rxd                     d„ |                     ¦   «         D ¦   «         ¦  «        }t           j        j                             | › d|› �¦  «        5  	 ddd¦  «         dS # 1 swxY w Y   dS dS dS )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  ó*   K  — | ]\  }}|› d |› �V — ŒdS )ú=NrK   ©r¤   ÚkÚvs      rm   r¦   z>CompileEventLogger.add_record_function_data.<locals>.<genexpr>ƒ  s0   è è € Ð$MÐ$M±D°A°q¨ Z Z¨A Z ZÐ$MÐ$MÐ$MÐ$MÐ$MÐ$Mrl   z_data: N)ÚtorchÚautogradÚprofilerÚ_is_profiler_enabledr¢   rÇ   Úrecord_function)ré   rê   Úmetadata_strs      rm   Úadd_record_function_dataz+CompileEventLogger.add_record_function_datav  sî   € õ Œ>Ô"Ô7ð 	¸Hð 	ØŸ9š9Ð$MÐ$M¸H¿NºNÑ<LÔ<LÐ$MÑ$MÔ$MÑMÔMˆLÝ”Ô(×8Ò8ØÐ4Ð4 lÐ4Ð4ñô ð ð ð ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð	ð 	ð 	ð 	s   Á3BÂBÂ	Bc                ó@   — t          j        t          j        | fi |¤Ž dS )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     rm   Úcompilation_metricz%CompileEventLogger.compilation_metric‰  s8   € õ 	Ô'Ý Ô3°Yð	
ð 	
ØBJð	
ð 	
ð 	
ð 	
ð 	
rl   c                óT   — t                                | ||t          j        ¦  «         dS )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      rm   ÚinstantzCompileEventLogger.instant•  s3   € õ 	×,Ò,Ø˜ 'Õ+?Ô+Hñ	
ô 	
ð 	
ð 	
ð 	
rl   c                ó^   — t          ¦   «         sdS t          ¦   «         } |j        | fi |¤Ž dS )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      rm   Útry_add_pt2_compilez&CompileEventLogger.try_add_pt2_compile¡  sC   € õ )Ñ*Ô*ð 	ØˆFÝ0Ñ2Ô2ˆØ'ˆÔ'¨
Ð?Ð?°hÐ?Ð?Ð?Ð?Ð?rl   Ú	method_fnúCallable[_P, Any]Úargsú_P.argsÚkwargsú	_P.kwargsc                ó~   — t          ¦   «         sdS t          ¦   «         }|                     ¦   «         sdS  | |i |¤Ž dS )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þ   )r+  r-  r/  r×   s       rm   Útry_zCompileEventLogger.try_­  sV   € õ
 )Ñ*Ô*ð 	ØˆFÝ-Ñ/Ô/ˆØ×*Ò*Ñ,Ô,ð 	ØˆFØˆ	�4Ð"˜6Ð"Ð"Ð"Ð"Ð"rl   )
ré   rœ   rê   r]   rë   rì   rí   râ   rt   ru   ©F)
ré   rœ   rí   râ   rõ   rö   rê   r÷   rt   ru   )rí   râ   rõ   rö   rê   r÷   rt   ru   )
ré   rœ   rí   râ   rÓ   rœ   rÔ   rs   rt   ru   )rÓ   rœ   rÔ   rs   rí   râ   rt   ru   )
ré   rœ   rí   râ   rÓ   rœ   rÔ   r   rt   ru   )rÓ   rœ   rÔ   r   rí   râ   rt   ru   )ré   rœ   rê   r÷   rt   ru   )rõ   rö   rê   r÷   rt   ru   rƒ   )ré   rœ   rê   r]   rë   rì   rt   ru   )r+  r,  r-  r.  r/  r0  rt   ru   )rf   rg   rh   rã   Ústaticmethodrâ   rä   rò   r  r  r  ræ   r  r  r  r  r  r"  r$  r&  r*  r2  rK   rl   rm   rè   rè   ˆ  sE  € € € € € ðð ð0 ð #Ø*>Ô*Gð	
ð 
ð 
ð 
ñ „\ð
ð* ð  ð.@ð .@ð .@ð .@ñ „\ð.@ð` à;@ðQð Qð Qð Qñ „\ðQð ð;ð ;ð ;ñ „\ð;ðB ð Ø*>Ô*QðGð Gð Gð Gñ „\ðGð  ð<ð <ð <ñ „\ð<ðB ð +?Ô*QðHð Hð Hð Hñ „\ðHð& ð
ð 
ð 
ñ „\ð
ð ð

ð 

ð 

ñ „\ð

ð ðð ð ñ „\ðð$ ð	
ð 	
ð 	
ð 	
ñ „\ð	
ð àIMð	
ð 	
ð 	
ð 	
ñ „\ð	
ð ð	@ð 	@ð 	@ñ „\ð	@ð ð	#ð 	#ð 	#ñ „\ð	#ð 	#ð 	#rl   rè   rz   úGenerator[Any, None, None]c              #  ó"  K  — t           j        j        j        rrt           j        j                             | ¦  «        }|                     ¦   «          	 dV — |                     ddd¦  «         dS # |                     ddd¦  «         w xY wdV — dS )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__)rz   Úrfs     rm   Úcompile_time_record_functionr=  ½  s�   è è € õ „~ÔÔ3ð ÝŒXÔ×3Ò3°DÑ9Ô9ˆØ
�Š‰Œˆð	*ØˆEˆEˆEà�KŠK˜˜d DÑ)Ô)Ð)Ð)Ð)øˆB�KŠK˜˜d DÑ)Ô)Ð)Ð)øøøàˆˆˆˆˆs   ÁA/ Á/BFrÓ   Ú
phase_nameú
str | Nonerô   rö   rê   údict[str, object] | NoneÚdynamo_compile_column_usÚ
compile_idúCompileId | NoneÚis_backwardúbool | NoneÚlog_waitcounterÚwaitcounter_name_overridec	           
   #  óN	  K  — |r|}	| }
n| }	d}
| t           vr
g t           | <   t           |          }i }|r|                     |¦  «         |
r|                     d|
i¦  «         |�|                     d|i¦  «         t          ¦   «         }t          j        ¦   «         }|                     |	||||¦  «         t          | › d�¦  «        g}|r=|r|n| }|                     t          d|› �¦  «         	                    ¦   «         ¦  «         t          j        j                             ¦   «         du}|rÙ|                     d¦  «        st          d|›�¦  «        ‚t!          t"          d¦  «        sd	t"          _        t"          xj        d
z  c_        t"          j        d
k    rl|                     t          d¦  «         	                    ¦   «         ¦  «         |s6d}|                     t          |¦  «         	                    ¦   «         ¦  «         	 t'          j        ¦   «         5 }|D ]}|                     |¦  «         ŒdV — ddd¦  «         n# 1 swxY w Y   t          j        ¦   «         }||z
  }|                     |dz  ¦  «         |                     |	|i |||¦  «         |rÝt.          |	xx         |z  cc<   t"          xj        d
z  c_        t"          j        d	k    }|dz  }|rVt1          ¦   «         }|                     ¦   «         r0|                     ||¦  «         |r|                     d|¦  «         dS dS dS t7          ¦   «         }|                     ||¦  «         |r"|d| dœ}|                     d||¦  «         dS dS dS # t          j        ¦   «         }||z
  }|                     |dz  ¦  «         |                     |	|i |||¦  «         |rÙt.          |	xx         |z  cc<   t"          xj        d
z  c_        t"          j        d	k    }|dz  }|rSt1          ¦   «         }|                     ¦   «         r/|                     ||¦  «         |r|                     d|¦  «         w w w t7          ¦   «         }|                     ||¦  «         |r |d| dœ}|                     d||¦  «         w w w xY 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_namerD  z (dynamo_timed)zpytorch.wait_counter.Ú_usz2dynamo_compile_column_us must end with '_us', got Údepthr   r2   z#pytorch.wait_counter.dynamo_compilez.pytorch.wait_counter.compile_runtime_overheadsrÃ   éè  Úduration_usT)rB  Ú
is_runtimeÚ
is_forward)r_   rÿ   rð   rï   rë   Úlog_event_startr=  r·   r+   Úguardr  Ú_guardsÚCompileContextÚcurrent_compile_idÚendswithrü   rÚ   Ú_dynamo_timed_tlsrK  Ú
contextlibÚ	ExitStackÚenter_contextÚlog_event_endra   rÝ   rþ   r  rà   )rÓ   r>  rô   rê   rA  rB  rD  rF  rG  ré   rI  ÚmetricsÚevent_metadataró   Ústart_nsÚcx_mgrsÚwc_nameÚis_compile_timeÚ
runtime_wcÚstackÚcxÚend_nsÚtime_spent_nsÚis_outer_eventrM  r×   Úruntime_contextÚextras                               rm   Údynamo_timedri  Õ  sý  è è € ðl ð Øˆ
Øˆˆàˆ
Øˆà
Õ*Ð*Ð*Ø(*Õ  Ñ%å& sÔ+€GØ€NØð (Ø×Ò˜hÑ'Ô'Ð'Øð 4Ø×Ò˜y¨'Ð2Ñ3Ô3Ð3ØÐØ×Ò˜}¨kÐ:Ñ;Ô;Ð;å(AÑ(CÔ(C€LÝŒ|‰~Œ~€HØ× Ò Ø�H˜nÐ.CÀZñô ð õ ">ÀÐ>UÐ>UÐ>UÑ!VÔ!VÐ W€GØð PØ/HÐQÐ+Ð+ÈcˆØ�Š•|Ð$E¸GÐ$EÐ$EÑFÔF×LÒLÑNÔNÑOÔOÐOå”mÔ2×EÒEÑGÔGÈtÐS€OØð Aà'×0Ò0°Ñ7Ô7ð 	Ý ØaÐE]ÐaÐañô ð õ Õ(¨'Ñ2Ô2ð 	(Ø&'ÕÔ#ÝÐÔ 1Ñ$ÐÔõ Ô" aÒ'Ð'Ø�NŠN�<Ð(MÑNÔN×TÒTÑVÔVÑWÔWÐWØ"ð AØM�
Ø—’�|¨JÑ7Ô7×=Ò=Ñ?Ô?Ñ@Ô@Ð@ð(QÝÔ!Ñ#Ô#ð 	 uØð (ð (�Ø×#Ò# BÑ'Ô'Ð'Ð'ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ
 ”‘”ˆØ Ñ)ˆØ�Š�} sÑ*Ñ+Ô+Ð+Ø×"Ò"Ø˜  HÐ.CÀZñ	
ô 	
ð 	
ð $ð 	Qõ % ZÐ0Ð0Ô0°MÑAÐ0Ð0Ñ0õ Ð#Ô# qÑ(Ð#Ô#Ý.Ô4¸Ò9ˆNà'¨4Ñ/ˆKØð QÝ"5Ñ"7Ô"7�Ø"×.Ò.Ñ0Ô0ð NØ#×-Ò-Ð.FÈÑTÔTÐTØ%ð NØ'×1Ò1°-ÀÑMÔMÐMÐMÐMðNð NðNð Nõ #>Ñ"?Ô"?�Ø×)Ò)Ð*BÀKÑPÔPÐPØ!ð Qà&0Ø&*Ø*5 oðð �Eð
 $×-Ò-¨m¸[È%ÑPÔPÐPÐPÐPð9	Qð 	Qð,Qð Qøõ9 ”‘”ˆØ Ñ)ˆØ�Š�} sÑ*Ñ+Ô+Ð+Ø×"Ò"Ø˜  HÐ.CÀZñ	
ô 	
ð 	
ð $ð 	Qõ % ZÐ0Ð0Ô0°MÑAÐ0Ð0Ñ0õ Ð#Ô# qÑ(Ð#Ô#Ý.Ô4¸Ò9ˆNà'¨4Ñ/ˆKØð QÝ"5Ñ"7Ô"7�Ø"×.Ò.Ñ0Ô0ð NØ#×-Ò-Ð.FÈÑTÔTÐTØ%ð NØ'×1Ò1°-ÀÑMÔMÐMÐMðNðNõ #>Ñ"?Ô"?�Ø×)Ò)Ð*BÀKÑPÔPÐPØ!ð Qà&0Ø&*Ø*5 oðð �Eð
 $×-Ò-¨m¸[È%ÑPÔPÐPÐPð9	Qð,Qøøøs1   ÈM< ÈIÈ8M< ÉIÉM< ÉIÉM< Í<D(R$ÚreprúLiteral['str']Ú	aggregatec                ó   — d S rƒ   rK   ©rj  rl  s     rm   Úcompile_timesro  i  s   € ØILÈrl   úLiteral['csv']útuple[list[str], list[object]]c                ó   — d S rƒ   rK   rn  s     rm   ro  ro  m  s	   € ð &) Srl   ú(str | None | tuple[list[str], list[str]]c                ó0  ‡‡— t           fdˆfd„Š| dk    r+ˆfd„t          D ¦   «         }d	}|t          |d
¬¦  «        z  }|S | dk    rOˆfd„t                               ¦   «         D ¦   «         }t	          t                               ¦   «         ¦  «        }||fS dS )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.
    Úvaluesúlist[float]Úitem_fnúCallable[[float], str]rt   rœ   c                ó~   •— ‰r |t          | ¦  «        ¦  «        S d                     t          || ¦  «        ¦  «        S )Nr¡   )rŠ   r¢   r£   )ru  rw  rl  s     €rm   Úfmt_fnzcompile_times.<locals>.fmt_fn„  s=   ø€ Øð 	(Ø�7�3˜v™;œ;Ñ'Ô'Ð'Ø�yŠy�˜W fÑ-Ô-Ñ.Ô.Ð.rl   c                óF   •— g | ]}| ‰t           |         d „ ¬¦  «        f‘ŒS )c                ó
   — | d›S )Nz.4frK   ©Úxs    rm   ú<lambda>z*compile_times.<locals>.<listcomp>.<lambda>‹  s
   € ÈÀjÀj€ rl   ©rw  )r_   )r¤   r  rz  s     €rm   ú
<listcomp>z!compile_times.<locals>.<listcomp>Š  sG   ø€ ð 
ð 
ð 
àð ��Õ/°Ô2Ð<PÐ<PÐQÑQÔQÐRð
ð 
ð 
rl   z!TorchDynamo compilation metrics:
)ÚFunctionzRuntimes (s)rž   Úcsvc                ó,   •— g | ]} ‰|d „ ¬¦  «        ‘ŒS )c                ó
   — | d›S )Nz.6frK   r}  s    rm   r  z*compile_times.<locals>.<listcomp>.<lambda>“  s
   € ¨1¨
¨
€ rl   r€  rK   )r¤   r  rz  s     €rm   r�  z!compile_times.<locals>.<listcomp>’  s<   ø€ ð 
ð 
ð 
àð ˆF�1Ð2Ð2Ð3Ñ3Ô3ð
ð 
ð 
rl   N)ru  rv  rw  rx  rt   rœ   )rœ   r_   r§   ru  ÚlistÚkeys)rj  rl  r˜   rÒ   ru  rš   rz  s    `    @rm   ro  ro  t  sí   øø€ õ  GJð /ð /ð /ð /ð /ð /ð /ð
 ˆu‚}€}ð
ð 
ð 
ð 
å-ð
ñ 
ô 
ˆð 3ˆØ�x˜Ð&BÐCÑCÔCÑCˆØˆ
Ø	�Šˆð
ð 
ð 
ð 
å-×4Ò4Ñ6Ô6ð
ñ 
ô 
ˆõ Õ/×4Ò4Ñ6Ô6Ñ7Ô7ˆØ˜ˆÐØˆ4rl   c                 óX   — t                                t          dd¬¦  «        ¦  «         d S )Nrœ   Trn  )r‘   Úinforo  rK   rl   rm   Údump_compile_timesrŠ  ›  s'   € å‡H‚H�] °Ð6Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7rl   c                  ó(   — e Zd Zddd„Zdd„Zdd„ZdS )ÚDuplicateWarningCheckeré   Úmaxsizers   rt   ru   c                ó<   — || _         |                      ¦   «          d S rƒ   )rŽ  Úreset)ÚselfrŽ  s     rm   Ú__init__z DuplicateWarningChecker.__init__¯  s   € ØˆŒØ�
Š
‰Œˆˆˆrl   c                ó,   — t          ¦   «         | _        d S rƒ   )r   Úset©r‘  s    rm   r�  zDuplicateWarningChecker.reset³  s   € Ý*5©-¬-ˆŒˆˆrl   rÓ   ústr | tuple[object, object]rö   c                ó,  — || j         v r+| j                              |d¬¦  «         t          j        sdS n_d | j         |<   t	          | j         ¦  «        | j        k    r8| j                              d¬¦  «         t	          | j         ¦  «        | j        k    °8dS )NT)ÚlastF)r”  Úmove_to_endrI   ÚverboseÚlenrŽ  Úpopitem©r‘  rÓ   s     rm   ÚaddzDuplicateWarningChecker.add¶  s“   € Ø�$”(ˆ?ˆ?ØŒH× Ò  ¨4Ð Ñ0Ô0Ð0Ý”>ð Ø�uðð !ˆDŒH�S‰MÝ�d”h‘-”- $¤,Ò.Ð.Ø”× Ò  eÐ Ñ,Ô,Ð,õ �d”h‘-”- $¤,Ò.Ð.àˆtrl   N)r�  )rŽ  rs   rt   ru   r’   )rÓ   r–  rt   rö   )rf   rg   rh   r’  r�  rž  rK   rl   rm   rŒ  rŒ  ®  sU   € € € € € ðð ð ð ð ð8ð 8ð 8ð 8ð	ð 	ð 	ð 	ð 	ð 	rl   rŒ  úcontextlib.ExitStackc                 ó�   — t           j                             dd¦  «        dk    } | rt          ¦   «         S t	          j        ¦   «         S )NÚTORCH_COMPILE_DEBUGÚ0Ú1)ÚosÚenvironrˆ   Úadd_file_handlerrW  rX  )Úcompile_debugs    rm   Úsetup_compile_debugr¨  Å  s@   € Ý”J—N’NÐ#8¸#Ñ>Ô>À#ÒE€Màð "ÝÑ!Ô!Ð!åÔÑ!Ô!Ð!rl   c                 ó8   — t                                ¦   «          d S rƒ   )Úgraph_break_dup_warning_checkerr�  rK   rl   rm   Úreset_graph_break_dup_checkerr«  Î  s   € Ý#×)Ò)Ñ+Ô+Ð+Ð+Ð+rl   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.Úrecordúlogging.LogRecordrt   rœ   c                ó|   •— t          ¦   «                              |¦  «        }t                               d|¦  «        S )NÚ )ÚsuperÚformatÚANSI_ESCAPE_PATTERNÚsub)r‘  r®  ÚmsgÚ	__class__s      €rm   r³  zStripAnsiFormatter.formatâ  s.   ø€ Ý‰gŒg�nŠn˜VÑ$Ô$ˆÝ"×&Ò& r¨3Ñ/Ô/Ð/rl   )r®  r¯  rt   rœ   )rf   rg   rh   rã   r³  Ú__classcell__©r·  s   @rm   r­  r­  ß  sC   ø€ € € € € Ø:Ð:ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0rl   r­  c                 óà  ‡‡— t           j                             t          ¦   «         d¦  «        } t          j        | d¬¦  «         t          j        t           j                             | d¦  «        ¦  «        Š‰                     t          d¦  «        ¦  «         t          j	        d¦  «        Š‰ 
                    ‰¦  «         t          j        ¦   «         }|                     ˆˆfd„¦  «         |S )NÚtorchdynamoT©Úexist_okz	debug.logz%(message)sztorch._dynamoc                 ó.   •— ‰                      ‰ ¦  «        S rƒ   ©ÚremoveHandler©Úlog_file_handlerÚloggers   €€rm   r  z"add_file_handler.<locals>.<lambda>ñ  s   ø€ ˜v×3Ò3Ð4DÑEÔE€ rl   )r¤  Úpathr¢   Úget_debug_dirÚmakedirsÚloggingÚFileHandlerÚsetFormatterr­  Ú	getLoggerÚ
addHandlerrW  rX  Úcallback)Úlog_pathÚ	exitstackrÂ  rÃ  s     @@rm   r¦  r¦  ç  sÊ   øø€ ÝŒw�|Š|�M™OœO¨]Ñ;Ô;€HÝ„K� 4Ð(Ñ(Ô(Ð(åÔ*­2¬7¯<ª<¸À+Ñ+NÔ+NÑOÔOÐØ×!Ò!Õ"4°]Ñ"CÔ"CÑDÔDÐDÝÔ˜Ñ/Ô/€FØ
×ÒÐ&Ñ'Ô'Ð'åÔ$Ñ&Ô&€IØ×ÒÐEÐEÐEÐEÐEÑFÔFÐFØÐrl   c                 ó0  ‡‡— t          j        ¦   «         } t          j        �tt	          j        t          j        ¦  «        Št          j        j         	                    ¦   «         D ]0Š‰ 
                    ‰¦  «         |                      ˆˆfd„¦  «         Œ1| S | S )Nc                 ó.   •— ‰                      ‰ ¦  «        S rƒ   r¿  rÁ  s   €€rm   r  z setup_log_file.<locals>.<lambda>û  s   ø€  v×';Ò';Ð<LÑ'MÔ'M€ rl   )rW  rX  rI   Úlog_file_namerÇ  rÈ  r  Ú_loggingÚ	_internalÚget_loggersrË  rÌ  )rÎ  rÂ  rÃ  s    @@rm   Úsetup_log_filerÕ  õ  s–   øø€ ÝÔ$Ñ&Ô&€IÝÔÐ'Ý"Ô.­vÔ/CÑDÔDÐÝ”nÔ.×:Ò:Ñ<Ô<ð 	Oð 	OˆFØ×ÒÐ.Ñ/Ô/Ð/Ø×ÒÐMÐMÐMÐMÐMÑNÔNÐNÐNØÐàÐrl   ÚexcÚ	ExceptionÚcoder
   c                ón   — t          ¦   «         › d|j        › dt          | ¦  «        j        › d|j        › d�S )Nz/error_recordings/Ú_z.rec)rÅ  Úco_nameÚtyperf   Úco_firstlineno)rÖ  rØ  s     rm   Úgen_record_file_namerÞ    sR   € Ý‰oŒoð ?ð ?Ø„ð?ð ?Ý�S‘	”	Ô"ð?ð ?Ø%)Ô%8ð?ð ?ð ?ð ?rl   ÚfilenameÚexec_recordr?   c                óº  — 	 t           j                             | ¦  «        rt                               d| ¦  «         d S t          j        t           j                             | ¦  «        d¬¦  «         t          | d¦  «        5 }|                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r t           
                    d| ¦  «         Y d S 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Údumpr×  Ú	exception)rß  rà  Úfs      rm   Úwrite_record_to_filerê    s*  € ð
GÝŒ7�>Š>˜(Ñ#Ô#ð 	$Ý�KŠKØKÈXñô ð ð ð õ ŒK�œŸš¨Ñ1Ô1¸DÐAÑAÔAÐAÝ�h Ñ%Ô%ð $¨Ø× Ò  Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $øåð Gð Gð GÝ�ŠÐ;¸XÑFÔFÐFÐFÐFÐFðGøøøs;   ‚:B1 ¾AB1 ÂB$ÂB1 Â$B(Â(B1 Â+B(Â,B1 Â1%CÃCÚgúfx.Graphc                ó:   — d}| j         D ]}d|j        v r|dz  }Œ|S )Nr   Úcallr2   )ÚnodesÚop)rë  ÚcÚns      rm   Úcount_callsró    s2   € Ø	€AØŒWð ð ˆØ�Q”Tˆ>ˆ>Ø�‰FˆAøØ€Hrl   r~  c                ó   — | S rƒ   rK   r}  s    rm   Úidentityrõ    s   € Ø€Hrl   r   c                ó`   — 	 t          | ¦  «         dS # t          $ r Y dS t          $ r Y dS w xY w©NTF)ÚhashÚ	TypeErrorÚ
ValueErrorr}  s    rm   Úhashablerû     sR   € ðÝˆQ‰ŒˆØˆtøÝð ð ð Øˆuˆuåð ð ð Øˆuˆuðøøøs   ‚ “
- 	-¬-r-  r/  c                 ó   — d S rƒ   rK   ©r-  r/  s     rm   Únothingrþ  +  s   € Ø€Drl   c                  óL   — 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
dS )ÚExactWeakKeyDictionaryz\Similar to weakref.WeakKeyDictionary, but use `is`/`id` rather than `==` to compare equalityrt   ru   c                ó"   — i | _         i | _        d S rƒ   ©ru  Úrefsr•  s    rm   r’  zExactWeakKeyDictionary.__init__2  s   € Ø&(ˆŒØ;=ˆŒ	ˆ	ˆ	rl   rÓ   r   c                ó6   — | j         t          |¦  «                 S rƒ   )ru  Úidr�  s     rm   Ú__getitem__z"ExactWeakKeyDictionary.__getitem__6  s   € ØŒ{�2˜c™7œ7Ô#Ð#rl   NÚdefaultc                óR   — | j                              t          |¦  «        |¦  «        S rƒ   )ru  rˆ   r  )r‘  rÓ   r  s      rm   rˆ   zExactWeakKeyDictionary.get9  s   € ØŒ{�Š�r #™wœw¨Ñ0Ô0Ð0rl   rö   c                ó.   — t          |¦  «        | j        v S rƒ   )r  ru  r�  s     rm   Ú__contains__z#ExactWeakKeyDictionary.__contains__<  s   € Ý�#‰wŒw˜$œ+Ð%Ð%rl   rÔ   c                ó�   ‡ ‡— t          |¦  «        Š‰‰ j        vr!t          j        |ˆˆ fd„¦  «        ‰ j        ‰<   |‰ j        ‰<   d S )Nc                ó.   •— ‰                      ‰¦  «        S rƒ   )Ú
_remove_id)ÚrefÚidxr‘  s    €€rm   r  z4ExactWeakKeyDictionary.__setitem__.<locals>.<lambda>B  s   ø€ ¸$¿/º/È#Ñ:NÔ:N€ rl   )r  r  Úweakrefr  ru  )r‘  rÓ   rÔ   r  s   `  @rm   Ú__setitem__z"ExactWeakKeyDictionary.__setitem__?  sR   øø€ Ý�‰gŒgˆØ�d”iÐÐÝ$œ[¨Ð.NÐ.NÐ.NÐ.NÐ.NÑOÔOˆDŒI�c‰NØ ˆŒ�CÑÐÐrl   r  rs   c                óN   — || j         v r| j         |= || j        v r
| j        |= d S d S rƒ   r  )r‘  r  s     rm   r  z!ExactWeakKeyDictionary._remove_idE  s;   € Ø�$”+ÐÐØ”˜CÐ Ø�$”)ÐÐØ”	˜#���ð Ðrl   c                ój   — | j                              ¦   «          | j                             ¦   «          d S rƒ   )r  r„   ru  r•  s    rm   r„   zExactWeakKeyDictionary.clearK  s.   € ØŒ	�ŠÑÔÐØŒ×ÒÑÔÐÐÐrl   r’   )rÓ   r   rt   r   rƒ   )rÓ   r   r  r   rt   r   )rÓ   r   rt   rö   )rÓ   r   rÔ   r   rt   ru   ©r  rs   rt   ru   )rf   rg   rh   rã   r’  r  rˆ   r
  r  r  r„   rK   rl   rm   r   r   /  s«   € € € € € ØfÐfð>ð >ð >ð >ð$ð $ð $ð $ð1ð 1ð 1ð 1ð 1ð&ð &ð &ð &ð!ð !ð !ð !ðð ð ð ðð ð ð ð ð rl   r   Úobjr÷   Úallowed_typesútype[T]ú	TypeIs[T]c                ó   — d S rƒ   rK   ©r  r  s     rm   Úistyper  P  s   € Ø>A¸crl   ú)tuple[type[list[T]], type[tuple[T, ...]]]c                ó   — d S rƒ   rK   r  s     rm   r  r  T  s	   € ð �rl   útuple[type[T1], type[T2]]úTypeIs[T1 | T2]c                ó   — d S rƒ   rK   r  s     rm   r  r  [  s	   € ð �crl   ú#tuple[type[T1], type[T2], type[T3]]úTypeIs[T1 | T2 | T3]c                ó   — d S rƒ   rK   r  s     rm   r  r  a  s	   € ð ˜3rl   ú-tuple[type[T1], type[T2], type[T3], type[T4]]úTypeIs[T1 | T2 | T3 | T4]c                ó   — d S rƒ   rK   r  s     rm   r  r  g  s	   € ð !$ rl   ú7tuple[type[T1], type[T2], type[T3], type[T4], type[T5]]úTypeIs[T1 | T2 | T3 | T4 | T5]c                ó   — d S rƒ   rK   r  s     rm   r  r  m  s	   € ð &) Srl   úAtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6]]ú#TypeIs[T1 | T2 | T3 | T4 | T5 | T6]c                ó   — d S rƒ   rK   r  s     rm   r  r  s  s	   € ð +.¨#rl   úKtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7]]ú(TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7]c                ó   — d S rƒ   rK   r  s     rm   r  r  z  s	   € ð 03¨srl   úUtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7], type[T8]]ú-TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8]c                ó   — d S rƒ   rK   r  s     rm   r  r  ƒ  s	   € ð 58°Crl   ú_tuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7], type[T8], type[T9]]ú2TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9]c                ó   — d S rƒ   rK   r  s     rm   r  r  Œ  s	   € ð :=¸rl   újtuple[type[T1], type[T2], type[T3], type[T4], type[T5], type[T6], type[T7], type[T8], type[T9], type[T10]]ú8TypeIs[T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10]c                ó   — d S rƒ   rK   r  s     rm   r  r  �  s   € ð @C¸srl   ú)tuple[type, ...] | list[type] | set[type]c                ó   — d S rƒ   rK   r  s     rm   r  r  ¯  s	   € ð ˆ3rl   c                óŠ   — t          |t          t          t          f¦  «        rt	          | ¦  «        |v S t	          | ¦  «        |u S )zisinstance() without subclasses)Ú
isinstanceÚtupler†  r”  rÜ  r  s     rm   r  r  µ  s=   € å�-¥%­­sÐ!3Ñ4Ô4ð *Ý�C‰yŒy˜MÐ)Ð)Ý�‰9Œ9˜Ð%Ð%rl   ztuple[Any, ...]Ú_builtin_final_typing_classes©re   é   Úinputsú collections.abc.Sequence[object]Úmodelútorch.fx.GraphModuleúlist[torch.device | None]c                óê   — t          j        | ¦  «        d         d„ t          |j        j        ¦  «        D ¦   «         z   }t          t          d„ |D ¦   «         ¦  «        ¦  «        }d„ |D ¦   «         d gz   S )Nr   c                ó:   — g | ]}d |j         v ¯|j         d          ‘ŒS )Úval©Úmeta)r¤   Únodes     rm   r�  z&get_inputs_devices.<locals>.<listcomp>Ð  s2   € ð 3ð 3ð 3Ø!ÀÈÌÐ@RÐ@RˆŒ	�%ÔÐ@RÐ@RÐ@Rrl   c                ó<   — g | ]}t          |d ¦  «        ¯|j        ‘ŒS ©Údevice)rÚ   rN  ©r¤   Úis     rm   r�  z&get_inputs_devices.<locals>.<listcomp>Ô  s)   € ÐIÐIÐI µG¸A¸xÑ4HÔ4HÐI�A”HÐIÐIÐIrl   c                ó\   — g | ])}t          |t          j        ¦  «        r|j        d k    ¯'|‘Œ*S rI  )r<  r  rN  rÜ  rO  s     rm   r�  z&get_inputs_devices.<locals>.<listcomp>Ö  s?   € ð ð ð Ø�z¨!­U¬\Ñ:Ô:ðØ?@¼vÈÒ?OÐ?OˆÐ?OÐ?OÐ?Orl   )ÚpytreeÚtree_flattenr†  Úgraphrï  r-   )rA  rC  Ú
all_inputsÚdevicess       rm   Úget_inputs_devicesrW  Ì  s�   € õ Ô$ VÑ,Ô,¨QÔ/ð 3ð 3Ý%)¨%¬+Ô*;Ñ%<Ô%<ð3ñ 3ô 3ñ €Jõ *.ÝÐIÐI jÐIÑIÔIÑJÔJñ*ô *€Gðð Øðñ ô à	ˆñð rl   )re   é   rÔ   c                óÔ   — t           j        dk    rt          | t          ¦  «        rdS t          | t          j        t          j        f¦  «        p| t          j        u p| t          j	        u S )Nr?  T)
ÚsysÚversion_infor<  r>  ÚtypesÚ	UnionTypeÚtypingÚ_Finalr   ÚUnion©rÔ   s    rm   Ú	is_typingrb  ß  s`   € õ Ô˜7Ò"Ð"¥z°%Õ9VÑ'WÔ'WÐ"Øˆtå�5�5œ?­F¬MÐ:Ñ;Ô;ð 	!Ø•F”NÐ"ð	!à•F”LÐ ðrl   c                óä   — t           sdS 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Úuint64ra  s    rm   Úis_numpy_int_typern  ñ  sQ   € Ýð ØˆuåØåŒGÝŒHÝŒHÝŒHÝŒHÝŒIÝŒIÝŒIð		
ñô ð rl   c                óv   — t           sdS t          | t           j        t           j        t           j        f¦  «        S rd  )re  r  Úfloat16Úfloat32Úfloat64ra  s    rm   Úis_numpy_float_typers    s8   € Ýð ØˆuåØåŒJÝŒJÝŒJð	
ñô ð rl   Útxr@   ÚiterablerB   úlist[VariableTracker]c                ó6   — g }t          | ||j        ¦  «         |S rƒ   )Úunpack_and_apply_fnr·   )rt  ru  rÇ   s      rm   Úunpack_iterablery    s"   € ð $&€EÝ˜˜H e¤lÑ3Ô3Ð3Ø€Lrl   c                ó~  ‡— ddl m} ddlm}m} ddlm}m} t          ||j	        |j
        |j        |j        |j        |j        |j        |j        |j        f	¦  «        r#ˆfd„|                     | ¦  «        D ¦   «          d S  || |¦  «        }	 	  || |¦  «        }	 ‰|	¦  «         n# |$ r  || ¦  «         Y d S w xY wŒ1)Nr2   )Ú	variables)Úhandle_observed_exceptionÚObservedUserStopIteration)Úgeneric_getiterÚgeneric_iternextc                ó&   •— g | ]} ‰|¦  «        ‘ŒS rK   rK   )r¤   ÚitemÚapply_fns     €rm   r�  z'unpack_and_apply_fn.<locals>.<listcomp>4  s!   ø€ ÐEÐEÐE˜Dˆˆ�$‰ŒÐEÐEÐErl   )r±  r{  rÖ  r|  r}  Úvariables.object_protocolr~  r  r<  ÚConstDictVariableÚDictViewVariableÚDequeVariableÚListVariableÚListIteratorVariableÚRangeVariableÚSetVariableÚTensorVariableÚTupleVariableÚunpack_var_sequence)
rt  ru  r‚  r{  r|  r}  r~  r  Úiteratorr�  s
     `       rm   rx  rx    s;  ø€ ð
 ÐÐÐÐÐØIÐIÐIÐIÐIÐIÐIÐIØLÐLÐLÐLÐLÐLÐLÐLåØàÔ'ØÔ&ØÔ#ØÔ"ØÔ*ØÔ#ØÔ!ØÔ$ØÔ#ð
	
ñô ð ð" 	FÐEÐEÐE H×$@Ò$@ÀÑ$DÔ$DÐEÑEÔEÐEØˆàˆ˜r 8Ñ,Ô,€Hðð	Ø#Ð# B¨Ñ1Ô1ˆDØˆH�T‰NŒNˆNˆNøØ(ð 	ð 	ð 	Ø%Ð% bÑ)Ô)Ð)ØˆEˆEð	øøøð	s   ÂB' Â'B;Â:B;úCallable[..., T]ú*TypeGuard[functools._lru_cache_wrapper[T]]c                ó   — d S rƒ   rK   ra  s    rm   Úis_lru_cache_wrapped_functionr’  A  s	   € ð 25°rl   ú,TypeGuard[functools._lru_cache_wrapper[Any]]c                ó   — d S rƒ   rK   ra  s    rm   r’  r’  G  s	   € ð 47°3rl   c                óz   — t          | t          j        ¦  «        o!t          t	          j        | d¦  «        ¦  «        S )NÚ__wrapped__)r<  Ú	functoolsÚ_lru_cache_wrapperÚis_functionÚinspectÚgetattr_staticra  s    rm   r’  r’  M  s<   € õ �e�YÔ9Ñ:Ô:ð ½{ÝÔ˜u mÑ4Ô4ñ@ô @ð rl   z2weakref.WeakSet[functools._lru_cache_wrapper[Any]]Ú4_lru_cache_wrappers_allowed_to_trace_without_warningú!functools._lru_cache_wrapper[Any]c                ó:   — t                                | ¦  «         d S rƒ   )rœ  rž  ra  s    rm   Ú-allow_lru_cache_wrapper_trace_without_warningrŸ  Z  s   € õ 9×<Ò<¸UÑCÔCÐCÐCÐCrl   c                ó   — | t           v S rƒ   )rœ  ra  s    rm   Ú2is_lru_cache_wrapper_trace_without_warning_allowedr¡  `  s   € ØÕHÐHÐHrl   r   Ú
_FuncTypesúHTypeIs[_FuncTypes | torch._ops.OpOverloadPacket | torch._ops.OpOverload]c                ó€   — t          | ¦  «        p/t          | t          j        j        t          j        j        f¦  «        S rƒ   )r™  r<  r  Ú_opsÚOpOverloadPacketÚ
OpOverloadra  s    rm   Úis_function_or_wrapperr¨  l  s9   € õ �uÑÔð ¥Ø•”
Ô+­U¬ZÔ-BÐCñ"ô "ð rl   úTypeIs[_FuncTypes]c                óz   — t          | t          j        t          j        t          j        t          j        f¦  «        S rƒ   )r<  r\  ÚFunctionTypeÚBuiltinFunctionTypeÚMethodDescriptorTypeÚWrapperDescriptorTypera  s    rm   r™  r™  t  s6   € õ ØåÔÝÔ%ÝÔ&ÝÔ'ð		
ñô ð rl   )Ú__eq__Ú__ne__Ú__lt__Ú__le__Ú__gt__Ú__ge__z==z!=ú<z<=ú>z>=ú”TypeIs[types.GetSetDescriptorType | types.MethodDescriptorType | types.WrapperDescriptorType | types.MemberDescriptorType | types.MethodWrapperType]c                ó�   — t          | t          j        t          j        t          j        t          j        t          j        f¦  «        S rƒ   )r<  r\  ÚGetSetDescriptorTyper­  r®  ÚMemberDescriptorTyper   ra  s    rm   Úis_wrapper_or_member_descriptorr»  –  s>   € õ Øõ Ô&åÔ&åÔ'åÔ&åÔ#ð	
ñô ð rl   Úvtc                óJ   — ddl m}  || |¦  «                             ¦   «         S )Nr2   )Úgeneric_repr)rƒ  r¾  Úas_python_constant)rt  r¼  r¾  s      rm   Útracked_reprrÀ  °  s2   € Ø7Ð7Ð7Ð7Ð7Ð7àˆ<˜˜BÑÔ×2Ò2Ñ4Ô4Ð4rl   c                ó”   — |                       ¦   «         r!t          |                      ¦   «         ¦  «        S |                      ¦   «         S rƒ   )Úis_python_constantrj  r¿  Ú
debug_repr)r¼  s    rm   Ú_item_debug_reprrÄ  ¶  s>   € Ø	×ÒÑÔð -Ý�B×)Ò)Ñ+Ô+Ñ,Ô,Ð,Ø�=Š=‰?Œ?Ðrl   Úfnc                ó,   — t          | ¦  «        d         S r°   )Ú unwrap_with_attr_name_if_wrapper)rÅ  s    rm   Úunwrap_if_wrapperrÈ  ¼  s   € Ý+¨BÑ/Ô/°Ô2Ð2rl   útuple[Any, str | None]c                óŠ   — t          | ¦  «        r/t          j        | dd¦  «        rt          j        | d| ¦  «        } d}nd }| |fS )NÚ_torchdynamo_inlineF)r™  rš  r›  )rÅ  Ú	attr_names     rm   rÇ  rÇ  À  sT   € õ �2�„ð �7Ô1°"Ð6KÈUÑSÔSð ÝÔ# BÐ(=¸rÑBÔBˆØ)ˆ	ˆ	àˆ	Øˆyˆ=Ðrl   úTypeGuard[np.ndarray]c                óH   — t           sdS t          | t           j        ¦  «        S rd  )re  r  Úndarrayra  s    rm   Úis_numpy_ndarrayrÐ  Ë  s!   € Ýð Øˆuå�%�œÑ$Ô$Ð$rl   c                ó    — t           j        t           j        j        gt          j        ¢R }|t           j        j        fz   }t          | |¦  «        S )zCheck of obj is a tensor)	r  ÚTensorÚnnÚ	ParameterrI   Útraceable_tensor_subclassesÚ_subclassesrL   r  )r  Útensor_lists     rm   ÚistensorrØ  Ò  sO   € õ 	ŒÝŒÔð%õ 
Ô	+ð%ð %€Kð
 ¥Ô!2Ô!=Ð ?Ñ?€KÝ�#�{Ñ#Ô#Ð#rl   Úmodc                ó,   — t          | t          ¦  «        S rƒ   )r<  r,   )rÙ  s    rm   Úis_lazy_modulerÛ  Ý  s   € Ý�c�?Ñ+Ô+Ð+rl   r�  c                 ó   — t          | Ž  d S rƒ   )rÑ   ©r-  s    rm   Ú
print_oncerÞ  á  s   € å	ˆ4€L€L€L€Lrl   rH  útypes.CellTypec                óÒ   ‡— | Šd	ˆfd„}|j         €t          d¦  «        ‚t          |j         ¦  «        dk    r$t          dt          |j         ¦  «        › �¦  «        ‚|j         d         S )
zNSome black magic to create a cell object that usually only exists in a closurert   r   c                 ó   •— ‰ S rƒ   rK   r}  s   €rm   ré  zmake_cell.<locals>.fê  s   ø€ Øˆrl   Nz7Expected f to have a closure, but f.__closure__ is Noner2   z6Expected f.__closure__ to have exactly 1 element, got r   )rt   r   )Ú__closure__rü   r›  )rH  ré  r~  s     @rm   Ú	make_cellrã  æ  sŠ   ø€ à€Aðð ð ð ð ð ð 	„}ÐÝÐVÑWÔWÐWÝ
ˆ1Œ=ÑÔ˜QÒÐÝØYÅSÈÌÑEWÔEWÐYÐYñ
ô 
ð 	
ð Œ=˜ÔÐrl   ú&tuple[tuple[Any, ...], dict[str, Any]]c                ó8  — 	 t          d„ | D ¦   «         ¦  «        }d„ |                     ¦   «         D ¦   «         }||fS # t          $ rR}ddlm} ddlm}  |dd || Ž › d |t          |                     ¦   «         ¦  «        Ž › �d	g |¬
¦  «         Y d }~d S d }~ww xY w)Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rƒ   ©Úas_proxy©r¤   Úargs     rm   r¦   z$proxy_args_kwargs.<locals>.<genexpr>ø  s*   è è € Ð:Ð:¨c˜3Ÿ<š<™>œ>Ð:Ð:Ð:Ð:Ð:Ð:rl   c                ó>   — i | ]\  }}||                      ¦   «         “ŒS rK   rç  )r¤   rÓ   rê  s      rm   ú
<dictcomp>z%proxy_args_kwargs.<locals>.<dictcomp>ù  s&   € ÐKÐKÐK±°°S˜˜SŸ\š\™^œ^ÐKÐKÐKrl   r2   ©Úunimplemented)Útypestrz&Failed to convert args/kwargs to proxyzcall_function args: rÍ   z7Missing `as_proxy()` implementation for some arg/kwarg.©Úgb_typeÚcontextÚexplanationÚhintsÚfrom_exc)	r=  rÇ   ÚNotImplementedErrorrÖ  rî  Úvariables.baserï  r†  ru  )r-  r/  Ú
proxy_argsÚproxy_kwargsÚerî  rï  s          rm   Úproxy_args_kwargsrû  ö  sÿ   € ð
ÝÐ:Ð:°TÐ:Ñ:Ô:Ñ:Ô:ˆ
ØKÐK¸F¿LºL¹N¼NÐKÑKÔKˆØ˜<Ð'Ð'øÝð 

ð 

ð 

Ø&Ð&Ð&Ð&Ð&Ð&Ø+Ð+Ð+Ð+Ð+Ð+àˆØ<Ø]¨7¨7°D¨>Ð]Ð]¸G¸GÅTÈ&Ï-Ê-É/Ì/ÑEZÔEZÐ<[Ð]Ð]ØQØØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð	

øøøs   ‚:= ½
BÁABÂBr  úfloat | Nonerì   c                ó.   — | €d nt          | dz  ¦  «        S ©NrL  ©rs   ©r  s    rm   Ú	to_int_msr    s   € Ø�9ˆ4ˆ4¥# a¨$¡h¡-¤-Ð/rl   c                ó.   — | €d nt          | dz  ¦  «        S )Ni@B rÿ  r   s    rm   Ú	to_int_usr    s   € Ø�9ˆ4ˆ4¥# a¨)¡mÑ"4Ô"4Ð4rl   re   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<   dZgdedn<   ehdsdr„¦   «         ZidS )tÚCompilationMetricsNr?  rB  Ú	frame_keyrÛ  Úco_filenamerì   rÝ  Ú
cache_sizeÚaccumulated_cache_sizeÚguard_countÚshape_env_guard_countÚgraph_op_countÚgraph_node_countÚgraph_input_countrü  Ú
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set[str] | NoneÚnon_compliant_opsÚcompliant_custom_opsÚrestart_reasonsÚdynamo_time_before_restart_szlist[str] | NoneÚstack_traceÚexception_stack_traceÚgraph_node_shapesrE  Ú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_configrO  Únum_triton_bundlesÚ!remote_fx_graph_cache_get_time_msÚ!remote_fx_graph_cache_put_time_msÚstart_time_usrM  Ú!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_usrs   Ú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dict[str, bool] | NoneÚfeature_usageÚcompile_time_autotune_time_usFrN  Ú
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_provenanceÚfunctorch_configr[  r]   rt   c                ój  — dd„}dd„}dd	„}dd
„} ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «         ||                      d¦  «        ¦  «        dœ	}i |¥|¥} ||                      d¦  «        ¦  «        |d<    ||                      d¦  «        ¦  «        |d<    ||                      d¦  «        ¦  «        |d<   |                      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.
        Úmetricrì   rt   rü  c                ó   — | �| dz  nd S )Ng    €„.ArK   ©rd  s    rm   Úus_to_sz*CompilationMetrics.create.<locals>.us_to_sŽ  s   € Ø#)Ð#5�6˜C‘<�<¸4Ð?rl   c                ó   — | �| dz  nd S rþ  rK   rf  s    rm   Úus_to_msz+CompilationMetrics.create.<locals>.us_to_ms‘  s   € Ø%+Ð%7�6˜T‘>�>¸TÐArl   ú
Any | Noner?  c                ó¬   ‡— d	d„Š| €d S t          | t          t          f¦  «        sdS d                     ˆfd„t	          | ¦  «        D ¦   «         ¦  «        S )
Nr�  r   rt   rœ   c                óD   — 	 t          | ¦  «        S # t          $ r Y dS w xY w©Nú	<unknown>)rœ   r×  )r�  s    rm   Úsafe_strzFCompilationMetrics.create.<locals>.collection_to_str.<locals>.safe_str•  s5   € ð'Ý˜t™9œ9Ð$øÝ ð 'ð 'ð 'Ø&˜;˜;ð'øøøs   ‚ ‘
žrn  ú,c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S rƒ   rK   )r¤   r�  ro  s     €rm   r¦   zGCompilationMetrics.create.<locals>.collection_to_str.<locals>.<genexpr>¡  s+   øè è € ÐFÐF¨t˜H˜H T™NœNÐFÐFÐFÐFÐFÐFrl   )r�  r   rt   rœ   )r<  r”  r†  r¢   Úsorted)rd  ro  s    @rm   Úcollection_to_strz4CompilationMetrics.create.<locals>.collection_to_str”  sk   ø€ ð'ð 'ð 'ð 'ð ˆ~Ø�tå˜f¥s­D kÑ2Ô2ð #Ø"�{à—8’8ÐFÐFÐFÐFµv¸f±~´~ÐFÑFÔFÑFÔFÐFrl   c                óp   — | €d S 	 t          j        t          | ¦  «        ¦  «        S # t          $ r Y dS w xY wrm  )ÚjsonÚdumpsr†  r×  rf  s    rm   Úcollection_to_json_strz9CompilationMetrics.create.<locals>.collection_to_json_str£  sI   € Øˆ~Ø�tð#Ý”z¥$ v¡,¤,Ñ/Ô/Ð/øÝð #ð #ð #Ø"�{�{ð#øøøs   † ' §
5´5r*  r+  r,  r-  r.  r3  r5  r6  r4  )	r  r  r  r  r  r   r(  r)  r!  rB  rC  rU  rB  N)rd  rì   rt   rü  )rd  rì   rt   rì   )rd  rj  rt   r?  rK   )rˆ   rœ   )	r{   r[  rg  ri  rs  rw  Úlegacy_metricsÚall_metricsrB  s	            rm   ÚcreatezCompilationMetrics.create†  sa  € ð	@ð 	@ð 	@ð 	@ð	Bð 	Bð 	Bð 	Bð	Gð 	Gð 	Gð 	Gð	#ð 	#ð 	#ð 	#ð "˜' '§+¢+¨oÑ">Ô">Ñ?Ô?Ø+2¨7Ø—’Ð?Ñ@Ô@ñ,ô ,ð '. gØ—’ÐEÑFÔFñ'ô 'ð (/ wØ—’ÐAÑBÔBñ(ô (ð  '˜wØ—’ÐJÑKÔKñ ô  ð *1¨Ø—’Ð>Ñ?Ô?ñ*ô *ð 2:°Ø—’Ð?Ñ@Ô@ñ2ô 2ð 2:°Ø—’Ð?Ñ@Ô@ñ2ô 2ð .5¨WØ—’Ð<Ñ=Ô=ñ.ô .ð/
ð 
ˆð8 4˜Ð3¨7Ð3ˆð <MÐ;LØ�OŠOÐ?Ñ@Ô@ñ<
ô <
ˆÐ7Ñ8ð =NÐ<MØ�OŠOÐ@ÑAÔAñ=
ô =
ˆÐ8Ñ9ð 9OÐ8NØ�OŠOÐ<Ñ=Ô=ñ9
ô 9
ˆÐ4Ñ5ð !—_’_ \Ñ2Ô2ˆ
Ø7AÐ$K¥C¨
¡O¤O OÀtˆ�LÑ!ð ˆsÐ!Ð!�[Ð!Ð!Ð!rl   )r[  r]   rt   r  )jrf   rg   rh   rB  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&  rO  r'  r(  r)  r*  rM  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  ÚLOG_FORMAT_VERSIONr<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  r—   rz  rK   rl   rm   r  r    s  € € € € € € à!€JÐ!Ð!Ð!Ñ!Ø €IÐ Ð Ð Ñ Ø€GÐÐÐÑØ"€KÐ"Ð"Ð"Ñ"Ø!%€NÐ%Ð%Ð%Ñ%Ø!€JÐ!Ð!Ð!Ñ!Ø)-ÐÐ-Ð-Ð-Ñ-Ø"€KÐ"Ð"Ð"Ñ"Ø(,ÐÐ,Ð,Ð,Ñ,Ø!%€NÐ%Ð%Ð%Ñ%Ø#'ÐÐ'Ð'Ð'Ñ'Ø$(ÐÐ(Ð(Ð(Ñ(Ø#€JÐ#Ð#Ð#Ñ#Ø04ÐÐ4Ð4Ð4Ñ4Ø+/ÐÐ/Ð/Ð/Ñ/Ø,0ÐÐ0Ð0Ð0Ñ0Ø$(€OÐ(Ð(Ð(Ñ(Ø €IÐ Ð Ð Ñ Ø"€KÐ"Ð"Ð"Ñ"Ø+/ÐÐ/Ð/Ð/Ñ/Ø)-ÐÐ-Ð-Ð-Ñ-Ø)-ÐÐ-Ð-Ð-Ñ-Ø,0ÐÐ0Ð0Ð0Ñ0Ø'+€OÐ+Ð+Ð+Ñ+Ø15Ð Ð5Ð5Ð5Ñ5Ø$(€KÐ(Ð(Ð(Ñ(Ø.2ÐÐ2Ð2Ð2Ñ2Ø$(ÐÐ(Ð(Ð(Ñ(ð %)ÐÐ(Ð(Ð(Ñ(Ø.2ÐÐ2Ð2Ð2Ñ2Ø26Ð!Ð6Ð6Ð6Ñ6Ø*.ÐÐ.Ð.Ð.Ñ.Ø48Ð$Ð8Ð8Ð8Ñ8Ø$(ÐÐ(Ð(Ð(Ñ(Ø $€MÐ$Ð$Ð$Ñ$Ø"&€OÐ&Ð&Ð&Ñ&Ø"€JÐ"Ð"Ð"Ñ"Ø%)ÐÐ)Ð)Ð)Ñ)Ø48Ð%Ð8Ð8Ð8Ñ8Ø48Ð%Ð8Ð8Ð8Ñ8Ø $€MÐ$Ð$Ð$Ñ$Ø"€KÐ"Ð"Ð"Ñ"Ø48Ð%Ð8Ð8Ð8Ñ8Ø:>Ð+Ð>Ð>Ð>Ñ>Ø6:Ð'Ð:Ð:Ð:Ñ:Ø?CÐ0ÐCÐCÐCÑCØ)-ÐÐ-Ð-Ð-Ñ-Ø/3Ð Ð3Ð3Ð3Ñ3Ø26Ð#Ð6Ð6Ð6Ñ6Ø8<Ð)Ð<Ð<Ð<Ñ<Ø37Ð$Ð7Ð7Ð7Ñ7Ø15Ð"Ð5Ð5Ð5Ñ5Ø48Ð%Ð8Ð8Ð8Ñ8Ø48Ð%Ð8Ð8Ð8Ñ8Ø6:Ð'Ð:Ð:Ð:Ñ:Ø"€KÐ"Ð"Ð"Ñ"Ø(,ÐÐ,Ð,Ð,Ñ,Ø)-ÐÐ-Ð-Ð-Ñ-Ø+/ÐÐ/Ð/Ð/Ñ/Ø0ÐÐ0Ð0Ð0Ñ0Ø"&€OÐ&Ð&Ð&Ñ&Ø'+ÐÐ+Ð+Ð+Ñ+Ø56Ð&Ð6Ð6Ð6Ñ6Ø67Ð'Ð7Ð7Ð7Ñ7Ø8<Ð)Ð<Ð<Ð<Ñ<Ø48Ð%Ð8Ð8Ð8Ñ8Ø59Ð&Ð9Ð9Ð9Ñ9Ø45Ð%Ð5Ð5Ð5Ñ5Ø56Ð&Ð6Ð6Ð6Ñ6Ø56Ð&Ð6Ð6Ð6Ñ6Ø67Ð'Ð7Ð7Ð7Ñ7Ø45Ð%Ð5Ð5Ð5Ñ5Ø56Ð&Ð6Ð6Ð6Ñ6Ø#€LÐ#Ð#Ð#Ñ#Ø!%€NÐ%Ð%Ð%Ñ%Ø,0€MÐ0Ð0Ð0Ñ0Ø04Ð!Ð4Ð4Ð4Ñ4Ø#€JÐ#Ð#Ð#Ñ#Ø!€JÐ!Ð!Ð!Ñ!Ø+/ÐÐ/Ð/Ð/Ñ/Ø+/ÐÐ/Ð/Ð/Ñ/Ø/3ÐÐ3Ð3Ð3Ñ3Ø%)ÐÐ)Ð)Ð)Ñ)Ø#'ÐÐ'Ð'Ð'Ñ'Ø#'ÐÐ'Ð'Ð'Ñ'Ø15Ð"Ð5Ð5Ð5Ñ5Ø€HÐÐÐÑØ(,ÐÐ,Ð,Ð,Ñ,Ø!%€NÐ%Ð%Ð%Ñ%Ø48Ð%Ð8Ð8Ð8Ñ8Ø48Ð%Ð8Ð8Ð8Ñ8ð #€KÐ"Ð"Ð"Ñ"ð #€KÐ"Ð"Ð"Ñ"ð #€KÐ"Ð"Ð"Ñ"Ø/3ÐÐ3Ð3Ð3Ñ3Ø7<Ð'Ð<Ð<Ð<Ñ<Ø"&€OÐ&Ð&Ð&Ñ&Ø+/ÐÐ/Ð/Ð/Ñ/Ø#'ÐÐ'Ð'Ð'Ñ'àðR"ð R"ð R"ñ „[ðR"ð R"ð R"rl   r  é@   ©Úmaxlenz%collections.deque[CompilationMetrics]Ú_compilation_metricsrñ  c                óþ  — t          ¦   «         }|                     ¦   «         }|sdS |                     || 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        | j        ¬¦  «         dS )a  
    These are the common fields in CompilationMetrics that existed before
    metrics_context, and aren't set by MetricsContext.set(). We add the subset
    of them that make sense in `dynamo`/toplevel events in PT2 Compile Events
    directly.

    If you're tempted to add to this list, consider using CompileEventLogger.compilation_metric()
    instead, which will automatically also add it to tlparse and PT2 Compile Events.
    TODO: Get rid of this function and replace it with CompileEventLogger directly instead.
    N)ré   r  rÛ  r  rÝ  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  )rð   rý   rû   r  rÛ  r  rÝ  r  r	  r
  r  r  r  r  r  r  r  r  r  r†  r  r  r  r  r%  )rñ  Úevent_loggerré   s      rm   Ú#add_compilation_metrics_to_chromiumr‚  ä  s  € õ -Ñ.Ô.€LØ×1Ò1Ñ3Ô3€JØð ØˆØ×ÒØØ”+Ø”	Ø”MØÔ'Ø”<Ø Ô7Ø”MØÔ5ØÔ'ØÔ+ØÔ-Ø”+Ø”MØ!"Ô!;Ø Ô7ð *+Ô)<Ð)H�D�Ô$Ñ%Ô%Ð%Èdð -.Ô,BÐ,N�D�Ô'Ñ(Ô(Ð(ÐTXð ()Ô'8Ð'D�D�Ô"Ñ#Ô#Ð#È$à%&Ô%CØÔ+Ø”oð;  ñ ô ð ð ð rl   c                 ón   — dd„}  | t          j        ¦   «         ¦  «        }t          j        |d¬¦  «        S )NÚdr]   rt   c                óL   ‡— h d£Šˆfd„|                       ¦   «         D ¦   «         S )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Úignore_logging_functionsÚsame_two_models_use_fp64rÕ  Úreorderable_logging_functionsÚnontraceable_tensor_subclassesÚ)_autograd_backward_strict_mode_banned_opsÚ+inject_BUILD_SET_unimplemented_TESTING_ONLYc                ó´   •— i | ]T\  }}|‰v¯	|t          |t          ¦  «        rt          |¦  «        n%t          |d ¦  «        r|                     ¦   «         n|“ŒUS )Úto_jsonable)r<  r”  rr  rÚ   r™  ©r¤   rÓ   rÔ   Ú	blocklists      €rm   rì  zJ_get_dynamo_config_for_logging.<locals>.clean_for_json.<locals>.<dictcomp>.  sz   ø€ ð 

ð 

ð 

ñ ��UØ˜)Ð#Ð#ð å˜e¥SÑ)Ô)ð•�u‘”�õ ˜5 -Ñ0Ô0ð�U×&Ò&Ñ(Ô(Ð(àð $Ð#Ð#rl   ©rÇ   ©r„  r›  s    @rm   Úclean_for_jsonz6_get_dynamo_config_for_logging.<locals>.clean_for_json  sI   ø€ ð
ð 
ð 
ˆ	ð0

ð 

ð 

ð 

ð  Ÿgšg™iœið

ñ 

ô 

ð 
	
rl   T©Ú	sort_keys©r„  r]   rt   r]   )rI   Úget_config_copyru  rv  )rž  Úconfig_dicts     rm   Ú_get_dynamo_config_for_loggingr¤    sF   € ð#
ð #
ð #
ð #
ðJ !�.¥Ô!7Ñ!9Ô!9Ñ:Ô:€KÝŒ:�k¨TÐ2Ñ2Ô2Ð2rl   c                 óì   — dd„} t           j        j        sd S 	 t           j        j                             ¦   «         }n# t          t
          f$ r Y dS w xY w | |¦  «        }t          j        |d¬¦  «        S )	Nr„  r]   rt   c                óJ   ‡— dhŠˆfd„|                       ¦   «         D ¦   «         S )Nr‰  c                ól   •— i | ]0\  }}|‰v¯	|t          |t          ¦  «        rt          |¦  «        n|“Œ1S rK   )r<  r”  rr  rš  s      €rm   rì  zH_compiler_config_for_logging.<locals>.clean_for_json.<locals>.<dictcomp>D  sM   ø€ ð 
ð 
ð 
á��UØ˜)Ð#Ð#ð ¥*¨UµCÑ"8Ô"8ÐC•˜‘”�¸eà#Ð#Ð#rl   rœ  r�  s    @rm   rž  z4_compiler_config_for_logging.<locals>.clean_for_json?  s@   ø€ àð
ˆ	ð
ð 
ð 
ð 
àŸgšg™iœið
ñ 
ô 
ð 	
rl   z!Compiler Config cannot be pickledTrŸ  r¡  )r  ÚcompilerrI   r¢  rù  ÚAttributeErrorru  rv  )rž  Úcompiler_config_copyr£  s      rm   Ú_compiler_config_for_loggingr«  >  s™   € ð	
ð 	
ð 	
ð 	
õ Œ>Ô ð Øˆtð3Ý$œ~Ô4×DÒDÑFÔFÐÐøÝ•~Ð&ð 3ð 3ð 3Ø2Ð2Ð2ð3øøøð !�.Ð!5Ñ6Ô6€KÝŒ:�k¨TÐ2Ñ2Ô2Ð2s   ™#= ½AÁAc                 óR  —  G d„ dt           j        ¦  «        } t          ¦   «         }d}d}t          j        j        rJ	 t          j        j                             ¦   «         }n%# t          t          t          t          f$ r d}Y nw xY w|�Ÿ	 |                     ¦   «         D ]V\  }}t          |t          ¦  «        s|                     |¦  «         t          |t          ¦  «        rt          |¦  «        ||<   ŒW|D ]}||= Œt          j        || dd¬¦  «        }n# t"          $ r d}Y nw xY w|S )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>.TypeSafeSerializerÚor   rt   c                ój   •— 	 t          ¦   «                              |¦  «        S # t          $ r Y dS w xY w)NzValue is not JSON serializable)r²  r  r×  )r‘  r¯  r·  s     €rm   r  zI_scrubbed_inductor_config_for_logging.<locals>.TypeSafeSerializer.default^  sB   ø€ ð8Ý‘w”w—’ qÑ)Ô)Ð)øÝð 8ð 8ð 8Ø7Ð7Ð7ð8øøøs   ƒ $ ¤
2±2)r¯  r   rt   r   )rf   rg   rh   r  r¸  r¹  s   @rm   ÚTypeSafeSerializerr®  ]  s=   ø€ € € € € ð	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8rl   r±  Nz!Inductor Config cannot be pickledT)r{   Úskipkeysr   z(Inductor Config is not JSON serializable)ru  ÚJSONEncoderr”  r  Ú	_inductorrI   r¢  rù  r©  rñ   rü   rÇ   r<  rœ   rž  r†  rv  r×  )r±  Úkeys_to_scrubÚinductor_conf_strÚinductor_config_copyrÓ   rH  s         rm   Ú%_scrubbed_inductor_config_for_loggingr¸  V  s”  € ð8ð 8ð 8ð 8ð 8�TÔ-ñ 8ô 8ð 8õ "™eœe€MØÐØÐå„Ôð Dð	DÝ#(¤?Ô#9×#IÒ#IÑ#KÔ#KÐ Ð øÝ�>­<½ÐHð 	Dð 	Dð 	DØ CÐÐÐð	Døøøð Ð'ð	KØ0×6Ò6Ñ8Ô8ð :ð :‘��SÝ! #¥sÑ+Ô+ð +Ø!×%Ò% cÑ*Ô*Ð*å˜c¥3Ñ'Ô'ð :Ý04°S±	´	Ð(¨Ñ-øà$ð .ð .�Ø(¨Ð-Ð-å $¤
Ø$Ø&ØØð	!ñ !ô !ÐÐøõ ð 	Kð 	Kð 	Kà JÐÐÐð	Køøøð Ðs$   ½#A! Á!BÂBÂ	BD ÄD$Ä#D$c                 ó\  ‡— t          d¦  «        sdS 	 t          j        j                             ¦   «         } n$# t
          t          t          t          f$ r Y dS w xY w	 ddhŠˆfd„|  	                    ¦   «         D ¦   «         }t          j        |dt          ¬¦  «        S # t          $ r Y dS w xY w)	zESerialize functorch config (AOT autograd settings) for Scuba logging.z#pytorch/dynamo:log_functorch_configNr‰  rŽ  c                ó–   •— i | ]E\  }}|‰v¯	t          |t          ¦  «        ¯|t          |t          ¦  «        rt          |¦  «        n|“ŒFS rK   )r<  rœ   r”  r†  )r¤   r  r  r›  s      €rm   rì  z1_functorch_config_for_logging.<locals>.<dictcomp>•  s\   ø€ ð 
ð 
ð 
á��1Ø˜	Ð!Ð!¥j°µCÑ&8Ô&8Ð!ð �: a­Ñ-Ô-Ð4•�Q‘”�°1à!Ð!Ð!rl   T)r   r  z)Functorch Config is not JSON serializable)r$   r  Ú
_functorchrI   r¢  rù  r©  rñ   rü   rÇ   ru  rv  rœ   r×  )Úfunctorch_config_copyÚcleanr›  s     @rm   Ú_functorch_config_for_loggingr¾  †  sç   ø€ åÐ@ÑAÔAð ØˆtðÝ %Ô 0Ô 7× GÒ GÑ IÔ IÐÐøÝ•~¥|µ^ÐDð ð ð Øˆtˆtðøøøð;àØ!ð
ˆ	ð
ð 
ð 
ð 
à-×3Ò3Ñ5Ô5ð
ñ 
ô 
ˆõ
 Œz˜%¨4½Ð=Ñ=Ô=Ð=øÝð ;ð ;ð ;Ø:Ð:Ð:ð;øøøs!   ”#8 ¸AÁAÁ?B Â
B+Â*B+Ústart_time_nsÚend_time_nsr[  Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | Nonec                óL  ‡— t           j        j                             ¦   «         r 	 ddlm} |}d}n# t          $ r d }d }Y nw xY wd }d }|                     d¦  «        }|s#t           j        j	         
                    ¦   «         }i d|“d| dz  “d|dz  “d|r|j        nd “d	|rt          |¦  «        nd “d
t          t           j                             ¦   «         ¦  «        “dt!          ¦   «         “dt"          j        “dd“dt'          ¦   «         “dt)          ¦   «         “dt           j        j        “dt/          ¦   «         rt0          j        nd“d|“d|“dt4          j        “dt           j        “dt7          ¦   «         i¥}	t8                               i |	¥|¥¦  «        Št<                               ‰¦  «         d}
‰j         du rd|
z   }
‰j!        du r|
dz   }
t           j         "                    |
ˆfd„d|¬¦  «         tG          ‰¦  «         t"          j$        rtK          ‰¦  «         d S d S )Nr   )ÚREMOTE_CACHE_VERSIONÚ_ManifoldCacherB  r*  rL  r8  r  r  r4  r%  r"  r#  Tr=  r&  rJ  rK  r±  r>  rA  rX  r`  rb  Úcompilation_metricsFÚbwd_Ú_runtimec                 ód   •— d„ t          j        ‰ ¦  «                             ¦   «         D ¦   «         S )Nc                ób   — i | ],\  }}|t          |t          ¦  «        rt          |¦  «        n|“Œ-S rK   )r<  r”  r†  r  s      rm   rì  z@record_compilation_metrics.<locals>.<lambda>.<locals>.<dictcomp>Û  sG   € ð 
ð 
ð 
á��1ð �* Q­Ñ,Ô,Ð3�t�A‰wŒwˆw°!ð
ð 
ð 
rl   )ÚdataclassesÚasdictrÇ   )rÈ  s   €rm   r  z,record_compilation_metrics.<locals>.<lambda>Û  s9   ø€ ð 
ð 
å#Ô*Ð+>Ñ?Ô?×EÒEÑGÔGð
ñ 
ô 
€ rl   )Úrecord_logging_overheadrB  )&r  r´  ÚutilsÚ should_use_remote_fx_graph_cacheÚtorch._inductor.fb.remote_cacherÆ  ÚModuleNotFoundErrorrˆ   rR  rS  rT  rh   rœ   r  rÒ  Úget_structured_logging_overheadr¤  rI   Úsuppress_errorsr¸  r«  ÚversionÚcudar/   ÚtritonÚ__version__rZ  r¾  r  rz  r  r·   rO  rN  Útrace_structuredr‚  r‘  r&   )r¿  rÀ  r[  rÁ  rÃ  rÆ  r>  rA  rB  Úcommon_metricsrz   rÈ  s              @rm   rÜ   rÜ   Ÿ  sõ  ø€ õ „Ô×=Ò=Ñ?Ô?ð $ð	9ØLÐLÐLÐLÐLÐLà#7Ð Ø4DÐ1Ð1øÝ"ð 	9ð 	9ð 	9Ø#'Ð Ø48Ð1Ð1Ð1ð	9øøøð 15Ð-Ø#Ðð —’˜\Ñ*Ô*€JØð GÝ”]Ô1×DÒDÑFÔFˆ
ðØ�jðà˜¨$Ñ.ðð 	�{ dÑ*ðð 	¨hÐ@�XÔ*Ð*¸Dð	ð
 	¨Ð<•s˜9‘~”~�~¸ðð 	)­)ÝŒN×:Ò:Ñ<Ô<ñ+
ô +
ðð 	Õ7Ñ9Ô9ðð 	!¥&Ô"8ðð 	+¨Dðð 	Õ@ÑBÔBðð 	Õ7Ñ9Ô9ðð 	�œÔ*ðð 	µ
±´ÐD�&Ô,Ð,À"ðð  	Ð 4ð!ð" 	0Ð1Vð#ð$ 	�#œ+ð%ð& 	�5Ô,ð'ð( 	Õ9Ñ;Ô;ð)ð €Nõ. -×3Ò3Ð4Q°~Ð4QÈÐ4QÑRÔRÐÝ×ÒÐ 3Ñ4Ô4Ð4à €DØÔ%¨Ð.Ð.Ø˜‰}ˆØÔ%¨Ð-Ð-Ø�jÑ ˆå	„N×#Ò#Øð	
ð 	
ð 	
ð 	
ð !&ð ð $ñ ô ð õ$ (Ð(;Ñ<Ô<Ð<õ Ô%ð 3ÝÐ1Ñ2Ô2Ð2Ð2Ð2ð3ð 3s   ¦
1 ±AÁAÚnew_sizec                óÒ   — t          t          ¦  «        | k    r1t                               ¦   «          t          t          ¦  «        | k    °1t          j        t          | ¬¦  «        }|ad S )Nr}  )r›  r  Úpopleftr”   Údeque)rÜ  Ú	new_deques     rm   Úset_compilation_metrics_limitrá  ò  s`   € å
Õ"Ñ
#Ô
# hÒ
.Ð
.Ý×$Ò$Ñ&Ô&Ð&õ Õ"Ñ
#Ô
# hÒ
.Ð
.åÔ!Õ"6¸xÐHÑHÔH€IØ$ÐÐÐrl   c                 ó8   — t                                ¦   «          d S rƒ   )r  r„   rK   rl   rm   Úclear_compilation_metricsrã  ú  s   € å×ÒÑ Ô Ð Ð Ð rl   úlist[CompilationMetrics]c                 ó*   — t          t          ¦  «        S rƒ   )r†  r  rK   rl   rm   Úget_compilation_metricsræ  ÿ  s   € ÝÕ$Ñ%Ô%Ð%rl   c                  ó¦   — e Zd ZdZd/d„Zd0d„Zd/d„Zd1d	„Zd2d„Zd3d„Z	d4d„Z
d4d„Zd5d„Zd6d„Z	 	 d7d8d!„Zd9d'„Zd3d(„Z	 d:d;d*„Z	 d:d<d-„Z	 	 d=d>d.„ZdS )?Ú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.
    rt   ú	list[str]c                ót   — t          | j        d¦  «        r| j        j        S g | j        _        | j        j        S )z]
        The main event stack, with every chromium event.
        Logged to tlparse.
        rb  )rÚ   Útlsrb  r•  s    rm   Ú	get_stackzChromiumEventLogger.get_stack  s5   € õ
 �4”8˜WÑ%Ô%ð 	"Ø”8”>Ð!àˆDŒHŒNØ”8”>Ð!rl   r?  c                óB   — |                       ¦   «         }|r|d         ndS )zv
        Get the outermost event name (i.e. the longest running event)
        or None if the stack is empty.
        r   N)rì  )r‘  rb  s     rm   rý   z'ChromiumEventLogger.get_outermost_event  s&   € ð
 —’Ñ Ô ˆØ Ð*ˆu�QŒxˆx dÐ*rl   c                ót   — 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   r•  s    rm   rú   z,ChromiumEventLogger.get_pt2_compile_substack  s9   € õ
 �4”8Ð3Ñ4Ô4ð 	1Ø”8Ô0Ð0à,.ˆDŒHÔ)Ø”8Ô0Ð0rl   r]   c                ó\   — t          | j        d¦  «        si | j        _        | j        j        S )NÚ
event_data)rÚ   rë  rð  r•  s    rm   Úget_event_dataz"ChromiumEventLogger.get_event_data*  s+   € Ý�t”x Ñ.Ô.ð 	%Ø"$ˆDŒHÔØŒxÔ"Ð"rl   ú'dict[str, AbstractContextManager[None]]c                ó\   — t          | j        d¦  «        si | j        _        | j        j        S )NÚrecord_functions)rÚ   rë  rô  r•  s    rm   Úget_record_functionsz(ChromiumEventLogger.get_record_functions/  s,   € Ý�t”xÐ!3Ñ4Ô4ð 	+Ø(*ˆDŒHÔ%ØŒxÔ(Ð(rl   ru   c                ó   — t          j        ¦   «         | _        ddlm} |j        r#|j        › dt          j        ¦   «         › �| _        n%t          t          j        ¦   «         ¦  «        | _        t                               d| j        ¦  «         d S )Nr2   rH   ú-z*ChromiumEventLogger initialized with id %s)Ú	threadingÚlocalrë  r±  rI   Úpt2_compile_id_prefixÚuuidÚuuid4Úid_rœ   r‘   r‰  )r‘  rI   s     rm   r’  zChromiumEventLogger.__init__4  s„   € Ý”?Ñ$Ô$ˆŒàÐÐÐÐÐð Ô'ð 	)Ø Ô6ÐGÐG½¼¹¼ÐGÐGˆDŒHˆHå�4œ:™<œ<Ñ(Ô(ˆDŒHõ 	�ŠÐ=¸t¼xÑHÔHÐHÐHÐHrl   ré   rœ   r/  r   c                óR   — ||                       ¦   «         vrdS  | j        |fi |¤Ž dS )zd
        Same as add_event_data, but will silently not log if the event isn't in the stack.
        N)rì  rû   )r‘  ré   r/  s      rm   r)  z&ChromiumEventLogger.try_add_event_dataC  s?   € ð ˜TŸ^š^Ñ-Ô-Ð-Ð-ØˆFØˆÔ˜JÐ1Ð1¨&Ð1Ð1Ð1Ð1Ð1rl   c                ó  — ||                       ¦   «         vr5t          dt          |¦  «        › d|                       ¦   «         › d�¦  «        ‚|                      ¦   «         }||vri ||<   ||                              |¦  «         dS )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)rì  rñ   rj  rñ  rÿ   )r‘  ré   r/  rð  s       rm   rû   z"ChromiumEventLogger.add_event_dataK  s¬   € ð ˜TŸ^š^Ñ-Ô-Ð-Ð-ÝðK�˜jÑ)Ô)ð Kð K°4·>²>Ñ3CÔ3Cð Kð Kð Kñô ð ð
 ×(Ò(Ñ*Ô*ˆ
Ø˜ZÐ'Ð'Ø%'ˆJ�zÑ"Ø�:Ô×%Ò% fÑ-Ô-Ð-Ð-Ð-rl   rÓ   rÔ   rs   c                ó,  — ||                       ¦   «         vr5t          dt          |¦  «        › d|                       ¦   «         › d�¦  «        ‚|                      ¦   «         }||vri ||<   |||         vrd||         |<   ||         |xx         |z  cc<   dS )zK
        Increment an integer event data field by the given amount
        r   r  r  r   N)rì  rñ   rj  rñ  ©r‘  ré   rÓ   rÔ   rð  s        rm   r  zChromiumEventLogger.increment_  sÓ   € ð ˜TŸ^š^Ñ-Ô-Ð-Ð-ÝðK�˜jÑ)Ô)ð Kð K°4·>²>Ñ3CÔ3Cð Kð Kð Kñô ð ð ×(Ò(Ñ*Ô*ˆ
Ø˜ZÐ'Ð'Ø%'ˆJ�zÑ"Ø�j Ô,Ð,Ð,Ø*+ˆJ�zÔ" 3Ñ'Ø�:Ô˜sÐ#Ð#Ô# uÑ,Ð#Ð#Ñ#Ð#Ð#rl   c                óZ  — ||                       ¦   «         vr5t          dt          |¦  «        › d|                       ¦   «         › d�¦  «        ‚|                      ¦   «         }||vri ||<   |||         vrt	          ¦   «         ||         |<   ||         |                              |¦  «         dS )zR
        Add a value to a set within a event_name's metadata if it exists
        r   r  r  N)rì  rñ   rj  rñ  r”  rž  r  s        rm   r  zChromiumEventLogger.add_to_setq  sÔ   € ð ˜TŸ^š^Ñ-Ô-Ð-Ð-ÝðK�˜jÑ)Ô)ð Kð K°4·>²>Ñ3CÔ3Cð Kð Kð Kñô ð ð
 ×(Ò(Ñ*Ô*ˆ
Ø˜ZÐ'Ð'Ø%'ˆJ�zÑ"Ø�j Ô,Ð,Ð,Ý*-©%¬%ˆJ�zÔ" 3Ñ'Ø�:Ô˜sÔ#×'Ò'¨Ñ.Ô.Ð.Ð.Ð.rl   FNrë   rê   rô   rö   rB  rC  c                óZ  — |p"t           j        j                             ¦   «         }t	          |¦  «        |d<   |                      ||d|¦  «         |                      ¦   «                              |¦  «          | j        |fi |¤Ž |r'|  	                    ¦   «                              |¦  «         t           j
        j        j        ret           j        j                             |¦  «        }|                     ¦   «          ||                      ¦   «         |<   |rt%          j        |fi |¤Ž dS dS dS )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)
        rB  ÚBN)r  rR  rS  rT  rœ   Ú_log_timed_eventrì  r·   rû   rú   r  r  r  r7  r8  r9  r:  rõ  rè   r"  )r‘  ré   rë   rê   rô   rB  r<  s          rm   rP  z#ChromiumEventLogger.log_event_start‡  sF  € ð   ÐT¥5¤=Ô#?×#RÒ#RÑ#TÔ#Tˆ
Ý!$ Z¡¤ˆ�ÑØ×ÒØØØØñ		
ô 	
ð 	
ð 	�ŠÑÔ×Ò 
Ñ+Ô+Ð+àˆÔ˜JÐ3Ð3¨(Ð3Ð3Ð3Ø ð 	?Ø×)Ò)Ñ+Ô+×2Ò2°:Ñ>Ô>Ð>õ Œ>Ô"Ô7ð 	TÝ”Ô#×7Ò7¸
ÑCÔCˆBØ�LŠL‰NŒNˆNØ68ˆD×%Ò%Ñ'Ô'¨
Ñ3ð ð TÝ"Ô;¸JÐSÐSÈ(ÐSÐSÐSÐSÐSð	Tð 	TðTð Trl   Ústack_depthÚpt2_compile_substack_depthÚevent_data_keysúset[str]Úrecord_function_keysc                óv  — |                       ¦   «         }||d …= |                      ¦   «         }||d …= |                      ¦   «         }t          |¦  «        D ]	}||vr||= Œ
|                      ¦   «         }	t          |	                     ¦   «         ¦  «        D ]#\  }}
||vr|
                     d d d ¦  «         |	|= Œ$d S rƒ   )rì  rú   rñ  r†  rõ  rÇ   r;  )r‘  r	  r
  r  r  rb  Úsubstackrð  ré   rô  r<  s              rm   Ú_reset_to_statez#ChromiumEventLogger._reset_to_state¯  sê   € ð —’Ñ Ô ˆØ�+�,�,ÐØ×0Ò0Ñ2Ô2ˆØÐ/Ð0Ð0Ð1Ø×(Ò(Ñ*Ô*ˆ
Ý˜zÑ*Ô*ð 	+ð 	+ˆJØ Ð0Ð0Ø˜zÐ*øà×4Ò4Ñ6Ô6ÐÝ"Ð#3×#9Ò#9Ñ#;Ô#;Ñ<Ô<ð 	1ð 	1‰NˆJ˜ØÐ!5Ð5Ð5Ø—’˜D $¨Ñ-Ô-Ð-Ø$ ZÐ0øð	1ð 	1rl   c                óf   — |                       ddt          ¦   «         t          ¦   «         ¦  «         d S r°   )r  r”  r•  s    rm   r�  zChromiumEventLogger.resetÅ  s,   € ð 	×Ò˜Q ¥3¡5¤5­#©%¬%Ñ0Ô0Ð0Ð0Ð0rl   r¿  c                óò  ‡— |p"t           j        j                             ¦   «         }t	          |¦  «        |d<   |                      ¦   «         }‰|v r|‰         }|‰= ni }|                     |¦  «         |                      ‰|d|¦  «        }	d
ˆfd„}
|                      ¦   «         }‰|vrt           
                    d¦  «         d	S  |
|¦  «         |rJ|                      ¦   «         } |
|¦  «         t          |	|| j        |¦  «         |                     ¦   «          |                     ¦   «          |                      ¦   «         }‰|v r.|                     ‰¦  «        }|                     d	d	d	¦  «         d	S d	S )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)
        rB  ÚErb  ré  rt   ru   c                ó˜   •— ‰| d         k    r<t                                d¦  «         |                      ¦   «          ‰| d         k    °:d S d S )Néÿÿÿÿz>ChromiumEventLogger: Detected overlapping events, fixing stack)r‘   rä  Úpop)rb  ré   s    €rm   Ú	pop_stackz4ChromiumEventLogger.log_event_end.<locals>.pop_stackò  sY   ø€ Ø  b¤	Ò)Ð)õ —’ØTñô ð ð —	’	‘”�ð   b¤	Ò)Ð)Ð)Ð)Ð)Ð)rl   z7ChromiumEventLogger: Start event not in stack, ignoringN)rb  ré  rt   ru   )r  rR  rS  rT  rœ   rñ  rÿ   r  rì  r‘   rä  rú   r%   rý  r  rõ  r;  )r‘  ré   rë   rê   r¿  rô   rB  Úall_event_datar\  Úeventr  Úevent_stackr   rô  r<  s    `             rm   rZ  z!ChromiumEventLogger.log_event_endÊ  sË  ø€ ð&  ÐT¥5¤=Ô#?×#RÒ#RÑ#TÔ#Tˆ
Ý!$ Z¡¤ˆ�Ñð ×,Ò,Ñ.Ô.ˆØ˜Ð'Ð'Ø+¨JÔ7ˆNØ˜zÐ*Ð*ð  ˆNà×Ò˜hÑ'Ô'Ð'à×%Ò%ØØØØñ	
ô 
ˆð	ð 	ð 	ð 	ð 	ð 	ð —n’nÑ&Ô&ˆð ˜[Ð(Ð(õ �KŠKÐQÑRÔRÐRØˆFàˆ	�+ÑÔÐà ð 	'Ø#'×#@Ò#@Ñ#BÔ#BÐ ØˆIÐ*Ñ+Ô+Ð+Ý'ØÐ+¨T¬X°}ñô ð ð !×$Ò$Ñ&Ô&Ð&ð 	�ŠÑÔÐð  ×4Ò4Ñ6Ô6ÐØÐ)Ð)Ð)Ø!×%Ò% jÑ1Ô1ˆBØ�KŠK˜˜d DÑ)Ô)Ð)Ð)Ð)ð *Ð)rl   rÉ   údict[str, Any] | Nonec                óŒ   ‡— ||dz  ||ddddœŠt           j                             dˆfd„dd¬¦  «         t          ‰¦  «         ‰S )	za
        Logs a timed event in chromium format. See log_event_start, log_event_end, etc.
        rL  ri  r   )rz   Útsr-  ÚphÚcatÚtidÚpidÚchromium_eventc                 ó   •— ‰ S rƒ   rK   ©r  s   €rm   r  z6ChromiumEventLogger._log_timed_event.<locals>.<lambda>0	  ó   ø€ ˜u€ rl   F©Ú
payload_fnÚsuppress_contextÚexpect_trace_id)r  rÒ  rÚ  r'   )r‘  ré   rë   rÉ   rê   r  s        @rm   r  z$ChromiumEventLogger._log_timed_event	  sr   ø€ ð Ø˜D‘.ØØà!ØØð	
ð 	
ˆõ 	Œ×'Ò'ØØ$�}�}�}Ø"Ø!ð	 	(ñ 	
ô 	
ð 	
õ 	' uÑ-Ô-Ð-Øˆrl   c           	     ó<  ‡— |€i }t          t          j        j                             ¦   «         ¦  «        }||d<   ||dz  |ddddddœŠt          j                             d	ˆfd
„dd¬¦  «         |r+t          ‰|                      ¦   «         | j	        |¦  «         dS dS )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
        NrB  rL  rP  ri  r   Úp)rz   r  r-  r  r  r   r!  Úsr"  c                 ó   •— ‰ S rƒ   rK   r$  s   €rm   r  z7ChromiumEventLogger.log_instant_event.<locals>.<lambda>W	  r%  rl   FTr&  )
rœ   r  rR  rS  rT  rÒ  rÚ  r%   rú   rý  )r‘  ré   rë   rê   rô   rB  r  s         @rm   rò   z%ChromiumEventLogger.log_instant_event7	  sÚ   ø€ ð ÐØˆHÝ�œÔ5×HÒHÑJÔJÑKÔKˆ
Ø!+ˆ�ÑàØ˜D‘.ØØà!ØØØð

ð 

ˆõ 	Œ×'Ò'ØØ$�}�}�}Ø"Ø ð	 	(ñ 	
ô 	
ð 	
ð !ð 	å'Ø�t×4Ò4Ñ6Ô6¸¼À'ñô ð ð ð ð	ð 	rl   )rt   ré  ©rt   r?  )rt   r]   )rt   rò  r’   )ré   rœ   r/  r   rt   ru   )ré   rœ   rÓ   rœ   rÔ   rs   rt   ru   )ré   rœ   rÓ   rœ   rÔ   r   rt   ru   ©FN)ré   rœ   rë   rs   rê   r]   rô   rö   rB  rC  rt   ru   )
r	  rs   r
  rs   r  r  r  r  rt   ru   rƒ   )ré   rœ   rë   rs   rê   r]   r¿  rs   rô   rö   rB  rC  rt   ru   )
ré   rœ   rë   rs   rÉ   rœ   rê   r  rt   r]   rd  )
ré   rœ   rë   rs   rê   r  rô   rö   rt   ru   )rf   rg   rh   rã   rì  rý   rú   rñ  rõ  r’  r)  rû   r  r  rP  r  r�  rZ  r  rò   rK   rl   rm   rè  rè    s�  € € € € € ðð ð	"ð 	"ð 	"ð 	"ð+ð +ð +ð +ð	1ð 	1ð 	1ð 	1ð#ð #ð #ð #ð
)ð )ð )ð )ð
Ið Ið Ið Ið2ð 2ð 2ð 2ð.ð .ð .ð .ð(-ð -ð -ð -ð$/ð /ð /ð /ð6 ',Ø'+ð&Tð &Tð &Tð &Tð &TðP1ð 1ð 1ð 1ð,1ð 1ð 1ð 1ð (,ðN*ð N*ð N*ð N*ð N*ðj +/ðð ð ð ð ðB +/à&+ð(ð (ð (ð (ð (ð (ð (rl   rè  zChromiumEventLogger | NoneÚCHROMIUM_EVENT_LOGc                 ó:   — t           €t          ¦   «         a t           S rƒ   )r0  rè  rK   rl   rm   rð   rð   e	  s   € åÐ!Ý0Ñ2Ô2ÐÝÐrl   c                 ó   — t           d uS rƒ   )r0  rK   rl   rm   r(  r(  l	  s   € å TÐ)Ð)rl   ré   Úreset_event_log_on_exitc           	   #  óz  K  — t          ¦   «         }d}|r‚t          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        t	          |                     ¦   «         ¦  «        t	          |                     ¦   «         ¦  «        f}t          j        ¦   «         }| 	                    | |i |¦  «         	 dV — | 
                    | t          j        ¦   «         i ||¦  «         |� |j        |Ž  dS dS # | 
                    | t          j        ¦   «         i ||¦  «         |� |j        |Ž  w w xY 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ì  rú   r”  rñ  rõ  rï   rë   rP  rZ  r  )ré   r3  rô   Úchromium_event_logÚreset_stateÚchromium_start_times         rm   Úchromium_event_timedr8  q	  sp  è è € õ 3Ñ4Ô4ÐØ>B€KØð 
åÐ"×,Ò,Ñ.Ô.Ñ/Ô/ÝÐ"×;Ò;Ñ=Ô=Ñ>Ô>ÝÐ"×1Ò1Ñ3Ô3Ñ4Ô4ÝÐ"×7Ò7Ñ9Ô9Ñ:Ô:ð	
ˆõ œ,™.œ.ÐØ×&Ò&ØØØ
Øñ	ô ð ð=Øˆˆˆà×(Ò(ØÝŒL‰NŒNØØØ!ñ	
ô 	
ð 	
ð Ð"Ø.ÐÔ.°Ð<Ð<Ð<Ð<ð #Ð"øð 	×(Ò(ØÝŒL‰NŒNØØØ!ñ	
ô 	
ð 	
ð Ð"Ø.ÐÔ.°Ð<Ð<Ð<ð #øøøs   ÃD Ä9D:c                  óH   — e Zd ZU dZded<   ded<   dd
„Zedd„¦   «         ZdS )ÚCleanupHookz,Remove a global variable when hook is calledr]   Úscoperœ   rz   r-  r   rt   ru   c                óX   — t           �t           xj        dz  c_        | j        | j        = d S r¬   )ÚCleanupManagerr}   r;  rz   ©r‘  r-  s     rm   Ú__call__zCleanupHook.__call__¡	  s.   € åÐ%ÝÐ Ô  AÑ%Ð Ô ØŒJ�t”yÐ!Ð!Ð!rl   rH  c                ó„   — || v rt          d|›d�¦  «        ‚t          xj        dz  c_        || |<   t          | |¦  «        S )NzName z already exists in scoper2   )rü   r=  r}   r:  )r;  rz   rH  s      rm   rz  zCleanupHook.create§	  sR   € à�5ˆ=ˆ=Ý Ð!I¨Ð!IÐ!IÐ!IÑJÔJÐJÝÐÔ Ñ!ÐÔØˆˆd‰Ý˜5 $Ñ'Ô'Ð'rl   N©r-  r   rt   ru   )r;  r]   rz   rœ   rH  r   rt   r:  )rf   rg   rh   rã   r–   r?  r4  rz  rK   rl   rm   r:  r:  š	  se   € € € € € € à6Ð6àÐÐÑØ€I€I�Ið"ð "ð "ð "ð ð(ð (ð (ñ „\ð(ð (ð (rl   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]Úinstancer  rs   rt   ru   c                ó~   •— | j         |         D ]} |¦   «          Œt          ¦   «                              |¦  «         d S rƒ   )ru  r²  r  )r‘  r  r´   r·  s      €rm   r  zCleanupManager._remove_id´	  sD   ø€ Ø”K Ô$ð 	ð 	ˆDØˆD‰FŒFˆFˆFÝ‰Œ×Ò˜3ÑÔÐÐÐrl   r  )rf   rg   rh   r}   r–   r  r¸  r¹  s   @rm   r=  r=  °	  sP   ø€ € € € € € Ø€EØ&Ð&Ð&Ñ&ð ð  ð  ð  ð  ð  ð  ð  ð  ð  rl   r=  útorch.Tensorc                ó¶   — |                       ¦   «                              | j        ¦  «        }| j        r%| j        �| j                              ¦   «         |_        |S )z!Clone the tensor and its gradient)ÚcloneÚrequires_grad_Úrequires_gradÚis_leafÚgrad)r~  Úys     rm   Úclone_tensorrM  ½	  sF   € à	�Š‰	Œ	× Ò  ¤Ñ1Ô1€AØ„yð  �Q”VÐ'Ø”—’‘”ˆŒØ€Hrl   ÚsrcÚdstÚattrc                óø   — t          | |¦  «        rGt          | |¦  «        }t          ||t          |d¦  «        r|                     ¦   «         n|¦  «         dS t          ||¦  «        rt	          ||¦  «         dS dS )a  Copy a single dynamo attribute from src to dst, or remove it from dst
    if src doesn't have it. Uses .copy() for container types (set, dict) to
    avoid shared references between src and dst, and assigns directly for
    primitive types like bool (e.g., _has_dynamo_dim_marking).ÚcopyN)rÚ   ÚgetattrÚsetattrrR  Údelattr)rN  rO  rP  rH  s       rm   Ú_copy_dynamo_attrrV  Å	  sŠ   € õ
 ˆs�DÑÔð Ý�c˜4Ñ Ô ˆÝ��T­°°fÑ)=Ô)=ÐF˜3Ÿ8š8™:œ:˜:À3ÑGÔGÐGÐGÐGÝ	��dÑ	Ô	ð Ý��TÑÔÐÐÐðð rl   c                ó  — t          | |d¦  «         t          | |d¦  «         t          | |d¦  «         t          | |d¦  «         t          | |d¦  «         t          | |d¦  «         t          | |d¦  «         t          | |d¦  «         d	S )
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_indicesÚ"_dynamo_propagated_dynamic_indicesÚ_has_dynamo_dim_markingN)rV  )rN  rO  s     rm   Úcopy_dynamo_tensor_attributesr`  Ñ	  s¢   € õ �c˜3Ð 9Ñ:Ô:Ð:Ý�c˜3Ð :Ñ;Ô;Ð;Ý�c˜3Ð 8Ñ9Ô9Ð9Ý�c˜3Ð 3Ñ4Ô4Ð4Ý�c˜3Ð AÑBÔBÐBÝ�c˜3Ð >Ñ?Ô?Ð?Ý�c˜3Ð DÑEÔEÐEÝ�c˜3Ð 9Ñ:Ô:Ð:Ð:Ð:rl   ©Údtyperb  útorch.dtype | Nonec          	     óX  ‡— t          | ¦  «        r| S dˆfd„}t          j        ¦   «         5  | j        j        dk    r || ¦  «        cddd¦  «         S | j        t          j        u rqt          j         ||                      ¦   «         ¦  «         ||  	                    ¦   «         ¦  «        | j
        |                      ¦   «         ¬¦  «        cddd¦  «         S t          | ¦  «        rÌ| j        t          j        t          j        hv r)|                      ¦   «         }|                      ¦   «         }n(|                      ¦   «         }|                      ¦   «         }t          j         ||¦  «         ||¦  «         ||                      ¦   «         ¦  «        | j
        | j        ¬¦  «        cddd¦  «         S t+          | ¦  «        r || ¦  «        cddd¦  «         S t-          d	„ t/          |                      ¦   «         |                      ¦   «         ¦  «        D ¦   «         ¦  «        }| j        rt          j        |d
z   f| ¦  «        }n&t          j        |d
z   ‰p| j        | j        ¬¦  «        }|                      ¦   «         |                     ¦   «         z
  d
z  |                      ¦   «         z  }|                      |                      ¦   «         |                      ¦   «         |¦  «         	 | !                    |  "                    ¦   «         ¦  «         | j#        r| $                    | j%        ¦  «         | j#        r"| j&        �tO          | j&        ‰¬¦  «        |_&        n'# tP          $ r  || ¦  «        cY cddd¦  «         S w xY wtS          | |¦  «         |cddd¦  «         S # 1 swxY w Y   dS )zcopy while preserving stridesr~  rE  rt   c                óä   •— t          j        | ¦  «        }| j        r|                     | j        ¦  «         | j        r"| j        �t          | j        ‰¬¦  «        |_        t          | |¦  «         |S )Nra  )r  rG  rJ  rH  rI  rK  Úclone_inputr`  )r~  rL  rb  s     €rm   Útorch_clonez clone_input.<locals>.torch_cloneé	  sl   ø€ ÝŒK˜‰NŒNˆØŒ9ð 	.Ø×Ò˜Qœ_Ñ-Ô-Ð-ØŒ9ð 	6˜œÐ+Ý  ¤¨uÐ5Ñ5Ô5ˆAŒFÝ% a¨Ñ+Ô+Ð+Øˆrl   ÚxlaN)Úis_coalesced)Úlayoutc              3  ó,   K  — | ]\  }}|d z
  |z  V — ŒdS )r2   NrK   )r¤   ÚshapeÚstrides      rm   r¦   zclone_input.<locals>.<genexpr>
  s@   è è € ð 
ð 
Ù%2 U¨FˆU�Q‰Y˜&Ñ ð
ð 
ð 
ð 
ð 
ð 
rl   é    )rb  rN  ra  ©r~  rE  rt   rE  )*rM   r  Úno_gradrN  rÜ  rj  Ú
sparse_cooÚsparse_coo_tensorÚ_indicesrp   rl  ri  r#   Ú
sparse_csrÚ
sparse_bsrÚcrow_indicesÚcol_indicesÚccol_indicesÚrow_indicesÚsparse_compressed_tensorru  r.   rŠ   ÚzipÚsizerm  Úis_quantizedÚempty_quantizedÚemptyrb  Údata_ptrÚelement_sizeÚas_strided_Úcopy_rG  rJ  rH  rI  rK  rf  rñ   r`  )r~  rb  rg  Úcompressed_indicesÚplain_indicesÚneeded_sizeÚresultÚcache_line_offsets    `      rm   rf  rf  â	  sj  ø€ õ ˆq�z„zð àˆðð ð ð ð ð õ 
Œ‰Œð 9ð 9ØŒ8Œ=˜EÒ!Ð!à�;˜q‘>”>ð9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9ð Œ8•uÔ'Ð'Ð'ÝÔ*Ø�˜AŸJšJ™LœLÑ)Ô)Ø�˜AŸIšI™KœKÑ(Ô(Ø”ØŸ^š^Ñ-Ô-ð	ñ ô ð9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9õ " !Ñ$Ô$ð 	"ØŒx�EÔ,­eÔ.>Ð?Ð?Ð?Ø%&§^¢^Ñ%5Ô%5Ð"Ø !§¢¡¤��à%&§^¢^Ñ%5Ô%5Ð"Ø !§¢¡¤�ÝÔ1Ø�Ð.Ñ/Ô/Ø�˜MÑ*Ô*Ø�˜AŸHšH™JœJÑ'Ô'Ø”Ø”xðñ ô ð)9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9õ6 +¨1Ñ-Ô-ð 	"ð �;˜q‘>”>ð=9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9õ@ ð 
ð 
Ý69¸!¿&º&¹(¼(ÀAÇHÂHÁJÄJÑ6OÔ6Oð
ñ 
ô 
ñ 
ô 
ˆð Œ>ð 	ÝÔ*¨K¸"Ñ,<Ð+>ÀÑBÔBˆFˆFå”[Ø˜bÑ ¨Ð(8°´ÀÄðñ ô ˆFð �ZŠZ‰\Œ\˜FŸOšOÑ-Ô-Ñ-°Ñ3Ø�^Š^ÑÔñÐð 	×Ò˜1Ÿ6š6™8œ8 Q§X¢X¡Z¤ZÐ1BÑCÔCÐCð
	"Ø�LŠL˜Ÿš™œÑ#Ô#Ð#ØŒyð 7Ø×%Ò% a¤oÑ6Ô6Ð6ØŒyð ?˜QœVÐ/Ý)¨!¬&¸Ð>Ñ>Ô>�”øøÝð 	"ð 	"ð 	"ð �;˜q‘>”>Ð!Ð!ðo9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9ðf	"øøøõ
 	& a¨Ñ0Ô0Ð0Øðs9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9sQ   ¬NÁA7NÃCNÆ3NÇDNË(A1MÍNÍM>Í/NÍ=M>Í>NÎN#Î&N#Úexample_inputsúdict[str, T | tuple[T, ...]]údict[str, list[T]]c                ó   — d S rƒ   rK   ©r‰  s    rm   Úclone_inputsrŽ  .
  s	   € ð ˜rl   úSequence[T]úlist[T]c                ó   — d S rƒ   rK   r�  s    rm   rŽ  rŽ  4
  s   € Ø:=¸#rl   c                ó:  — t          | ¦  «        t          u ržt          | ¦  «        }|                     ¦   «         D ]x\  }}t          |t          ¦  «        rt          |¦  «        ||<   Œ-t          |t          j        ¦  «        st          dt          |¦  «        › �¦  «        ‚t          |¦  «        ||<   Œy|S t          | ¦  «        }t          t          |¦  «        ¦  «        D ]:}t          ||         t          j        ¦  «        rt          ||         ¦  «        ||<   Œ;|S )Nz)Expected value to be a torch.Tensor, got )rÜ  ÚdictrÇ   r<  r=  rŽ  r  rÒ  rü   rf  r†  Úranger›  )r‰  ÚresrÓ   rÔ   rP  s        rm   rŽ  rŽ  8
  s  € åˆNÑÔ�tÐ#Ð#Ý�>Ñ"Ô"ˆØŸ)š)™+œ+ð 	.ð 	.‰JˆC�Ý˜%¥Ñ'Ô'ð .Ý'¨Ñ.Ô.��C‘�å! %­¬Ñ6Ô6ð Ý(ØQÅDÈÁKÄKÐQÐQñô ð õ ' uÑ-Ô-��C‘�Øˆ
å
ˆ~Ñ
Ô
€CÝ•3�s‘8”8‰_Œ_ð )ð )ˆÝ�c˜!”f�eœlÑ+Ô+ð 	)Ý   Q¤Ñ(Ô(ˆC�‰FøØ€Jrl   c           	     óÜ   — 	 |                       ¦   «          d S # t          $ rI}ddlm} t	          j        ddt          | ¦  «        ¦  «        } |ddd|› d�g |d¬	¦  «         Y d }~d S d }~ww xY w)
Nr2   rí  z\(.*r±  z(skip frame due to being in functorh modez(torch.compile cannot be run in context: z. Skipping frame.T)rñ  rò  ró  rô  rõ  Ú
skip_frame)r€  rñ   rÖ  rî  Úrerµ  rj  )rH  rú  rî  Úfunctorch_subclass_names       rm   Úskip_frame_if_in_functorch_moderš  N
  sº   € ð
Ø�Š‰ŒˆˆˆøÝð 
ð 
ð 
Ø&Ð&Ð&Ð&Ð&Ð&õ #%¤&¨°"µd¸3±i´iÑ"@Ô"@ÐàˆØ>ØØmÐCZÐmÐmÐmØØØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøs   ‚ ˜
A+¢>A&Á&A+úGenerator[None, None, None]c               #  óü  K  — t           j        j        } t           j        j        j        } |¦   «         5   | ¦   «         5  t          j        t           j                             ¦   «         ¦  «        }t          |¦  «         t           j
                             ¦   «         r0t          j        t           j
                             ¦   «         ¦  «        }t           j                             ¦   «         r0t          j        t           j                             ¦   «         ¦  «        }d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   	 d V — t           j        j                             ¦   «         5  t           j                             |¦  «         t           j
                             ¦   «         rt           j
                             |¦  «         t           j                             ¦   «         rt           j                             |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S # t           j        j                             ¦   «         5  t           j                             |¦  «         t           j
                             ¦   «         rt           j
                             |¦  «         t           j                             ¦   «         rt           j                             |¦  «         d d d ¦  «         w # 1 swxY w Y   w xY wrƒ   )r  r7  Ú_DisableFuncTorchrÐ  Ú_python_dispatchÚ_disable_current_modesrG  ÚrandomÚget_rng_staterš  r×  Úis_availableÚxpuÚset_rng_state)Údisable_functorchÚdisable_current_modesÚ	rng_stateÚcuda_rng_stateÚxpu_rng_states        rm   Úpreserve_rng_staterª  a
  su  è è € åœÔ2ÐÝ!œKÔ8ÔOÐØ	Ð	Ñ	 Ô	 ð Cð CÐ"3Ð"3Ñ"5Ô"5ð Cð CÝ”K¥¤× :Ò :Ñ <Ô <Ñ=Ô=ˆ	Ý'¨	Ñ2Ô2Ð2ÝŒ:×"Ò"Ñ$Ô$ð 	EÝ"œ[­¬×)AÒ)AÑ)CÔ)CÑDÔDˆNÝŒ9×!Ò!Ñ#Ô#ð 	CÝ!œK­¬	×(?Ò(?Ñ(AÔ(AÑBÔBˆMðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð7ØˆˆˆåŒ[Ô)×@Ò@ÑBÔBð 	7ð 	7ÝŒL×&Ò& yÑ1Ô1Ð1ÝŒz×&Ò&Ñ(Ô(ð 9Ý”
×(Ò(¨Ñ8Ô8Ð8ÝŒy×%Ò%Ñ'Ô'ð 7Ý”	×'Ò'¨Ñ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ø�UŒ[Ô)×@Ò@ÑBÔBð 	7ð 	7ÝŒL×&Ò& yÑ1Ô1Ð1ÝŒz×&Ò&Ñ(Ô(ð 9Ý”
×(Ò(¨Ñ8Ô8Ð8ÝŒy×%Ò%Ñ'Ô'ð 7Ý”	×'Ò'¨Ñ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7øøøsy   ´D>¿CD'ÄD>Ä'D+	Ä+D>Ä.D+	Ä/D>Ä>EÅEÅ
H% Å1BHÈHÈHÈ%$K;É	BK/Ë#K;Ë/K3Ë3K;Ë6K3Ë7K;Úmodel0ú•TypeIs[torch.jit._trace.TopLevelTracedModule | torch.jit._script.RecursiveScriptModule | torch.jit.ScriptFunction[Any, Any] | torch.jit.ScriptModule]c                ó¶   — t          | t          j        j        j        t          j        j        j        t          j        j        t          j        j        f¦  «        S rƒ   )	r<  r  ÚjitÚ_traceÚTopLevelTracedModuleÚ_scriptÚRecursiveScriptModuleÚScriptFunctionÚScriptModule)r«  s    rm   Úis_jit_modelrµ  w
  sD   € õ ØåŒIÔÔ1ÝŒIÔÔ3ÝŒIÔ$ÝŒIÔ"ð		
ñô ð rl   rš  c                ó\  — t          | ¦  «        r| S 	 t          j                             | |¦  «        S # t          $ rl 	 t          j                             | ¦  «        cY S # t          $ r: |rt                               d¦  «         nt                               d¦  «         Y nw xY wY nw xY wd S )Nz	jit errorz0Both torch.jit.trace and torch.jit.script failed)	rµ  r  r®  Útracer×  Úscriptr‘   rè  Úerror)rC  r‰  rš  s      rm   Útorchscriptrº  Š
  sÏ   € Ý�EÑÔð àˆð	NÝŒy�Š˜u nÑ5Ô5Ð5øÝð Nð Nð Nð	NÝ”9×#Ò# EÑ*Ô*Ð*Ð*Ð*øÝð 	Nð 	Nð 	NØð NÝ—’˜kÑ*Ô*Ð*Ð*å—	’	ÐLÑMÔMÐMøøð		NøøøøøðNøøøð ˆ4s3   “3 ³
B)¾AÁB)ÁAB#Â B)Â"B#Â#B)Â(B)c                ó\   — 	 t          j        | ¦  «        S # t          t          f$ r Y d S w xY wrƒ   )rš  Úgetfilerù  ÚOSError©r  s    rm   r¼  r¼  œ
  s>   € ðÝŒ˜sÑ#Ô#Ð#øÝ•wÐð ð ð Øˆtˆtðøøøs   ‚ –+ª+c                ó:   — t          t          | ¦  «        ¦  «        S )zLTest if an object is a namedtuple or a torch.return_types.* quasi-namedtuple)Úis_namedtuple_clsrÜ  r¾  s    rm   Úis_namedtuplerÁ  £
  s   € å�T #™YœYÑ'Ô'Ð'rl   r{   c                óž  ‡ — 	 t          ‰ t          ¦  «        r¤t          ‰ dd¦  «        }|dv rdS t          t          ‰ dd¦  «        t          ¦  «        rit	          t          ‰ dd¦  «        ¦  «        rKt          d„ ‰ j        D ¦   «         ¦  «        }|t          fk    rdS |rt          ˆ fd„|D ¦   «         ¦  «        rdS n# t          $ r Y nw xY wd	S )
zhTest if an object is a namedtuple or a (torch.return_types|torch.autograd.forward_ad).* quasi-namedtuplerg   N)útorch.return_typesztorch.autograd.forward_adTÚ_fieldsÚ_makec              3  ó,   K  — | ]}|t           u¯|V — Œd S rƒ   )r   )r¤   Úts     rm   r¦   z$is_namedtuple_cls.<locals>.<genexpr>³
  s,   è è € ÐKÐK A¸!Å7Ð:JÐ:J˜aÐ:JÐ:JÐ:JÐ:JÐKÐKrl   c              3  óR   •K  — | ]!}t          |¦  «        o‰j        |j        u V — Œ"d S rƒ   )rÀ  Ú__new__)r¤   rÇ  r{   s     €rm   r¦   z$is_namedtuple_cls.<locals>.<genexpr>·
  sR   øè è € ð !ð !ð õ	 *¨!Ñ,Ô,ð 5àœK¨1¬9Ð4ð!ð !ð !ð !ð !ð !rl   F)Ú
issubclassr=  rS  r<  ÚcallableÚ	__bases__Úanyrù  )r{   ÚmoduleÚbasess   `  rm   rÀ  rÀ  ¨
  s  ø€ ðÝ�c�5Ñ!Ô!ð 	 Ý˜S ,°Ñ5Ô5ˆFØÐLÐLÐLØ�tÝ�' # y°$Ñ7Ô7½Ñ?Ô?ð  ÅHÝ˜˜W dÑ+Ô+ñEô Eð  õ ÐKÐK¨¬ÐKÑKÔKÑKÔK�Ø�U˜HÒ$Ð$à˜4Øð 	 �Sð !ð !ð !ð !ð #ð!ñ !ô !ñ ô ð 	 ð  ˜4øøÝð ð ð Øˆðøøøàˆ5s   ƒ*B= ¯A,B= ÂB= Â=
C
Ã	C
rÜ  útuple[str, ...]c                óÜ  — | t           u rdS t          | t          ¦  «        st          d| › �¦  «        ‚t	          | d¦  «        r| j        S t          j         G d„ d¦  «        ¦   «         }| j        dk    rt          d| j        ›�¦  «        ‚ | t          |t          | j        ¦  «        ¦  «        ¦  «        }i }t          |¦  «        D ]D}|d         d	k    r6t          t          ||¦  «        |¦  «        rt          ||¦  «        j        ||<   ŒEt!          |¦  «        | j        k    r't          d
| j        › dt!          |¦  «        › �¦  «        ‚t          t#          ||j        ¬¦  «        ¦  «        S )zIGet the fields of a namedtuple or a torch.return_types.* quasi-namedtuple)ÚstartÚstopÚstepz,Expected cls to be a subclass of tuple, got rÄ  c                  ó   — e Zd ZU ded<   dS )ú!namedtuple_fields.<locals>.Markerrs   ÚindexN©rf   rg   rh   r–   rK   rl   rm   ÚMarkerrÖ  Ò
  s   € € € € € € àˆ
ˆ
‰
ˆ
ˆ
rl   rÙ  rÃ  z8Expected cls.__module__ to be 'torch.return_types', got r   rÚ  z	Expected z fields, got )rÓ   )ÚslicerÊ  r=  rü   rÚ   rÄ  rÍ  Ú	dataclassrg   r£   r”  Ún_fieldsÚdirr<  rS  r×  r›  rr  rˆ   )r{   rÙ  r  Úfieldsrz   s        rm   Únamedtuple_fieldsrß  Æ
  s–  € ð �e€|€|Ø(Ð(å�c�5Ñ!Ô!ð SÝÐQÈCÐQÐQÑRÔRÐRÝˆs�IÑÔð àŒ{ÐåÔðð ð ð ð ñ ô ñ Ôðð „~Ð-Ò-Ð-ÝØYÀsÄ~ÐYÐYñ
ô 
ð 	
ð ˆ#�c�&�% ¤Ñ-Ô-Ñ.Ô.Ñ
/Ô
/€CØ€FÝ�C‘”ð 4ð 4ˆØ�Œ7�cŠ>ˆ>�j­°°dÑ);Ô);¸VÑDÔDˆ>Ý" 3¨Ñ-Ô-Ô3ˆF�4‰LøÝ
ˆ6�{„{�c”lÒ"Ð"ÝØ@˜œÐ@Ð@µ3°v±;´;Ð@Ð@ñ
ô 
ð 	
õ •˜ F¤JÐ/Ñ/Ô/Ñ0Ô0Ð0rl   ÚgmúCallable[[], None]c                óô  ‡‡‡— t          j        ¦   «         5  t          j        t           j                             ¦   «         ¦  «        Št           j                             ¦   «         r0t          j        t           j                             ¦   «         ¦  «        Šd„ t          j        |  	                    ¦   «         |  
                    ¦   «         ¦  «        D ¦   «         Šd d d ¦  «         n# 1 swxY w Y   dˆˆˆfd„}|S )Nc                óF   — g | ]}||j         t          j        |¦  «        f‘ŒS rK   )Ú_versionr  rG  )r¤   Úparams     rm   r�  z%checkpoint_params.<locals>.<listcomp>ì
  s=   € ð 
ð 
ð 
ð ð �E”N¥E¤K°Ñ$6Ô$6Ð7ð
ð 
ð 
rl   rt   ru   c                 ól  •— t          j        ¦   «         5  t           j                             ‰¦  «         t           j                             ¦   «         rt           j                             ‰¦  «         ‰D ]&\  } }}| j        |k    r|                      |¦  «         Œ'	 d d d ¦  «         d S # 1 swxY w Y   d S rƒ   )r  rp  r   r¤  r×  r¢  rä  rƒ  )rå  rÖ  Úoriginal_valuer¨  r§  Úsaved_states      €€€rm   Úrestorez"checkpoint_params.<locals>.restoreò
  sð   ø€ ÝŒ]‰_Œ_ð 	0ð 	0ÝŒL×&Ò& yÑ1Ô1Ð1ÝŒz×&Ò&Ñ(Ô(ð 9Ý”
×(Ò(¨Ñ8Ô8Ð8Ø2=ð 0ð 0Ñ.��w Ø”> WÒ,Ð,Ø—K’K Ñ/Ô/Ð/øð0ð		0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   •BB)Â)B-Â0B-r’   )r  rp  rG  r   r¡  r×  r¢  r©   rª   Ú
parametersÚbuffers)rà  ré  r¨  r§  rè  s     @@@rm   Úcheckpoint_paramsrì  ç
  s"  øøø€ Ý	Œ‰Œð 
ð 
Ý”K¥¤× :Ò :Ñ <Ô <Ñ=Ô=ˆ	ÝŒ:×"Ò"Ñ$Ô$ð 	EÝ"œ[­¬×)AÒ)AÑ)CÔ)CÑDÔDˆNð
ð 
õ #œ¨¯ª©¬¸"¿*º*¹,¼,ÑGÔGð
ñ 
ô 
ˆð	
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0ð €Ns   —CC%Ã%C)Ã,C)úIterable[Any]Útimesútuple[Any, float]c                ón  — t           j                             ¦   «         rt           j        j        }nt          } |¦   «          t          j        ¦   «          t          j        d¦  «         t          j	        ¦   «         }t          |¦  «        D ]} | |Ž } |¦   «          Œt          j	        ¦   «         }|||z
  fS )Ni9  )r  Úacceleratorr¢  Úsynchronizerþ  ÚgcÚcollectÚmanual_seedrï   Úperf_counterr”  )rC  r‰  rî  rò  Út0rÚ  r‡  Út1s           rm   Útimedrù  þ
  s¬   € õ Ô×%Ò%Ñ'Ô'ð ÝÔ'Ô3ˆˆåˆà€K�M„M€MÝ„J�L„L€LÝ	Ô�dÑÔÐÝ	Ô	Ñ	Ô	€BÝ�5‰\Œ\ð ð ˆØ�˜Ð'ˆØˆ‰ŒˆˆÝ	Ô	Ñ	Ô	€BØ�2˜‘7ˆ?Ðrl   c           	     ó€   — t          d„ t          j        ||                      d¦  «        ¦  «        D ¦   «         ¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S rƒ   )Úis_cuda©r¤   r~  s     rm   r¦   z check_is_cuda.<locals>.<genexpr>  s$   è è € ÐWÐW˜QˆqŒyÐWÐWÐWÐWÐWÐWrl   T)Úallr©   rª   rê  )rà  r‰  s     rm   Úcheck_is_cudarÿ    s8   € ÝÐWÐW¥)¤/°.À"Ç-Â-ÐPTÑBUÔBUÑ"VÔ"VÐWÑWÔWÑWÔWÐWrl   rn  rò  úCallable[..., Any]c                ó:  — | dk    rt          d| › �¦  «        ‚d„ t          | ¦  «        D ¦   «         }t          |dd …         |d d…         z   ¦  «        }t          dd                     |¦  «        › dd                     |¦  «        › d�¦  «        }d	| › d
�|_        |S )Nr2   zExpected n > 1, got c                ó   — g | ]}d |› �‘ŒS r   rK   rO  s     rm   r�  z rot_n_helper.<locals>.<listcomp>  s   € Ð&Ð&Ð&˜ˆG�ˆGˆGÐ&Ð&Ð&rl   r  zlambda rp  z: (ú)Úrot_Ú_helper)rü   r”  ÚreversedÚevalr¢   rf   )rò  ÚvarsÚrotatedrÅ  s       rm   Úrot_n_helperr
    s«   € àˆA‚v€vÝÐ7°AÐ7Ð7Ñ8Ô8Ð8Ø&Ð&�U 1™XœXÐ&Ñ&Ô&€DÝ�t˜B˜C˜C”y 4¨¨¨¤9Ñ,Ñ-Ô-€GÝ	Ð?˜Ÿš ™œÐ?Ð?¨3¯8ª8°GÑ+<Ô+<Ð?Ð?Ð?Ñ	@Ô	@€BØ#˜Ð#Ð#Ð#€B„KØ€Irl   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¦  «        pt          | t           t"          hz  ¦  «        S rƒ   )r  r=  Ú	frozensetrþ  r£   Úis_safe_constantr<  ÚenumÚEnumrÜ  r  ÚSizer^  Ú_GenericAliasr\  ÚGenericAliasr  rÚ  r   s    rm   r  r  G  s†   € Ýˆa•%�Ð#Ñ$Ô$ð -Ý•3Õ'¨Ñ+Ô+Ñ,Ô,Ð,ÝØ	åŒIÝÝŒJÝÔ ÝÔð	
ñ	ô 	ð õ 
Ø	Ý¥ Ñ'ñ
ô 
ðrl   úset[int]c                 ó
   — ddhS ©Nr   r2   rK   rK   rl   rm   Úcommon_constantsr  Y  s   € ð
 	
Ø	ð	ð rl   ú'TypeGuard[torch.SymBool | torch.SymInt]c                ó¬   — t          | t          j        t          j        f¦  «        o.t          | j        t          j        j        j        j        ¦  «         S rƒ   )	r<  r  ÚSymBoolÚSymIntrK  ÚnestedrÓ  Ú
nested_intÚNestedIntNodera  s    rm   Úis_torch_symr  c  sH   € Ý�e�eœm­U¬\Ð:Ñ;Ô;ð ÅJØŒ
•E”LÔ*Ô5ÔCñEô Eð Að rl   Úsourcec                ó®  — ddl m} t          j        ¦   «         j         o¶|j                             ¦   «          pœ|j                             ¦   «         ot          j	         pv|j         
                    ¦   «         ot          j	         pP|j                             ¦   «         ot          j	         p* ||¦  «        pt          d¦  «         o| t          ¦   «         v S )Nr2   )Úis_from_defaultsz5pytorch/dynamo:enable_unspecialize_zero_one_plain_int)r   r"  r"   rˆ   Ú#force_unspec_int_unbacked_size_likeÚguard_sourceÚis_localÚis_specialized_nn_modulerI   Úallow_unspec_int_on_nn_moduleÚ"is_unspecialized_builtin_nn_moduleÚis_unspecialized_nn_moduler$   r  )rÔ   r   r"  s      rm   Úis_int_specialization_caser*  i  sù   € Ø(Ð(Ð(Ð(Ð(Ð(åÔ!Ñ#Ô#ÔGÐGð àÔ×(Ò(Ñ*Ô*Ð*ð 	
ð
 Ô×8Ò8Ñ:Ô:ð 9ÝÔ8Ð8ð	
ð Ô×BÒBÑDÔDð 9ÝÔ8Ð8ð	
ð Ô×:Ò:Ñ<Ô<ð 9ÝÔ8Ð8ð	
ð  Ð˜FÑ#Ô#ð!	
õ(  Ð WÑXÔXÐXð ,ØÕ)Ñ+Ô+Ð+ð/rl   rê  c                óÖ  — ddl m}m}m} t	          | |¦  «        r—|                      ¦   «         so|                      ¦   «         }|                      ¦   «         }t          |¦  «        p3t          j
         o&t          |¦  «        t          u ot          ||¦  «         }|s| S |                      ¦   «         } t	          | |¦  «        r'|                     |                      ¦   «         ¦  «        S | S )Nr2   )ÚConstantVariableÚLazyVariableTrackerÚSymNodeVariable)r{  r,  r-  r.  r<  Úis_realizedÚoriginal_sourcerç  r  rI   Úspecialize_intrÜ  rs   r*  Úrealizerz  Úevaluate_expr)rê  r,  r-  r.  r   rÔ   Úis_symnode_vts          rm   Úspecialize_symnoder5  ˆ  s  € ØQÐQÐQÐQÐQÐQÐQÐQÐQÐQõ �#Ð*Ñ+Ô+ð Ø�ŠÑ Ô ð 	ð ×(Ò(Ñ*Ô*ˆFØ×&Ò&Ñ(Ô(ˆEå(¨Ñ/Ô/ð ÝÔ)Ð)ð BÝ˜‘K”K¥3Ð&ðBå2°5¸&ÑAÔAÐAð ð !ð Ø�
ð �kŠk‰mŒmˆå�#�Ñ'Ô'ð <Ø×&Ò& s×'8Ò'8Ñ':Ô':Ñ;Ô;Ð;Ø€Jrl   c                ó    — ddl m} t          | ¦  «        } t          | |¦  «        r(|                      ¦   «         r|                      ¦   «         S | S )Nr2   rA   )r{  rB   r5  r<  rÂ  r¿  )rê  rB   s     rm   Úguard_if_dynr7  ¥  s]   € Ø*Ð*Ð*Ð*Ð*Ð*å
˜SÑ
!Ô
!€Cå�#�Ñ'Ô'ð (¨C×,BÒ,BÑ,DÔ,Dð (Ø×%Ò%Ñ'Ô'Ð'à€Jrl   úMapping[Any, Any]c                ó~   — t          d„ t          j        | |                     ¦   «         ¦  «        D ¦   «         ¦  «        S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rƒ   )rÂ  rý  s     rm   r¦   z&check_constant_args.<locals>.<genexpr>±  s.   è è € ÐVÐV¨!ˆq×#Ò#Ñ%Ô%ÐVÐVÐVÐVÐVÐVrl   )rþ  r©   rª   ru  rý  s     rm   Úcheck_constant_argsr;  °  s3   € ÝÐVÐV­y¬¸tÀVÇ]Â]Á_Ä_Ñ/UÔ/UÐVÑVÔVÑVÔVÐVrl   c                óø   — ddl m} ddlm} d}t	          j        | |                     ¦   «         ¦  «        D ]?}t          ||¦  «        r|dz  }Œt          ||¦  «        r|                     ¦   «         s dS Œ@|dk    S )Nr2   rA   ©ÚUnspecializedPythonVariabler   F)	r{  rB   Úvariables.tensorr>  r©   rª   ru  r<  rÂ  )r-  r/  rB   r>  Úunspec_countr~  s         rm   Úcheck_unspec_python_argsrA  ´  s©   € Ø*Ð*Ð*Ð*Ð*Ð*Ø=Ð=Ð=Ð=Ð=Ð=à€LÝŒ_˜T 6§=¢=¡?¤?Ñ3Ô3ð ð ˆÝ�aÐ4Ñ5Ô5ð 	Ø˜AÑˆLˆLÝ˜Q Ñ0Ô0ð 	°Q×5IÒ5IÑ5KÔ5Kð 	Ø�5�5ð	à˜!ÒÐrl   c                ó´   — ddl m} t          j        | |                     ¦   «         ¦  «        D ])}|                     ¦   «         st          ||¦  «        s dS Œ*dS )Nr2   r=  FT)r?  r>  r©   rª   ru  rÂ  r<  )r-  r/  r>  r~  s       rm   Úcheck_unspec_or_constant_argsrC  Á  sl   € ð
 >Ð=Ð=Ð=Ð=Ð=åŒ_˜T 6§=¢=¡?¤?Ñ3Ô3ð ð ˆØ×$Ò$Ñ&Ô&ð 	­*°QÐ8SÑ*TÔ*Tð 	Ø�5�5øØˆ4rl   c                ó�   ‡— ddl mŠ t          ˆfd„t          j        | |                     ¦   «         ¦  «        D ¦   «         ¦  «        S )Nr2   )ÚNumpyNdarrayVariablec              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S rƒ   )r<  )r¤   r~  rE  s     €rm   r¦   z+check_numpy_ndarray_args.<locals>.<genexpr>Ñ  sB   øè è € ð ð àõ 	�1Ð*Ñ+Ô+ðð ð ð ð ð rl   )r?  rE  rÍ  r©   rª   ru  )r-  r/  rE  s     @rm   Úcheck_numpy_ndarray_argsrG  Î  sa   ø€ Ø6Ð6Ð6Ð6Ð6Ð6åð ð ð ð å”  v§}¢}¡¤Ñ7Ô7ðñ ô ñ ô ð rl   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_iteratorc                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   ©rË  ©r¤   Úmethods     rm   ú	<setcomp>rR  â  s6   € ð ð ð àÝ�ÑÔðØ
ðð ð rl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  ç  ó%   € ÐNÐNÐN˜&½XÀfÑ=MÔ=MÐNˆvÐNÐNÐNrl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  è  ó5   € ð ð ð Ø½ÀÑ8HÔ8HðØ
ðð ð rl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  ë  s5   € ð ð ð Ø½HÀVÑ<LÔ<LðØ
ðð ð rl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  î  rV  rl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  ô  s%   € ÐRÐRÐR˜FÅÈ&ÑAQÔAQÐR�ÐRÐRÐRrl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  õ  s%   € ÐPÐPÐP˜6½xÈÑ?OÔ?OÐP�ÐPÐPÐPrl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  ø  rT  rl   c                ó0   — h | ]}t          |¦  «        ¯|’ŒS rK   rO  rP  s     rm   rR  rR  û  s5   € ð ð ð Ø½hÀvÑ>NÔ>NðØ
ðð ð rl   ÚKÚVr„  ú
dict[K, V]úKeysView[K]c                óž   — t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚t                               | ¦  «        S )NzExpected d to be a dict, got )r<  r“  rü   rÜ  r‡  )r„  s    rm   Úbuiltin_dict_keysrb    sB   € å�a�ÑÔð HÝÐF½TÀ!¹W¼WÐFÐFÑGÔGÐGÝ�9Š9�Q‰<Œ<Ðrl   úIterable[tuple[K, V | Any]]c                ó‚  ‡ — t          ‰ t          ¦  «        st          dt          ‰ ¦  «        › �¦  «        ‚t	          ‰ t          t
          f¦  «        r‰                      ¦   «         S t          ‰ t
          ¦  «        r ˆ fd„t          j        ‰ ¦  «        D ¦   «         S ˆ fd„t                               ‰ ¦  «        D ¦   «         S )NzExpected obj to be a dict, got c                ó>   •— g | ]}|t          j        ‰|¦  «        f‘ŒS rK   )r   r  ©r¤   r  r  s     €rm   r�  z'get_items_from_dict.<locals>.<listcomp>  s+   ø€ ÐTÐTÐT¸�•KÔ+¨C°Ñ3Ô3Ð4ÐTÐTÐTrl   c                óJ   •— g | ]}|t                                ‰|¦  «        f‘Œ S rK   )r“  r  rf  s     €rm   r�  z'get_items_from_dict.<locals>.<listcomp>  s.   ø€ ÐFÐFÐF°!�•D×$Ò$ S¨!Ñ,Ô,Ð-ÐFÐFÐFrl   )r<  r“  rü   rÜ  r  r   rÇ   r‡  r¾  s   `rm   Úget_items_from_dictrh  
  sµ   ø€ å�c�4Ñ Ô ð LÝÐJ½tÀC¹y¼yÐJÐJÑKÔKÐKÝˆc•D�+Ð&Ñ'Ô'ð GØ�yŠy‰{Œ{ÐÝ	�C�Ñ	%Ô	%ð GØTÐTÐTÐT½kÔ>NÈsÑ>SÔ>SÐTÑTÔTÐTàFÐFÐFÐFµt·y²yÀ±~´~ÐFÑFÔFÐFrl   ú Iterable[tuple[int, K, V | Any]]c                óü   ‡— t          | ¦  «        }t          | t          ¦  «        r?d„ t          t                               | ¦  «        ¦  «        D ¦   «         Šˆfd„|D ¦   «         S d„ t          |¦  «        D ¦   «         S )aœ  Enumerate dict items yielding (dict_keys_position, key, value).

    For OrderedDicts where move_to_end/prepend has been used, the OrderedDict
    iteration order can differ from dict.keys() order.  We iterate in
    OrderedDict order (correct execution semantics) but return each key's
    dict.keys() position so that ConstDictKeySource indices stay consistent
    with PyDict_Next / C++ DictGuardManager.
    c                ó   — i | ]\  }}||“Œ	S rK   rK   )r¤   rP  r  s      rm   rì  z6enumerate_items_with_dict_position.<locals>.<dictcomp>#  s   € ÐAÐAÐA™t˜q !�a˜ÐAÐAÐArl   c              3  ó4   •K  — | ]\  }}‰|         ||fV — Œd S rƒ   rK   )r¤   r  r  Ú
key_to_poss      €rm   r¦   z5enumerate_items_with_dict_position.<locals>.<genexpr>$  s2   øè è € Ð8Ð8©$¨!¨Q�˜A”  1Ð%Ð8Ð8Ð8Ð8Ð8Ð8rl   c              3  ó,   K  — | ]\  }\  }}|||fV — Œd S rƒ   rK   )r¤   rP  r  r  s       rm   r¦   z5enumerate_items_with_dict_position.<locals>.<genexpr>%  s0   è è € Ð8Ð8™)˜!™V˜a ˆQ��1ˆIÐ8Ð8Ð8Ð8Ð8Ð8rl   )rh  r<  r   Ú	enumerater“  r‡  )r  rÇ   rm  s     @rm   Ú"enumerate_items_with_dict_positionrp    s   ø€ õ   Ñ$Ô$€EÝ�#•{Ñ#Ô#ð 9ØAÐA¥yµ·²¸3±´Ñ'@Ô'@ÐAÑAÔAˆ
Ø8Ð8Ð8Ð8°%Ð8Ñ8Ô8Ð8Ø8Ð8¥y°Ñ'7Ô'7Ð8Ñ8Ô8Ð8rl   c                ól   — t          | ¦  «        }t          j        j                             |¦  «         |S rƒ   )Ú
object_newr  rÓ  ÚModuler’  )r{   r  s     rm   Únn_module_newrt  (  s*   € Ý
�S‰/Œ/€CÝ	„H„O×Ò˜SÑ!Ô!Ð!Ø€Jrl   ÚitúIterable[T]c                óB   — t          j        t          j        | d¦  «        S r¬   )r—  ÚreduceÚoperatorÚmul)ru  s    rm   Úproductr{  .  s   € ÝÔ�HœL¨"¨aÑ0Ô0Ð0rl   r×  c                óL   — |                       ¦   «         \  }\  }}|||z            S rƒ   )Ú
__reduce__)ru  r×  rÚ  r  rÒ  s        rm   Útuple_iterator_getitemr~  2  s'   € Ø—}’}‘”Ñ€A�vˆˆuØˆu�u‰}ÔÐrl   c                ód   — t          j                             t          j        ¦  «        | ¦  «        S rƒ   )r  Ú_dynamoÚdisablerÍ  rÞ  r…   s    rm   Údataclass_fieldsr‚  7  s#   € ÝŒ=× Ò ¥Ô!3Ñ4Ô4°SÑ9Ô9Ð9rl   Ú
count_iterúIterator[Any]útuple[Any, Any]c                ó^  — 	 |                       ¦   «         \  }}nè# t          $ rÛ dd l}t          | ¦  «        }|                     d¦  «        r|                     d¦  «        st          t          fcY S 	 |                     d|dd…         › d�¦  «        }n'# t          t          f$ r t          t          fcY cY S w xY wt          |t          ¦  «        rdt          |¦  «        cxk    rd	k    sn t          t          fcY S Y nw xY wt          |¦  «        dk    r
|d         dfS |d         |d         fS )
Nr   zcount(r  ú(é   r  ú,)r2   rd   )r}  rù  Úastrj  Ú
startswithrU  ÚNotImplementedÚliteral_evalÚSyntaxErrorrú  r<  r=  r›  )rƒ  rÚ  r-  rŠ  Ú
count_reprs        rm   Únormalize_count_iterr�  >  su  € ð4Ø×'Ò'Ñ)Ô)‰ˆˆ4ˆ4øÝð 4ð 4ð 4ð 	ˆ
ˆ
ˆ
å˜*Ñ%Ô%ˆ
Ø×$Ò$ XÑ.Ô.ð 	4°j×6IÒ6IÈ#Ñ6NÔ6Nð 	4Ý"¥NÐ3Ð3Ð3Ð3ð	4Ø×#Ò#Ð$<¨
°1°R°4Ô(8Ð$<Ð$<Ð$<Ñ=Ô=ˆDˆDøÝ�ZÐ(ð 	4ð 	4ð 	4Ý"¥NÐ3Ð3Ð3Ð3Ð3Ð3ð	4øøøå˜$¥Ñ&Ô&ð 	4¨aµ3°t±9´9Ð.AÐ.AÒ.AÐ.AÀÒ.AÐ.AÐ.AÐ.AÝ"¥NÐ3Ð3Ð3Ð3ð /BÐ.Að4øøøõ ˆ4�y„y�A‚~€~Ø�Q”˜ˆ|ÐØ�ŒG�T˜!”WÐÐs5   ‚ šAC?Á2!BÂC?ÂB8Â3C?Â7B8Â8AC?Ã>C?Ú
range_iterútuple[int, int, int]c                ó„   — |                       ¦   «         \  }\  }}|j        |pd|j        z  z   }|j        }|j        }|||fS r°   )r}  rÒ  rÔ  rÓ  )r‘  rÚ  Ú	range_objÚ	maybe_idxrÒ  rÓ  rÔ  s          rm   Únormalize_range_iterr–  U  sP   € Ø!+×!6Ò!6Ñ!8Ô!8Ñ€A�|ˆ	�Yð ŒO˜y˜~¨A°´Ñ?Ñ?€EØŒ>€DØŒ>€DØ�4˜ÐÐrl   rÇ  c                ó,   — |                       |¦  «        S rƒ   )Úas_subclass)rÇ  r{   s     rm   Úto_subclassr™  c  s   € Ø�=Š=˜ÑÔÐrl   údict[Any, Any]c                ó~   — t          t          j        t                               | ¦  «        ||dz   ¦  «        ¦  «        S r¬   )Únextr©   Úislicer“  r‡  )r„  rò  s     rm   Údict_keys_getitemrž  j  s/   € õ
 •	Ô ¥§¢¨1¡¤¨q°!°a±%Ñ8Ô8Ñ9Ô9Ð9rl   r,  úset[T]c                ó,   — t          | ¦  «        |         S rƒ   ©r†  )r,  rò  s     rm   Úset_getitemr¢  r  s   € å�‰7Œ7�1Œ:Ðrl   rù  c                óL   — | j         j        }| j        }|rdnd}|› d|› d|› �}|S )NÚLÚGz["z"].)r·  rf   rz   )rÔ   rù  rz   rH  r;  Ú
local_names         rm   Ú	enum_reprr§  w  sD   € ð Œ?Ô#€DØ
Œ*€CØÐ!ˆCˆC˜c€EØÐ+Ð+˜TÐ+Ð+ cÐ+Ð+€JØÐrl   rK  útorch.fx.NodeÚexample_valuec                óê   — || j         d<   t          j        ¦   «         j        }|€t	          d¦  «        ‚|j        }t          j        j        j	         
                    ||¦  «        x}r|| j         d<   d S d S )Nr©  úfake_mode must not be NoneÚunbacked_bindings)rJ  r"   rˆ   Ú	fake_moderü   Ú	shape_envr  r   ÚexperimentalÚsymbolic_shapesÚcompute_unbacked_bindings)rK  r©  r­  r®  Úsymbol_to_paths        rm   Úset_example_valuer³  �  s‹   € ð "/€D„IˆoÑÝÔ"Ñ$Ô$Ô.€IØÐÝÐ9Ñ:Ô:Ð:ØÔ#€Iõ Œ8Ô Ô0×JÒJØ�}ñ
ô 
ð	
ˆð8ð *8ˆŒ	Ð%Ñ&Ð&Ð&ð8ð 8rl   c                óä   — |                       ¦   «         j        j                             d¦  «        }t	          |¦  «        s/ddlm} ddlm}  |dt          |¦  «        dg |j
        ¢¬¦  «         |S )Nr©  r2   ©Úgraph_break_hintsrí  z:Cannot check Tensor object identity without its fake valuez/TensorVariable is missing a fake example_value.©rñ  rò  ró  rô  )rè  rK  rJ  rˆ   rM   r±  r¶  rÖ  rî  rœ   Ú
DYNAMO_BUG)r¼  Úfake_tensorr¶  rî  s       rm   Ú_get_fake_tensorrº  –  s•   € Ø—+’+‘-”-Ô$Ô)×-Ò-¨oÑ>Ô>€KÝ�;ÑÔð 	
Ø'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&àˆØPÝ˜Ñ$Ô$ØIØ1Ð%Ô0Ð1ð		
ñ 	
ô 	
ð 	
ð Ðrl   rÚ  Úseq_lenc                ó|   — |                       |¦  «        \  }}}t          d||z
  ||dk    rdndz
  z   |z  ¦  «        S )Nr   r2   r  )ÚindicesÚmax)r,  r»  rÒ  rÓ  rÔ  s        rm   Úslice_lengthr¿  ¥  sI   € ØŸ	š	 'Ñ*Ô*Ñ€Eˆ4�Ýˆq�4˜%‘< 4°°q²°¨1¨1¸bÑ#AÑBÀtÑKÑLÔLÐLrl   r±  ÚexpectÚactualc                óP   — ddl m} d|› d|› d|› �} |t          | |g¬¦  «         d S )Nr   )Úraise_observed_exceptionz3wrong number of arguments or keyword arguments for z() call.
  Expect: z
  Actual: rÝ  )Útorch._dynamo.excrÃ  rù  )rt  rz   rÀ  rÁ  rÃ  Úmsg_strs         rm   Úraise_args_mismatchrÆ  ª  sw   € ð ;Ð:Ð:Ð:Ð:Ð:ð	¸dð 	ð 	Øð	ð 	àð	ð 	ð ð ÐÝØ
ØˆYðñ ô ð ð ð rl   rÇ   ÚsearchÚcheck_tensor_identityc                óÂ  ‡— ddl m} |                     ¦   «         rD|                     ¦   «         Št	          ˆfd„| D ¦   «         ¦  «        }|                     |¦  «        S d}|r%|                     ¦   «         rd}t          |¦  «        }d }| D ]º}|r=|                     ¦   «         r(|t          |¦  «        u r|                     d¦  «        c S ŒAddlm	}	 |	                     |t          j        ¦  «                             |||gi ¦  «        }
|€|
}Œƒ|	                     |t          j        ¦  «                             ||
|gi ¦  «        }Œ»|€|                     d¦  «        }|S )Nr2   )r,  c              3  óœ   •K  — | ]F}|                      ¦   «         o-|                     ¦   «         ‰u p|                     ¦   «         ‰k    V — ŒGd S rƒ   )rÂ  r¿  )r¤   r~  Ú
search_vals     €rm   r¦   z iter_contains.<locals>.<genexpr>Ì  sw   øè è € ð 
ð 
ð ð × Ò Ñ"Ô"ð à×$Ò$Ñ&Ô&¨*Ð4ð 8Ø×'Ò'Ñ)Ô)¨ZÒ7ð	
ð 
ð 
ð 
ð 
ð 
rl   FTr   )ÚSourcelessBuilder)r{  r,  rÂ  r¿  rÍ  rz  Ú	is_tensorrº  Útorch._dynamo.variables.builderrÌ  ry  ÚeqÚcall_functionÚor_)rÇ   rÇ  rt  rÈ  r,  Úfound_constÚmust_check_tensor_idÚfoundr~  rÌ  ÚcheckrË  s              @rm   Úiter_containsrÖ  ¿  s¿  ø€ ð ,Ð+Ð+Ð+Ð+Ð+à× Ò Ñ"Ô"ð 4Ø×.Ò.Ñ0Ô0ˆ
õ ð 
ð 
ð 
ð 
ð ð
ñ 
ô 
ñ 
ô 
ˆð  ×&Ò& {Ñ3Ô3Ð3à ÐØð * ×!1Ò!1Ñ!3Ô!3ð *Ø#Ðå! &Ñ)Ô)ˆà$(€EØð ð ˆØð 	Ø�{Š{‰}Œ}ð 9ØÕ-¨aÑ0Ô0Ð0Ð0Ø+×2Ò2°4Ñ8Ô8Ð8Ð8Ð8øàIÐIÐIÐIÐIÐIà%×,Ò,¨Rµ´Ñ=Ô=×KÒKØ�Q˜�K ñô ˆEð ˆ}Ø��à)×0Ò0°µX´\ÑBÔB×PÒPØ˜ ˜¨ñô ��ð €}Ø ×'Ò'¨Ñ.Ô.ˆØ€Lrl   r  ú:TypeIs[torch.Tensor | torch.nn.Module | MethodWrapperType]c                ód   — t          | t          j        t          j        j        t
          f¦  «        S )z4Returns whether it indexes dictionaries using its id)r<  r  rÒ  rÓ  rs  r   )r  s    rm   Ú	key_is_idrÙ  ó  s"   € õ �a�%œ,­¬¬Õ9JÐKÑLÔLÐLrl   ú	list[Any]c                ó   — d„ | D ¦   «         S )Nc                óN   — g | ]"}t          |¦  «        rt          |¦  «        n|‘Œ#S rK   )rÙ  r  )r¤   r  s     rm   r�  zkey_to_id.<locals>.<listcomp>û  s-   € Ð8Ð8Ð8¨Q•Y˜q‘\”\Ð(�Bˆq‰EŒEˆE qÐ8Ð8Ð8rl   rK   ra  s    rm   Ú	key_to_idrÝ  ú  s   € Ø8Ð8°%Ð8Ñ8Ô8Ð8rl   c               óV  ‡— ddl m} t          | t          t          f¦  «        r�d                     ˆfd„| D ¦   «         ¦  «        }t          | t          ¦  «        rd|› d�S t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚t          | ¦  «        dk    rd|› d	�S d|› d
�S t          | t          j
        ¦  «        r%t          | ‰¬¦  «                             dd¦  «        S  || ¦  «        r| j        S t          | t          ¦  «        rdd„} || ¦  «        S | ›S )Nr2   )Úis_builtin_callablerp  c              3  ó:   •K  — | ]}t          |‰¬ ¦  «        V — ŒdS ©©rù  N©Ú
const_repr©r¤   r,  rù  s     €rm   r¦   zconst_repr.<locals>.<genexpr>  s0   øè è € ÐDÐD¸Q�j¨°%Ð8Ñ8Ô8ÐDÐDÐDÐDÐDÐDrl   ú[ú]zExpected x to be a tuple, got r‡  r‰  r  râ  ú'r±  r¯  r   rt   rœ   c                óR   — | j         }|j        }|dk    r|j        S |dz   |j        z   S )NÚbuiltinsú.)r·  rg   rh   )r¯  ÚklassrÎ  s      rm   Úfullnamezconst_repr.<locals>.fullname  s7   € Ø”KˆEØÔ%ˆFØ˜Ò#Ð#ØÔ)Ð)Ø˜C‘< %Ô"4Ñ4Ð4rl   )r¯  r   rt   rœ   )Útrace_rulesrß  r<  r†  r=  r¢   rü   rÜ  r›  r  r  r§  Úreplacerf   )r~  rù  rß  Ú
elems_reprrí  s    `   rm   rä  rä  þ  sf  ø€ Ø0Ð0Ð0Ð0Ð0Ð0å�!•d�E�]Ñ#Ô#ð Ø—X’XÐDÐDÐDÐDÀ!ÐDÑDÔDÑDÔDˆ
Ý�a�ÑÔð 	)Ø$�zÐ$Ð$Ð$Ð$å˜a¥Ñ'Ô'ð QÝ$Ð%OÅdÈ1ÁgÄgÐ%OÐ%OÑPÔPÐPÝ�1‰vŒv˜Š{ˆ{Ø)˜:Ð)Ð)Ð)Ð)à(˜:Ð(Ð(Ð(Ð(Ý	�A•t”yÑ	!Ô	!ð õ ˜ %Ð(Ñ(Ô(×0Ò0°°bÑ9Ô9Ð9Ø	Ð	˜QÑ	Ô	ð ØŒzÐÝ	�A•tÑ	Ô	ð ð	5ð 	5ð 	5ð 	5ð ˆx˜‰{Œ{Ðàˆxˆrl   Ú
const_keysc               óV   ‡— d                      ˆfd„| D ¦   «         ¦  «        }d|z   dz   S )Nrp  c              3  ó:   •K  — | ]}t          |‰¬ ¦  «        V — ŒdS rá  rã  rå  s     €rm   r¦   z!dict_keys_repr.<locals>.<genexpr>!  s0   øè è € ÐGÐG°q�
 1¨EÐ2Ñ2Ô2ÐGÐGÐGÐGÐGÐGrl   ræ  rç  ©r¢   )rñ  rù  Úkeys_strs    ` rm   Údict_keys_reprrö     s8   ø€ Ø�xŠxÐGÐGÐGÐG¸JÐGÑGÔGÑGÔG€HØ�‰>˜CÑÐrl   Ú
__dict_key)ÚUnsupportedFakeTensorExceptionÚrootc                óD   — |› dt          |¦  «        › d| j        j        › �S )NrÚ  Ú_c)r  ÚoutputrB  )rt  rù  r  s      rm   Úget_safe_global_namerý  +  s+   € ð Ð6Ð6•R˜‘W”WÐ6Ð6 ¤	Ô 4Ð6Ð6Ð6rl   r�  Ú
containersúContainer[T]c                ó   — |D ]	}| |v r dS Œ
dS r÷  rK   )r�  rþ  Ú	containers      rm   Úis_inr  5  s-   € Øð ð ˆ	Ø�9ÐÐØ�4�4ð àˆ5rl   )Úrequires_suffixÚprefixr  c               óž   — |st          | g|¢R Ž s| S t          j        ¦   «         D ]}| › d|› �}t          |g|¢R Ž s|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)r  r©   r}   rü   )r  r  rþ  rP  Ú	candidates        rm   Úget_unique_name_wrtr  <  s‡   € ð ð ¥5¨Ð#=°*Ð#=Ð#=Ð#=ð ØˆåŒ_ÑÔð ð ˆØ�O�O �O�Oˆ	Ý�YÐ, Ð,Ð,Ð,ð 	ØÐÐÐð	õ ˜Ñ
'Ô
'Ð'rl   úCallable[[], Any]c                óâ   — 	  | ¦   «         S # t           $ rX}ddlm} d|j        › d�}t                               |¦  «          |dt          |j        ¦  «        |g |¬¦  «         Y d }~d S d }~ww xY w)Nr2   rí  zEncountered exception (z!) during fake tensor propagation.z!Fake tensor propagation exceptionrð  )rø  rÖ  rî  Úreasonr‘   rä  rœ   )rÅ  rú  rî  r¶  s       rm   Úwrap_fake_exceptionr  N  sµ   € ð
Øˆr‰tŒtˆøÝ)ð 
ð 
ð 
Ø&Ð&Ð&Ð&Ð&Ð&àS¨¬ÐSÐSÐSˆÝ�Š�CÑÔÐØˆØ7Ý˜œ‘M”MØØØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøs   ‚	 Œ
A.–AA)Á)A.r­  ú,torch._subclasses.fake_tensor.FakeTensorModec                ó¤   ‡ — t           j        j                             |¦  «        5  t	          ˆ fd„¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nc                 ó,   •— t          j        ‰ ¦  «        S rƒ   )rR  Údeepcopyr¾  s   €rm   r  z)deepcopy_to_fake_tensor.<locals>.<lambda>c  s   ø€ ­4¬=¸Ñ+=Ô+=€ rl   )r  rÖ  r¹  ÚFakeCopyModer  )r  r­  s   ` rm   Údeepcopy_to_fake_tensorr  _  s˜   ø€ õ 
Ô	Ô	&×	3Ò	3°IÑ	>Ô	>ð ?ð ?Ý"Ð#=Ð#=Ð#=Ð#=Ñ>Ô>ð?ð ?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð ?ð ?s   ¦AÁA	ÁA	r  r•  c                óx   — t          j        t          j        t          j        | |z
  ¦  «        ¦  «        ¦  «        S )z+
    Calculate root mean squared error
    )r  ÚsqrtÚmeanÚsquare)r  r•  s     rm   Úrmser  f  s,   € õ Œ:•e”j¥¤¨c°C©iÑ!8Ô!8Ñ9Ô9Ñ:Ô:Ð:rl   Ú	equal_nanc                ó(   — t          | |d|¬¦  «        S )Ng        )Útolr  ©Úsame)r  r•  r  s      rm   Úbitwise_samer  m  s%   € ÝØØØØð	ñ ô ð rl   g-Cëâ6?Tç®Gáz®ï?Úfp64_refÚcos_similarityr  ÚfloatÚexact_dtypeÚrelax_numpy_equalityÚignore_non_fpÚ	log_errorúCallable[..., None]Ú(use_larger_multiplier_for_smaller_tensorÚforce_max_multiplierÚuse_iou_for_boolÚiou_thresholdc                ó<  ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡— ‰€‰ Št          ‰ t          t          t          j        t
          j        j        t
          j        f¦  «        r×t          ‰t          t          t          j        f¦  «        s/t          dt          ‰ ¦  «        › dt          ‰¦  «        › �¦  «        ‚t          ‰ ¦  «        t          ‰¦  «        k    r ‰	d¦  «         dS t          ‰ ¦  «        t          ‰¦  «        k    o3t          ˆˆˆˆˆˆˆ	ˆˆˆˆ
fd„t          ‰ ‰‰¦  «        D ¦   «         ¦  «        S t          ‰ ¦  «        j        dk    r,t          ‰ j        ‰j        ‰j        ‰‰‰‰‰‰‰	‰
‰‰‰¬¦  «        S t          ‰ t"          ¦  «        �r/t          ‰t"          ¦  «        st          d	t          ‰¦  «        › �¦  «        ‚t%          ‰                      ¦   «         ¦  «        t%          ‰                     ¦   «         ¦  «        k    rSt          d
t%          ‰                      ¦   «         ¦  «        › dt%          ‰                     ¦   «         ¦  «        › �¦  «        ‚t)          ‰                      ¦   «         ¦  «        D ]@}t          ‰ |         ‰|         ‰|         ‰‰‰‰‰‰‰	‰
‰‰‰¬¦  «        s ‰	d|¦  «          dS ŒAdS t          ‰ t$          ¦  «        r…t          ‰t$          ¦  «        st          dt          ‰¦  «        › �¦  «        ‚t%          ‰ ¦  «        t%          ‰¦  «        k    r/t          dt%          ‰ ¦  «        › dt%          ‰¦  «        › �¦  «        ‚dS t          ‰ t
          j        t,          f¦  «        �r%t          ‰ t
          j        j        ¦  «        rt          d¦  «        ‚t          ‰t
          j        j        ¦  «        rt          d¦  «        ‚d1d„Šˆfd„‰ ‰‰fD ¦   «         \  Š ŠŠ‰ j        r>‰j        st          d¦  «        ‚‰                      ¦   «         Š ‰                     ¦   «         Št          ‰t
          j        ¦  «        s/t          dt          ‰ ¦  «        › dt          ‰¦  «        › �¦  «        ‚‰�rú‰ j        ‰j        k    r ‰	d‰ j        ‰j        ¦  «         dS ‰ j        t
          j        k    �r»‰rdS ‰�rP‰ ‰z                       ¦   «                              ¦   «         }‰ ‰z                       ¦   «                              ¦   «         }|dk    rt9          |dk    ¦  «        S ||z                       ¦   «         }|‰k     rÆ ‰	d|‰t?          |                     ¦   «         ¦  «        t?          |                     ¦   «         ¦  «        t?          ‰                      ¦   «                              ¦   «         ¦  «        t?          ‰                     ¦   «                              ¦   «         ¦  «        t          ‰ j         ¦  «        ¦  «         dS dS t          j!        ‰  "                    t
          j#        ¬¦  «        ‰ "                    t
          j#        ¬¦  «        ‰‰‰¬¦  «        }|s ‰	d¦  «         |S ‰�r‰  $                    ¦   «          "                    t
          j%        ¦  «        Š ‰ $                    ¦   «          "                    t
          j%        ¦  «        Št          j!        ‰ ‰‰‰d¬¦  «        rdS t
          j        j&         '                    ‰ ‰dd ¬!¦  «        }|d"k     rQtP           )                    d#| *                    ¦   «          +                    ¦   «                              ¦   «         ¦  «         t9          |d"k    ¦  «        S ‰s‰  "                    ‰j        ¦  «        Š t          j!        ‰ ‰‰‰‰¬¦  «        rdS ‰j        t
          j,        k    �r´d$}‰ -                    ¦   «          .                    ¦   «         s€‰ -                    ¦   «          .                    ¦   «         sZ‰  -                    ¦   «          .                    ¦   «         r4t          j!        ‰ "                    ‰j        ¬¦  «        ‰||‰¬¦  «        rdS t_          ‰‰ ¦  «                             ¦   «         }ta          j-        |¦  «        rtP           )                    d%¦  «         t_          ‰‰¦  «                             ¦   «         }d2ˆˆˆ ˆˆˆ
fd'„} |¦   «         }|||z  ‰d(z  z   k    }|sG‰rEta          j-        |¦  «        r1ta          j-        |¦  «        rt
          j1        j2        j3        j4        sd}|s) ‰	d)||‰ 5                    ¦   «         ‰j        |‰‰
¦  «         |S ‰rdS  ‰	d*‰¦  «         dS t          ‰ tl          t>          t          d¦  «        t8          t
          j7        f¦  «        r)‰rdS ‰ ‰k    }|s ‰	d+t          ‰ ¦  «        ‰ ‰¦  «         |S tq          ‰ ¦  «        sts          ‰ ¦  «        ri‰r2tq          ‰¦  «        s#ts          ‰¦  «        s‰                      ¦   «         Š t          ‰ ¦  «        t          ‰¦  «        u o‰ ‰k    }|s ‰	d,‰ ‰¦  «         |S tu          ‰ ¦  «        r\t          ‰ ¦  «        t          ‰¦  «        u o=t          t          j;        ‰ ¦  «        t          j;        ‰¦  «        ‰‰‰‰‰‰‰‰	‰
¬-¦  «        S t          ‰ ¦  «        j        d.v rwt          ‰ ¦  «        t          ‰¦  «        ur/t          dt          ‰ ¦  «        › dt          ‰¦  «        › �¦  «        ‚t          ˆˆˆˆˆˆ	ˆ ˆˆˆˆ
fd/„‰ j<        D ¦   «         ¦  «        S t{          d0t          ‰ ¦  «        j        › �¦  «        ‚)3z-Check correctness to see if ref and res matchNztype mismatch rÍ   zLength mismatchFc              3  óZ   •K  — | ]%\  }}}t          |||‰‰‰‰‰‰‰
‰‰‰‰	¬ ¦  «        V — Œ&dS )©r%  r'  r(  r)  r*  Nr  )r¤   ÚaiÚbiÚ	fp64_refir   r  r"  r(  r$  r*  r%  r#  r  r)  r'  s       €€€€€€€€€€€rm   r¦   zsame.<locals>.<genexpr>‘  sx   øè è € ð ,
ð ,
ñ" "��B˜	õ! ØØØØØØØØ$ØØ#Ø9aØ%9Ø!1Ø+ðñ ô ð,
ð ,
ð ,
ð ,
ð ,
ð ,
rl   ÚQuestionAnsweringModelOutputr-  zExpected res to be a dict, got zkeys mismatch z == )r   r  r  r"  r#  r$  r%  r'  r(  r)  r*  zAccuracy failed for key name %sTzExpected res to be a set, got zelements mismatch zref should not be a FakeTensorzres should not be a FakeTensorrÇ  r   rt   rE  c                ób   — t          | t          j        ¦  «        r| nt          j        | ¦  «        S rƒ   )r<  r  rÒ  Útensor©rÇ  s    rm   Ú	to_tensorzsame.<locals>.to_tensorá  s%   € Ý" 1¥e¤lÑ3Ô3ÐH�1�1½¼Àa¹¼ÐHrl   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S rƒ   rK   )r¤   rH  r5  s     €rm   r¦   zsame.<locals>.<genexpr>ä  s+   øè è € ÐMÐM°˜i˜i¨™nœnÐMÐMÐMÐMÐMÐMrl   z-Expected res to be sparse since ref is sparsezdtype mismatch %s, %sr   z^IoU accuracy failed: %.4f < %.2f (intersection=%d, union=%d, ref_sum=%d, res_sum=%d, shape=%s)ra  )ÚatolÚrtolr  z+Accuracy failed: uint8 tensor did not matchg�íµ ÷Æ°>)ÚdimÚepsr  zSimilarity score=%sg{®Gáz¤?z=Found nan in reference. Consider running in higher precision.r!  c                 ój  •— ‰rdS ‰j         t          j        t          j        fv rdnd} ‰r‰                     ¦   «         dk    rd} nm‰r‰                     ¦   «         dk    rd} nP‰                     ¦   «         dk     s6‰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       @rL  é   r  éþÿÿÿr2   g{®Gáz”?)rb  r  rp  Úbfloat16ÚnumelÚndimrl  )Ú
multiplierr(  r  r  r•  r  r'  s    €€€€€€rm   Úget_multiplierzsame.<locals>.get_multiplierI  sâ   ø€ ð ,ð $Ø#˜tð  #œy­U¬]½E¼NÐ,KÐKÐK˜˜ÐQTð ð @ð )Ø ŸšÑ(Ô(¨BÒ.Ð.à%)˜
˜
ØAð )Ø ŸšÑ(Ô(¨CÒ/Ð/à%(˜
˜
à ŸšÑ(Ô(¨4Ò/Ð/ØœH¨šM˜M¨c¬i¸¬m¸s¼yÈ¼}Ð.QÐ.QÒ.QÐ.QÐPQÒ.QÐ.QÐ.QÐ.Qà (š?˜?ð
 &)˜
Ø%Ð%rl   r<  zŠRMSE (res-fp64): %.5f, (ref-fp64): %.5f and shape=%s. res.dtype: %s, multiplier: %f, tol: %f, use_larger_multiplier_for_smaller_tensor: %dz+Accuracy failed: allclose not within tol=%szAccuracy failed (%s): %s != %sz!Accuracy failed (numpy): %s != %s©r   r  r  r"  r#  r$  r%  r'  )ÚMaskedLMOutputÚSeq2SeqLMOutputÚ!CausalLMOutputWithCrossAttentionsÚLongformerMaskedLMOutputÚ	InstancesÚSquashedNormalÚBoxesÚNormalÚTanhTransformÚFooÚVariablec              3  ó    •K  — | ]H}t          t          ‰|¦  «        t          ‰
|¦  «        t          ‰|¦  «        ‰‰‰‰‰	‰‰‰¬ ¦  «        V — ŒIdS )rE  N)r  rS  )r¤   rÓ   r   r  r"  r  r$  r%  r  r#  r•  r  r'  s     €€€€€€€€€€€rm   r¦   zsame.<locals>.<genexpr>¹  s‡   øè è € ð 
ð 
ð õ Ý˜˜SÑ!Ô!Ý˜˜SÑ!Ô!Ý˜ #Ñ&Ô&Ø-ØØ#Ø'Ø%9Ø+Ø#Ø9aðñ ô ð
ð 
ð 
ð 
ð 
ð 
rl   zunsupported type: )rÇ  r   rt   rE  )rt   r!  )>r<  r†  r=  r”   rß  r  rÓ  ÚParameterListr  rü   rÜ  r›  rþ  r{  rf   r  Úlossr“  r”  r‡  rr  rÒ  r!  rÖ  rL   Ú	is_sparseÚto_denserb  rö   rŠ   r�  rs   rl  ÚallcloseÚtorj  Úflattenrq  Ú
functionalÚcosine_similarityr‘   rä  ÚdetachÚcpurr  ÚisnanrÍ  r  Úmathr´  rI   ÚcppÚinject_relu_bug_TESTING_ONLYr|  rœ   rN  rn  rs  rÐ  Ú	as_tensorÚ__dict__rñ   )r  r•  r  r   r  r  r"  r#  r$  r%  r'  r(  r)  r*  r  ÚintersectionÚunionÚiouÚrÚscoreÚ	loose_tolÚ	ref_errorÚ	res_errorrD  rC  Úpasses_testr5  s   ``````````````            @rm   r  r  v  s1  øøøøøøøøøøøøøøø€ ð" ÐØˆÝØ�d•E�;Ô,­e¬hÔ.DÅeÄjÐQñô ð AFõ ˜#¥¥e­[Ô->Ð?Ñ@Ô@ð 	KÝ Ð!Iµ$°s±)´)Ð!IÐ!I½dÀ3¹i¼iÐ!IÐ!IÑJÔJÐJÝˆs‰8Œ8•s˜3‘x”xÒÐØˆIÐ'Ñ(Ô(Ð(Ø�5Ý�3‰xŒx�3˜s™8œ8Ò#ð 
­ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
ð ,
õ" &)¨¨c°8Ñ%<Ô%<ð#,
ñ ,
ô ,
ñ )
ô )
ð 	
õ& 
ˆc‰ŒÔ	Ð=Ò	=Ð	=õ ØŒHØŒHØŒMØØØØØ ØØØ5]Ø!5Ø-Ø'ð
ñ 
ô 
ð 	
õ  
�C�Ñ	Ô	ñ RFÝ˜#�tÑ$Ô$ð 	PÝ Ð!NÅ4ÈÁ9Ä9Ð!NÐ!NÑOÔOÐOÝˆs�xŠx‰zŒz‰?Œ?�c #§(¢(¡*¤*™oœoÒ-Ð-Ý ØG¥ S§X¢X¡Z¤Z¡¤ÐGÐGµc¸#¿(º(¹*¼*±o´oÐGÐGñô ð õ ˜Ÿš™
œ
Ñ#Ô#ð 	ð 	ˆAåØ˜”FØ˜”FØ˜Q”KØ#1ØØ'Ø +Ø)=Ø"/Ø'Ø=eØ)=Ø%5Ø"/ðñ ô ðð$ �	Ð;¸QÑ?Ô?Ð?Ø�u�uð'ð( ˆtÝ	�C�Ñ	Ô	ð uFÝ˜#�sÑ#Ô#ð 	OÝ Ð!MÅ$ÀsÁ)Ä)Ð!MÐ!MÑNÔNÐNÝˆs‰8Œ8•s˜3‘x”xÒÐÝ Ð!Nµc¸#±h´hÐ!NÐ!NÅCÈÁHÄHÐ!NÐ!NÑOÔOÐOØˆtÝ	�C�%œ,­Ð.Ñ	/Ô	/ñ oFÝ�c�5Ô,Ô7Ñ8Ô8ð 	CÝ Ð!AÑBÔBÐBÝ�c�5Ô,Ô7Ñ8Ô8ð 	CÝ Ð!AÑBÔBÐBð	Ið 	Ið 	Ið 	Ið NÐMÐMÐM¸¸cÀ8Ð8LÐMÑMÔMÑˆˆS�(àŒ=ð 	!Ø”=ð VÝ$Ð%TÑUÔUÐUØ—,’,‘.”.ˆCØ—,’,‘.”.ˆCÝ˜#�uœ|Ñ,Ô,ð 	KÝ Ð!Iµ$°s±)´)Ð!IÐ!I½dÀ3¹i¼iÐ!IÐ!IÑJÔJÐJØñ (	ØŒy˜CœIÒ%Ð%Ø�	Ð1°3´9¸c¼iÑHÔHÐHØ�uØŒy�EœJÒ&Ñ&Ø ð  Ø˜4Ø#ñ  ð %(¨#¡I§?¢?Ñ#4Ô#4×#:Ò#:Ñ#<Ô#<�LØ  3™YŸOšOÑ-Ô-×3Ò3Ñ5Ô5�EØ ’z�zå# L°AÒ$5Ñ6Ô6Ð6Ø'¨%Ñ/×5Ò5Ñ7Ô7�CØ˜]Ò*Ð*Ø!˜	Ø|ØØ)Ý × 1Ò 1Ñ 3Ô 3Ñ4Ô4Ý §
¢
¡¤Ñ-Ô-Ý §¢¡	¤	§¢Ñ 0Ô 0Ñ1Ô1Ý §¢¡	¤	§¢Ñ 0Ô 0Ñ1Ô1Ý  ¤™OœOñ	ô 	ð 	ð  %˜uØ˜4å”NØ—F’F¥¤�FÑ-Ô-Ø—F’F¥¤�FÑ-Ô-ØØØ'ðñ ô �ð ð MØ�IÐKÑLÔLÐLØ�àñ t	Ø—+’+‘-”-×"Ò"¥5¤=Ñ1Ô1ˆCØ—+’+‘-”-×"Ò"¥5¤=Ñ1Ô1ˆCÝŒ~˜c 3¨S°sÀdÐKÑKÔKð ð �tÝ”HÔ'×9Ò9¸#¸sÈÈtÐ9ÑTÔTˆEØ�tŠ|ˆ|Ý—’Ð1°5·<²<±>´>×3EÒ3EÑ3GÔ3G×3LÒ3LÑ3NÔ3NÑOÔOÐOÝ˜ šÑ&Ô&Ð&àð (Ø—f’f˜SœYÑ'Ô'�õ Œ~˜c 3¨S°sÀiÐPÑPÔPð Ø�tð Œ~¥¤Ò.Ñ.ð %�	à ŸšÑ(Ô(×,Ò,Ñ.Ô.ð àŸIšI™KœKŸOšOÑ-Ô-ð ð Ÿ	š	™œŸšÑ)Ô)ð õ œØ Ÿš¨#¬)˜Ñ4Ô4ØØ&Ø&Ø"+ðñ ô ð	 ð  ˜4Ý  ¨3Ñ/Ô/×4Ò4Ñ6Ô6�	å”:˜iÑ(Ô(ð Ý—K’KØWñô ð õ ! ¨3Ñ/Ô/×4Ò4Ñ6Ô6�	ð!&ð !&ð !&ð !&ð !&ð !&ð !&ð !&ð !&ð !&ð !&ðF ,˜^Ñ-Ô-�
à'¨J¸Ñ,BÀSÈ4ÁZÑ,OÒP�à#ð	'à!ð	'õ œ
 9Ñ-Ô-ð	'õ œ
 9Ñ-Ô-ð		'õ "œOÔ2Ô6ÔSð	'ð #'�KØ"ð Ø�IðIà!Ø!ØŸš™
œ
Øœ	Ø"ØØ@ñ
ô 
ð 
ð #Ð"àð Ø�tàˆIÐCÀSÑIÔIÐIØ�5Ý	�C�#�s¥D¨¡J¤Jµµe´lÐCÑ	DÔ	Dð >FØð 	Ø�4Ø�3ŠJˆØð 	MØˆIÐ6½¸S¹	¼	À3ÈÑLÔLÐLØˆÝ	˜3Ñ	Ô	ð 7FÕ#6°sÑ#;Ô#;ð 7FØð 	Ý˜cÑ"Ô"ð	Ý&9¸#Ñ&>Ô&>ð	ð —(’(‘*”*ˆCÝ�#‰YŒY�$˜s™)œ)Ð#Ð5¨#°ª*ˆØð 	EØˆIÐ9¸3ÀÑDÔDÐDØˆÝ	˜#Ñ	Ô	ð .FÝ�S‘	”	�T #™YœYÐ&ð 
­DÝŒO˜CÑ Ô ÝŒO˜CÑ Ô ØØ)ØØØ#Ø!5Ø'ØØ5]ð-
ñ -
ô -
ð 	
õ 
ˆc‰ŒÔ	ð  ð 
ð 
õ �‰9Œ9�D ™IœIÐ%Ð%Ý Ð!Iµ$°s±)´)Ð!IÐ!I½dÀ3¹i¼iÐ!IÐ!IÑJÔJÐJÝð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð ”|ð
ñ 
ô 
ñ 
ô 
ð 	
õ" ÐDµ°S±	´	Ô0BÐDÐDÑEÔEÐErl   c                ón   — | j                              d¦  «        d         }d| j        › d|› d| j        › d�S )Nú/r  rè  z' (rÎ   r  )r  ÚsplitrÛ  rÝ  )rØ  Úshort_filenames     rm   Úformat_func_inforp  Í  sC   € ØÔ%×+Ò+¨CÑ0Ô0°Ô4€NØGˆtŒ|ÐGÐG ÐGÐG°Ô1DÐGÐGÐGÐGrl   c               #  ó  K  — t           j        } t          j        t           _        t           j        }t          j        t           _        	 d V — | t           _        |t           _        d S # | t           _        |t           _        w xY wrƒ   )rI   Úrecompile_limitrZ  rŽ  Úaccumulated_recompile_limit)ÚpriorÚprior_acc_limits     rm   Údisable_cache_limitrv  Ò  sm   è è € åÔ"€Eå œ[…FÔÝÔ8€Oå),¬…FÔ&ð=Øˆˆˆà!&�ÔØ-<�Ô*Ð*Ð*øð "'�ÔØ-<�Ô*Ð<Ð<Ð<Ð<s   ÁA& Á&B z'collections.defaultdict[Any, list[Any]]Úguard_failuresz3list[torch._dynamo.output_graph.GraphCompileReason]Úgraph_break_reasonsÚroot_dirc                óò   — dt           j                              ¦   «                              d¦  «        z   dz   t          t	          j        ¦   «         ¦  «        z   }t          j                             | |¦  «        S )NÚrun_z%Y_%m_%d_%H_%M_%S_%fz-pid_)ÚdatetimeÚnowÚstrftimerœ   r¤  ÚgetpidrÄ  r¢   )ry  Údir_names     rm   Ú_get_debug_dirr�  ñ  sm   € ð 	Ý
Ô
×
Ò
Ñ
!Ô
!×
*Ò
*Ð+AÑ
BÔ
Bñ	Cð ñ	õ �bŒi‰kŒkÑ
Ô
ñ		ð õ Œ7�<Š<˜ (Ñ+Ô+Ð+rl   c                 ó8   — t           j        } t          | ¦  «        S rƒ   )rI   rŠ  r�  )Ú
debug_roots    rm   rÅ  rÅ  ý  s   € ÝÔ&€JÝ˜*Ñ%Ô%Ð%rl   Úrequiredc                óÔ   — d| j         v r't          | j         d         ¦  «        r| j         d         S |r5ddlm} ddlm}  |dt          | ¦  «        d| › d�g |j        ¢¬	¦  «         d S d S )
Nr©  r   rí  r2   rµ  z Missing FakeTensor example valuez,`FakeTensor` example value was required for z but not available.r·  )rJ  rM   rÄ  rî  r±  r¶  rœ   r¸  )rK  r„  rî  r¶  s       rm   Úextract_fake_example_valuer†    s¬   € Ø˜$œ)Ð#Ð#­°´	¸/Ô0JÑ(KÔ(KÐ#ØŒy˜Ô)Ð)Ø	ð Ø3Ð3Ð3Ð3Ð3Ð3à'Ð'Ð'Ð'Ð'Ð'àˆØ6Ý˜‘I”IØ`ÀtÐ`Ð`Ð`Ø1Ð%Ô0Ð1ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
ð ˆtrl   rú  c                ó€   — t          | ¦  «        |j        ur't          dt          | ¦  «        › d|j        › �¦  «        ‚| S )Nz0Expected fake mode of e to be tx.fake_mode, got z vs )rN   r­  rü   )rú  rt  s     rm   Úensure_graph_fakerˆ    sQ   € Ý˜1ÑÔ R¤\Ð1Ð1ÝØiÕ?RÐSTÑ?UÔ?UÐiÐiÐ[]Ô[gÐiÐiñ
ô 
ð 	
ð €Hrl   rï  Úallow_non_graph_fakec                ó^   ‡ ‡— dˆˆ fd„}t           j        j                             ||¦  «        S )Nrò  r¨  rt   r   c                óð  •— | j         dk    rd| j        vrt          | ‰‰¦  «        S | j         dk    r‹d| j        vr‚| j        ‰j        j        vrt          d| j        ›d�¦  «        ‚‰j        j        | j                 }t          |t          j	        j
        ¦  «        st          dt          |¦  «        › �¦  «        ‚|S | j        d         }‰s*t          |t          j        ¦  «        rt          |‰¦  «        S |S )NrÐ  r©  Úget_attrzExpected n.target z to be in tx.output.nn_modulesz.Expected gm to be a torch.fx.GraphModule, got )rð  rJ  Úget_fake_valueÚtargetrü  Ú
nn_modulesrü   r<  r  r   ÚGraphModulerÜ  rÒ  rˆ  )rò  rà  rÒ   r‰  rt  s      €€rm   Úvisitz)get_fake_values_from_nodes.<locals>.visit  s  ø€ ØŒ4�?Ò"Ð" ¸a¼fÐ'DÐ'Dõ " ! RÐ)=Ñ>Ô>Ð>àŒT�ZÒÐ O¸1¼6Ð$AÐ$AØŒx˜rœyÔ3Ð3Ð3Ý$ØS¨¬ÐSÐSÐSñô ð ð ”Ô% a¤hÔ/ˆBÝ˜b¥%¤(Ô"6Ñ7Ô7ð Ý$ØOÅTÈ"ÁXÄXÐOÐOñô ð ð ˆIàŒf�_Ô%ˆØ#ð 	.­
°3½¼Ñ(EÔ(Eð 	.Ý$ S¨"Ñ-Ô-Ð-Øˆ
rl   )rò  r¨  rt   r   )r  r   rK  Úmap_arg)rt  rï  r‰  r‘  s   ` ` rm   Úget_fake_values_from_nodesr“    sC   øø€ ðð ð ð ð ð ð õ. Œ8Œ=× Ò  ¨Ñ.Ô.Ð.rl   r¶  úFakeTensorMode | Nonec                ó¤   ‡‡— ddl }ddlmŠ |€| S d}|j        €t	          d¦  «        ‚|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+)\)z$fake_mode.shape_env must not be NoneÚmatchr   rt   rœ   c                ó  •‡— d|                       d¦  «        › �Št          ˆfd„‰                     ¦   «         D ¦   «         d ¦  «        }t          |t          ‰f¦  «        rd‰› dt          |¦  «        › d�S |                       d¦  «        S )Nr,  r2   c              3  ó8   •K  — | ]\  }}|j         ‰k    ¯|V — Œd S rƒ   )rz   )r¤   r  r  Úsym_names      €rm   r¦   zGget_concrete_sizes_from_symints.<locals>.replace_sym.<locals>.<genexpr>P  s3   øè è € ÐKÐK‘4�1�a¸¼À(Ò8JÐ8JˆQÐ8JÐ8JÐ8JÐ8JÐKÐKrl   r‡  z	: hint = r  r   )Úgrouprœ  rÇ   r<  rs   rœ   )r—  rH  rš  r–  Úbacked_var_to_vals     @€€rm   Úreplace_symz4get_concrete_sizes_from_symints.<locals>.replace_symM  s˜   øø€ Ø'�u—{’{ 1‘~”~Ð'Ð'ˆÝØKÐKÐKÐKÐ,×2Ò2Ñ4Ô4ÐKÑKÔKØñ
ô 
ˆõ �c�C ˜>Ñ*Ô*ð 	6Ø5�xÐ5Ð5­#¨c©(¬(Ð5Ð5Ð5Ð5Ø�{Š{˜1‰~Œ~Ðrl   )r—  r   rt   rœ   )r˜  Úsympy.core.numbersr–  r®  rü   rœ  rµ  )r¶  r­  r˜  Úpatternr®  r�  r–  rœ  s         @@rm   Úget_concrete_sizes_from_symintsr   9  s™   øø€ ð €I€I€Ià*Ð*Ð*Ð*Ð*Ð*àÐØˆ
à€GØÔÐ"ÝÐCÑDÔDÐDØÔ#€IØ!Ô3Ððð ð ð ð ð ð ð ˆ"Œ&�˜+ sÑ
+Ô
+€CØ€Jrl   Úgb_fnúCallable[[], NoReturn]r   c           	     óè   — ddl m}m} 	  | ¦   «          nP# |$ rH} |t          |¦  «        t	          |dd ¦  «        ¦  «        }|                     |j        ¦  «        d ‚d }~ww xY wt          d¦  «        ‚)Nr2   )ÚTorchRuntimeErrorÚUnsupportedÚ
real_stackzshould be unreachable)rÖ  r¤  r¥  rœ   rS  Úwith_tracebackÚ__traceback__rü   )r¡  r¤  r¥  rú  rÖ  s        rm   Ú(_wrap_graph_break_with_torch_runtime_errr©  [  s˜   € Ø3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð<Øˆ‰ŒˆˆøØð <ð <ð <ØÐ¥ A¡¤­°°<ÀÑ(FÔ(FÑGÔGˆØ× Ò  ¤Ñ1Ô1°tÐ;øøøøð<øøøõ Ð0Ñ
1Ô
1Ð1s   Š
 •A"šAAÁA"c                ó  — 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rƒ   )rï   rë   Ú_get_fake_value_implrü  Úbytecode_tracing_timingsÚget_fake_value_ns)rK  rt  r‰  Ú_t0s       rm   r�  r�  f  s~   € õ
 Œ,‰.Œ.€CðUÝ# D¨"Ð.BÑCÔCà
Œ	Ô*Ð<Ô<ÅÄÁÄÐQTÑ@TÑTÐ<Ô<Ð<øˆŒ	Ô*Ð<Ô<ÅÄÁÄÐQTÑ@TÑTÐ<Ô<Ð<Ð<Ð<Ð<s   •A Á0Bc           	     óV  ‡ ‡‡‡‡‡‡‡‡‡— 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        r,t          ‰t)          ‰ i ¦  «        |¦  «        }d„ |D ¦   «         }ng }i }dŠ‰j        }	|	€t-          d	¦  «        ‚‰d
k    rgt/          ‰¦  «        dk    rTt1          ‰d         t          j        j        ¦  «        r/t7          ‰d         |	¦  «        ft9          ‰dd…         ¦  «        z   Š‰dk    r\‰j        j        ‰ j                 ŠtA          ‰¦  «        r&tC          ‰d¦  «        r‰ "                    ‰‰¦  «         t7          ‰|	¦  «        Š‰ j#        dv stI          d„ ‰D ¦   «         ¦  «        rt9          d„ ‰D ¦   «         ¦  «        Š	 |	5  tK          ¦   «         5  tM          ˆˆˆˆ ˆfd„¦  «        }
ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   �nN# |$ r ‚ tN          $ �r;}|Š|j(        �|j(        Št1          ‰t          j)        j*        j+        ¦  «        rq‰j,        t          j-        j.        j/        j0        t          j-        j.        j1        j0        fv rdg}ndg} ‰dte          ‰j,        ¦  «        d‰j,        › d�|‰¬¦  «         �nOt1          ‰t          j)        j*        j3        ¦  «        rrt          j        j        j4        s. ‰dte          ‰j,        ¦  «        d‰j,        › d�dg‰¬¦  «         �nç ‰dte          ‰j,        ¦  «        d‰j,        › d�dg‰¬¦  «         �n¹t1          ‰t          j)        j*        j5        ¦  «        r�‰j,        Šd}t1          ‰t          j6        j7        ¦  «        rGt          j8         9                    ‰j:        j#        ‰j:        j;        ¦  «        }|�|\  }}d|› d|› d |› d!�} ‰d"d#‰j,        › �d|› d$�g‰¬¦  «         �nt1          ‰t          j<        j=        j>        j?        ¦  «        r! ||j@        te          ‰¦  «        d%¬&¦  «        ‰‚t1          ‰t          j)        j*        jA        ¦  «        r%t…          ˆˆ ˆˆfd'„¦  «         t-          d(¦  «        d‚t1          ‰|¦  «        r ||j@        |j        d         ¦  «        |‚t1          ‰t†          ¦  «        r3d)te          ‰¦  «        v r" ‰d*d+‰ j        › d,‰› �dg ‰jD        ¢‰¬¦  «         t‹          te          |¦  «        |	¦  «        Št…          ˆˆˆˆfd-„¦  «         t-          d.¦  «        d‚d}~ww xY w|s9t�          jG        t          jH        t“          jJ        t–          ‰¬/¦  «        |
¦  «        }t          j        j        j        st          j        j        j        r!‰j        jL         M                    ‰ ||¦  «         |
S )0az  
    Run the computation represented by `node` using fake tensors and return the result.

    allow_non_graph_fake: whether to allow the return result to be:
        1. non-fake or 2. fake that is not created by this instance of Dynamo.
        If `True`, you must be prepared to deal with such return values, ideally
        by further wrapping them as this graph's fakes.
    r   )ÚValueRangeErrorr2   rµ  )rî  r¥  Ú	UserErrorÚUserErrorTyper©  c                óV   — i | ]&}t          |¦  «        ¯t          |¦  «        |j        “Œ'S rK   )rM   r  rä  ré  s     rm   rì  z(_get_fake_value_impl.<locals>.<dictcomp>•  s=   € ð !
ð !
ð !
Ø&)ÅÈÁÄð!
Ýˆs‰GŒG�S”\ð!
ð !
ð !
rl   Nr«  Úcall_methodÚcall_moduleÚ_initialize_hook)ÚinterpolateÚ
is_integerÚwrapped_gradientc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S rƒ   )r<  Úcomplex)r¤   Úas     rm   r¦   z'_get_fake_value_impl.<locals>.<genexpr>³  sE   è è € ð Mð MØ#$�
�1•gÑÔðMð Mð Mð Mð Mð Mrl   c              3  ó„   K  — | ];}t          |t          j        ¦  «        r|j        j        �t          |¦  «        n|V — Œ<d S rƒ   )r<  r  ÚSymFloatrK  Úhintr!  ré  s     rm   r¦   z'_get_fake_value_impl.<locals>.<genexpr>·  sc   è è € ð 
ð 
ð õ ˜c¥5¤>Ñ2Ô2ðØ7:´x´}Ð7Põ �c‘
”
�
àð	
ð 
ð 
ð 
ð 
ð 
rl   c                 ó4   •— t          ‰j        ‰‰ ‰‰¦  «        S rƒ   )Úrun_noderü  )r-  r/  ÚnnmodulerK  rt  s   €€€€€rm   r  z&_get_fake_value_impl.<locals>.<lambda>Ã  s   ø€ � ¤¨D°$¸ÀÑIÔI€ rl   zkEnable tracing of data-dependent output operators with `torch._dynamo.config.capture_scalar_outputs = True`z’Consider wrapping the operator into a PyTorch-understood custom operator (see https://pytorch.org/tutorials/advanced/custom_ops_landing_page.html)zData dependent operatorz
Operator `zP` has a non-Tensor output whose value is dependent on the data of Tensor inputs.rð  zDynamic shape operatorz.`'s output shape depends on input Tensor data.zmEnable tracing of dynamic shape operators with `torch._dynamo.config.capture_dynamic_output_shape_ops = True`z'Dynamic shape operator (no meta kernel)zA` does not have a meta kernel that supports dynamic output shapesz!Please report an issue to PyTorchr±  z:It's possible that the support was implemented in module `z` and you may need to `import z`(z), otherwise z3Operator does not support running with fake tensorszunsupported operator: z}see https://docs.google.com/document/d/1GgvOe7C8_NVOMLOCwDaYV1mXXyHMXY7ExoewHqooxrs/edit#heading=h.64r4npvq0w0 for how to fixÚconstrain_as_size_example)Ú	case_namec                 óT   •—  ‰d‰› d‰j         › �t          ‰ ¦  «        dg‰ ¬¦  «        S )NzTensor device mismatchrÍ   z8Move inputs, parameters, and buffers to the same device.rð  )rŽ  rœ   )ÚcauserK  rð  rî  s   €€€€rm   r  z&_get_fake_value_impl.<locals>.<lambda>&  s@   ø€ ˜˜Ø4Ø!Ð1Ð1 D¤KÐ1Ð1Ý # E¡
¤
ØUÐVØ"ðñ ô € rl   úshould not be reachableÚargumentz&TypeError when making fake tensor callz
TypeError z: c                 ó2   •—  ‰dd‰g ‰j         ¢‰ ¬¦  «        S )Nz)RuntimeError when making fake tensor callr±  rð  ©Ú
USER_ERROR)rÆ  r¶  r¶  rî  s   €€€€rm   r  z&_get_fake_value_impl.<locals>.<lambda>;  s0   ø€ �M�MØCØØØ5Ð)Ô4Ð5Øðñ ô € rl   zshould not reachable)rt  )NÚtorch.utils._sympy.value_rangesr°  r±  r¶  rÖ  rî  r¥  r±  r²  rð  rJ  rM   r“  r-  r/  r  r€  rI   Úuse_graph_deduplicationÚtrack_nodes_for_deduplicationr3   r­  rü   r›  r<  rÓ  rs  r  r=  rü  r�  rŽ  rÛ  rÚ   Ú_infer_parametersrz   rÍ  r   r  rñ   Ú	__cause__rÖ  r¹  ÚDataDependentOutputExceptionÚfuncÚopsÚatenr�  r  Ú_local_scalar_denserœ   ÚDynamicOutputShapeExceptionÚ capture_dynamic_output_shape_opsÚUnsupportedOperatorExceptionr¥  r§  r7  Ú_dispatch_pystubÚ_schemaÚoverload_namer   r¯  r°  ÚGuardOnDataDependentSymNodeÚCONSTRAINT_VIOLATIONÚFakeTensorDeviceMismatchErrorr©  rù  rË  r   rR  Útree_map_onlyrÒ  r—  Úpartialrˆ  Úregion_trackerÚtrack_node_mutations)rK  rt  r‰  r°  r¥  r±  r²  Úflat_args_kwargsÚid_to_initial_versionr­  Úret_valrú  rô  Úimport_suggestionÚmaybe_pystubrÎ  ÚctxrÚ  r-  rÆ  r¶  r/  r¶  rÂ  rð  rî  s   ``                @@@@@@@@rm   r«  r«  r  sz  øøøøøøøøøø€ ð @Ð?Ð?Ð?Ð?Ð?à#Ð#Ð#Ð#Ð#Ð#ØIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIà	Œ€Bð ˜$œ)Ð#Ð#­°´	¸/Ô0JÑ(KÔ(KÐ#ØŒy˜Ô)Ð)å-Ø
ˆTŒY˜œÐ$Ð&:ñô �L€Dˆ&õ
 	ŒÔÔ4ð#åŒ=ÔÔ=ð#õ 6Ø•˜t RÑ(Ô(Ð*>ñ
ô 
Ðð!
ð !
Ø-=ð!
ñ !
ô !
ÐÐð
 Ðà "Ðà€HØ”€IØÐÝÐ9Ñ:Ô:Ð:Ø	ˆ]ÒÐ�s 4™yœy¨1š}˜}µ¸DÀ¼GÅUÄXÄ_Ñ1UÔ1U˜}å'¨¨Q¬°Ñ;Ô;Ð=ÅÀdÈ1È2È2ÄhÁÄÑOˆà	ˆ]ÒÐØ”9Ô'¨¬Ô4ˆå˜(Ñ#Ô#ð 	7­°Ð:LÑ(MÔ(Mð 	7ð
 ×&Ò& x°Ñ6Ô6Ð6õ +¨8°YÑ?Ô?ˆà„yÐEÐEÐEÍð Mð MØ(,ðMñ Mô Mñ Jô JÐEõ ð 
ð 
ð ð
ñ 
ô 
ñ 
ô 
ˆðC?Øð 	ð 	Õ0Ñ2Ô2ð 	ð 	Ý)ØIÐIÐIÐIÐIÐIÐIÐIñô ˆGð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ùøð ð ð ð ØÝð |?ñ |?ð |?Ø ˆØŒ;Ð"Ø”KˆEåØ•5Ô$Ô0ÔMñ
ô 
ð l	ð
 ŒzÝ”	”Ô#Ô+Ý”	”Ô2Ô:ðð ð ðKð��ð`ð�ð ˆMØ1Ý˜EœJ™œðI¨¬ð Ið Ið IàØðñ ô ð ñ õ Ø•5Ô$Ô0ÔLñ
ô 
ð Q	õ ”=Ô'ÔHð Ø�Ø4Ý ¤
™OœOØ g¨U¬ZÐ gÐ gÐ gðYðð #ð	ñ 	ô 	ð 	ñ 	ð �ØEÝ ¤
™OœOØ z¨U¬ZÐ zÐ zÐ zà;ðð #ðñ ô ð ñ õ Ø•5Ô$Ô0ÔMñ
ô 
ð 9	ð ”ˆBØ "ÐÝ˜"�eœjÔ3Ñ4Ô4ð 
Ý$œx×8Ò8Ø”J”O R¤ZÔ%=ñ ô  �ð  Ð+Ø".‘K�F˜Cð/Ø#)ð/ð /ØIOð/ð /àð/ð /ð /ð &ð
 ˆMØMØ=°´Ð=Ð=Øà(ð &ð &ð &ðð
 ð
ñ 
ô 
ð 
ñ 
õ Ø•5”8Ô(Ô8ÔTñ
ô 
ð 	ð �)ØÔ2Ý�E‘
”
Ø5ðñ ô ð ð	õ
 Ø•5Ô$Ô0ÔNñ
ô 
ð 	õ 5ðð ð ð ð ð ð ñô ð õ !Ð!:Ñ;Ô;ÀÐEÝ˜˜Ñ/Ô/ð 		Ø�)˜MÔ>ÀÄÀqÄ	ÑJÔJÐPQÐQÝ˜�yÑ)Ô)ð 	¨j½CÀ¹J¼JÐ.FÐ.FØˆMØ@Ø; T¤[Ð;Ð;°EÐ;Ð;ØØ5Ð)Ô4Ð5Øðñ ô ð õ .­c°!©f¬f°iÑ@Ô@ˆÝ0ðð ð ð ð ð ð ñ	
ô 	
ð 	
õ Ð3Ñ4Ô4¸$Ð>øøøøðy|?øøøð|  ð 
ÝÔ ÝŒL�)Ô+Õ,=À"ÐEÑEÔEÀwñ
ô 
ˆõ
 	ŒÔÔ4ð
åŒ=ÔÔ=ð
ð 	Œ	Ô ×5Ò5ØØØ!ñ	
ô 	
ð 	
ð €Nsa   Ç;I Ç=IÈH/È#IÈ/H3	È3IÈ6H3	È7IÈ:I ÉI
É
I ÉI
ÉI ÉVÉ#L6VÖVútorch.fx.Node | Nonec                 ó.   — t          t          dd ¦  «        S )NrÔ   )rS  Ú_current_noderK   rl   rm   Úget_current_noderì  Z  s   € Ý•= '¨4Ñ0Ô0Ð0rl   c              #  ó‚   K  — t          ¦   «         }| t          _        	 d V — |t          _        d S # |t          _        w xY wrƒ   )rì  rë  rÔ   )rK  Úolds     rm   Úset_current_noderï  ^  sI   è è € å
Ñ
Ô
€CØ…MÔð"Øˆˆˆà!�ÔÐÐø˜c�ÔÐ!Ð!Ð!Ð!s   ž0 °>ÚtracerrÂ  c           	     óv  ‡‡‡‡— ‰j         Št          ‰¦  «        5  dˆˆˆˆfd„}ddlm} 	 ‰dk    r ‰j        ‰i ‰¤Žcd	d	d	¦  «         S ‰d
k    r{t          ‰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%|€t          d¦  «        ‚ |‰i ‰¤Žcd	d	d	¦  «         S ‰dk    r+| j                             ‰j        ¦  «        cd	d	d	¦  «         S ‰dk    r1d‰j        vrt          d¦  «        ‚‰j        d         cd	d	d	¦  «         S nµ# t          t           f$ rT}	ddlm} ddlm} g |j	        ¢}
t#          |	t          ¦  «        r|
ddgz  }
 |dd ||	¦  «        |
|	¬¦  «         Y d	}	~	nUd	}	~	w|$ r ‚ t$          $ r ‚ t&          $ r6}	t)           ||	¦  «        ¦  «                             |	j        ¦  «        |	‚d	}	~	ww xY wd	d	d	¦  «         n# 1 swxY w Y   t          ‰¦  «        ‚)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.
    rú  r   rt   rœ   c           	     óL   •— d‰› d‰j         › d‰› d‰› d�	t          | ¦  «        z   S )Nz0Dynamo failed to run FX node with fake tensors: rÍ   z(*z, **z): got )rŽ  rj  )rú  r-  r/  rK  rð  s    €€€€rm   Úmake_error_messagez$run_node.<locals>.make_error_message}  s@   ø€ àpÀ2ÐpÐpÈÌÐpÐpÐW[ÐpÐpÐagÐpÐpÐpÝ�q‘'”'ñðrl   r2   )r¥  rÐ  Nr´  r   rµ  rí  z/Missing attribute when running call_method noder±  zattribute not definedr·  rµ  z,nnmodule must not be None for call_module oprŒ  Úplaceholderr©  z8Expected 'example_value' in node.meta for placeholder opzsIf the op is a custom op, did you implement a fake tensor implementation? (e.g. with `@my_custom_op.register_fake`)z;If the op is a PyTorch op, please file an issue to PyTorch.zGNotImplementedError/UnsupportedFakeTensorException when running FX noderð  )rú  r   rt   rœ   )rð  rï  rÖ  r¥  rŽ  rÚ   r±  r¶  rî  rË  rS  rü   Úoutput_graphÚget_submodulerJ  rö  rø  r<  Ú
IndexErrorr×  rñ   r§  r¨  )rð  rK  r-  r/  rÂ  ró  r¥  r¶  rî  rú  rô  rð  s    ```       @rm   rÁ  rÁ  h  s{  øøøø€ ð" 
Œ€Bå	˜$Ñ	Ô	ð Eð Eð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	%Ð$Ð$Ð$Ð$Ð$ð;	Ø�_Ò$Ð$Ø"�t”{ DÐ3¨FÐ3Ð3ðEð Eð Eð Eñ Eô Eð Eð Eð �}Ò$Ð$Ý˜t Aœw¨¬Ñ4Ô4ð 	Ø3Ð3Ð3Ð3Ð3Ð3Ø2Ð2Ð2Ð2Ð2Ð2à!�MØ QØ "Ø$6Ð$6Ð7NÑ$OÔ$OØ=Ð 1Ô <Ð=ð	ñ ô ð ð 5•w˜t Aœw¨¬Ñ4Ô4°d¸1¸2¸2´hÐIÀ&ÐIÐIð1Eð Eð Eð Eñ Eô Eð Eð Eð2 �}Ò$Ð$ØÐ#Ý(Ð)WÑXÔXÐXØ�x Ð0¨Ð0Ð0ð9Eð Eð Eð Eñ Eô Eð Eð Eð: �zÒ!Ð!ØÔ*×8Ò8¸¼ÑEÔEð=Eð Eð Eð Eñ Eô Eð Eð Eð> �}Ò$Ð$Ø"¨$¬)Ð3Ð3Ý(ØRñô ð ð ”y Ô1ðIEð Eð Eð Eñ Eô Eð Eð Eð> %øõ $Õ%CÐDð 	ð 	ð 	à+Ð+Ð+Ð+Ð+Ð+Ø*Ð*Ð*Ð*Ð*Ð*à3Ð'Ô2Ð3ˆEÝ˜!Õ0Ñ1Ô1ð Øð@àQðñ �ð ˆMØaØØ.Ð.¨qÑ1Ô1ØØðñ ô ð ð ð ð ð ð øøøøð ð 	ð 	ð 	ØÝð 	ð 	ð 	ð
 Ýð 	ð 	ð 	ÝÐ1Ð1°!Ñ4Ô4Ñ5Ô5×DÒDØ”ñô àðøøøøð	øøøðEEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð EõN ˜Ñ
Ô
Ðs`   ›H!¬E ÁA4E ÃE Ã7$E Ä(*E ÅH!Å HÅ1A
G Æ;H!Ç HÇ1HÈHÈH!È!H%È(H%c                óF  ‡‡	‡
‡— ddl mŠ
 ddlmŠ ‰j        }| |v r||          S | j        }t          j        j         	                    | j
        | j        fˆfd„¦  «        \  }}|dk    rd| j        v r| j        d         j        S |dk    rD‰j        j        | j                 }t#          |¦  «        st%          j        |¦  «        }n ||i |¤Ž nd}	 t)          ‰| |||¦  «        }||| <   n8# t*          $ r+}|Š	t-          ˆ	ˆ
ˆfd	„¦  «         t/          d
¦  «        d‚d}~ww xY w|S )z‘
    Run the actual computation represented by `node` and return the result.
    This will execute any dependent nodes in the graph as well.
    r2   rµ  rí  c                ó$   •— t          | ‰¦  «        S rƒ   )Úget_real_value)rò  rð  s    €rm   r  z get_real_value.<locals>.<lambda>Ô  s   ø€ •.  FÑ+Ô+€ rl   rô  Úgraphargrµ  Nc                 ó2   •—  ‰dddg ‰j         ¢‰ ¬¦  «        S )Nz7RuntimeError when trying to get real value from fx.Noder±  rð  rÊ  )Úexnr¶  rî  s   €€€rm   r  z get_real_value.<locals>.<lambda>ë  s0   ø€ �M�MØQØØØ5Ð)Ô4Ð5Øðñ ô € rl   rÇ  )r±  r¶  rÖ  rî  Úreal_value_cacherð  r  r   rK  r’  r-  r/  rJ  Úexamplerõ  r�  rŽ  rÛ  rR  r  rÁ  rñ   r©  rü   )rK  rð  Úcacherð  r-  r/  Ú	nn_moduleÚ
real_valuerú  rý  r¶  rî  s    `       @@@rm   rú  rú  Å  s¢  øøøø€ ð
 $Ð#Ð#Ð#Ð#Ð#Ø"Ð"Ð"Ð"Ð"Ð"àÔ#€EØˆu€}€}Ø�TŒ{Ðà	Œ€BÝ”8”=×(Ò(Ø	Œ�D”KÐ Ø+Ð+Ð+Ð+ñô �L€Dˆ&ð
 
ˆ]ÒÐ˜z¨T¬YÐ6Ð6ØŒy˜Ô$Ô,Ð,à	ˆ]ÒÐØÔ'Ô2°4´;Ô?ˆ	Ý˜iÑ(Ô(ð 	'Ýœ iÑ0Ô0ˆIˆIð ˆI�tÐ&˜vÐ&Ð&Ð&Ð&àˆ	ðBÝ˜f d¨D°&¸)ÑDÔDˆ
Ø ˆˆd‰ˆøÝð Bð Bð BØˆÝ0ðð ð ð ð ð ñ	
ô 	
ð 	
õ Ð6Ñ7Ô7¸TÐAøøøøðBøøøð Ðs   ÃC) Ã)
DÃ3&DÄDútorch.nn.Modulec           	     ó0  ‡— ddl mŠm} dˆfd„}|                      ¦   «         D ].\  }} ||¦  «        rt	          d|› d	 ||¦  «        › �¦  «        ‚Œ/|                      ¦   «         D ].\  }} ||¦  «        rt	          d
|› d	 ||¦  «        › �¦  «        ‚Œ/d S )Nr   )ÚFakeTensorConfigrM   rÇ  r   rt   rœ   c                óN   •— ‰j         rdd l}d |j        | j        ¦  «        › �S dS )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     €rm   Ústack_or_hintz7assert_no_fake_params_or_buffers.<locals>.stack_or_hintú  s?   ø€ ØÔ!ð 	dØÐÐÐà`Ð9N¸Ô9NÈqÌ~Ñ9^Ô9^Ð`Ð`Ð`àcÐcrl   zUnexpected fake buffer rÍ   zUnexpected fake param )rÇ  r   rt   rœ   )Útorch._subclasses.fake_tensorr  rM   Únamed_buffersrü   Únamed_parameters)rà  rM   r  rz   Úbufferrå  r  s         @rm   Ú assert_no_fake_params_or_buffersr  ÷  s  ø€ ØGÐGÐGÐGÐGÐGÐGÐGðdð dð dð dð dð dð ×(Ò(Ñ*Ô*ð ð ‰ˆˆfØˆ7�6‰?Œ?ð 	Ý ØH¨$ÐHÐH°°¸vÑ1FÔ1FÐHÐHñô ð ð	ð ×*Ò*Ñ,Ô,ð Yð Y‰ˆˆeØˆ7�5‰>Œ>ð 	YÝ Ð!W¸$Ð!WÐ!WÀÀÈuÑAUÔAUÐ!WÐ!WÑXÔXÐXð	YðYð Yrl   c                ó$   — | j         › d| j        › �S )z9
    Returns the fully qualified name of the object.
    rë  )rg   rh   r¾  s    rm   Úfqnr    s   € ð ŒnÐ1Ð1˜sÔ/Ð1Ð1Ð1rl   Úcount1Úcount2c                ó6   — t           j        j        j        r| S |S rƒ   )r  r€  rI   Úassume_static_by_default)r  r  s     rm   Úifdynstaticdefaultr    s   € Ý„}ÔÔ4ð Øˆàˆrl   útypes.ModuleTypec           
     óF  — t          t          j        t          j                             t          t          | j        ¦  «        ¦  «        ¦  «        ¦  «        D ]I}|                     d¦  «        r2|d         dk    r&t          j
        | j        › d|dd…         › �¦  «         ŒJdS )z@
    Ensure all the files in a given submodule are imported
    z.pyr   rÚ  rë  Néýÿÿÿ)rr  r¤  ÚlistdirrÄ  rå  r   rœ   Ú__file__rU  Ú	importlibÚimport_modulerf   )rÙ  rß  s     rm   Úimport_submoduler    sœ   € õ �2œ:¥b¤g§o¢oµd½3ÀÄÑ6MÔ6MÑ&NÔ&NÑOÔOÑPÔPð Gð GˆØ×Ò˜UÑ#Ô#ð 	G¨°¬°sÒ(:Ð(:ÝÔ# s¤|Ð$EÐ$E°h¸sÀ¸s´mÐ$EÐ$EÑFÔFÐFøðGð Grl   c                ó:   — t          t          | ¦  «        ¦  «        S rƒ   )Úclass_has_getattributerÜ  ra  s    rm   Úobject_has_getattributer"  #  s   € Ý!¥$ u¡+¤+Ñ.Ô.Ð.rl   c                óà   — 	 t                                | d¦  «        }nK# t          $ r> t          | t          j        ¦  «        s‚ t          j                             | d¦  «        }Y nw xY w|||<   d S ©Nrb  ©r÷   Ú__getattribute__r©  r<  rø  rù  )r  rz   rÔ   r„  s       rm   Ú object_setattr_ignore_descriptorr'  '  s|   € ð	>Ý×#Ò# C¨Ñ4Ô4ˆˆøÝð >ð >ð >Ý˜#�yœÑ/Ô/ð 	Øõ
 ŒO×,Ò,¨S°*Ñ=Ô=ˆˆˆð>øøøð €A€d�G€G€Gó   ‚ žAA&Á%A&c                óÜ   — 	 t                                | d¦  «        }nK# t          $ r> t          | t          j        ¦  «        s‚ t          j                             | d¦  «        }Y nw xY w||= d S r$  r%  )r  rz   r„  s      rm   Ú object_delattr_ignore_descriptorr*  7  sx   € ð>Ý×#Ò# C¨Ñ4Ô4ˆˆøÝð >ð >ð >Ý˜#�yœÑ/Ô/ð 	ØÝŒO×,Ò,¨S°*Ñ=Ô=ˆˆˆð>øøøð 	
ˆ$ˆˆˆr(  c                óˆ   — 	 t          t          j        | d¦  «        t          j        ¦  «        rdS n# t
          $ r Y nw xY wdS )Nr&  TF)r<  rš  r›  r\  r«  r©  r…   s    rm   r!  r!  C  sc   € ðÝÝÔ" 3Ð(:Ñ;Ô;ÝÔñ
ô 
ð 	ð �4ð		øõ
 ð ð ð Øˆðøøøàˆ5s   ‚-2 ²
?¾?Úignore_nn_module_getattrrj  c                óª   — 	 t          j        t          | ¦  «        d¦  «        }n# t          $ r d }Y nw xY w|r|t          j        j        j        u rd }|S )NÚ__getattr__)rš  r›  rÜ  r©  r  rÓ  rs  r.  )rÔ   r,  Ú
getattr_fns      rm   Úget_custom_getattrr0  O  si   € ðÝÔ+­D°©K¬K¸ÑGÔGˆ
ˆ
øÝð ð ð Øˆ
ˆ
ˆ
ðøøøàð  Jµ%´(´/Ô2MÐ$MÐ$Màˆ
ØÐs   ‚"% ¥4³4c                  ó   — e Zd ZdZdZdZdS )ÚTensorStaticReasonrd   r>  rÏ   N)rf   rg   rh   Ú	PARAMETERÚ
NOT_TENSORÚNN_MODULE_PROPERTYrK   rl   rm   r2  r2  \  s    € € € € € Ø€IØ€JØÐÐÐrl   r2  r  c                ó’   — | t           j        k    rdS | t           j        k    rdS | t           j        k    rdS 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 )r2  r3  r4  r5  rü   )r  s    rm   Útensor_static_reason_to_messager7  b  sX   € ØÕ#Ô-Ò-Ð-ØOÐOØÕ#Ô.Ò.Ð.ØCÐCØÕ#Ô6Ò6Ð6ØEÐEÝ
Ð3¨6Ð3Ð3Ñ
4Ô
4Ð4rl   r3  útorch.Tensor | AnyrÍ  Útensor_sourcer!   ú&tuple[bool, TensorStaticReason | None]c                óT  — ddl m} |j                             ¦   «         s|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 dS )a@  
    Given a tensor, source, and is_tensor flag, determine if a shape should be static.

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

    Returns a tuple, where the first element is the bool of whether or not this tensor should have a static shape.
    The second element is a TensorStaticReason, useful for passing to tensor_static_reason_to_message if needed.
    r2   )Ú)is_from_unspecialized_param_buffer_sourceTr/  )r   r<  r$  r&  r(  rI   Ú&force_nn_module_property_static_shapesr2  r5  rÜ  r  rÓ  rÔ  Úforce_parameter_static_shapesr3  r4  )r3  rÍ  r9  r<  s       rm   Útensor_always_has_static_shaper?  l  sÈ   € ð  BÐAÐAÐAÐAÐAð 	Ô"×;Ò;Ñ=Ô=ð;àÔ%×HÒHÑJÔJð;õ Ô
7ð;ð Õ'Ô:Ð:Ð:õ 	ˆV‰Œ�œÔ*Ð*Ð*Ø4Ð4°]ÑCÔCð 	+å
Ô
.ð 	+ð Õ'Ô1Ð1Ð1Øð 3ØÕ'Ô2Ð2Ð2Øˆ;rl   rI  c                ó2   ‡ ‡— dˆ ˆfd„}t          |¦  «        S )Nrt   rœ   c                 óþ   •— 	 ddl m }  n0# t          $ r# dt          t          ‰‰¦  «        ¦  «        z   cY S w xY wd„ ‰j        j        D ¦   «         } | |g d¢¬¦  «        }t          ‰‰j        j        j	        |¦  «        S )Nr   )r§   zkTabulate module missing, please install tabulate to log the graph in tabular format, logging code instead:
c                óN   — g | ]"}|j         |j        |j        |j        |j        g‘Œ#S rK   )rð  rz   rŽ  r-  r/  )r¤   rò  s     rm   r�  z<lazy_format_graph_tabular.<locals>.inner.<locals>.<listcomp>˜  s:   € ð 
ð 
ð 
Ø;<ˆQŒT�1”6˜1œ8 Q¤V¨Q¬XÐ6ð
ð 
ð 
rl   )Úopcoderz   rŽ  r-  r/  rž   )
r§   r¨   rœ   r*   rT  rï  r)   ÚforwardÚ__code__r  )r§   Ú
node_specsÚ	graph_strrI  rà  s      €€rm   Úinnerz(lazy_format_graph_tabular.<locals>.inner�  sÇ   ø€ ð	Ø)Ð)Ð)Ð)Ð)Ð)Ð)øÝð 	ð 	ð 	à~ÝÕ,¨W°bÑ9Ô9Ñ:Ô:ñ;ðð ð ð	øøøð
ð 
Ø@BÄÄð
ñ 
ô 
ˆ
ð �HØÐ NÐ NÐ Nð
ñ 
ô 
ˆ	õ " '¨2¬:Ô+>Ô+JÈIÑVÔVÐVs   ƒ
 Š*7¶7©rt   rœ   rF   )rI  rà  rH  s   `` rm   Úlazy_format_graph_tabularrJ  Ž  s>   øø€ ðWð Wð Wð Wð Wð Wð Wõ" �eÑÔÐrl   Úline_noc                ól   — | › d|› d|› d|› dt          j        |¦  «                              ¦   «         › d�
S )NrÍ   z line z 
rŸ   )ÚdisÚBytecode)r  rz   rß  rK  rØ  s        rm   Úformat_bytecoderO  £  sI   € ð ÐVÐV�tÐVÐV˜hÐVÐV¨gÐVÐV½#¼,ÀtÑ:LÔ:L×:PÒ:PÑ:RÔ:RÐVÐVÐVÐVrl   )Ú_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        ¦  «        p't          t          j        j        j        j        ¦  «        ¦  «        S rƒ   )rö   r›  r  rÓ  ÚmodulesrÎ  Ú_global_backward_hooksÚ_global_backward_pre_hooksrK   rl   rm   Únn_module_has_global_hooksr^  ¹  sH   € õ Ý�EŒHÔÔ#Ô:Ñ;Ô;ð 	CÝ�uŒxÔÔ&ÔAÑBÔBñô ð rl   Úcheck_forward_hooksÚcheck_backward_hooksÚcheck_state_dict_hooksc                ó@  — g }| o| o| }|s|r|                      t          ¦  «         |s|r|                      t          ¦  «         |r|                      t          ¦  «         g }|D ]5}t	          | |g ¦  «        }|D ]}	||	         }
|                     |
¦  «         Œ Œ6|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_namesrS  r·   )rÙ  r_  r`  ra  Úhook_dicts_to_checkÚcheck_all_hooksÚ	all_hooksÚhook_dict_nameÚhooksÚ	hook_namer´   s              rm   Únn_module_get_all_hooksrm  Â  sô   € ð ÐàÐð 	'Ø$Ð$ð	'à&Ð&ð ð
 ð 7˜oð 7Ø×"Ò"Õ#5Ñ6Ô6Ð6Øð 8˜ð 8Ø×"Ò"Õ#6Ñ7Ô7Ð7Øð :Ø×"Ò"Õ#8Ñ9Ô9Ð9à€IØ-ð #ð #ˆÝ˜˜^¨RÑ0Ô0ˆØð 	#ð 	#ˆIØ˜Ô#ˆDà×Ò˜TÑ"Ô"Ð"Ð"ð	#ð Ðrl   c                óF   — t          | |||¬¦  «        }t          |¦  «        S )zL
    Helper function to check if a module has any hooks attached to it.
    )r_  r`  ra  )rm  rö   )rÙ  r_  r`  ra  rk  s        rm   Únnmodule_has_hooksro  ã  s2   € õ $ØØ/Ø1Ø5ð	ñ ô €Eõ �‰;Œ;Ðrl   c                ó`  — t          | ¦  «        r| S t          | t          j        ¦  «        rt	          | j        ¦  «        S t          | t          j        ¦  «        r|                      d¬¦  «        S t          | t          t          f¦  «        r" t          | ¦  «        d„ | D ¦   «         ¦  «        S | S )z0Convert tensor and tnp.ndarray to numpy.ndarray.T)Úforcec              3  ó4   K  — | ]}t          |¦  «        V — Œd S rƒ   )Úto_numpy_helper©r¤   r  s     rm   r¦   z"to_numpy_helper.<locals>.<genexpr>þ  ó*   è è € ÐAÐA°C�?¨3Ñ/Ô/ÐAÐAÐAÐAÐAÐArl   )rM   r<  ÚtnprÏ  rs  r3  r  rÒ  Únumpyr=  r†  rÜ  ra  s    rm   rs  rs  õ  s¡   € åˆu�~„~ð ØˆÝ�%�œÑ%Ô%ð Ý˜uœ|Ñ,Ô,Ð,Ý	�E�5œ<Ñ	(Ô	(ð Ø�{Š{ ˆ{Ñ&Ô&Ð&Ý	�E�E¥4˜=Ñ	)Ô	)ð Ø�t�E‰{Œ{ÐAÐA¸5ÐAÑAÔAÑAÔAÐAàˆrl   c                óL  — t           €t          d¦  «        ‚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.Nz$numpy must be available (np is None)c              3  ó4   K  — | ]}t          |¦  «        V — Œd S rƒ   )Únumpy_to_tensorrt  s     rm   r¦   z"numpy_to_tensor.<locals>.<genexpr>  ru  rl   )re  rü   r<  rÏ  r  ra  rv  r3  r=  r†  rÜ  ra  s    rm   rz  rz    s–   € å	€zÝÐCÑDÔDÐDÝ�%�œÑ$Ô$ð &ÝŒ˜uÑ%Ô%Ð%Ý�%�œÑ%Ô%ð ØŒ|ÐÝ	�E�E¥4˜=Ñ	)Ô	)ð Ø�t�E‰{Œ{ÐAÐA¸5ÐAÑAÔAÑAÔAÐAàˆrl   c                  ó&   — e Zd Zdd„Zdd„Zdd„ZdS )Únumpy_to_tensor_wrapperré  úCallable[_P, R]rt   ru   c                ó<   — || _         d| j         j        z   | _        d S ©NÚwrapped_©ré  rf   )r‘  ré  s     rm   r’  z numpy_to_tensor_wrapper.__init__  s   € ØˆŒØ" T¤V¤_Ñ4ˆŒˆˆrl   rœ   c                ó"   — d| j         j        › d�S )Nz<Wrapped function <original ú>>r�  r•  s    rm   Ú__repr__z numpy_to_tensor_wrapper.__repr__  s   € ØA¨d¬f¬oÐAÐAÐAÐArl   r-  r.  r/  r0  r   c                ó:   —  | j         |i |¤Ž}t          |¦  «        S rƒ   )ré  rz  ©r‘  r-  r/  rÒ   s       rm   r?  z numpy_to_tensor_wrapper.__call__  s&   € ØˆdŒf�dÐ%˜fÐ%Ð%ˆÝ˜sÑ#Ô#Ð#rl   N)ré  r}  rt   ru   rI  ©r-  r.  r/  r0  rt   r   )rf   rg   rh   r’  r„  r?  rK   rl   rm   r|  r|    sT   € € € € € ð5ð 5ð 5ð 5ðBð Bð Bð Bð$ð $ð $ð $ð $ð $rl   r|  c                ó  — t          | t          j        ¦  «        rt          | |¦  «        }t	          |¦  «        S t          | t
          j        ¦  «        r1t          t          j        | ¦  «        |¦  «        }t	          |¦  «        S d S rƒ   )r<  rv  rÏ  rS  rz  r  rÒ  )r  rz   rÒ   s      rm   Únumpy_attr_wrapperr‰    sx   € Ý�#•s”{Ñ#Ô#ð $Ý�c˜4Ñ Ô ˆÝ˜sÑ#Ô#Ð#Ý	�C�œÑ	&Ô	&ð $Ý•c”k #Ñ&Ô&¨Ñ-Ô-ˆÝ˜sÑ#Ô#Ð#ð$ð $rl   c                  ó*   — e Zd ZdZdd„Zdd„Zdd„ZdS )Únumpy_method_wrapperzgConvert obj from torch.Tensor to tnp.ndarray and call method. Then convert result back to torch.Tensor.rQ  rœ   rt   ru   c                ó2   — || _         d| j         z   | _        d S r  )rQ  rf   )r‘  rQ  s     rm   r’  znumpy_method_wrapper.__init__*  s   € ØˆŒØ" T¤[Ñ0ˆŒˆˆrl   c                ó   — d| j         › d�S )Nz<Wrapped method <original rƒ  )rQ  r•  s    rm   r„  znumpy_method_wrapper.__repr__.  s   € Ø;¨D¬KÐ;Ð;Ð;Ð;rl   r-  r   r/  c                óÖ   — |d         }t          |t          j        ¦  «        rt          j        |¦  «        }t          || j        ¦  «        } ||dd …         i |¤Ž}t          |¦  «        S r  )r<  r  rÒ  rv  rÏ  rS  rQ  rz  )r‘  r-  r/  r  Úmethod_callablerÒ   s         rm   r?  znumpy_method_wrapper.__call__1  si   € Ø�1ŒgˆÝ�c�5œ<Ñ(Ô(ð 	#Ý”+˜cÑ"Ô"ˆCÝ! # t¤{Ñ3Ô3ˆØˆo˜t A B BœxÐ2¨6Ð2Ð2ˆÝ˜sÑ#Ô#Ð#rl   N)rQ  rœ   rt   ru   rI  )r-  r   r/  r   rt   r   ©rf   rg   rh   rã   r’  r„  r?  rK   rl   rm   r‹  r‹  '  sV   € € € € € ØqÐqð1ð 1ð 1ð 1ð<ð <ð <ð <ð$ð $ð $ð $ð $ð $rl   r‹  c                  ó*   — e Zd ZdZdd„Zdd„Zdd„ZdS )Únumpy_operator_wrapperzQImplements dunder methods for tnp.ndarray via functions from the operator libraryrð  r   rt   ru   c                ó2   — || _         d|j        › �| _        d S r  )rð  rf   )r‘  rð  s     rm   r’  znumpy_operator_wrapper.__init__=  s   € ØˆŒØ0 2¤;Ð0Ð0ˆŒˆˆrl   rœ   c                ó   — d| j         › d�S )Nz<Wrapped operator <original rƒ  )rf   r•  s    rm   r„  znumpy_operator_wrapper.__repr__A  s   € Ø?¨d¬mÐ?Ð?Ð?Ð?rl   r-  r.  r/  r0  r   c                ót   — |rt          d|› �¦  «        ‚d„ |D ¦   «         } | j        |Ž }t          |¦  «        S )NzExpected no kwargs, got c              3  óv   K  — | ]4}t          |t          j        ¦  «        rt          j        |¦  «        n|V — Œ5d S rƒ   )r<  r  rÒ  rv  rÏ  ré  s     rm   r¦   z2numpy_operator_wrapper.__call__.<locals>.<genexpr>I  sS   è è € ð 
ð 
ØKN¥
¨3µ´Ñ =Ô =ÐF�CŒK˜ÑÔÐÀ3ð
ð 
ð 
ð 
ð 
ð 
rl   )rü   rð  rz  r†  s       rm   r?  znumpy_operator_wrapper.__call__D  s]   € Øð 	FÝ Ð!D¸FÐ!DÐ!DÑEÔEÐEð
ð 
ØRVð
ñ 
ô 
ˆð ˆdŒg�tˆnˆÝ˜sÑ#Ô#Ð#rl   N)rð  r   rt   ru   rI  r‡  r�  rK   rl   rm   r’  r’  :  sZ   € € € € € Ø[Ð[ð1ð 1ð 1ð 1ð@ð @ð @ð @ð	$ð 	$ð 	$ð 	$ð 	$ð 	$rl   r’  )rŽ  ú.dict[int, tuple[Callable[..., Any], Any, str]]c                 ó*  — i } t                                ¦   «         D ]v\  }}|j        }|j                             ¦   «         D ]P\  }}t	          |¦  «        sŒt          ||d ¦  «        }t	          |¦  «        sŒ6|||› d|› �f| t          |¦  «        <   ŒQŒw| S )Nrë  )ÚNP_TO_TNP_MODULErÇ   rf   rb  rË  rS  r  )r‡  Únp_modÚtnp_modrÎ  rz   Útnp_callableÚnp_callables          rm   Ú_torch_numpy_callable_id_maprž  P  sÃ   € à=?€FÝ+×1Ò1Ñ3Ô3ð ð ‰ˆ�Ø”ˆØ")Ô"2×"8Ò"8Ñ":Ô":ð 	ð 	ÑˆD�,Ý˜LÑ)Ô)ð Øå! &¨$°Ñ5Ô5ˆKÝ˜KÑ(Ô(ð Øð ØØÐ"Ð"˜DÐ"Ð"ð(ˆF•2�lÑ#Ô#Ñ$Ð$ð	ð €Mrl   i   Úobj_idú%tuple[Callable[..., Any], str] | Nonec                ó&  — t          ¦   «         |          \  }}}|                     d¦  «        \  }}}|dk    s|                     d¦  «        rd S 	 |t          t	          j        |¦  «        |¦  «        urd S n# t          t          f$ r Y d S w xY w||fS )Nrë  znumpy.randomznumpy.random.)rž  Ú
rpartitionr‹  rS  r  r  r©  r¨   )rŸ  rœ  r�  Ú	cache_keyrÎ  rÚ  rz   s          rm   Ú%_torch_numpy_callable_cache_key_by_idr¤  e  s¾   € õ ,HÑ+IÔ+IÈ&Ô+QÑ(€L�+˜yà×*Ò*¨3Ñ/Ô/�O€FˆAˆtð �ÒÐ 6×#4Ò#4°_Ñ#EÔ#EÐØˆtðØ�g¥iÔ&=¸fÑ&EÔ&EÀtÑLÔLÐLÐLØ�4ð Møå�KÐ(ð ð ð Øˆtˆtðøøøð ˜)Ð$Ð$s   Á$A7 Á7BÂBc                ó„   — t          | ¦  «        }|t          ¦   «         vrd S t          |¦  «        }|€d S |\  }}| |urd S |S rƒ   )r  rž  r¤  )r  rŸ  Úentryrœ  r£  s        rm   Ú_torch_numpy_callable_cache_keyr§  z  s]   € Ý�‰WŒW€Fð Õ1Ñ3Ô3Ð3Ð3Øˆtå1°&Ñ9Ô9€EØ€}Øˆtà#Ñ€L�)Ø
�,ÐÐØˆtàÐrl   c                ó$   — t          | ¦  «        d uS rƒ   )Únumpy_wrapper_cache_keyr¾  s    rm   Úis_safe_numpy_wrapperrª  Œ  s   € Ý" 3Ñ'Ô'¨tÐ3Ð3rl   útuple[str, str] | Nonec                óŽ   — t          | ¦  «        t          urd S t          | j        ¦  «        }|€d S t          | ¦  «        j        |fS rƒ   )rÜ  r|  r§  ré  rh   )r  rÓ   s     rm   r©  r©  �  sF   € ÝˆC�y„yÕ/Ð/Ð/Øˆtå
)¨#¬%Ñ
0Ô
0€CØ
€{Øˆtå�‰IŒIÔ" CÐ(Ð(rl   c                ó„  — t          | t          ¦  «        s| S | j        r=d„ |                      ¦   «         D ¦   «         }d„ |                      ¦   «         D ¦   «         }n(|                      ¦   «         }|                      ¦   «         }t          j        ||| j        | j        | j	        ¬¦  «        }| 
                    ¦   «          |S )Nc                ó`   — g | ]+}t           j        j        j                             |¦  «        ‘Œ,S rK   ©r  r   r¯  r°  Úoptimization_hint©r¤   r,  s     rm   r�  zdefake.<locals>.<listcomp>¤  s;   € ð 
ð 
ð 
ØKL�EŒHÔ!Ô1×CÒCÀAÑFÔFð
ð 
ð 
rl   c                ó`   — g | ]+}t           j        j        j                             |¦  «        ‘Œ,S rK   r¯  r±  s     rm   r�  zdefake.<locals>.<listcomp>§  s>   € ð 
ð 
ð 
àõ ŒHÔ!Ô1×CÒCÀAÑFÔFð
ð 
ð 
rl   )rb  rN  rI  )r<  rL   Ú_has_symbolic_sizes_stridesr|  rm  r  Úempty_stridedrb  rN  rI  Úzero_)r~  r|  rm  rL  s       rm   Údefaker¶  ›  sÔ   € Ý�a�Ñ$Ô$ð Øˆð 	Ô$ð ð
ð 
ØPQ×PVÒPVÑPXÔPXð
ñ 
ô 
ˆð
ð 
à—X’X‘Z”Zð
ñ 
ô 
ˆˆð
 �vŠv‰xŒxˆØ—’‘”ˆÝÔØØØŒgØŒxØ”oð	ñ 	ô 	€Að ‡G‚G�I„I€IØ€Hrl   r}  r.  r0  c                ó   —  | |i |¤ŽS rƒ   rK   )rÅ  r-  r/  s      rm   Ú8_disable_side_effect_safety_checks_for_current_subtracerr¸  ¹  s   € ð ˆ2ˆtÐ�vÐÐÐrl   c                ó0   — dd l }| |j        j        j        u S r°   )Útorch.utils.checkpointrÐ  Ú
checkpoint)r  r  s     rm   Úis_utils_checkpointr¼  ¿  s!   € à!Ð!Ð!Ð!à�%”+Ô(Ô3Ð3Ð3rl   c                ó   — ddl m} | |u S )Nr   )Úinvoke_subgraph_placeholder)Ú'torch._higher_order_ops.invoke_subgraphr¾  )r  r¾  s     rm   Úis_invoke_subgraphrÀ  Æ  s    € ØSÐSÐSÐSÐSÐSàÐ-Ð-Ð-rl   Úoptionsc                 óH   — ddl m}  |j        t          j        j        fi | ¤ŽS )Nr2   ©Ú TorchHigherOrderOperatorVariable)Úvariables.higher_order_opsrÄ  Úmaker  Ú_higher_order_opsÚinvoke_subgraph)rÁ  rÄ  s     rm   Úbuild_invoke_subgraph_variablerÉ  Ì  sB   € ØLÐLÐLÐLÐLÐLà0Ð+Ô0ÝÔÔ/ðð à
ðð ð rl   c                 ó„   — dd l mc m} ddlm} |j        }t          j        j        j	        r|j
        } |j        |fi | ¤ŽS )Nr   r2   rÃ  )Útorch._higher_order_ops.wraprÇ  ÚwraprÅ  rÄ  Útag_activation_checkpointr  r»  rI   Úfunctionalize_rng_opsÚwrap_activation_checkpointrÆ  )rÁ  Úhigher_order_opsrÄ  Úactivation_checkpoint_ops       rm   Úbuild_checkpoint_variablerÒ  Õ  s�   € Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;àLÐLÐLÐLÐLÐLð
 	Ô2ð õ ÔÔÔ4ð OØ#3Ô#NÐ à0Ð+Ô0Ø ðð à
ðð ð rl   Údevice_typerC   c                ó”   — ddl m} t          j        | ¦  «        j        } |¦   «         }|dk    rn|dv r|rt          ¦   «         }nd}|S )Nr2   )Úis_dynamo_supportedr\  )r×  r£  ÚmtiaF)Ú
eval_framerÕ  r  rN  rÜ  r/   )rÓ  rÕ  rÜ  Úcompile_supporteds       rm   Úis_compile_supportedrÙ  è  sl   € Ø/Ð/Ð/Ð/Ð/Ð/åŒ<˜Ñ$Ô$Ô)€DØ+Ð+Ñ-Ô-ÐØˆu‚}€}ØØ	Ð(Ð	(Ð	(Ð->Ð	(Ý&™LœLÐÐà!ÐØÐrl   Úoffsetc                ó„   — |                       d¦  «        }t          |d|…                              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œ   rÚ  Úas_utf8s      rm   Ú_fix_offsetrà  ú  s?   € ð �jŠj˜Ñ!Ô!€GÝˆw�w˜�wÔ×&Ò& w°yÐ&ÑAÔAÑBÔBÐBrl   c                  ó8   — e Zd ZU ded<   ded<   ded<   ded<   dS )Ú_Anchorsrs   Úleft_end_linenoÚleft_end_offsetÚright_start_linenoÚright_start_offsetNrØ  rK   rl   rm   râ  râ    sD   € € € € € € ð ÐÐÑØÐÐÑØÐÐÑàÐÐÑÐÐrl   râ  Úsegmentú_Anchors | Nonec                óV  ‡‡— t           j        dk     rt          dt           j        › �¦  «        ‚ddl}d}	 |                     d| z   dz   ¦  «        }n# t
          $ r Y dS w xY w|€t          d¦  «        ‚t          |j        ¦  «        dk    rdS |                      d	¦  «        Šdˆfd„}dˆfd„Šdˆˆfd„}dˆˆfd„}|j        d         }t          ||j
        ¦  «        �rI|j        }t          ||j        ¦  «        �r,t          t          |j        j        ¦  «        dz
  }|j        j        €t          d¦  «        ‚ |||j        j        ¦  «        }	 ‰||	¦  «        \  }}	‰|         |	         x}
                     ¦   «         s|
dv rI|
dv r |||	¦  «        \  }}	n |||	¦  «        \  }}	‰|         |	         x}
                     ¦   «         °E|
dv °I|	dz   }|t          ‰|         ¦  «        k     r+‰|         |         x}
                     ¦   «         s	|
dvr|dz  }t'          ||	||¦  «        S t          ||j        ¦  «        rët          t          |j        j        ¦  «        dz
  }|j        j        €t          d¦  «        ‚ |||j        j        ¦  «        } ‰||¦  «        \  }}‰|         |         dk    r! |||¦  «        \  }}‰|         |         dk    °!t          t          |j        ¦  «        dz
  }|j        €t          d¦  «        ‚ |||j        ¦  «        }t'          ||||¦  «        S t          ||j        ¦  «        rët          t          |j        j        ¦  «        dz
  }|j        j        €t          d¦  «        ‚ |||j        j        ¦  «        } ‰||¦  «        \  }}‰|         |         dk    r! |||¦  «        \  }}‰|         |         dk    °!t          t          |j        ¦  «        dz
  }|j        €t          d¦  «        ‚ |||j        ¦  «        }t'          ||||¦  «        S dS )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
    )re   é   zPython >= 3.11 required, got r   Nz(
z
)z$ast.parse returned None unexpectedlyr2   rŸ   Úlinenors   rÚ  rt   c                ó0   •— t          ‰|          |¦  «        S rƒ   )rà  )rë  rÚ  Úliness     €rm   Ú	normalizez-_extract_anchors_from_expr.<locals>.normalize.  s   ø€ Ý˜5 œ=¨&Ñ1Ô1Ð1rl   Úcolútuple[int, int]c                óÀ  •— | t          ‰¦  «        k     rL|t          ‰|          ¦  «        k    r3d}| dz  } | t          ‰¦  «        k     r|t          ‰|          ¦  «        k    °3| t          ‰¦  «        k    r#t          d| › dt          ‰¦  «        › d�¦  «        ‚|t          ‰|          ¦  «        k    r,t          d|› d| › dt          ‰|          ¦  «        › d�¦  «        ‚| |fS ©	Nr   r2   úlineno ú out of range (len(lines)=r  úcol ú out of range (len(lines[ú])=©r›  rü   )rë  rï  rí  s     €rm   Únext_valid_charz3_extract_anchors_from_expr.<locals>.next_valid_char3  s  ø€ Ø•s˜5‘z”zÒ!Ð! c­S°°v´Ñ-?Ô-?Ò&?Ð&?ØˆCØ�a‰KˆFð •s˜5‘z”zÒ!Ð! c­S°°v´Ñ-?Ô-?Ò&?Ð&?ð •S˜‘Z”ZÒÐÝ ØI˜&ÐIÐI½CÀ¹J¼JÐIÐIÐIñô ð ð •#�e˜F”mÑ$Ô$Ò$Ð$Ý ØU�sÐUÐU°VÐUÐUÅÀEÈ&ÄMÑ@RÔ@RÐUÐUÐUñô ð ð �sˆ{Ðrl   c                ó*  •— |dz  } ‰| |¦  «        \  } }| t          ‰¦  «        k    r#t          d| › dt          ‰¦  «        › d�¦  «        ‚|t          ‰|          ¦  «        k    r,t          d|› d| › dt          ‰|          ¦  «        › d�¦  «        ‚| |fS )Nr2   ró  rô  r  rõ  rö  r÷  rø  ©rë  rï  rí  rù  s     €€rm   r  z-_extract_anchors_from_expr.<locals>.incrementB  sÁ   ø€ Øˆq‰ˆØ%�o f¨cÑ2Ô2‰ˆ�Ø•S˜‘Z”ZÒÐÝ ØI˜&ÐIÐI½CÀ¹J¼JÐIÐIÐIñô ð ð •#�e˜F”mÑ$Ô$Ò$Ð$Ý ØU�sÐUÐU°VÐUÐUÅÀEÈ&ÄMÑ@RÔ@RÐUÐUÐUñô ð ð �sˆ{Ðrl   c                ó.  •— d}| dz  }  ‰| |¦  «        \  } }| t          ‰¦  «        k    r#t          d| › dt          ‰¦  «        › d�¦  «        ‚|t          ‰|          ¦  «        k    r,t          d|› d| › dt          ‰|          ¦  «        › d�¦  «        ‚| |fS rò  rø  rû  s     €€rm   Únextlinez,_extract_anchors_from_expr.<locals>.nextlineP  sÆ   ø€ ØˆØ�!‰ˆØ%�o f¨cÑ2Ô2‰ˆ�Ø•S˜‘Z”ZÒÐÝ ØI˜&ÐIÐI½CÀ¹J¼JÐIÐIÐIñô ð ð •#�e˜F”mÑ$Ô$Ò$Ð$Ý ØU�sÐUÐU°VÐUÐUÅÀEÈ&ÄMÑ@RÔ@RÐUÐUÐUñô ð ð �sˆ{Ðrl   rd   z)expr.left.end_col_offset must not be Nonez)\#z\#z*expr.value.end_col_offset must not be Noneræ  z$expr.end_col_offset must not be Nonez)expr.func.end_col_offset must not be Noner‡  )rë  rs   rÚ  rs   rt   rs   )rë  rs   rï  rs   rt   rð  )rZ  r[  rü   rŠ  ÚparserŽ  r›  Úbodyrn  r<  ÚExprrÔ   ÚBinOpr   rs   ÚleftÚ
end_linenoÚend_col_offsetÚisspacerâ  Ú	SubscriptÚCallrÒ  )rç  rŠ  Útreerî  r  rý  Ú	statementÚexprÚ
cur_linenoÚcur_colÚchÚ	right_colÚleft_linenoÚleft_colÚright_linenorí  rù  s                  @@rm   Ú_extract_anchors_from_exprr    s  øø€ õ Ô˜'Ò!Ð!ÝÐO½SÔ=MÐOÐOÑPÔPÐPà€J€J€Jà€Dðð �yŠy˜ ™¨5Ñ0Ñ1Ô1ˆˆøÝð ð ð Øˆtˆtðøøøà€|ÝÐCÑDÔDÐDå
ˆ4Œ9�~„~˜ÒÐØˆtà�MŠM˜$ÑÔ€Eð2ð 2ð 2ð 2ð 2ð 2ð
ð ð ð ð ð ðð ð ð ð ð ð ðð ð ð ð ð ð ð ”	˜!”€IÝ�)˜SœXÑ&Ô&ñ HLØŒˆÝ�d˜CœIÑ&Ô&ñ F	Lõ �c 4¤9Ô#7Ñ8Ô8¸1Ñ<ˆJØŒyÔ'Ð/Ý$Ð%PÑQÔQÐQØ�i 
¨D¬IÔ,DÑEÔEˆGØ"1 /°*¸gÑ"FÔ"FÑˆJ˜ð ˜zÔ*¨7Ô3Ð3�2×<Ò<Ñ>Ô>ð IÀ"ÈÀ,À,Ø˜�;�;Ø*2¨(°:¸wÑ*GÔ*GÑ'�J  à*3¨)°JÀÑ*HÔ*HÑ'�J ð	 ˜zÔ*¨7Ô3Ð3�2×<Ò<Ñ>Ô>ð IÀ"ÈÀ,À,ð   !™ˆIà�C  jÔ 1Ñ2Ô2Ò2Ð2Ø$ ZÔ0°Ô;Ð;˜×DÒDÑFÔFð 3à˜e�O�Oà˜Q‘�	õ ˜J¨°¸YÑGÔGÐGÝ˜˜cœmÑ,Ô,ð $	Lõ �s D¤JÔ$9Ñ:Ô:¸QÑ>ˆKØŒzÔ(Ð0Ý$Ð%QÑRÔRÐRØ �y ¨d¬jÔ.GÑHÔHˆHØ$3 O°KÀÑ$JÔ$JÑ!ˆK˜Ø˜Ô$ XÔ.°#Ò5Ð5Ø(1¨	°+¸xÑ(HÔ(HÑ%�˜Xð ˜Ô$ XÔ.°#Ò5Ð5õ  ¥ T¤_Ñ5Ô5¸Ñ9ˆLØÔ"Ð*Ý$Ð%KÑLÔLÐLØ!˜	 ,°Ô0CÑDÔDˆIÝ˜K¨°<ÀÑKÔKÐKÝ˜˜cœhÑ'Ô'ð 	Lõ
 �s D¤IÔ$8Ñ9Ô9¸AÑ=ˆKØŒyÔ'Ð/Ý$Ð%PÑQÔQÐQØ �y ¨d¬iÔ.FÑGÔGˆHØ$3 O°KÀÑ$JÔ$JÑ!ˆK˜Ø˜Ô$ XÔ.°#Ò5Ð5Ø(1¨	°+¸xÑ(HÔ(HÑ%�˜Xð ˜Ô$ XÔ.°#Ò5Ð5õ  ¥ T¤_Ñ5Ô5¸Ñ9ˆLØÔ"Ð*Ý$Ð%KÑLÔLÐLØ!˜	 ,°Ô0CÑDÔDˆIÝ˜K¨°<ÀÑKÔKÐKàˆ4s   ¶A Á
A ÁA rn  ©Úfunction_namerë  r  Ú
col_offsetr  r  c               ó|  ‡ — |€dS |�|n|}ˆ fd„t          ||dz   ¦  «        D ¦   «         }t          |¦  «        sdS t          j        dk    �r|��||k    �r	|��|��t	          j        ‰ |||||¬¦  «        }t	          j        |g¦  «        d         }	d                     |	                     ¦   «         dd …         ¦  «        }	t          j
        d                     |¦  «        ¦  «                             ¦   «         }
|
s|	S t          |d         ¦  «        t          |
d         ¦  «        z
  }|d         d |…         }t          j        t          j
        |	¦  «        |¦  «        S |d         }|�|�|€|S t          ||¦  «        }d}g }||k    r=t          ||¦  «        }|||…         }|                     d|z  d	||z
  z  z   ¦  «         �n&||d …         dz   }|                     d|z  d	t          |¦  «        |z
  z  z   ¦  «         |d
         }t          ||¦  «        }|dd
…         D ]i}||dz   z  }t          |¦  «        t          |                     ¦   «         ¦  «        z
  }|                     d|z  d	t          |¦  «        |z
  z  z   ¦  «         Œj||d |…         z  }t          |¦  «        t          |                     ¦   «         ¦  «        z
  }|                     d|z  d	||z
  z  z   ¦  «         d }	 t!          |¦  «        }n# t"          $ r Y nw xY w|€d„ |D ¦   «         }nõd„ |D ¦   «         }|j        dk    r|xj        |z  c_        |j        dk    r|xj        |z  c_        t          t          |¦  «        ¦  «        D ]Š}t          t          ||         ¦  «        ¦  «        D ]e}||j        k     rŒ||j        k    r||j        k     rŒ%||j        k    r||j        k    rŒ<||j        k    rŒH||         |         d	k    rd||         |<   ŒfŒ‹d„ |D ¦   «         }d}	t-          ||¦  «        D ]\  }}|	|dz   z  }	|	|dz   z  }	Œ|	S )Nr±  c                ó^   •— g | ])}t          j        ‰|¦  «                             ¦   «         ‘Œ*S rK   )Ú	linecacheÚgetlineÚrstrip)r¤   Úcurrent_linenorß  s     €rm   r�  z'format_source_range.<locals>.<listcomp>¹  sB   ø€ ð ð ð àõ 	Ô˜( NÑ3Ô3×:Ò:Ñ<Ô<ðð ð rl   r2   )re   é   )r  ÚcolnoÚ	end_colnor   rŸ   rÍ   ú~r  c                ó:   — g | ]}|                      d d¦  «        ‘ŒS )r  ú^)rï  ©r¤   Úmarkers     rm   r�  z'format_source_range.<locals>.<listcomp>ü  s&   € ÐBÐBÐB°�6—>’> # sÑ+Ô+ÐBÐBÐBrl   c                ó,   — g | ]}t          |¦  «        ‘ŒS rK   r¡  r"  s     rm   r�  z'format_source_range.<locals>.<listcomp>þ  s   € Ð+OÐ+OÐ+O¸V­D°©L¬LÐ+OÐ+OÐ+Orl   r!  c                ó8   — g | ]}d                       |¦  «        ‘ŒS )r±  rô  r"  s     rm   r�  z'format_source_range.<locals>.<listcomp>  s"   € ÐAÐAÐA v�2—7’7˜6‘?”?ÐAÐAÐArl   )r”  rÍ  rZ  r[  r  ÚFrameSummaryr	  r¢   Ú
splitlinesÚtextwrapÚdedentr›  Úindentrà  r·   Úlstripr  rü   rã  rä  rå  ræ  r{  )rß  rë  r  r  r  r  Úlast_linenoÚsource_linesÚframe_summaryr‡  Úsource_lines_dedentÚ
indent_lenr*  Ú
first_lineÚstart_offsetrç  ÚmarkersÚ
end_offsetÚ	last_lineÚlineÚ
num_spacesÚanchorsÚmutable_markersÚmarker_linenorï  r#  s   `                         rm   Úformat_source_ranger;  ¬  s  ø€ ð €~Øˆrà *Ð 6�*�*¸F€Kðð ð ð å# F¨K¸!©OÑ<Ô<ðñ ô €Lõ ˆ|ÑÔð Øˆrõ 	Ô˜GÒ#Ñ#ØÑ"Ø˜&Ò Ñ ØÑ"ØÑ&õ "Ô.ØØØØ!ØØ$ð
ñ 
ô 
ˆõ Ô&¨ Ñ7Ô7¸Ô:ˆØ—’˜6×,Ò,Ñ.Ô.¨q¨r¨rÔ2Ñ3Ô3ˆÝ&œo¨d¯iªi¸Ñ.EÔ.EÑFÔF×QÒQÑSÔSÐØ"ð 	ØˆMÝ˜ aœÑ)Ô)­CÐ0CÀAÔ0FÑ,GÔ,GÑGˆ
Ø˜a”  * Ô-ˆÝŒ�xœ¨vÑ6Ô6¸Ñ?Ô?Ð?à˜a”€JØÐ˜ZÐ/°>Ð3IØÐå˜z¨:Ñ6Ô6€LØ€GØ€Gà�VÒÐÝ  ¨^Ñ<Ô<ˆ
Ø˜\¨*Ð4Ô5ˆØ�Š�s˜\Ñ)¨C°:ÀÑ3LÑ,MÑMÑNÔNÐNÑNà˜\˜]˜]Ô+¨dÑ2ˆØ�Š�s˜\Ñ)¨Cµ3°z±?´?À\Ñ3QÑ,RÑRÑSÔSÐSØ  Ô$ˆ	Ý  ¨NÑ;Ô;ˆ
Ø   2 Ô&ð 	Nð 	NˆDØ�t˜d‘{Ñ"ˆGÝ˜T™œ¥S¨¯ª©¬Ñ%7Ô%7Ñ7ˆJØ�NŠN˜3 Ñ+¨cµS¸±Y´YÀÑ5KÑ.LÑLÑMÔMÐMÐMØ�9˜[˜j˜[Ô)Ñ)ˆÝ˜‘^”^¥c¨)×*:Ò*:Ñ*<Ô*<Ñ&=Ô&=Ñ=ˆ
Ø�Š�s˜ZÑ'¨#°¸jÑ1HÑ*IÑIÑJÔJÐJà#€GðÝ,¨WÑ5Ô5ˆˆøÝð ð ð Øˆðøøøð €ØBÐB¸'ÐBÑBÔBˆˆà+OÐ+OÀwÐ+OÑ+OÔ+OˆàÔ" aÒ'Ð'ØÐ#Ô# |Ñ3Ð#Ô#ØÔ%¨Ò*Ð*ØÐ&Ô&¨,Ñ6Ð&Ô&å"¥3 w¡<¤<Ñ0Ô0ð 	>ð 	>ˆMÝ�S °Ô!?Ñ@Ô@ÑAÔAð >ð >�Ø  7Ô#:Ò:Ð:Øà! WÔ%<Ò<Ð<Ø˜gÔ5Ò5Ð5àà! WÔ%?Ò?Ð?Ø˜wÔ9Ò9Ð9àØ  7Ô#=Ò=Ð=ØØ" =Ô1°#Ô6¸#Ò=Ð=Ø:=�O MÔ2°3Ñ7øð!>ð$ BÐA°ÐAÑAÔAˆà€FÝ˜L¨'Ñ2Ô2ð  ð  ‰ˆˆfØ�$˜‘+ÑˆØ�&˜4‘-ÑˆˆØ€Ms   Ë0L  Ì 
LÌLútypes.CodeTypeÚinstr>   c                óú   — t          |d¦  «        st          d¦  «        ‚|j        €t          d¦  «        ‚t          | j        |j        j        |j        j        |j        j        |j        j        | j	        ¬¦  «        S )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).
    Ú	positionsz&inst must have a 'positions' attributeNzinst.positions must not be Noner  )
rÚ   rü   r?  r;  r  rë  r  r  r  rÛ  )rØ  r=  s     rm   Úget_instruction_source_311r@  !  s   € õ �4˜Ñ%Ô%ð GÝÐEÑFÔFÐFØ„~ÐÝÐ>Ñ?Ô?Ð?ÝØÔØŒÔØŒÔ!ØŒÔ!ØŒÔ%Ø”lðñ ô ð rl   c                ó\   — t          | t          j        ¦  «        rt          | dd ¦  «        S d S )NÚ_dynamo_static_input_type)r<  r  rÒ  rS  r4  s    rm   Úget_static_address_typerC  >  s.   € Ý�!•U”\Ñ"Ô"ð =Ý�qÐ5°tÑ<Ô<Ð<àˆ4rl   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 |¢|¢R v S rƒ   )	r  r7  r6   Ú	get_stateÚdefault_generatorr¡  r×  Ú	set_stater¤  )rÔ   ÚgettersÚsetterss      rm   Úis_rng_state_getter_or_setterrJ  E  ss   € õ 	ŒÔÔ$ÝÔÔ)ÝÔÝŒ
Ô ð€Gõ 	ŒÔÔ$ÝÔÔ)ÝÔÝŒ
Ô ð	€Gð Ð(�gÐ( Ð(Ð(Ð(Ð(rl   c                ó°   — t          | t          j        ¦  «        o<| j        dk    o1t	          | j        d¦  «        o| j        j        t          j        j	        u S )NÚ__get__Ú__objclass__)
r<  r\  r   rf   rÚ   Ú__self__rM  r  r7  Ú_TensorBasera  s    rm   Úis_tensor_base_attr_getterrP  V  sV   € å�5�%Ô1Ñ2Ô2ð 	@ØŒN˜iÒ'ð	@å�E”N NÑ3Ô3ð	@ð ŒNÔ'­5¬8Ô+?Ð?ð	rl   c                óš   — 	 t          j        t          j        | ¦  «        }t	          |¦  «        t
          j        u S # t          $ r Y dS w xY wrd  )rš  r›  r  rÒ  rÜ  r\  r¹  r©  )rz   rP  s     rm   Úis_tensor_getset_descriptorrR  _  sQ   € ðÝÔ%¥e¤l°DÑ9Ô9ˆÝ�D‰zŒz�UÔ7Ð7Ð7øÝð ð ð Øˆuˆuðøøøs   ‚9< ¼
A
Á	A
c                ób   — t          | dd¦  «        }|duo|dk    p|                     d¦  «        S )a¢  Check if cls is defined in torch or a torch submodule.

    Torch-internal C-level descriptors (e.g. torch.Tensor.unsqueeze_) need
    to go through VariableTracker.build / trace_rules so they get the right
    VT (TorchInGraphFunctionVariable), which has guards like
    inplace-view-on-input-tensor detection. This helper identifies classes
    whose descriptors should take that path instead of descriptor VTs.
    rg   Nr  ztorch.)rS  r‹  )r{   rÎ  s     rm   Úis_torch_classrT  g  s=   € õ �S˜,¨Ñ-Ô-€FØ˜ÐÐT 6¨WÒ#4Ð#S¸×8IÒ8IÈ(Ñ8SÔ8SÐTrl   c                ó"   — t          | d¦  «        S )NÚ__torch_function__)rÚ   ra  s    rm   Úis_torch_function_objectrW  t  s   € Ý�5Ð.Ñ/Ô/Ð/rl   c                ór  — ddl m} ddlm} |                      ¦   «         s2t          | d¦  «        r†t          |                      ¦   «         d¦  «        rdd }t          | |¦  «        rt          | j	        dd ¦  «        }n&t          | |¦  «        rt          | j
        dd ¦  «        }|d t          j        j        fvS dS )Nr   )ÚUserDefinedObjectVariable)ÚTensorWithTFOverrideVariableÚ
peek_valuerV  F)Útorch._dynamo.variablesrY  Ú&torch._dynamo.variables.torch_functionrZ  r/  rÚ   r[  r<  rS  Ú
class_typerÔ   r  r7  Ú_disabled_torch_function_impl)r¼  rY  rZ  rÒ  s       rm   Úhas_torch_functionr`  x  sà   € ð BÐAÐAÐAÐAÐAØSÐSÐSÐSÐSÐSð 
‡~‚~ÑÔð 
JÝ��LÑ!Ô!ð
JÝ&-¨b¯mªm©o¬oÐ?SÑ&TÔ&Tð
Jð ˆÝ�bÐ6Ñ7Ô7ð 	AÝ˜2œ=Ð*>ÀÑEÔEˆDˆDå˜Ð5Ñ6Ô6ð 	AÝ˜2œ8Ð%9¸4Ñ@Ô@ˆDà˜D¥%¤(Ô"HÐIÐIÐIàˆ5rl   c                óÀ   — d }d }t           j        j                             ¦   «         x}r| |j        v r|j        |          }|j        }|                     | d||¬¦  «        S )NF)Ústatic_shapesÚsymbolic_contextr   )r  rR  r"   Útry_getÚtensor_to_contextr9  Úfrom_tensor)rÇ  r­  rc  r   Útracing_contexts        rm   Úto_fake_tensorrh  –  sx   € ð ÐØ€FÝœ-Ô6×>Ò>Ñ@Ô@Ð@€ð 4Ø�Ô1Ð1Ð1Ø.Ô@ÀÔCÐØ%Ô3ˆFà× Ò Ø	˜Ð1AÈ&ð !ñ ô ð rl   c                óÂ   — t          | ¦  «         oOt          | ¦  «         o?t          | ¦  «        o0t          | d¦  «        o t          | j        d¦  «        o| j        j        S )NÚ__dataclass_params__Úfrozen)r"  r!  r   rÚ   rj  rk  ra  s    rm   Úis_frozen_dataclassrl  ¦  st   € å# EÑ*Ô*Ð*ð 	.Ý& uÑ-Ô-Ð-ð	.å˜ÑÔð	.õ �EÐ1Ñ2Ô2ð	.õ �EÔ.°Ñ9Ô9ð		.ð
 Ô&Ô-ðrl   Úattrsc                óx   — |D ]$}t          | |¦  «        r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Ú   rS  rü   )r  rm  rP  s      rm   Úget_first_attrro  ±  s^   € ð ð &ð &ˆÝ�3˜ÑÔð 	&Ý˜3 Ñ%Ô%Ð%Ð%Ð%ð	&õ ˜CÐMÐMÀeÐMÐMÑ
NÔ
NÐNrl   Úshould_enableÚ	fullgraphÚdynamicc              #  ó®   ‡‡K  — | sd V — d S dˆˆfd„}t           j        j                             |¦  «        5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S )Nrà  r   rt   c                ó<   •— dd„}t          j        | |‰‰¬¦  «        S )NÚgm_r   Úexample_inputs_rt   c                ó–   — t           j        j        j        d         dxx         dz  cc<   t           j                             | |¦  «        S )NÚcompiled_autogradÚcompilesr2   )r  r€  rÐ  r\   r´  Úcompile)ru  rv  s     rm   Úinner_compilerzKmaybe_enable_compiled_autograd.<locals>.compiler_fn.<locals>.inner_compilerÅ  sE   € Ý”Ô#Ô,Ð-@ÔAÀ*ÐMÐMÔMÐQRÑRÐMÐMÑMÝ”×.Ò.¨s°OÑDÔDÐDrl   )Úbackendrq  rr  )ru  r   rv  r   rt   r   )r  rz  )rà  r{  rr  rq  s     €€rm   Úcompiler_fnz3maybe_enable_compiled_autograd.<locals>.compiler_fnÄ  s?   ø€ ðEð Eð Eð Eõ ”=Ø˜N°iÈðñ ô ð rl   )rà  r   rt   r   )r  r€  rx  Ú_enable)rp  rq  rr  r}  rè  s    ``  rm   Úmaybe_enable_compiled_autogradr  ¼  sÇ   øøè è € ð ð Øˆˆˆˆˆð	ð 	ð 	ð 	ð 	ð 	ð 	õ Œ]Ô,×4Ò4°[ÑAÔAð 	ÀSØˆIˆIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¸A
Á
AÁAr1   c                 óV   —  G d„ dt           ¦  «        } t           | ¦   «         ¦  «        S )Nc                  ó   — e Zd ZdS )ú*invalid_removeable_handle.<locals>.InvalidN)rf   rg   rh   rK   rl   rm   ÚInvalidr‚  Ó  s   € € € € € Øˆrl   rƒ  )r“  r1   )rƒ  s    rm   Úinvalid_removeable_handler„  Ñ  sB   € ðð ð ð ð •$ñ ô ð õ ˜7˜7™9œ9Ñ%Ô%Ð%rl   c                óà   — t          | t          j        j        ¦  «        s| S t          | t          j        j        ¦  «        r| S | j                             | j        ¦  «        }| j        |_        |S rƒ   )	r<  r  rÓ  rs  r   r�  r·  rÉ  rb  )rÙ  Úproxys     rm   Únn_module_proxyr‡  Ý  s^   € Ý�c�5œ8œ?Ñ+Ô+ð Øˆ
Ý�#•u”xÔ+Ñ,Ô,ð àˆ
ØŒM×!Ò! #¤-Ñ0Ô0€EØ”\€E„NØ€Lrl   c                  ó(   ‡ — e Zd Zdˆ fd„Zdd
„Zˆ xZS )Ú	GmWrapperrà  rD  Úunflatten_fnúCallable[[list[Any]], Any]rt   ru   c                ód   •— t          ¦   «                              ¦   «          || _        || _        d S rƒ   )r²  r’  rà  rŠ  )r‘  rà  rŠ  r·  s      €rm   r’  zGmWrapper.__init__é  s0   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ(ˆÔÐÐrl   r-  r   c                óZ   — t          |¦  «        } | j        |                      |¦  «        Ž S rƒ   )r†  rà  rŠ  r>  s     rm   rD  zGmWrapper.forwardð  s*   € å˜t™*œ*ˆØˆtŒw˜×)Ò)¨$Ñ/Ô/Ð0Ð0rl   )rà  rD  rŠ  r‹  rt   ru   ©r-  r   rt   r   )rf   rg   rh   r’  rD  r¸  r¹  s   @rm   r‰  r‰  è  sQ   ø€ € € € € ð)ð )ð )ð )ð )ð )ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1rl   r‰  Ú
compile_gmúCallable[[Any, Any], Any]c                ó‚  ‡‡‡	‡
— d„ t          | j        j        ¦  «        D ¦   «         Š
t          j        j        j        rœ‰
dgk    rt          d‰
› �¦  «        ‚t          |d         t          ¦  «        s%t          dt          |d         ¦  «        › �¦  «        ‚t          |d         ¦  «        Šdd„Š	dˆfd
„} |t          | |¦  «         ‰	|¦  «        ¦  «        Šn]t          j        |¦  «        \  }}t          j        t          j        |¬¦  «        } |t          | |¦  «        |¦  «        Št          j        Š	dˆˆ	ˆ
fd„}|S )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.
    c                ód   — g | ]-\  }}|j         d k    ¯|j                             dd¦  «        ¯+|‘Œ.S )rô  Ú	steal_argF)rð  rJ  rˆ   )r¤   rP  rK  s      rm   r�  z(flatten_graph_inputs.<locals>.<listcomp>þ  sH   € ð ð ð áˆAˆtØŒ7�mÒ#Ð#¨¬	¯ª°kÀ5Ñ(IÔ(IÐ#ð 	
à#Ð#Ð#rl   r   z)Expected inputs_idx_to_clear == [0], got z%Expected inputs[0] to be a list, got r-  r   rt   c                óB   — | d         t          | dd …         ¦  «        z   S r  r¡  rÝ  s    rm   Ú
flatten_fnz(flatten_graph_inputs.<locals>.flatten_fn  s   € Ø˜”7�T $ q r r¤(™^œ^Ñ+Ð+rl   Ú	flat_argsc                ó0   •— | d ‰…         g| ‰d …         ¢R S rƒ   rK   )r–  Úboxed_inputs_counts    €rm   rŠ  z*flatten_graph_inputs.<locals>.unflatten_fn  s,   ø€ ØÐ1Ð1Ð1Ô2ÐT°YÐ?QÐ?RÐ?RÔ5SÐTÐTÐTrl   )Útreespecc                 ón   •—  ‰| ¦  «        }‰D ]}| |                               ¦   «          Œ ‰|¦  «        S rƒ   )r„   )r-  r–  rP  Úcompiled_fnr•  Úinputs_idx_to_clears      €€€rm   Úwrapperz%flatten_graph_inputs.<locals>.wrapper   sH   ø€ Ø�J˜tÑ$Ô$ˆ	ð %ð 	ð 	ˆAØ�ŒG�MŠM‰OŒOˆOˆOð ˆ{˜9Ñ%Ô%Ð%rl   rŽ  )r–  r   rt   r   )ro  rT  rï  r  r€  rx  Úin_compiled_autograd_regionrü   r<  r†  rÜ  r›  r‰  rR  rS  r—  rà  Útree_unflattenÚarg_tree_leaves)rà  rA  r�  rŠ  Úflat_inputsÚspecr�  r˜  r›  r•  rœ  s          @@@@rm   Úflatten_graph_inputsr£  ö  s£  øøøø€ ðð å  ¤¤Ñ0Ô0ðñ ô Ðõ „}Ô&ÔBð ,ð  1 #Ò%Ð%Ý ØQÐ<OÐQÐQñô ð õ ˜& œ)¥TÑ*Ô*ð 	Ý ØI½¸VÀA¼Y¹¼ÐIÐIñô ð õ ! ¨¤™^œ^Ðð	,ð 	,ð 	,ð 	,ð	Uð 	Uð 	Uð 	Uð 	Uð 	Uð !�j¥¨2¨|Ñ!<Ô!<¸j¸jÈÑ>PÔ>PÑQÔQˆˆõ #Ô/°Ñ7Ô7Ñˆ�TÝ Ô(­Ô)>ÈÐNÑNÔNˆØ �j¥¨2¨|Ñ!<Ô!<¸kÑJÔJˆåÔ+ˆ
ð&ð &ð &ð &ð &ð &ð &ð &ð €Nrl   Úmaybe_gmc                óš   — t          | t          j        j        ¦  «        rt	          | d¦  «        sg S | j                             dg ¦  «        S )NrJ  Úlocals_to_steal)r<  r  r   r�  rÚ   rJ  rˆ   )r¤  s    rm   Úget_locals_to_stealr§  -  sH   € Ý�h¥¤Ô 4Ñ5Ô5ð ½WÀXÈvÑ=VÔ=Vð Øˆ	ØŒ=×ÒÐ.°Ñ3Ô3Ð3rl   r¦  c                ó   — || j         d<   d S )Nr¦  rI  )rà  r¦  s     rm   Úset_locals_to_stealr©  3  s   € Ø!0€B„GÐÑÐÐrl   c                  ó   — e Zd Zdd„Zd	d„ZdS )
ÚLitr,  rœ   rt   ru   c                ó   — || _         d S rƒ   ©r,  )r‘  r,  s     rm   r’  zLit.__init__8  s   € ØˆŒˆˆrl   c                ó   — | j         S rƒ   r­  r•  s    rm   r„  zLit.__repr__;  s	   € ØŒvˆrl   N)r,  rœ   rt   ru   rI  )rf   rg   rh   r’  r„  rK   rl   rm   r«  r«  7  s<   € € € € € ðð ð ð ðð ð ð ð ð rl   r«  r  Úwarn_once_cacheÚ
stacklevelc                ó‚   — | t           v rd S t                                | ¦  «         t          j        | |dz   ¬¦  «         d S )Nr2   )r°  )r¯  rž  ÚwarningsÚwarn)r¶  r°  s     rm   Ú	warn_oncer´  B  sG   € ð �oÐÐØˆÝ×Ò˜ÑÔÐÝ„M�# *¨q¡.Ð1Ñ1Ô1Ð1Ð1Ð1rl   Útextc                óV   — t          j        d¦  «        }|                     d| ¦  «        S )Nz\x1B[@-_][0-?]*[ -/]*[@-~]r±  )r˜  rz  rµ  )rµ  Úansi_escapes     rm   Ústrip_color_from_stringr¸  N  s&   € å”*Ð:Ñ;Ô;€KØ�?Š?˜2˜tÑ$Ô$Ð$rl   c               #  óö   K  — 	 t           j        j                             d¦  «        } d V — t           j        j                             | ¦  «         d S # t           j        j                             | ¦  «         w xY w)NT)r  r7  Ú	_autogradÚ _saved_tensors_hooks_set_tracing)rt  s    rm   Ú+_disable_saved_tensors_hooks_during_tracingr¼  T  sk   è è € ðCÝ”Ô"×CÒCÀDÑIÔIˆØˆˆˆåŒÔ×;Ò;¸EÑBÔBÐBÐBÐBø�ŒÔ×;Ò;¸EÑBÔBÐBÐBøøøs   „(A Á&A8c                 óV   — t           j        j        j        ot          j        ¦   «          S rƒ   )r  r´  rI   ÚfreezingÚis_grad_enabledrK   rl   rm   Úis_parameter_freezingrÀ  ^  s!   € ÝŒ?Ô!Ô*ÐJµ5Ô3HÑ3JÔ3JÐ/JÐJrl   c                 óL   — d„ t          t          ¦   «         ¦  «        D ¦   «         S )Nc                ó,   — g | ]}t          |¦  «        ‘ŒS rK   )Ú get_torch_function_mode_stack_atrO  s     rm   r�  z1get_torch_function_mode_stack.<locals>.<listcomp>c  s.   € ð ð ð Ø01Õ(¨Ñ+Ô+ðð ð rl   )r”  r   rK   rl   rm   Úget_torch_function_mode_stackrÄ  b  s2   € ðð Ý5:Õ;TÑ;VÔ;VÑ5WÔ5Wðñ ô ð rl   Úindc                óÖ   — | dk     rt          d| › �¦  «        ‚| t          ¦   «         k    r!t          dt          ¦   «         › d| › �¦  «        ‚t          j                             | ¦  «        S )Nr   zExpected ind >= 0, got z,Expected ind < _len_torch_function_stack() (z), got )rü   r   r  r7  Ú_get_function_stack_at)rÅ  s    rm   rÃ  rÃ  h  sy   € Ø
ˆQ‚w€wÝÐ<°sÐ<Ð<Ñ=Ô=Ð=Ø
Õ'Ñ)Ô)Ò)Ð)ÝØdÕ;TÑ;VÔ;VÐdÐdÐ_bÐdÐdñ
ô 
ð 	
õ Œ8×*Ò*¨3Ñ/Ô/Ð/rl   rb  c                ó†   — t          t          ¦   «         ¦  «        D ]}t          ¦   «          Œ| D ]}t          |¦  «         Œd S rƒ   )r”  r   r   r   )rb  rÚ  Úmodes      rm   Úset_torch_function_mode_stackrÊ  r  sY   € ÝÕ,Ñ.Ô.Ñ/Ô/ð $ð $ˆÝ!Ñ#Ô#Ð#Ð#àð ,ð ,ˆÝ% dÑ+Ô+Ð+Ð+ð,ð ,rl   c                 ó^   — t          t          ¦   «         ¦  «        D ]} t          ¦   «          Œd S rƒ   )r”  r   r   )rÚ  s    rm   Úclear_torch_function_mode_stackrÌ  z  s9   € ÝÕ,Ñ.Ô.Ñ/Ô/ð $ð $ˆÝ!Ñ#Ô#Ð#Ð#ð$ð $rl   rN  útorch.deviceútorch.Streamc                ó@   — t           j                             | ¦  «        S rƒ   )r  rñ  Úcurrent_streamrM  s    rm   Úget_current_streamrÑ    s   € ÝÔ×+Ò+¨FÑ3Ô3Ð3rl   c                 ó"   — t          ¦   «          d S rƒ   )Ú
breakpointrÝ  s    rm   Ú_breakpoint_for_c_dynamorÔ  „  s   € Ý�L„L€L€L€Lrl   c                óÐ   — | j         }t          j        |¦  «        }t          |j        ¦  «        dk    rddlm}  |d¦  «        ‚|j        | j        k    rddlm}  |d¦  «        ‚d S )Nrd   r2   )ÚInternalTorchDynamoErrorz[Tensor subclass method __metadata_guard__ must take exactly two subclass metadata argumentsz?Tensor subclass method __metadata_guard__ must be a classmethod)	Ú__metadata_guard__rš  Ú	signaturer›  rê  rÖ  rÖ  rN  r·  )rÔ   rÅ  ÚsigrÖ  s       rm   Úverify_guard_fn_signaturerÚ  ˆ  sœ   € Ø	Ô	!€BÝ
Ô
˜BÑ
Ô
€CÝ
ˆ3Œ>ÑÔ˜aÒÐØ1Ð1Ð1Ð1Ð1Ð1à&Ð&Øiñ
ô 
ð 	
ð 
„{�e”oÒ%Ð%Ø1Ð1Ð1Ð1Ð1Ð1à&Ð&ØMñ
ô 
ð 	
ð &Ð%rl   Úuser_clsc                óú   — | j         t          j         t          j         fv o\| j        t          j        t          j        fv o=| j        t          j        t          j        fv o| j        t          j        t          j        fv S rƒ   )rÇ   r“  r   ru  r‡  Ú__iter__)rÛ  s    rm   Ú#does_not_override_dict_iter_methodsrÞ  ™  sl   € àŒ�4œ:¥{Ô'8Ð9Ð9ð 	GØŒO¥¤­[Ô-?Ð@Ð@ð	GàŒM�dœi­Ô)9Ð:Ð:ð	Gð Ô¥$¤-µÔ1EÐ!FÐFð	rl   rP  c                ó,   — |                       |¦  «        S rƒ   )r|  ©r~  rP  s     rm   Ú	call_sizerá  ¥  s   € à�6Š6�!‰9Œ9Ðrl   c                ó,   — |                       |¦  «        S rƒ   )rm  rà  s     rm   Úcall_striderã  ª  s   € à�8Š8�A‰;Œ;Ðrl   c                ó*   — |                       ¦   «         S rƒ   )Ústorage_offsetr}  s    rm   Úcall_storage_offsetræ  ¯  s   € à×ÒÑÔÐrl   c                ó,   ‡ — ddg}ˆ fd„|D ¦   «         }|S )NrB  Útagc                ób   •— i | ]+}|‰j         v ¯|t          j        ‰j         |         ¦  «        “Œ,S rK   )rb  rR  )r¤   rÓ   rÇ  s     €rm   rì  z(_extract_tensor_dict.<locals>.<dictcomp>¼  s>   ø€ ð ð ð Ø,/À3È!Ì*ÐCTÐCTˆ�TŒY�q”z #”Ñ'Ô'ÐCTÐCTÐCTrl   rK   )rÇ  ÚKEYS_TO_COPYÚtensor_dicts   `  rm   Ú_extract_tensor_dictrì  ¶  s@   ø€ à#Øð€Lð
ð ð ð Ø3?ðñ ô €Kð Ðrl   ú
tuple[Any]c                ó.   — t          j        j        | i |¤ŽS rƒ   )r  r7  ÚStreamrý  s     rm   Úbuild_streamrð  Ã  s   € ÝŒ8Œ?˜DÐ+ FÐ+Ð+Ð+rl   útorch.Eventc                ó.   — t          j        j        | i |¤ŽS rƒ   )r  r7  ÚEventrý  s     rm   Úbuild_eventrô  Ç  s   € ÝŒ8Œ>˜4Ð* 6Ð*Ð*Ð*rl   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dS )ÚCompileTimeInstructionCounterr   rs   Ú_counterr  Ú_idrt   ru   c                ón   — | j         dz   | _         | j         dk    rt          j        ¦   «         | _        d S d S r¬   )Ú_depthr   rÒ  rø  r…   s    rm   rÒ  z#CompileTimeInstructionCounter.startÐ  s5   € à”Z !‘^ˆŒ
ØŒ:˜Š?ˆ?Ý*Ô0Ñ2Ô2ˆCŒGˆGˆGð ˆ?rl   c                óš   — | j         dz
  | _         | j         dk    r0| xj        t          j        | j        ¦  «        z  c_        d| _        d S d S )Nr2   r   r  )rú  r÷  r   Úendrø  r…   s    rm   rü  z!CompileTimeInstructionCounter.endÖ  sJ   € à”Z !‘^ˆŒ
ØŒ:˜Š?ˆ?ØˆLŒLÕ0Ô4°S´WÑ=Ô=Ñ=ˆLŒLØˆCŒGˆGˆGð ˆ?rl   c                ó   — d| _         d S r°   ©r÷  r…   s    rm   r„   z#CompileTimeInstructionCounter.clearÝ  s   € àˆŒˆˆrl   c                ó   — | j         S rƒ   rþ  r…   s    rm   rÔ   z#CompileTimeInstructionCounter.valueá  s
   € àŒ|Ðrl   r›  c              #  óä   K  — 	 t           j        r|                      ¦   «          d V — t           j        r|                      ¦   «          d S d S # t           j        r|                      ¦   «          w w xY wrƒ   )rI   Ú%record_compile_time_instruction_countrÒ  rü  r…   s    rm   r®  z$CompileTimeInstructionCounter.recordå  st   è è € ð	ÝÔ;ð Ø—	’	‘”�ØˆEˆEˆEåÔ;ð Ø—’‘	”	�	�	�	ðð ø�vÔ;ð Ø—’‘	”	�	�	ðøøøs   „$A Á#A/Nr’   r“   ©rt   r›  )rf   rg   rh   r÷  r–   rø  rú  r—   rÒ  rü  r„   rÔ   r   r®  rK   rl   rm   rö  rö  Ë  sá   € € € € € € Ø€HÐÐÐÑØ€C€M€M€M�MØ€Fàð3ð 3ð 3ñ „[ð3ð
 ðð ð ñ „[ðð ðð ð ñ „[ðð ðð ð ñ „[ðð Øðð ð ñ „^ñ „[ðð ð rl   rö  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚCompileCounterIntÚotherr   rt   c                ó`   •— t          t          ¦   «                              |¦  «        ¦  «        S rƒ   )r	  r²  Ú__add__)r‘  r	  r·  s     €rm   r	  zCompileCounterInt.__add__ò  s!   ø€ Ý ¥¡¤§¢°Ñ!7Ô!7Ñ8Ô8Ð8rl   )r	  r   rt   r	  )rf   rg   rh   r	  r¸  r¹  s   @rm   r	  r	  ñ  s=   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9rl   r	  ÚfeatureÚusagec                ó�   — t          ¦   «                              ¦   «         r%t          ¦   «                              d| |¦  «         dS dS )zQ
    Records whether we are using a feature
    Generally a feature is a JK.
    rL  N)rÝ   rþ   Úset_key_value)r	  r		  s     rm   Úset_feature_user	  ö  sO   € õ ÑÔ×(Ò(Ñ*Ô*ð MÝÑÔ×+Ò+¨O¸WÀeÑLÔLÐLÐLÐLðMð Mrl   )Úddp_optimizerÚpython_reducerÚ'python_reducer_without_compiled_forwardÚno_optimizationÚ_ddp_optimization_modec                 óú   — t           j        } t          | t          ¦  «        r| rdnd}n7t          | t          ¦  «        r| }nt          dt          | ¦  «        ›�¦  «        ‚|t          vrt          d|›�¦  «        ‚|S )Nr	  r	  z;Invalid dynamo config optimize_ddp type type(optimize_ddp)=z.Invalid dynamo config optimize_ddp value mode=)	rI   Úoptimize_ddpr<  rö   rœ   rú  rÜ  r	  rü   )r	  rÉ  s     rm   Úget_optimize_ddp_moder	    s•   € ÝÔ&€LÝ�,¥Ñ%Ô%ð 
Ø".ÐEˆˆÐ4EˆˆÝ	�L¥#Ñ	&Ô	&ð 
ØˆˆåØLµt¸LÑ7IÔ7IÐLÐLñ
ô 
ð 	
ð Õ)Ð)Ð)ÝÐPÈÐPÐPÑQÔQÐQØ€Krl   c               #  ó  K  — t           j        ot          j        ¦   «         } | r^t          j        d¦  «        5  t          j        ¦   «         5  dV — ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS dV — dS )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)rI   Ú"fake_tensor_disable_inference_moder  Úis_inference_mode_enabledÚinference_moderp  )Úis_inference_mode_ons    rm   Úmaybe_disable_inference_moder	    s  è è € õ 	Ô1ÐWµeÔ6UÑ6WÔ6Wð ð ð åÔ  Ñ'Ô'ð	ð 	åŒM‰OŒOð	ð 	ð ˆEˆEˆEð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆˆˆˆˆs5   ¸A5ÁAÁA5ÁA!	Á!A5Á$A!	Á%A5Á5A9Á<A9c               #  ó®   K  — t           j        rBt          j        j                             ¦   «         5  dV — ddd¦  «         dS # 1 swxY w Y   dS dV — dS )zÉ
    Turns off tracking of inference_mode for fake tensor propagation. With this
    context manager, when a real tensor is converted to fake tensor, the fake
    tensor looses its inference-ness.
    N)rI   r	  r  rÖ  Ú
meta_utilsÚ$disable_inference_mode_for_fake_proprK   rl   rm   Ú*maybe_disable_inference_mode_for_fake_propr	  0  s§   è è € õ Ô0ð ÝÔÔ)×NÒNÑPÔPð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆˆˆˆˆs   ²AÁAÁAc                ó.   — | d u pd| j         v pd| j         v S )Nr©  rH  rI  )rK  s    rm   Úis_node_meta_validr 	  >  s$   € Ø�4ˆ<ÐM˜?¨d¬iÐ7ÐM¸5ÀDÄIÐ;MÐMrl   c                 ó   — t           S rƒ   ©Ú_error_on_graph_breakrK   rl   rm   Ú_get_error_on_graph_breakr$	  F  s   € Ý Ð rl   c                ó
   — | a d S rƒ   r"	  ra  s    rm   Ú_set_error_on_graph_breakr&	  J  s   € à!ÐÐÐrl   c                 óT   — t          j        d¦  «        x} �| dvS t          d¦  «        S )NÚTENSORIFY_PYTHON_SCALARS)r¢  ÚFALSEz)pytorch/compiler:tensorify_python_scalars)r¤  Úgetenvr$   )Úenvs    rm   Ú_is_tensorify_enabledr,	  O  s2   € åŒyÐ3Ñ4Ô4Ð4ˆÐAØ˜.Ð(Ð(ÝÐFÑGÔGÐGrl   úAbstractContextManager[None]c                 óÈ   — t           j        j        j        r$t           j        j                             d¦  «        nt          j        ¦   «         } |  	                    ¦   «          | S )NzPregraph bytecode)
r  r  r  r  r7  r8  r9  rW  Únullcontextr:  ©Úcms    rm   Úrecord_pregraph_bytecode_enterr2	  V  sR   € õ Œ>Ô"Ô7ð	&�ŒÔ×.Ò.Ð/BÑCÔCÐCåÔ#Ñ%Ô%ð ð
 ‡L‚L�N„N€NØ€Irl   r1	  c                ó4   — |                       d d d ¦  «         d S rƒ   )r;  r0	  s    rm   Úrecord_pregraph_bytecode_exitr4	  a  s   € à‡K‚K��d˜DÑ!Ô!Ð!Ð!Ð!rl   úlist[CodeType] | Nonec                 ó,   — ddl m}   | j        ¦   «         S )Nr   ©r"   )Útorch._guardsr"   Úget_traced_coder7	  s    rm   r9	  r9	  h  s%   € Ø,Ð,Ð,Ð,Ð,Ð,à)ˆ>Ô)Ñ+Ô+Ð+rl   c                ó|   — t          | ¦  «        }t          |dd¦  «        }|€dS t          | dd¦  «        }|duo||v S )a:  Check if value is a pybind11 enum member (with stable hash and eq).

    Pybind11 enums have __members__ on their type. Unlike Python's enum.Enum,
    pybind11 injects __hash__ and __eq__ directly into the type's __dict__,
    which trips raise_on_overridden_hash. But these are safe: members have
    deterministic hash and equality, same as Python enums.

    Note: pybind11 doesn't always return the singleton for enum values (e.g.
    a C++ function returning an enum may construct a new Python wrapper), so
    we check by name membership rather than identity.
    Ú__members__NFrz   )rÜ  rS  )rÔ   rÇ  Úmembersrz   s       rm   Úis_pybind11_enum_memberr=	  n  sO   € õ 	ˆU‰Œ€AÝ�a˜¨Ñ-Ô-€GØ€ØˆuÝ�5˜& $Ñ'Ô'€DØ�tÐÐ/ ¨ Ð/rl   ré  úCallable[..., VariableTracker]c                óT   ‡ ‡— t          ‰¦  «        st          d¦  «        ‚dˆˆ fd„}|S )Nz!Expect f to be a python callable.r-  rB   r/  rt   c                 óØ   •— ddl m} ddlm}  |¦   «         5  ‰                      |‰¦  «        t          | ¦  «        t          |¦  «        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr   )Ú_force_inline)ÚUserFunctionVariable)Útorch._dynamo.trace_rulesrA	  Ú!torch._dynamo.variables.functionsrB	  Úinline_user_function_returnr†  r“  )r-  r/  rA	  rB	  ré  rt  s       €€rm   Úinline_callz"_make_inlined.<locals>.inline_callˆ  sÌ   ø€ ð 	<Ð;Ð;Ð;Ð;Ð;ØJÐJÐJÐJÐJÐJàˆ]‰_Œ_ð 	ð 	Ø×1Ò1Ø$Ð$ QÑ'Ô'Ý�T‘
”
Ý�V‘”ñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ˜:AÁA#Á&A#)r-  rB   r/  rB   rt   rB   )rË  rü   )rt  ré  rF	  s   `` rm   Ú_make_inlinedrG	  ‚  sO   øø€ õ �A‰;Œ;ð BÝÐ@ÑAÔAÐAðð ð ð ð ð ð ð Ðrl   )r˜   r™   rš   r›   rt   rœ   r’   )r´   rµ   rt   ru   )rt   r²   )r¾   rs   rt   ru   )rt   r`   )rt   r   )rt   r   )rz   rœ   rt   r5  )NFNNNNFN)rÓ   rœ   r>  r?  rô   rö   rê   r@  rA  r?  rB  rC  rD  rE  rF  rö   rG  r?  rt   r5  r3  )rj  rk  rl  rö   rt   rœ   )rj  rp  rl  rö   rt   rq  )rœ   F)rj  rœ   rl  rö   rt   rs  )rt   rŸ  )rÖ  r×  rØ  r
   rt   rœ   )rß  rœ   rà  r?   rt   ru   )rë  rì  rt   rs   )r~  rO   rt   rO   )r~  r   rt   rö   )r-  r   r/  r   rt   ru   )r  r÷   r  r  rt   r  )r  r÷   r  r  rt   r  )r  r÷   r  r  rt   r  )r  r÷   r  r!  rt   r"  )r  r÷   r  r$  rt   r%  )r  r÷   r  r'  rt   r(  )r  r÷   r  r*  rt   r+  )r  r÷   r  r-  rt   r.  )r  r÷   r  r0  rt   r1  )r  r÷   r  r3  rt   r4  )r  r÷   r  r6  rt   r7  )r  r÷   r  r9  rt   rö   )r  r÷   r  r   rt   rö   )rA  rB  rC  rD  rt   rE  )rÔ   r   rt   rö   )rt  r@   ru  rB   rt   rv  )rt  r@   ru  rB   rt   ru   )rÔ   r�  rt   r�  )rÔ   r   rt   r“  )rÔ   r�  rt   ru   )rÔ   r   rt   r£  )rÔ   r   rt   r©  )rÔ   r   rt   r·  )rt  r@   r¼  rB   rt   rœ   )r¼  rB   rt   rœ   )rÅ  r   rt   r   )rÅ  r   rt   rÉ  )rÔ   r   rt   rÍ  )r  r   rt   rö   )rÙ  r   rt   rö   rA  rƒ   )rH  r   rt   rß  )r-  r   r/  r   rt   rä  )r  rü  rt   rì   )rñ  r  rt   ru   r.  )r¿  rs   rÀ  rs   r[  r]   rÁ  rÂ  rÃ  rÄ  rt   ru   )rÜ  rs   rt   ru   )rt   rä  )rt   rè  )rt   rö   )FF)ré   rœ   r3  rö   rô   rö   rt   r5  ro  )rN  rE  rO  rE  rP  rœ   rt   ru   )rN  rE  rO  rE  rt   ru   )r~  rE  rb  rc  rt   rE  )r‰  rŠ  rt   r‹  )r‰  r�  rt   r�  )r‰  r   rt   r   )rH  rE  rt   ru   r	  )r«  r   rt   r¬  )rC  r   r‰  r   rš  rö   rt   r   )r  r   rt   r?  )r{   r   rt   rö   )r{   rÜ  rt   rÐ  )rà  rD  rt   rá  )r2   )rC  r   r‰  rí  rî  rs   rt   rï  )rà  rD  r‰  rí  rt   rö   )rò  rs   rt   r   )r  r   rt   rö   )rt   r  )rÔ   r   rt   r  )rÔ   r   r   r   rt   rö   )rê  r   rt   r   )r-  rí  r/  r8  rt   rö   )r„  r_  rt   r`  )r  r_  rt   rc  )r  r_  rt   ri  )r{   r   rt   r   )ru  rv  rt   rs   )ru  r   r×  rs   rt   r   )rƒ  r„  rt   r…  )r‘  r   rt   r’  )rÇ  r   r{   rÜ  rt   r   )r„  rš  rò  rs   rt   r   )r,  rŸ  rò  rs   rt   rO   )rÔ   r   rù  rö   rt   rœ   )rK  r¨  r©  r   rt   ru   )r¼  rB   rt   r   )r,  rÚ  r»  rs   rt   rs   )r±  r±  )
rt  r@   rz   rœ   rÀ  rœ   rÁ  rœ   rt   ru   )
rÇ   rí  rÇ  r   rt  r@   rÈ  rö   rt   r   )r  r   rt   r×  )rÔ   r   rt   rÚ  )r~  r   rù  r   rt   rœ   )rñ  r   rù  r   rt   rœ   )rt  r@   rù  rœ   r  r   rt   rœ   )r�  rO   rþ  rÿ  rt   rö   )r  rœ   rþ  r   r  rö   rt   rœ   )rÅ  r	  rt   r   )r  r   r­  r  rt   r   )r  rE  r•  rE  rt   rE  )r  r   r•  r   r  rö   rt   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!  rt   rö   )rØ  r
   rt   rœ   )ry  rœ   rt   rœ   rI  )T)rK  r¨  r„  rö   rt   r   )rú  r   rt  r@   rt   r   )rt  r@   rï  r   r‰  rö   rt   r   )r¶  rœ   r­  r”  rt   rœ   )r¡  r¢  rt   r   )rK  r¨  rt  r@   r‰  rö   rt   r   )rt   ré  )rK  r¨  rt   r›  )rð  r   rK  r¨  r-  r   r/  r   rÂ  r   rt   r   )rK  r¨  rð  r   rt   r   )rà  r  rt   ru   )r  r   rt   rœ   )r  r   r  r   rt   r   )rÙ  r  rt   ru   )r  r   rz   rœ   rÔ   r   rt   ru   )r  r   rz   rœ   rt   ru   )r{   rÜ  rt   rö   )rÔ   r   r,  rö   rt   rj  )r  r2  rt   rœ   )r3  r8  rÍ  rö   r9  r!   rt   r:  )rI  rœ   rà  rD  rt   r   )r  rœ   rz   rœ   rß  rœ   rK  rs   rØ  r   rt   rœ   )FFF)
rÙ  r  r_  rö   r`  rö   ra  rö   rt   rÚ  )
rÙ  r  r_  rö   r`  rö   ra  rö   rt   rö   )rÔ   r   rt   r   )r  r   rz   rœ   rt   r   )rt   r—  )rŸ  rs   rt   r   )r  r   rt   r?  )r  r   rt   r«  )r~  r   rt   r   )rÅ  r}  r-  r.  r/  r0  rt   rZ   )rÁ  r   rt   r   )rÓ  rC   rt   r   )rœ   rœ   rÚ  rs   rt   rs   )rç  rœ   rt   rè  )NNN)rß  rœ   rë  rì   r  rì   r  rì   r  rì   r  rœ   rt   rœ   )rØ  r<  r=  r>   rt   rœ   )rÇ  r   rt   r   )rz   rœ   rt   rö   )r¼  rB   rt   rö   )rÇ  rE  r­  r  rt   r   )r  r   rm  rœ   rt   r   )TT)rp  rö   rq  rö   rr  rö   rt   r5  )rt   r1   )rÙ  r   rt   r   )rà  rD  rA  r   r�  r�  rt   r   )r¤  r   rt   rÚ  )rà  rD  r¦  rÚ  rt   ru   )r¶  rœ   r°  rs   rt   ru   )rµ  rœ   rt   rœ   )rt   rÚ  )rÅ  rs   rt   r   )rb  rÚ  rt   ru   )rN  rÍ  rt   rÎ  )rÔ   r   rt   ru   )rÛ  r   rt   rö   )r~  r   rP  rs   rt   rs   )r~  r   rt   rs   )rÇ  rE  rt   r]   )r-  rí  r/  rš  rt   rÎ  )r-  rí  r/  rš  rt   rñ  )r	  rœ   r		  rö   rt   ru   )rK  ré  rt   rö   )rÔ   rö   rt   ru   )rt   r-	  )r1	  r-	  rt   ru   )rt   r5	  )rt  r@   ré  r   rt   r>	  (<  rã   Ú
__future__r   Úatexitr”   rW  rR  rÍ  r|  rM  r  r—  ró  r  rš  r©   ru  r  rÇ  r^  ry  r¤  r˜  rZ  r(  rø  rï   r  r\  r^  rû  r²  r  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r  Útorch._functorch.configÚ%torch.fx.experimental.symbolic_shapesÚtorch.utils._pytreerÐ  Ú_pytreerR  r   Útorch._Cr   r   r   r   Útorch._dispatch.pythonr   Útorch._dynamo.metrics_contextr   r   r8	  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_dispatchr.   Útorch.utils._tritonr/   r0   Útorch.utils.hooksr1   Úgraph_utilsr3   r‰  Úcollections.abcr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Ú%torch._dynamo.bytecode_transformationr>   Útorch._dynamo.replay_recordr?   Útorch._dynamo.symbolic_convertr@   Útorch._dynamo.variables.baserB   Útorch._prims_commonrC   Útorch._subclassesrD   rw  re  rÓ  Útorch._loggingÚtorch._numpyÚ_numpyrv  rE   rG   r±  rI   ÚfftÚlinalgr   rJ   r–   r™  r  rL   rM   rN   r¨   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   rÓ  rs  r.  Úunpatched_nn_module_getattrr?  Úunpatched_nn_module_callÚ
_call_implÚunpatched_nn_module_call_implr•   r\   r^   Útroubleshooting_urlÚnnmodule_doc_urlÚnnmodule_doc_url_msgrÊ  rf   r‘   r_   r!  ra   r}   Útimer_counterr  rc   ro   r§   r­   r®   r±   r³   r¸   r»   r½   rÀ   rÁ   rË   rÕ   rù  rÛ   rÝ   rà   râ   rè   rV  r=  ri  ro  ÚregisterrŠ  ÚFloatTensorrq  ÚDoubleTensorrr  ÚdoubleÚ
HalfTensorrp  ÚhalfÚBFloat16Tensorr@  Ú
ByteTensorrj  Ú
CharTensorrf  Ú
LongTensorri  ÚlongÚ	IntTensorrh  rs   ÚShortTensorrg  ÚshortÚ
BoolTensorrö   Útensortype_to_dtyperŒ  rª  r¨  r«  rz  ÚVERBOSEr´  Ú	Formatterr­  r¦  rÕ  rÞ  rê  ró  rõ  rû  rþ  r   r  r=  r>  r[  ÚParamSpecArgsÚParamSpecKwargsÚTypeVarTupleÚTypeAliasTyperW  r`  rb  rn  rs  ry  rx  r’  ÚWeakSetrœ  rŸ  r¡  r«  r¬  r­  r®  r¢  r¨  r™  rÏ  ÚneÚltÚleÚgtÚgeÚcmp_name_to_op_mappingÚcmp_name_to_op_str_mappingr»  rÀ  rÄ  rÈ  rÇ  rÐ  rØ  rÛ  rÞ  rã  rû  r  r  r{  rÛ  r  Ú!DEFAULT_COMPILATION_METRICS_LIMITrß  r  r‚  r¤  r«  r¸  r¾  rÜ   rá  rã  ræ  rè  r0  rð   r(  r8  r:  r=  rC  rM  rV  r`  rf  rŽ  rš  rª  rµ  rº  r¼  rÁ  rÀ  rß  rì  rù  rÿ  r
  r»  rœ   rr   rÜ  ÚEllipsisr·  rŒ  rN  rb  Úmemory_formatrj  ÚfinfoÚiinfoÚ	attentionÚ
SDPBackendr×  Ú_CudaDevicePropertiesÚSequenceKeyÚ
MappingKeyÚ
GetAttrKeyr  rØ  rž  Úlanguager  r   r  r  r*  r5  r7  r;  rA  rC  rG  r‡  rH  ru  rI  rÇ   rJ  rK  ÚiterrL  r”  rM  Ú__length_hint__Útuple_iterator_lenr÷   rÉ  rr  r“  Údict_newrª   rb  Údict_methodsr”  Úset_methodsr  Úfrozenset_methodsÚBaseExceptionÚbase_exception_methodsr×  Úexception_methodsÚ	tuple_newÚtuple_methodsr†  Úlist_methodsr  Úlist_getitemÚstr_methodsÚenum_type_methodsr]  r^  rb  rh  rp  rt  r{  r~  r‚  rœ  Ú	iter_nextr�  r–  r™  Údict_getitemrÌ  rž  r¢  r§  r³  rº  r¿  rÆ  rÖ  rÙ  rÝ  rä  rö  ÚGLOBAL_KEY_PREFIXrø  rý  r  r  r  r  r  r  r¹  r  rp  rv  Úorig_code_maprw  rx  Úseen_code_mapr�  rÅ  r†  rˆ  r“  r   r©  r�  r«  rë  rì  rï  rÁ  rú  r  r  r  r  r"  r'  r*  r!  r0  r2  r7  r?  rJ  rO  rd  re  rf  Úall_hook_namesr^  rm  ro  rs  rz  r|  r‰  r‹  r’  rž  r¤  r§  rª  r©  r¶  r¸  r¼  rÀ  rÉ  rÒ  rÙ  rà  râ  r  r;  r@  rC  rJ  rP  rR  rT  rW  r`  rh  rl  ro  r  r„  r‡  r‰  r£  r§  r©  r«  r¯  r´  r¸  r¼  rÀ  rÄ  rÃ  rÊ  rÌ  rÑ  rÔ  rÚ  rÞ  Ú_disable_dynamorá  rã  ræ  rì  rð  rô  rö  r	  r	  r	  r	  r	  r	  r 	  r#	  r$	  r&	  r,	  r2	  r4	  r9	  r=	  rG	  rK   rl   rm   ú<module>r±	     so)  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €€€Ø Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø =Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø /Ð /Ð /Ð /Ð /Ð /Ø FÐ FÐ FÐ FÐ FÐ FØ >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø -Ð -Ð -Ð -Ð -Ð -à 'Ð 'Ð 'Ð 'Ð 'Ð 'ð 
Ôð 1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð BÐAÐAÐAÐAÐAØ;Ð;Ð;Ð;Ð;Ð;ØHÐHÐHÐHÐHÐHØ<Ð<Ð<Ð<Ð<Ð<Ø2Ð2Ð2Ð2Ð2Ð2Ø0Ð0Ð0Ð0Ð0Ð0ðØÐÐÐÐøØð ð ð Ø	€B€B€Bðøøøð	ØÐÐÐØÐÐÐÐÐØ.Ð.Ð.Ð.Ð.Ð.Ø)Ð)Ð)Ð)Ð)Ð)àÐÐÐÐÐð 
ð àØŒFØŒIØŒIð	>
Ðð 	
ð 	
ð 	
ñ 	
ð �ØŒF�C”GØŒI�s”zØŒI�s”zð	
ÐÐð  "Ðð ÐØVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVøØð 	ð 	ð 	Ø€Dð	øøøð €GˆC�L„L€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€gˆe�n„n€Ø€GˆC�L„L€Ø€Yˆt�_„_€à#œhœoÔ9Ð Ø œ8œ?Ô3Ð Ø %¤¤Ô :Ð à7N°{Ô7NØÔñ8ô 8€ð ð ð ñ ð %'Ð Ð &Ð &Ð &Ñ &ð BÐ ØoÐ ØVÐ.ÐVÐVÐVÐ Ø€gÔ˜Ñ!Ô!€ð 46Ð Ð 5Ð 5Ð 5Ñ 5ð
 .E¨[Ô-DÀUÑ-KÔ-KÐ Ð KÐ KÐ KÑ Kà�	”Ñ!Ô!€ðð ð ð ð �t”yñ ô ð ð%Jð %Jð %Jð %Jð %Jñ %Jô %Jð %JñP
ð 
ð 
ð 
ð €
ñ ð  ð  ð  ñð ð ð ð <@Ð Ð ?Ð ?Ð ?Ñ ?ñ*ð *ð *ð *ñ$ð $ð $ð $ñ$ð $ð $ð $ð €ñð ð ð ñð ð ð ñ ð ð ð ð> '�y”Ñ(Ô(Ð ñ0ð 0ð 0ð 0ñ8ð 8ð 8ð 8ðð ð ð ð ˜4œ9ñ ô ð ðo#ð o#ð o#ð o#ð o#ñ o#ô o#ð o#ðd	 $�I”OÑ%Ô%Ð ð ñð ð ñ „ðð. ð "Ø"'Ø)-Ø+/Ø#'Ø#Ø!Ø,0ñPQñ PQð PQð PQñ „ðPQðf 
Ù LÑ LÐ LÐ Lñ 
„Ø Lð 
ð -2ñ)ñ )ð )ð )ñ 
„ð)ð */ñ$ñ $ð $ð $ð $ðN „ñ8ð 8ð 8ñ „ð8ð
 
Ô˜œ u¤{Ð3Ø	Ô˜œ¨¬Ð5Ø	Ô�u”} e¤jÐ1Ø	Ô˜5œ>Ð+Ø	Ô�u”{�nØ	Ô�u”z�mØ	Ô�u”{ E¤JÐ/Ø	„O�e”k 5¤9Ð-Ø	Ô˜œ U¤[Ð1Ø	Ô�u”z�mðÐ ðð ð ð ð ñ ô ð ð( #:Ð"9Ñ";Ô";Ð ñ"ð "ð "ð "ñ,ð ,ð ,ð ,ð
 !�b”jðð „Jñ	ô 	Ð ð0ð 0ð 0ð 0ð 0˜Ô*ñ 0ô 0ð 0ñð ð ð ñ	ð 	ð 	ð 	ñ?ð ?ð ?ð ?ñ
Gð Gð Gð Gñð ð ð ñð ð ð ñð ð ð ñ	ð 	ð 	ð 	ðð ð ð ð ñ ô ð ðB 
Ù AÐ AÐ Añ 
„Ø Að 
ñð ð ñ 
„ðð 
ñð ð ñ 
„ðð
 
ñð ð ñ 
„ðð
 
ñ$ð $ð $ñ 
„ð$ð
 
ñ)ð )ð )ñ 
„ð)ð
 
ñ.ð .ð .ñ 
„ð.ð 
ñ3ð 3ð 3ñ 
„ð3ð 
ñ8ð 8ð 8ñ 
„ð8ð 
ñ=ð =ð =ñ 
„ð=ð  
ñCð Cð Cñ 
„ðCð" 
ñð ð ñ 
„ðñ
&ð &ð &ð &ð 27°±´Ñ Ð 8Ð 8Ð 8Ñ 8ØÕ�wÒÐð 	ÕØÕØÔØŒØÕØÕð%Ñ!ñð ð ñ ð Õ�wÒÐÙ! f¥l _Ñ4Ñ!ñð ð ñ ñ$ð ð ñ ñ&ð ð ñ ñð ð ñ ñ$ð $ð $ñ $ðN 
ñ5ð 5ð 5ñ 
„ñ5ð
 
ñ7ð 7ð 7ñ 
„ñ7ñ
ð ð ñ ð €G…OÑÔñ 5ð ð ð ñ ñ
Dð Dð Dñ DñIð Ið Iñ Ið
 
ÕØÕñ àÕ ñ!ð Õ!ñ"ñ ð ð ð ñ ñð ð ñ ñð ð ñ ð �kØ�kØ�kØ�kØ�kØ�kðð Ñ ð ØØØØØðð Ñ ñð ð ñ ñ45ð 5ð 5ñ 5ñð ð ñ ñ3ð 3ð 3ñ 3ñð ð ñ ñ%ð %ð %ñ %ñ$ð $ð $ñ $ñ,ñ ,ð ,ñ ,ð €Ô‘TÑÔññ ð ñ Ôñññ ñ ð ñ ñ 
ñ 
ð 
ñ 
ñ$0ñ 0ð 0ñ 0ñ5ñ 5ð 5ñ 5ñ Ñ ð ÕðA"ð A"ñ A"ð A"ñ A"ñ A"ô A"ñ ÔñA"ñH %'Ñ !ð ?P¸kÕ>OÙ,ñ?ñ ?ô ?Ñ ñ ð ñ ñ ñ
-ñ -ð -ñ -ñ`'3ñ '3ð '3ñ '3ñT3ñ 3ð 3ñ 3ñ0-ñ -ð -ñ -ñ`;ñ ;ð ;ñ ;ñ2P3ñ P3ð P3ñ P3ñf%ñ %ð %ñ %ñ!ñ !ð !ñ !ñ
&ñ &ð &ñ &ð\ð \ñ \ð \ñ \ñ \ô \ñ \ð~
 26Ñ Ñ 5Ð 5Ñ 5Ñ 5ññ ð ñ ñ*ñ *ð *ñ *ð
 ð %*Ø"'ñ%=ñ %=ñ %=ð %=ñ „ñ%=ðP Õð(ð (ñ (ð (ñ (ñ (ô (ñ Ôñ(ð* ð  ñ  ð  ñ  Ð+ñ  ô  ñ  ð )™.Ñ*Ô*�Õ ññ ð ñ ñ	ñ 	ð 	ñ 	ñ;ñ ;ð ;ñ ;ð" AEñ Ið Iñ Iñ Ið Iñ IðX 
ññ ð ñ 
„ñð
 
Ù =Ñ =Ð =ñ 
„Ù =ññ ð ñ ñ,
ñ 
ð 
ñ 
ð& ñ7ñ 7ð 7ñ „ñ7ñ*ñ ð ñ ñ&ñ ñ ð ñ ñ$ñ ð ñ ñ(ñ (ð (ñ (ñ
ñ ð ñ ð< €Ô�QÑÔñ1ñ 1ð 1ñ Ôñ1ñ@ñ ð ñ ð0 =>ññ ñ ð ñ ñ&Xñ Xð Xñ Xð €‰2�„ññ ð ñ „ñð Ø	ÙØÙÙ	Ø�Dˆ�J„JÙÕÙÕØ	„Nà	…LØ	…KØ	ÕØ	…LØ	…KØ	…KØ	„HÕÕ!Ø	…JÕ$à	„KÔÕ#Ø	„KÔÕ"Ø	„KÔÕ"ð/$Ñ ñ ð ñ ñ ð4 ÐÑÔð 5Ø€M�M�Má×Ó™f�oÕ3Ñ4Ô4Ð4ðññ ð ñ ð$ …ññ ð ñ „ñññ ð ñ ññ ð ñ ñ>ñ ð ñ ñ:ñ ð ñ ñWñ Wð Wñ Wñ
ñ 
ð 
ñ 
ñ
ñ 
ð 
ñ 
ññ ð ñ ð "&¡ b§g£g¡i¤i¡¤�	Ñ 0Ð 0Ñ 0Ñ 0Ø%)¡T¨"¯)«)©+¬+Ñ%6Ô%6�Ñ 6Ð 6Ñ 6Ñ 6Ø(,©¨R¯X«X©Z¬ZÑ(8Ô(8�
Ñ 8Ð 8Ñ 8Ñ 8Ø&*¡d¨;¨;©=¬=×+?Ó+?Ñ+AÔ+AÑ&BÔ&B�Ñ BÐ BÑ BÑ Bà&*¡d¨4©4°©8¬8¡n¤n�Ñ 4Ð 4Ñ 4Ñ 4à&*¡d¨4©4°±°a±´©>¬>Ñ&:Ô&:�Ñ :Ð :Ñ :Ñ :Ù#Õ3Ñ Ù�^�
Ù�<�ñð à!�)•/¡$¥-×"6Ó"6Ñ"8Ô"8¸+Õ:N×:UÓ:UÑ:WÔ:WÑXÔXðñ ô �ñ
 OÐN¡C¥L×$7Ó$7Ñ$9Ô$9ÐNÑNÔN�ñð Ù"Õ+×2Ó2Ñ4Ô4ðñ ô Ñ ñð Ù&Õ/×6Ó6Ñ8Ô8ðñ ô Ñ ñð Ù"Õ+×2Ó2Ñ4Ô4ðñ ô Ñ ð
 �M�	ÙRÐR e¥n×&;Ó&;Ñ&=Ô&=ÐRÑRÔR�ÙPÐP¡T¥]×%9Ó%9Ñ%;Ô%;ÐPÑPÔP�ÙÕ�áNÐN¡C¥L×$7Ó$7Ñ$9Ô$9ÐNÑNÔN�ñð Ø™˜dœi™œÕ1×8Ó8Ñ:Ô:ðñ ô Ñ ð €G‰C�L„L�Ø€G‰C�L„L�ññ ð ñ ñ	Gñ 	Gð 	Gñ 	Gñ9ñ 9ð 9ñ 9ñ$ñ ð ñ ñ1ñ 1ð 1ñ 1ññ ð ñ ñ
:ñ :ð :ñ :ñ �	ññ ð ñ ñ.ñ ð ñ ññ ð ñ ñ Õ�ð „…ñ:ñ :ð :ñ „ñ:ññ ð ñ ñ
ñ ð ñ ñ8ñ 8ð 8ñ 8ñ*ñ ð ñ ñMñ Mð Mñ Mð Øñ	ñ ñ ð ñ ð2 #(ñ	1ñ 1ñ 1ð 1ñ 1ñhMñ Mð Mñ Mñ9ñ 9ð 9ñ 9ññ ð ñ ñD ñ  ð  ñ  ñ
 !Ñ ð =Ñ <Ð <Ñ <Ñ <Ð <ñ7ñ 7ð 7ñ 7ññ ð ñ ð <Añ(ð (ñ (ñ (ð (ñ (ñ$
ñ 
ð 
ñ 
ñ"?ñ ?ð ?ñ ?ñ;ñ ;ð ;ñ ;ññ ñ ð ñ ð Ø ÙØÙØ!&ØØ%(¥YØ5:Ø!&Ø"ÙðTFñ TFñ TFð TFñ TFñn
Hñ Hð Hñ Hð
 Ôñ=ñ =ð =ñ Ôñ=ð  'Ð&Ñ(Ô(�ð ;R¸+Ô:QÑRVÑ:WÔ:W�Ñ WÐ WÑ WÑ Wð LNÑ Ñ MÐ MÑ MÑ Mð 'Ð&Ñ(Ô(�ð …ñ,ñ ,ð ,ñ „ñ,ñ&ñ &ð &ñ &ñ
ñ ñ ð ñ ñ$ñ ð ñ ñ/ñ /ð /ñ /ñ:ñ ð ñ ñD2ñ 2ð 2ñ 2ð "'ñ	Uñ 	Uñ 	Uð 	Uñ 	Uð "'ñbñ bñ bð bñ bðJ  �	”Ñ!Ô!�ñ1ñ 1ð 1ñ 1ð ñ"ñ "ð "ñ „ñ"ñZñ Zð Zñ Zñz/ñ /ð /ñ /ñdYñ Yð Yñ Yñ*2ñ 2ð 2ñ 2ññ ð ñ ñGñ Gð Gñ Gñ/ñ /ð /ñ /ññ ð ñ ñ 	ñ 	ð 	ñ 	ñ	ñ 	ð 	ñ 	ð 27ñ
ñ 
ñ 
ð 
ñ 
ðð ñ ð ñ ˜œñ ô ñ ñ5ñ 5ð 5ñ 5ññ ð ñ ñDñ ð ñ ñ*Wñ Wð Wñ Wðñ ð Ñ ñ -Ñ.?Ð@Ñ ðñ ð Ñ ñ $Ñ&9Ñ9Ñ<QÑQ�ññ ð ñ ð !&Ø!&Ø#(ñ	ñ ñ ð ñ ðF !&Ø!&Ø#(ñ	ñ ñ ð ñ ñ$ñ ð ñ ññ ð ñ ð
$ð 
$ñ 
$ð 
$ñ 
$˜g b¨! eœnñ 
$ô 
$ñ 
$ñ$ñ $ð $ñ $ð$ð $ñ $ð $ñ $ñ $ô $ñ $ð&$ð $ñ $ð $ñ $˜W R¨ Uœ^ñ $ô $ñ $ð, €Ô˜QÑÑÔññ ð ñ  Ôñð( €Ô™TÑ"Ñ"Ô"ñ%ñ %ð %ñ #Ô"ñ%ñ(ñ ð ñ ñ$4ñ 4ð 4ñ 4ñ)ñ )ð )ñ )ññ ð ñ ñ<ñ ð ñ ñ4ñ 4ð 4ñ 4ñ.ñ .ð .ñ .ññ ð ñ ññ ð ñ ñ&ñ ð ñ ñ$	Cñ 	Cð 	Cñ 	Cð Õðð ñ ð ñ ñ ô ñ ÔññYñ Yð Yñ Yð~ "Ø!Ø!%ñrñ %ñrð rñ rñ rð rñ rñjñ ð ñ ñ:ñ ð ñ ñ)ñ )ð )ñ )ñ"ñ ð ñ ññ ð ñ ñ
Uñ 
Uð 
Uñ 
Uñ0ñ 0ð 0ñ 0ññ ð ñ ñ<ñ ð ñ ñ ñ ð ñ ñOñ Oð Oñ Oð ÔàAEññ ñ ð ñ Ôññ(&ñ &ð &ñ &ññ ð ñ ð1ð 1ñ 1ð 1ñ 1�””ñ 1ô 1ñ 1ñ4ñ 4ð 4ñ 4ñn4ñ 4ð 4ñ 4ñ1ñ 1ð 1ñ 1ðð ñ ð ñ ñ ô ñ ð  ™C™EœE�Ñ !Ð !Ñ !Ñ !ñ	2ñ 	2ñ 	2ð 	2ñ 	2ñ%ñ %ð %ñ %ð ÔñCñ Cð Cñ ÔñCñKñ Kð Kñ Kññ ð ñ ñ0ñ 0ð 0ñ 0ñ,ñ ,ð ,ñ ,ñ$ñ $ð $ñ $ñ
4ñ 4ð 4ñ 4ñ
ñ ð ñ ñ
ñ 
ð 
ñ 
ñ"ñ ð ñ ð Õññ ð ñ Ôñð Õññ ð ñ Ôñð Õññ ð ñ Ôññ
ñ 
ð 
ñ 
ñ,ñ ,ð ,ñ ,ñ+ñ +ð +ñ +ð#ð #ñ #ð #ñ #ñ #ô #ñ #ðL9ð 9ñ 9ð 9ñ 9˜ñ 9ô 9ñ 9ñ
Mñ Mð Mñ Mñ+Ñ ñ ð ñ ñ ññ ð ñ ð  ññ ð ñ „ñð. ñ
ñ 
ð 
ñ „ñ
ñNñ Nð Nñ Nð
 Ñ ñ!ñ !ð !ñ !ñ"ñ "ð "ñ "ð
 €Ô�QÑÔñHñ Hð Hñ ÔñHð Õññ ð ñ Ôñð Õñ"ñ "ð "ñ Ôñ"ñ,ñ ,ð ,ñ ,ñ0ñ 0ð 0ñ 0ñ(ñ ð ñ ð ð s%   ÆF ÆF ÆF Æ$A/H ÈHÈH