§
    ž²ÅjM( ã                  ó`  — U 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mZ d dlmZ d dlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- d dlm.Z. d dl/Z/d dl0Z0d dl1m2Z2 e%rd d	l3m4Z4 d d
l5m6Z6 ddgZ7 ej8        d¦  «        d„ ¦   «         Z9d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZGmHZHmIZImJZJmKZK d dlLmMZMmNZN d dlOmPZPmQZQ ddlRmSZS ddlTmUZV ej        dk    ZW e
jX        eY¦  «        ZZ e&d¦  «        Z[ee/j\        e/j\        f         Z]e e'e0j^        e_e0j`        f                  ZadddœZbdZcdZdd Zeeeeedz
  z  d k    reed!k    s
J d"¦   «         ‚d#„ Zf�d9d&„Zg G d'„ d(e/jh        ¦  «        Zi�d:�d;d/„Zj ej8        d¦  «        �d<d1„¦   «         Zk�d=d5„Zl�d>d8„Zm�d?d<„Zn�d@d?„Zo�dAdC„ZUdD„ Zp�dBdH„Zq�dCdK„Zr�dDdN„Zs	 �dE�dFdQ„ZtdR„ Zu�dG�dHdU„Zv	 �dI�dJdZ„Zw	 �dK�dLd^„Zx�dMdb„Zy�dNde„Zz�dOdf„Z{dg„ Z|�dPdk„Z} e,dl¦  «        Z~ e&dmdn¬o¦  «        Z G dp„ dqe!ee~ef         ¦  «        Z€�dQdt„Z�du„ Z‚dv„ Zƒdw„ Z„	 �dE�dRd{„Z…d|„ Z†�dSd~„Z‡d„ Zˆ�dTd„„Z‰d…„ ZŠ�dUd‡„Z‹�dVdŠ„ZŒ�dWd�„Z��dXd�„ZŽ�dYd“„Z��dZd”„Z�g Z‘d•e’d–<   �d[d—„Z“d˜„ Z”ej•        �d\d™„¦   «         Z–�d]d›„Z—�d^dž„Z˜ ej8        d!¦  «        dŸ„ ¦   «         Z™ G d „ d¡e¦  «        Zš G d¢„ d£¦  «        Z› G d¤„ d¥e›¦  «        Zœej•        d¦„ ¦   «         Z� G d§„ d¨¦  «        Zž G d©„ dªež¦  «        ZŸ ej8        d¦  «        �d_�d`d­„¦   «         Z �d<d®„Z¡�dad±„Z¢�dbd³„Z£�dbd´„Z¤dµdµd¶œd·„Z¥d¸„ Z¦ ej8        d¦  «        d¹„ ¦   «         Z§ ej8        d¦  «        dº„ ¦   «         Z¨d»„ Z©d¼„ Zªd½„ Z«d¾„ Z¬d¿„ Z­	 �dcdÀ„Z®dÁ„ Z¯ G dÂ„ dÃ¦  «        Z°�dddÅ„Z±dÆ„ Z²dÇ„ Z³dÈ„ Z´dÉ„ ZµdÊ„ Z¶ej•        dË„ ¦   «         Z·�dEdÌ„Z¸dÍ„ Z¹dÎ„ ZºdÏ„ Z»dÐ„ Z¼dÑ„ Z½�dedÔ„Z¾ej•        dÕ„ ¦   «         Z¿dÖ„ ZÀ ej8        d¦  «        d×„ ¦   «         ZÁ ej8        d¦  «        dØ„ ¦   «         ZÂ ej8        d¦  «        �dOdÙ„¦   «         ZÃ�dOdÚ„ZÄ�dfdÜ„ZÅ�dgdÝ„ZÆ�d<dÞ„ZÇ�d<dß„ZÈ�dhdâ„ZÉ�d<dã„ZÊ G dä„ dåejË        ¦  «        ZÌdæ„ ZÍ�dEdç„ZÎdè„ ZÏdé„ ZÐdê„ ZÑdë„ ZÒdì„ ZÓ	 �dEdí„ZÔ	 �dEdî„ZÕ�didñ„ZÖ�djdó„Z×ejØ         G dô„ dõ¦  «        ¦   «         ZÙej•        dö„ ¦   «         ZÚ�dkd÷„ZÛ�dldù„ZÜ�dLdú„ZÝdû„ ZÞ�dmdý„Zßdþ„ Zà�dn�d„Zá�do�d„Zâ�d„ Zã�d„ Zä�dp�d„Zå�dq�d„Zæ�dr�d„Zç�ds�d„Zè�dt�d„Zé�du�d„Zê�d„ Zë�d„ Zì�dv�d„Zí�d�d�d�d�d�dœZî�d„ eî ï                    ¦   «         D ¦   «         Zð ejñ        �d ¦  «        Zò�dw�d"„Zó�dx�d#„Zô�dy�d&„Zõ�dy�d'„Zö ej8        d¦  «        �d(„ ¦   «         Z÷ejØ         G �d)„ �d*¦  «        ¦   «         Zøi Zù�d+e’�d,<   �dz�d1„Zú�d{�d2„Zû e+dn�¬3¦  «        �dEdn�d4œ�d|�d6„¦   «         Zü�d}�d8„ZýdS (~  é    )ÚannotationsN)Údatetime)ÚStringIO)ÚAnyÚCallableÚDictÚGenericÚIterableÚListÚ
NamedTupleÚOptionalÚProtocolÚSequenceÚSetÚTupleÚTYPE_CHECKINGÚTypeVarÚUnionÚ
ValuesView)ÚConcatenateÚdataclass_transformÚ	ParamSpecÚ	TypeGuard)Úmock)ÚDeviceProperties)ÚELEMENTWISE_TYPE_PROMOTION_KIND)Útree_map_onlyÚcudaÚxpuc                 ó¤   — d„ t           D ¦   «         } t          | ¦  «        dk    sJ ‚t          | ¦  «        dk    rdn|                      ¦   «         }|S )Nc                ó`   — g | ]+}t          t          |¦  «                             ¦   «         ¯)|‘Œ,S © )ÚgetattrÚtorchÚis_available©Ú.0Úxs     úFC:\Projects\Historical\venv\Lib\site-packages\torch/_inductor/utils.pyú
<listcomp>z get_gpu_type.<locals>.<listcomp>B   s3   € ÐKÐKÐK˜­'µ%¸Ñ*;Ô*;×*HÒ*HÑ*JÔ*JÐK�!ÐKÐKÐKó    é   r   r   )Ú	GPU_TYPESÚlenÚpop)Ú
avail_gpusÚgpu_types     r)   Úget_gpu_typer2   @   sT   € àKÐK�YÐKÑKÔK€JÝˆz‰?Œ?˜aÒÐÐÐÝ˜Z™œ¨AÒ-Ð-ˆvˆv°:·>²>Ñ3CÔ3C€HØ€Or+   )Úget_interface_for_device)Údetect_fake_mode)Ú
DeviceType)Ú	EventList)ÚGraphTransformObserver)Ú	ShapeProp)ÚCeilDivÚCleanDivÚFloorDivÚIdentityÚModularIndexing)Úmake_symbolÚSymT)Úbound_sympyÚValueRangesr,   )Úconfig)ÚceildivÚwin32Ú_Tz.cubinz.spv)r   r   é   é@   é   zmust be power of 2c                ó.   — | t           z   dz
  t            z  S )z/Round up to the nearest multiple of ALIGN_BYTESr,   )ÚALIGN_BYTES)Únbytess    r)   Ú_alignrL   m   s   € à•[Ñ  1Ñ$­¨Ñ4Ð4r+   Úvú
sympy.Exprc                ó  — t          | t          j        t          j        f¦  «        r't	          t          t          | j        ¦  «        ¦  «        S t          | t          ¦  «        p"t          j	        | t          ¦  «        t          k    S )z:v can be statically proven to be a multiple of ALIGN_BYTES)Ú
isinstanceÚsympyÚAddÚMaxÚallÚmapÚ_is_alignedÚargsÚalignÚgcdrJ   )rM   s    r)   rV   rV   r   s]   € å�!•e”i¥¤Ð+Ñ,Ô,ð -Ý•3•{ A¤FÑ+Ô+Ñ,Ô,Ð,Ý�a�ÑÔÐK¥5¤9¨QµÑ#<Ô#<ÅÒ#KÐKr+   c                  ó2   — e Zd ZdZdZdZed
d„¦   «         Zd	S )rX   z<Symbolically round up to the nearest multiple of ALIGN_BYTES©r,   TÚvaluerN   ÚreturnúOptional[sympy.Expr]c                ó¢   — t          |t          t          j        f¦  «        rt	          t          |¦  «        ¦  «        S t          |¦  «        r|S d S ©N)rP   ÚintrQ   ÚIntegerrL   rV   )Úclsr\   s     r)   Úevalz
align.eval   sN   € å�e�c¥5¤=Ð1Ñ2Ô2ð 	&Ý�#˜e™*œ*Ñ%Ô%Ð%Ý�uÑÔð 	ØˆLð	ð 	r+   N)r\   rN   r]   r^   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnargsÚ
is_integerÚclassmethodrd   r"   r+   r)   rX   rX   y   sB   € € € € € ØFÐFà€EØ€Jàðð ð ñ „[ðð ð r+   rX   é   éd   ÚfnúCallable[[], Any]r]   Úfloatc                óz  ‡—  | ¦   «          t           j                             ¦   «          t          j        t	          d¦  «        t           j        d¬¦  «        }t           j                             d¬¦  «        }t           j                             d¬¦  «        }|                     ¦   «          t          d¦  «        D ] }|                     ¦   «           | ¦   «          Œ!|                     ¦   «          t           j                             ¦   «          | 	                    |¦  «        dz  }t          dt	          ||z  ¦  «        ¦  «        }t          dt	          ||z  ¦  «        ¦  «        }	t          |¦  «        D ]} | ¦   «          Œt           j                             t           j        j        j        g¬¦  «        5 }
t          |	¦  «        D ] }|                     ¦   «           | ¦   «          Œ!t           j                             ¦   «          d	d	d	¦  «         n# 1 swxY w Y   t                               d
¦  «         t                               |
                     ¦   «                              dd¬¦  «        ¦  «         t'          d„ |
                     ¦   «         D ¦   «         ¦  «        }t+          |¦  «        |	z  dk    rt-          dt+          |¦  «        |	¦  «        ‚t+          |¦  «        |	z  Št'          ˆfd„t/          |¦  «        D ¦   «         ¦  «        }|                     ¦   «          |                     ¦   «         }t                               d¦  «         t                               |                     d¬¦  «        ¦  «         t3          d„ |D ¦   «         ¦  «        dz  |	z  }t                               d|¦  «         |S )aR  
    Returns benchmark results by examining torch profiler events.
    This could be more accurate as it doesn't count CPU side overhead.
    However, this also requires manually excluding irrelevant event, e.g.
    vectorized_elementwise_kernel which is used to fill L2 cache,
    various CUDA events, etc, so could also be fragile.
    g    €„ŽAr   )ÚdtypeÚdeviceT)Úenable_timingé   r,   )Ú
activitiesNz
raw eventsÚself_device_time_totaléÿÿÿÿ)Úsort_byÚ	row_limitc                óR   — g | ]$}|j         t          j        k    ¯|j        d k    ¯"|‘Œ%S )zContext Sync)Údevice_typer5   ÚCUDAÚname©r'   Úevents     r)   r*   z,do_bench_using_profiling.<locals>.<listcomp>¹   s>   € ð 	
ð 	
ð 	
àØÔ ¥J¤OÒ3Ð3¸¼
ÀnÒ8TÐ8Tð à8TÐ8TÐ8Tr+   r   zYFailed to divide all profiling events into #repeat groups. #CUDA events: %d, #repeats: %sc                ó,   •— g | ]\  }}|‰z  d k    ¯|‘ŒS ©r   r"   )r'   Úir€   Únum_event_per_groups      €r)   r*   z,do_bench_using_profiling.<locals>.<listcomp>È   s8   ø€ ð 	
ð 	
ð 	
á��5ØÐ&Ñ&¨!Ò+Ð+ð à+Ð+Ð+r+   zprofiling time breakdown)rz   c              3  ó$   K  — | ]}|j         V — Œd S r`   )Údevice_time_totalr   s     r)   ú	<genexpr>z+do_bench_using_profiling.<locals>.<genexpr>Ô   s%   è è € ÐAÐA¨%ˆeÔ%ÐAÐAÐAÐAÐAÐAr+   g     @�@zprofiling results: %s ms)r$   r   ÚsynchronizeÚemptyra   ÚEventÚrecordÚrangeÚzero_Úelapsed_timeÚmaxÚprofilerÚprofileÚProfilerActivityr}   ÚlogÚdebugÚkey_averagesÚtabler6   Úeventsr.   ÚRuntimeErrorÚ	enumerateÚ_build_treeÚsum)rn   ÚwarmupÚrepÚcacheÚstart_eventÚ	end_eventÚ_Úestimate_msÚn_warmupÚn_repeatÚprƒ   Úfiltered_eventsÚactual_eventsÚresr„   s                  @r)   Údo_bench_using_profilingr©   ‡   sº  ø€ ð €B�D„D€DÝ	„J×ÒÑÔÐÝŒK�˜J™œ­u¬yÀÐHÑHÔH€Eõ ”*×"Ò"°Ð"Ñ6Ô6€KÝ”
× Ò ¨tÐ Ñ4Ô4€IØ×ÒÑÔÐÝ�1‰XŒXð ð ˆØ�Š‰ŒˆØ
ˆ‰ŒˆˆØ×ÒÑÔÐÝ	„J×ÒÑÔÐØ×*Ò*¨9Ñ5Ô5¸Ñ9€Kõ �1•c˜& ;Ñ.Ñ/Ô/Ñ0Ô0€HÝ�1•c˜# Ñ+Ñ,Ô,Ñ-Ô-€Hõ �8‰_Œ_ð ð ˆØ
ˆ‰Œˆˆå	Œ×	Ò	åŒNÔ+Ô0ð
ð 
 ñ 
ô 
ð !ð 
å�x‘”ð 	ð 	ˆAà�KŠK‰MŒMˆMàˆB‰DŒDˆDˆDåŒ
×ÒÑ Ô Ð ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !õ ‡I‚IˆlÑÔÐÝ‡I‚Iˆa�nŠnÑÔ×$Ò$Ð-EÐQSÐ$ÑTÔTÑUÔUÐUåð	
ð 	
àŸš™œð	
ñ 	
ô 	
ñô €Oõ ˆ?ÑÔ˜hÑ&¨!Ò+Ð+Ýð-å�Ñ Ô Øñ	
ô 
ð 	
õ ˜oÑ.Ô.°Ñ9ÐÝð	
ð 	
ð 	
ð 	
å% oÑ6Ô6ð	
ñ 	
ô 	
ñô €Mð ×ÒÑÔÐØ!×.Ò.Ñ0Ô0€Må‡I‚IÐ(Ñ)Ô)Ð)Ý‡I‚Iˆm×!Ò!¨BÐ!Ñ/Ô/Ñ0Ô0Ð0å
ÐAÐA°=ÐAÑAÔAÑ
AÔ
AÀFÑ
JÈXÑ
U€CÝ‡I‚IÐ(¨#Ñ.Ô.Ð.Ø€Js   Æ7AHÈHÈHÚboolc                 ó  — 	 ddl m}  t          j                             dd¦  «         | d uo(t          t          t          j        dd ¦  «        d¦  «        S # t          $ r Y dS t          $ r}dt          |¦  «        v sJ ‚Y d }~dS d }~ww xY w)	Nr   )Ú	roi_alignztorchvision::nmsÚMetaÚtorchvisionr¬   Fztorchvision::nms does not exist)Útorchvision.opsr¬   r$   Ú_CÚ%_dispatch_has_kernel_for_dispatch_keyÚhasattrr#   ÚopsÚImportErrorr˜   Ústr)r¬   Úes     r)   Úhas_torchvision_roi_alignr·   Ù   sÁ   € ðØ-Ð-Ð-Ð-Ð-Ð-åŒ×6Ò6Ð7IÈ6ÑRÔRÐRØ Ð$ð 
­Ý•E”I˜}¨dÑ3Ô3°[ñ*
ô *
ð 	
øõ ð ð ð ØˆuˆuÝð ð ð Ø0µC¸±F´FÐ:Ð:Ð:Ð:Øˆuˆuˆuˆuˆuøøøøðøøøs   ‚AA Á
B	Á"	B	Á+BÂB	rs   ú"Union[Optional[torch.device], str]útorch.devicec                ó:  — | €t          j        d¦  «        j        S t          | t          ¦  «        rt          j        | ¦  «        } | j        dvrM| j        €Ft          | j        ¦  «        }t          j        | j        |j         	                    ¦   «         ¬¦  «        S | S )Ng        )ÚcpuÚmeta)Úindex)
r$   Útensorrs   rP   rµ   Útyper½   r3   ÚWorkerÚcurrent_device©rs   Údevice_interfaces     r)   Údecode_devicerÄ   é   s‹   € Ø€~ÝŒ|˜CÑ Ô Ô'Ð'Ý�&�#ÑÔð &Ý”˜fÑ%Ô%ˆØ„{˜/Ð)Ð)¨f¬lÐ.BÝ3°F´KÑ@Ô@ÐÝŒ|˜FœKÐ/?Ô/F×/UÒ/UÑ/WÔ/WÐXÑXÔXÐXØ€Mr+   ÚitúIterable[sympy.Expr]c                ó`   — t          j        t          j        | t          j        j        ¦  «        S r`   )Ú	functoolsÚreduceÚoperatorÚmulrQ   ÚSÚOne©rÅ   s    r)   Úsympy_productrÏ   ô   s   € ÝÔ�HœL¨"­e¬g¬kÑ:Ô:Ð:r+   Úseq1úSequence[sympy.Expr]Úseq2c           	     ó¸   — t          | ¦  «        t          |¦  «        k    sJ ‚t          j        t          d„ t	          | |¦  «        D ¦   «         ¦  «        ¦  «        S )Nc              3  ó&   K  — | ]\  }}||z  V — Œd S r`   r"   )r'   ÚaÚbs      r)   r‡   zsympy_dot.<locals>.<genexpr>ú   s*   è è € Ð>Ð>¡d a¨˜A ™EÐ>Ð>Ð>Ð>Ð>Ð>r+   )r.   rQ   Úexpandr›   Úzip)rÐ   rÒ   s     r)   Ú	sympy_dotrÙ   ø   sN   € Ýˆt‰9Œ9�˜D™	œ	Ò!Ð!Ð!Ð!ÝŒ<�Ð>Ð>­c°$¸©o¬oÐ>Ñ>Ô>Ñ>Ô>Ñ?Ô?Ð?r+   úIterable[_T]úValuesView[_T]c                ó>   — d„ | D ¦   «                               ¦   «         S )Nc                ó.   — i | ]}t          |¦  «        |“ŒS r"   )Úidr&   s     r)   ú
<dictcomp>zunique.<locals>.<dictcomp>þ   s    € Ð!Ð!Ð!˜�Bˆq‰EŒE�1Ð!Ð!Ð!r+   )ÚvaluesrÎ   s    r)   Úuniquerá   ý   s"   € Ø!Ð!˜bÐ!Ñ!Ô!×(Ò(Ñ*Ô*Ð*r+   ÚnumerúUnion[int, sympy.Expr]Údenomc           
     ó¤  — t          | t          j        ¦  «        st          |t          j        ¦  «        r4t          t          j        | ¦  «        t          j        |¦  «        ¦  «        S t          | t
          ¦  «        rt          |t
          ¦  «        s/J | › dt          | ¦  «        › d|› dt          |¦  «        › �¦   «         ‚t          | |¦  «        S )Nz: ú, )rP   rQ   ÚExprr9   Úsympifyra   r¿   Úruntime_ceildiv)râ   rä   s     r)   rC   rC     sÎ   € õ �%�œÑ$Ô$ð C­
°5½%¼*Ñ(EÔ(Eð CÝ•u”} UÑ+Ô+­U¬]¸5Ñ-AÔ-AÑBÔBÐBõ �e�SÑ!Ô!ð 9¥jØ�sñ'ô 'ð 9ð 9à
Ð8Ð8•4˜‘;”;Ð8Ð8 %Ð8Ð8­4°©;¬;Ð8Ð8ñ9ô 9ð õ ˜5 %Ñ(Ô(Ð(r+   c                ód  — | €dS t          | ¦  «                             d¦  «        d         }i dd“dd“dd	“d
d“dd“dd“dd	“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%d&œ¥}t          |                     ¦   «         ¦  «        D ]}|||<   Œt	          | t           ¦  «        r| n
d'||         › �S )(Nz*i8ú.rx   rª   Úi1Ú
float8e4nvÚfp8e4nvÚfloat8e5Úfp8e5Úfloat8e4b15Úfp8e4b15Úfloat8e4b15x4Ú
fp8e4b15x4Úfloat8_e4m3fnÚfloat8_e5m2Úfloat16Úfp16Úbfloat16Úbf16Úfloat32Úfp32Úfloat64Úfp64Úint8Úi8Úint16Úi16Úint32Úi32Úint64Úi64Úuint8Úu8Úuint16Úu16Úu32Úu64)Úuint32Úuint64Ú*)rµ   ÚsplitÚlistrà   rP   )ÚkeyÚ	dtype_strÚtysrM   s       r)   Ú_type_ofr    sb  € ð
 €{ØˆuÝ�C‘”—’˜sÑ#Ô# BÔ'€IðØ�ðà�iðð 	�Gðð 	�zð	ð
 	˜ðð 	˜ðð 	�wðð 	�6ðð 	�Fðð 	�6ðð 	�6ðð 	�ðð 	�ðð 	�ðð 	�ðð  	�ð!ð" 	�%ð#ð$ Øð'ð ð €Cõ, �#—*’*‘,”,ÑÔð ð ˆØˆˆA‰ˆÝ˜S¥#Ñ&Ô&Ð@ˆ3ˆ3Ð,@°°I´Ð,@Ð,@Ð@r+   Úlstú"Iterable[Union[int, torch.SymInt]]úList[sympy.Expr]c                ó   — d„ | D ¦   «         S )z­
    Gets the shape and stride of a tensor. For non-symbolic tensors, this is
    trivial. But for symbolic tensors, we need to map from SymIntNode into
    sympy.Expr.
    c                ó6   — g | ]}t          j        |¦  «        ‘ŒS r"   )rQ   rè   )r'   rƒ   s     r)   r*   z-convert_shape_to_inductor.<locals>.<listcomp>:  s"   € Ð*Ð*Ð* �EŒM˜!ÑÔÐ*Ð*Ð*r+   r"   )r  s    r)   Úconvert_shape_to_inductorr  2  s   € ð +Ð* cÐ*Ñ*Ô*Ð*r+   ú Iterable[Union[int, sympy.Expr]]úList[Union[int, torch.SymInt]]c                ó,   ‡— ddl mŠ ˆfd„| D ¦   «         S )zz
    Takes a list of shapes from Inductor and converts them into symints (or just
    ints if all shapes are static).
    r,   ©ÚVc                óÜ   •— g | ]h}t          |t          ¦  «        r|nNt          |t          j        ¦  «        rt          |¦  «        n%‰j        j        j                             |d ¬¦  «        ‘ŒiS )N)Úhint)rP   ra   rQ   rb   ÚgraphÚsizevarsÚ	shape_envÚcreate_symintnode)r'   rƒ   r   s     €r)   r*   z+convert_shape_to_symint.<locals>.<listcomp>F  s}   ø€ ð ð ð ð õ ˜!�SÑ!Ô!ðˆAˆAõ ˜a¥¤Ñ/Ô/ðP•�A‘”�à”WÔ%Ô/×AÒAÀ!È$ÐAÑOÔOðð ð r+   )Úvirtualizedr   )r  r   s    @r)   Úconvert_shape_to_symintr(  =  sD   ø€ ð ÐÐÐÐÐðð ð ð ð ðñ ô ð r+   Úopútorch._ops.OpOverloadc                óŠ   — t          | t          j        j        ¦  «        sJ ‚t	          d„ | j        j        D ¦   «         ¦  «        S )z-
    Does this op overload have aliasing
    c              3  ó(   K  — | ]}|j         d uV — Œd S r`   )Ú
alias_info©r'   rÕ   s     r)   r‡   zis_view.<locals>.<genexpr>Y  s)   è è € ÐFÐF¨AˆqŒ| 4Ð'ÐFÐFÐFÐFÐFÐFr+   )rP   r$   Ú_opsÚ
OpOverloadÚanyÚ_schemaÚ	arguments©r)  s    r)   Úis_viewr5  T  sA   € õ �b�%œ*Ô/Ñ0Ô0Ð0Ð0Ð0ÝÐFÐF°´Ô1EÐFÑFÔFÑFÔFÐFr+   Úis_pointwise_fnú1Optional[Callable[[torch._ops.OpOverload], bool]]c                ó€  ‡— | j         dk    sdS t          | j        t          j        j        ¦  «        s| j        t          j        u sdS | j        t          j        u st          | j        ¦  «        r t          ˆfd„| j
        D ¦   «         ¦  «        S t          j        j        | j        j        v p‰duo ‰| j        ¦  «        S )z™
    Do all uses of this op have torch.Tag.pointwise or return True for optional `is_pointwise_fn`

    Uses in views ops will follow the views uses
    Úcall_functionFc              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r`   )Úis_pointwise_use)r'   Úur6  s     €r)   r‡   z#is_pointwise_use.<locals>.<genexpr>n  s.   øè è € ÐKÐK¸AÕ# A Ñ7Ô7ÐKÐKÐKÐKÐKÐKr+   N)r)  rP   Útargetr$   r/  r0  rÊ   Úgetitemr5  rT   ÚusersÚTagÚ	pointwiseÚtags)Úuser6  s    `r)   r;  r;  \  s¿   ø€ ð Œ6�_Ò$Ð$Øˆuõ 	�3”:�uœzÔ4Ñ5Ô5ðØ9<¼ÅxÔGWÐ9WÐ9Wàˆuà
„z•XÔ%Ð%Ð%­°´Ñ)<Ô)<Ð%ÝÐKÐKÐKÐKÀÄÐKÑKÔKÑKÔKÐKåŒ9Ô #¤*¤/Ð1ð Ø˜tÐ#ÐC¨¨¸¼
Ñ(CÔ(Cðr+   c           	     ó¦  ‡‡— t           j                             ¦   «         Šg Šˆˆfd„} ‰j        | gt	          t           j        |||f¦  «        ¢R Ž }t          | j        j        ¦  «        dk    r+t          | j        j        d         j
        ¦  «        dk    r|f}‰                     |¦  «         t           j                             i ‰¦  «        }|‰fS )Nc                óx   •— ‰                      | ¦  «         ‰                     dt          ‰¦  «        › �¦  «        S )NÚarg)ÚappendÚplaceholderr.   )rF  ÚgÚ
graph_argss    €€r)   Úadd_tensor_argz)gen_gm_and_inputs.<locals>.add_tensor_argy  s8   ø€ Ø×Ò˜#ÑÔÐØ�}Š}Ð4¥3 z¡?¤?Ð4Ð4Ñ5Ô5Ð5r+   r,   r   ÚTensor)r$   ÚfxÚGraphr9  r   rL  r.   r2  Úreturnsrµ   r¿   ÚoutputÚGraphModule)r=  rW   ÚkwargsrK  ÚnodeÚgmrI  rJ  s         @@r)   Úgen_gm_and_inputsrU  u  sà   øø€ ÝŒ�ŠÑÔ€AØ€Jð6ð 6ð 6ð 6ð 6ð 6ð ˆ1Œ?ØðÝ�uœ|¨^¸dÀF¸^ÑLÔLðð ð €Dõ 	ˆFŒNÔ"Ñ#Ô# qÒ(Ð(Ý�”Ô& qÔ)Ô.Ñ/Ô/°8Ò;Ð;àˆwˆØ‡H‚HˆT�N„N€Nå	Œ×	Ò	˜b !Ñ	$Ô	$€BØˆzˆ>Ðr+   rµ   ÚNonec                óˆ   — | dk    rd S t          | ¦  «        }|                     ¦   «         r|                     ¦   «          d S d S ©Nr»   )r3   r%   rˆ   rÂ   s     r)   rˆ   rˆ   ‹  sT   € Ø�‚€ØˆÝ/°Ñ7Ô7ÐØ×$Ò$Ñ&Ô&ð 'Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&ð'ð 'r+   ÚmodelúCallable[..., Any]Útimesra   c                óò   — t          |¦  «         t          j        d¦  «         t          j        ¦   «         }t          |¦  «        D ]} | |Ž }t          |¦  «         Œt          j        ¦   «         }|€J ‚||z
  S )Ni9  )rˆ   r$   Úmanual_seedÚtimeÚperf_counterrŒ   )rY  Úexample_inputsr[  rs   Út0r¡   ÚresultÚt1s           r)   Útimedrd  “  s†   € õ �ÑÔÐÝ	Ô�dÑÔÐÝ	Ô	Ñ	Ô	€BÝ�5‰\Œ\ð ð ˆØ�˜Ð'ˆÝ�FÑÔÐÐÝ	Ô	Ñ	Ô	€BàÐÐÐØ�‰7€Nr+   r"   é
   ç      ð?c                óÄ   ‡ ‡‡‡— t          j        ˆˆˆ ˆfd„t          |¦  «        D ¦   «         ¦  «        }t          j        |¦  «        ‰z  }t	          ||z  d›¦  «         |S )Nc                ó4   •— g | ]}t          ‰‰‰‰¦  «        ‘ŒS r"   )rd  )r'   r¡   rW   rs   rn   r[  s     €€€€r)   r*   z%print_performance.<locals>.<listcomp>¥  s'   ø€ ÐRÐRÐR¸q�E " d¨E°6Ñ:Ô:ÐRÐRÐRr+   z.6f)r$   r¾   rŒ   ÚmedianÚprint)rn   rW   r[  ÚrepeatÚbaseliners   ÚtimingsÚtooks   ```  `  r)   Úprint_performancero  ¢  sl   øøøø€ õ ŒlÐRÐRÐRÐRÐRÐRÐRÅEÈ&ÁMÄMÐRÑRÔRÑSÔS€GÝŒ<˜Ñ Ô  5Ñ(€DÝ	ˆT�H‰_Ð
"Ð
"Ñ#Ô#Ð#Ø€Kr+   Úobjr   Úmethodc                ó`   ‡—  t          | |¦  «        ¦   «         Št          | |ˆfd„¦  «         dS )zKReplace obj.method() with a new method that returns a precomputed constant.c                 ó   •— ‰ S r`   r"   )rb  s   €r)   ú<lambda>z#precompute_method.<locals>.<lambda>®  s   ø€  € r+   N)r#   Úsetattr)rp  rq  rb  s     @r)   Úprecompute_methodrv  «  s8   ø€ à!�W�S˜&Ñ!Ô!Ñ#Ô#€FÝˆC�˜˜˜˜Ñ(Ô(Ð(Ð(Ð(r+   Úmethodsú	List[str]c                ó0   — |D ]}t          | |¦  «         ŒdS )zFReplace methods with new methods that returns a precomputed constants.N)rv  )rp  rw  rq  s      r)   Úprecompute_methodsrz  ±  s.   € àð 'ð 'ˆÝ˜#˜vÑ&Ô&Ð&Ð&ð'ð 'r+   c                óP   — t          | |k    ¦  «        t          | |k     ¦  «        z
  S r`   )ra   )rÕ   rÖ   s     r)   Úcmpr|  ·  s!   € Ýˆq�1Šu‰:Œ:�˜A šE™
œ
Ñ"Ð"r+   c                óp   — t          | ¦  «        dk    r" t          | ¦  «        | d         g¦  «        |z  S | S )Nr,   r   )r.   r¿   )r(   Úsizes     r)   Úpad_listliker  »  s5   € Ý
ˆ1�v„v�‚{€{Ø�t�A‰wŒw˜˜!œ�v‰Œ Ñ%Ð%àˆr+   r(   úTuple[_T, ...]úList[_T]c                óT   — t          | ¦  «        dk    rg S d„ }t          | |¬¦  «        S )Nr   c                óX   — t          | t          ¦  «        r| S |                      ¦   «         S r`   )rP   rµ   Úget_name)Úelems    r)   Ú	sort_funcztuple_sorted.<locals>.sort_funcÇ  s)   € Ý�d�CÑ Ô ð 	#ØˆKð —=’=‘?”?Ð"r+   ©r  )r.   Úsorted)r(   r†  s     r)   Útuple_sortedr‰  Ã  s:   € Ý
ˆ1�v„v�‚{€{Øˆ	ð#ð #ð #õ �!˜Ð#Ñ#Ô#Ð#r+   ÚPÚRVT)Ú	covariantc                  ó.   — e Zd Zedd„¦   «         Zdd	„Zd
S )ÚCachedMethodr]   rV  c                ó   — d S r`   r"   ©Úselfs    r)   Úclear_cachezCachedMethod.clear_cache×  s   € àˆr+   rW   úP.argsrR  úP.kwargsr‹  c                ó   — d S r`   r"   ©r‘  rW   rR  s      r)   Ú__call__zCachedMethod.__call__Û  s   € Øˆr+   N©r]   rV  )rW   r“  rR  r”  r]   r‹  )re   rf   rg   Ústaticmethodr’  r—  r"   r+   r)   rŽ  rŽ  Ö  sF   € € € € € Øðð ð ñ „\ððð ð ð ð ð r+   rŽ  ú!Callable[Concatenate[Any, P], RV]úCachedMethod[P, RV]c           	     óæ   ‡— | j         }d|› d�Šd| i}t          d|› d‰› d‰› d�                     ¦   «         |¦  «          t          j        | ¦  «        ||› d�         ¦  «        }ˆfd	„}||_        |S )
NÚ__Ú_cachern   z        def zC_cache_on_self(self):
            try:
                return self.zl
            except AttributeError:
                rv = fn(self)
                object.__setattr__(self, "z)", rv)
                return rv
        Ú_cache_on_selfc                óL   •— t          | ‰¦  «        rt          | ‰¦  «         d S d S r`   )r²   Údelattr)r‘  r  s    €r)   r’  z"cache_on_self.<locals>.clear_cacheô  s5   ø€ Ý�4˜ÑÔð 	Ý�D˜#ÑÔÐÐÐð	ð 	r+   )re   ÚexecÚlstriprÈ   Úwrapsr’  )rn   r~   ÚctxÚwrapperr’  r  s        @r)   Úcache_on_selfr§  à  sË   ø€ ØŒ;€DØ
ˆtÐ
Ð
Ð
€Cð �ˆ*€CÝð	Øð	ð 	ð !ð	ð 	ð ,/ð	ð 	ð 	÷ ŠF‰HŒHØñô ð ð "�iŒo˜bÑ!Ô! #¨Ð&=Ð&=Ð&=Ô">Ñ?Ô?€Gðð ð ð ð ð &€GÔØ€Nr+   c                óø   — ddl m} t          | t          ¦  «        r6t	          j        t          j        d„ | D ¦   «         t          ¦   «         ¦  «        S t          | |j	        ¦  «        r| j
        S t          ¦   «         S )Nr,   ©Úirc                óT   — g | ]%}t          |d ¦  «        ¯|j        ¯|j        j        ‘Œ&S )rS  )r²   rS  Úorigins)r'   rS  s     r)   r*   z%aggregate_origins.<locals>.<listcomp>  sI   € ð ð ð àÝ˜4 Ñ(Ô(ðð .2¬YðØ”	Ô!ðð ð r+   )Ú rª  rP   r  rÈ   rÉ   rÊ   Úor_ÚsetÚExternKernelr¬  )Únode_schedulerª  s     r)   Úaggregate_originsr²  ü  s�   € ØÐÐÐÐÐå�-¥Ñ&Ô&ð ÝÔÝŒLðð à)ðñ ô õ
 ‰EŒEñ
ô 
ð 	
õ 
�M 2¤?Ñ	3Ô	3ð ØÔ$Ð$å‰uŒuˆr+   c                ó8  — t          | ¦  «        }|dk    r)d„ |D ¦   «         }t          t          |¦  «        ¦  «        }nÂ|dk    r¢g }|D ]€}|j        dk    rsd|j        v rj|j        d         d         }t          |d         t          ¦  «        r|                     |d         ¦  «         Œ`|                     |d         j        ¦  «         Œ�t          t          |¦  «        ¦  «        }n|dk    rd	„ |D ¦   «         }nt          ‚|}d
 
                    dg|z   ¦  «        S )NÚoriginal_atenc                ó~   — g | ]:}|j         d k    r-d|j        v r$|j        d         ®#|j        d         j        j        ‘Œ;S )r9  r´  )r)  r¼   Ú_overloadpacketre   ©r'   Úorigins     r)   r*   z)get_fused_kernel_name.<locals>.<listcomp>  sX   € ð 
ð 
ð 
àØŒy˜OÒ+Ð+Ø 6¤;Ð.Ð.Ø”˜OÔ,Ð8ð	 ŒK˜Ô(Ô8ÔAð 9Ð8Ð8r+   r$   r9  Úsource_fn_stackrx   r,   Úinductor_nodec                ó2   — g | ]}|j         d k    ¯|j        ‘ŒS ©r9  )r)  r~   r·  s     r)   r*   z)get_fused_kernel_name.<locals>.<listcomp>'  s-   € ð 
ð 
ð 
Ø"°V´YÀ/Ò5QÐ5QˆFŒKÐ5QÐ5QÐ5Qr+   r¡   Úfused)r²  rˆ  r¯  r)  r¼   rP   rµ   rG  re   ÚNotImplementedErrorÚjoin)r±  Údescriptive_namesÚall_originsÚsourcesr¸  Ú	source_fns         r)   Úget_fused_kernel_namerÄ    sI  € Ý# MÑ2Ô2€KØ˜OÒ+Ð+ð
ð 
à%ð
ñ 
ô 
ˆõ �˜W™œÑ&Ô&ˆˆØ	˜gÒ	%Ð	%àˆØ!ð 	:ð 	:ˆFØŒy˜OÒ+Ð+Ð0AÀVÄ[Ð0PÐ0PØ"œKÐ(9Ô:¸2Ô>�	Ý˜i¨œl­CÑ0Ô0ð :Ø—N’N 9¨Q¤<Ñ0Ô0Ð0Ð0à—N’N 9¨Q¤<Ô#8Ñ9Ô9Ð9øÝ�˜W™œÑ&Ô&ˆˆØ	˜oÒ	-Ð	-ð
ð 
Ø&1ð
ñ 
ô 
ˆˆõ "Ð!Ø€GØ�8Š8�W�I Ñ'Ñ(Ô(Ð(r+   c                óv  ‡— t          | ¦  «        }d„ |D ¦   «         }t          j        t          ¦  «        }t          j        t          ¦  «        }d Št	          |¦  «        r}d„ |D ¦   «         }t	          |¦  «        dk    r^|d         j        Št          ‰d¦  «        s(i }t          ‰j        ¦  «        D ]
\  }}	|||	<   Œ|‰_	        | 
                    ˆfd„¬¦  «         |D ]˜}
d|
j        v rL|
j        d         �?t          |
j        d         j        ¦  «        }||                              |
j        ¦  «         d	|
j        v r8|
j        d	         d         j        }||                              |
j        ¦  «         Œ™‰�d
nd}|j        › d|› dd                     |                     ¦   «         ¦  «        › dd                     |                     ¦   «         ¦  «        › d�}|j        › d�g}t'          |                     ¦   «         ¦  «        D ]G\  }}|                     |j        › d|› dd                     t'          |¦  «        ¦  «        › �¦  «         ŒH‰�S|                     |j        › d�¦  «         |D ]3}	|                     |j        › d|	                     ¦   «         › �¦  «         Œ4|d                     |¦  «        fS )Nc                ó(   — g | ]}|j         d k    ¯|‘ŒS r¼  r4  r·  s     r)   r*   z'get_kernel_metadata.<locals>.<listcomp>2  s$   € ÐWÐWÐW ¸&¼)ÀÒ:VÐ:V�fÐ:VÐ:VÐ:Vr+   c                ó   — h | ]	}|j         ’Œ
S r"   )r#  )r'   Úns     r)   ú	<setcomp>z&get_kernel_metadata.<locals>.<setcomp><  s   € Ð9Ð9Ð9 Q˜œÐ9Ð9Ð9r+   r,   r   Ú)_inductor_kernel_metadata_node_to_idx_mapc                ó   •— ‰j         |          S r`   )rÊ  )rÈ  Úsingle_graphs    €r)   rt  z%get_kernel_metadata.<locals>.<lambda>F  s   ø€ ˜lÔTÐUVÔW€ r+   r‡  r´  Ú	from_nodezTopologically SortedÚUnsortedú z Source Nodes: [ræ   z], Original ATen: [ú]z" Source node to ATen node mapping:z   z => z Graph fragment:ú
)r²  ÚcollectionsÚdefaultdictr  r.   r#  r²   r™   ÚnodesrÊ  Úsortr¼   rµ   r¶  rG  r~   Úcommentr¿  Úkeysrˆ  ÚitemsÚformat_node)r±  r¦  rÁ  Úinductor_nodesÚfrom_node_dictÚoriginal_aten_dictÚunique_graphsÚnode_to_idx_mapÚidxrÈ  rS  r  Úsort_strÚmetadataÚdetailed_metadataÚoriginal_noderÔ  rÌ  s                    @r)   Úget_kernel_metadatarä  0  s-  ø€ Ý# MÑ2Ô2€KØWÐW¨;ÐWÑWÔW€Nå Ô,­TÑ2Ô2€NÝ$Ô0µÑ6Ô6Ðð
 €LÝ
ˆ>ÑÔð Ø9Ð9¨.Ð9Ñ9Ô9ˆÝˆ}ÑÔ Ò"Ð"Ø)¨!Ô,Ô2ˆLå˜<Ð)TÑUÔUð YØ"$�Ý'¨Ô(:Ñ;Ô;ð -ð -‘F�C˜Ø),�O AÑ&Ð&ØIX�ÔFØ×ÒØWÐWÐWÐWð  ñ ô ð ð ð 2ð 2ˆØ˜dœiÐ'Ð'¨D¬I°oÔ,FÐ,RÝ�d”i Ô0Ô@ÑAÔAˆCØ˜sÔ#×*Ò*¨4¬9Ñ5Ô5Ð5Ø˜$œ)Ð#Ð#Ø”)˜KÔ(¨Ô+Ô0ˆCØ˜3Ô×&Ò& t¤yÑ1Ô1Ð1øØ)5Ð)AÐ%Ð%Àz€HàŒ?ð 	Cð 	C˜Xð 	Cð 	C°t·y²yÀ×ATÒATÑAVÔAVÑ7WÔ7Wð 	Cð 	CØŸ9š9Ð%7×%<Ò%<Ñ%>Ô%>Ñ?Ô?ð	Cð 	Cð 	Cð ð $œOÐOÐOÐOÐPÐÝ & ~×';Ò';Ñ'=Ô'=Ñ >Ô >ð 
ð 
Ñˆ�uØ× Ò ØŒÐPÐP =ÐPÐP°d·i²iÅÀuÁÄÑ6NÔ6NÐPÐPñ	
ô 	
ð 	
ð 	
ð
 ÐØ× Ò  G¤OÐ!EÐ!EÐ!EÑFÔFÐFØð 	Oð 	OˆAð ×$Ò$¨¬Ð%MÐ%M¸A¿MºM¹O¼OÐ%MÐ%MÑNÔNÐNÐNà�T—Y’YÐ0Ñ1Ô1Ð1Ð1r+   Úinitial_queueúIterable[torch.fx.Node]úSet[torch.fx.Node]c                óþ   — t          | ¦  «        } t          | ¦  «        }| r\|                      ¦   «         }|j        D ]>}|r ||¦  «        rŒ||vr*|                     |¦  «         |                      |¦  «         Œ?| °\|S )zJReturns the set of nodes whose values depend on those within initial_queue)r  r¯  r/   r?  ÚaddrG  )rå  Úskip_filterÚdominated_setrS  Úusers        r)   Údominated_nodesrí  h  sª   € õ ˜Ñ'Ô'€MÝ˜Ñ&Ô&€Mà
ð +Ø× Ò Ñ"Ô"ˆØ”Jð 	+ð 	+ˆDØð ˜{˜{¨4Ñ0Ô0ð ØØ˜=Ð(Ð(Ø×!Ò! $Ñ'Ô'Ð'Ø×$Ò$ TÑ*Ô*Ð*øð ð +ð Ðr+   c                óº   ‡‡— dd l }ddlmŠ ˆˆfd„Šˆfd„|                     ¦   «         D ¦   «         }ˆfd„| D ¦   «         }t	           |j        g |¢|¢R Ž ¦  «        S )Nr   r,   r©  c                óì   •— t          | ‰j        ¦  «        r ‰| j        ¦  «        S t          | ‰j        ¦  «        r ‰| j        ¦  «        S t          | ‰j        ¦  «        ot          | ‰j        ¦  «        S r`   )rP   Ú	TensorBoxÚdataÚ
StorageBoxÚIRNodeÚ	Pointwise)rÈ  rª  Úis_unrealized_nodes    €€r)   rõ  z*gather_origins.<locals>.is_unrealized_node€  st   ø€ Ý�a˜œÑ&Ô&ð 	.Ø%Ð% a¤fÑ-Ô-Ð-Ý�a˜œÑ'Ô'ð 	.Ø%Ð% a¤fÑ-Ô-Ð-Ý˜!˜RœYÑ'Ô'ÐG­J°q¸"¼,Ñ,GÔ,GÐGr+   c                ó4   •— g | ]} ‰|¦  «        ¯|j         ‘ŒS r"   ©r¬  )r'   Úvalrõ  s     €r)   r*   z"gather_origins.<locals>.<listcomp>‡  s-   ø€ ÐWÐWÐW SÐ?QÐ?QÐRUÑ?VÔ?VÐW�S”[ÐWÐWÐWr+   c                ó4   •— g | ]} ‰|¦  «        ¯|j         ‘ŒS r"   r÷  )r'   rF  rõ  s     €r)   r*   z"gather_origins.<locals>.<listcomp>ˆ  s,   ø€ ÐJÐJÐJ 3Ð2DÐ2DÀSÑ2IÔ2IÐJ�3”;ÐJÐJÐJr+   )Ú	itertoolsr­  rª  rà   r¯  Úchain)rW   rR  rú  Úkwarg_originsÚarg_originsrª  rõ  s        @@r)   Úgather_originsrþ  {  s¨   øø€ ØÐÐÐàÐÐÐÐÐðHð Hð Hð Hð Hð Hð XÐWÐWÐW¨F¯MªM©O¬OÐWÑWÔW€MØJÐJÐJÐJ¨$ÐJÑJÔJ€KÝˆˆyŒÐ< Ð<¨mÐ<Ð<Ð<Ñ=Ô=Ð=r+   Úexprc                óH  — t          | t          j        ¦  «        r| j        S t          | t          j        ¦  «        r-d                     t          t          | j        ¦  «        ¦  «        S t          | t          j	        ¦  «        r-d                     t          t          | j        ¦  «        ¦  «        S t          | t          t          t          t          f¦  «        r=| j        j        › dd                     t          t          | j        ¦  «        ¦  «        › d�S t!          | ¦  «        S )zµ
    Normal sympy str is very slow, this is a lot faster.  The result are
    somewhat worse, as it doesn't do as much simplification.  So don't
    use this for final codegen.
    z + z * ú(ræ   ú))rP   rQ   ÚSymbolr~   rR   r¿  rU   Ú	sympy_strrW   ÚMulr=   r:   r;   r<   Úfuncre   rµ   )rÿ  s    r)   r  r  Œ  sà   € õ �$�œÑ%Ô%ð ØŒyÐÝ�$�œ	Ñ"Ô"ð 5Ø�zŠz�#�i¨¬Ñ3Ô3Ñ4Ô4Ð4Ý�$�œ	Ñ"Ô"ð 5Ø�zŠz�#�i¨¬Ñ3Ô3Ñ4Ô4Ð4å�$�­(µH½hÐGÑHÔHð OØ”)Ô$ÐNÐN t§y¢yµµYÀÄ	Ñ1JÔ1JÑ'KÔ'KÐNÐNÐNÐNÝˆt‰9Œ9Ðr+   c                ó°   — ddl m} t          j        r2t	          |j        dd ¦  «        x}r|j        dk    rt          | ¦  «        S t          j	        ¦   «         S )Nr,   r  Úcurrent_nodeÚ
index_expr)
r'  r   rB   Úcompute_all_boundsr#   Úinterpreterr=  r@   rA   Úunknown)r½   r   Úfx_nodes      r)   Úget_bounds_index_exprr  ž  sh   € ØÐÐÐÐÐõ 	Ô!ð%å ¤¨~¸tÑDÔDÐDˆWð%ð ŒN˜lÒ*Ð*å˜5Ñ!Ô!Ð!åÔ"Ñ$Ô$Ð$r+   Úprefixr?   rß  úsympy.Symbolc                óL   — | t           j        k    sJ ‚t          | |dd¬¦  «        S )ú9
    Used to generate an integer-nonnegative symbol.
    T©ÚintegerÚnonnegative)r?   ÚSIZEr>   )r  rß  s     r)   Úsympy_index_symbol_with_prefixr  ¬  s0   € ð •T”YÒÐÐÐõ �v˜s¨D¸dÐCÑCÔCÐCr+   c                ó6   — | st           j        ot           j        S r`   )rB   Údebug_index_assertsÚassert_indirect_indexing)Úchecks    r)   Úgenerate_assertr  ¸  s   € ØÐ/•VÔ/ÐTµVÔ5TÐTr+   r~   c                óL   — | d         dk    sJ ‚t          j        | dd¬¦  «        S )r  r   ÚsTr  )rQ   r  ©r~   s    r)   Úsympy_index_symbolr   ¼  s.   € ð �Œ7�cŠ>ˆ>ˆ>ˆ>õ Œ<˜ d¸Ð=Ñ=Ô=Ð=r+   ÚreplacementsúDict[sympy.Expr, Any]c                ó”   ‡— d„ Št          j        | ¦  «                             ˆfd„|                     ¦   «         D ¦   «         ¦  «        S )z²
    When the passed replacement symbol v is a string, it is converted to a symbol with name v that
    have the same replaced expression integer and nonnegative properties.
    c                óª   — t          | t          j        ¦  «        sJ ‚t          |t          ¦  «        r!t          j        || j        | j        ¬¦  «        S |S )Nr  )rP   rQ   rç   rµ   r  rj   Úis_nonnegative)ÚreplacedÚreplacements     r)   Ú	to_symbolzsympy_subs.<locals>.to_symbolÎ  s\   € Ý˜(¥E¤JÑ/Ô/Ð/Ð/Ð/Ý�k¥3Ñ'Ô'ð 	Ý”<ØØ Ô+Ø$Ô3ðñ ô ð ð Ðr+   c                ó0   •— i | ]\  }}| ‰||¦  «        “ŒS r"   r"   )r'   ÚkrM   r(  s      €r)   rß   zsympy_subs.<locals>.<dictcomp>Û  s)   ø€ Ð=Ð=Ð=¡  1ˆˆIˆI�a˜‰OŒOÐ=Ð=Ð=r+   )rQ   rè   ÚxreplacerØ  )rÿ  r!  r(  s     @r)   Ú
sympy_subsr,  È  sY   ø€ ð	ð 	ð 	õ Œ=˜ÑÔ×'Ò'Ø=Ð=Ð=Ð=¨×(:Ò(:Ñ(<Ô(<Ð=Ñ=Ô=ñô ð r+   rÕ   ú,TypeGuard[Union[torch.SymInt, torch.Tensor]]c                ó
  — t          | t          j        ¦  «        pit          | t          j        ¦  «        oOt	          d„ t          j        |                      ¦   «         |                      ¦   «         ¦  «        D ¦   «         ¦  «        S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r`   ©Úis_symbolicr&   s     r)   r‡   zis_symbolic.<locals>.<genexpr>â  s(   è è € ÐNÐN 1•˜A‘”ÐNÐNÐNÐNÐNÐNr+   )	rP   r$   ÚSymIntrL  r1  rú  rû  r~  Ústride)rÕ   s    r)   r1  r1  ß  sf   € Ý�a�œÑ&Ô&ð Ý�1•e”lÑ#Ô#ð 	OÝÐNÐN­	¬¸¿º¹¼À!Ç(Â(Á*Ä*Ñ(MÔ(MÐNÑNÔNÑNÔNðr+   rW   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r`   r0  r.  s     r)   r‡   z"any_is_symbolic.<locals>.<genexpr>ç  s(   è è € Ð,Ð, !�{˜1‰~Œ~Ð,Ð,Ð,Ð,Ð,Ð,r+   ©r1  )rW   s    r)   Úany_is_symbolicr7  æ  s   € ÝÐ,Ð, tÐ,Ñ,Ô,Ñ,Ô,Ð,r+   rT  útorch.fx.GraphModuleúOptional[torch.fx.Node]c                ó  — ddl m} h d£}t          j        ¦   «         r|                     h d£¦  «         | j        j        D ]G}t          |j        ¦  «        |v r|c S |j	         
                    d¦  «        x}� ||¦  «        r|c S ŒHd S )Nr   )Úfree_unbacked_symbols>   úaten._assert_scalarúaten._local_scalar_denseúfbgemm.dense_to_jagged.defaultú%fbgemm.jagged_to_padded_dense.defaultú,aten._fused_moving_avg_obs_fq_helper.defaultú7aten._fused_moving_avg_obs_fq_helper_functional.defaultÚrun_with_rng_stateÚrun_and_save_rng_state>   úaten.scatter.srcúaten.scatter_add_úaten.scatter.reduceúaten.index_put.defaultúaten.index_put_.defaultúaten.scatter_reduce.twoúaten.scatter_add.defaultúaten.scatter_reduce_.twoúaten.scatter.value_reduceúaten.scatter_reduce.two_outúaten._unsafe_index_put.defaultú0aten._unsafe_masked_index_put_accumulate.defaultrø  )Ú%torch.fx.experimental.symbolic_shapesr;  r$   Ú$are_deterministic_algorithms_enabledÚupdater#  rÔ  rµ   r=  r¼   Úget)rT  r;  Úforbidden_setrS  rø  s        r)   Ú%get_first_incompatible_cudagraph_noderU  ê  sÎ   € ð LÐKÐKÐKÐKÐKðð ð €Mõ Ô1Ñ3Ô3ð 
Ø×Òðð ð ñ	
ô 	
ð 	
ð  ””ð ð ˆÝˆtŒ{ÑÔ˜}Ð,Ð,ØˆKˆKˆKØ”9—=’= Ñ'Ô'Ð'ˆCÐ4Ð9NÐ9NÈsÑ9SÔ9SÐ4ØˆKˆKˆKøØˆ4r+   c                ó†   — t          t          t          | j        j        ¦  «        ¦  «        ¦  «        }|j        dk    sJ ‚|S )z$Get the output node from an FX graphrP  )ÚnextÚiterÚreversedr#  rÔ  r)  )rT  Ú	last_nodes     r)   Úoutput_noder[    s<   € å•T�( 2¤8¤>Ñ2Ô2Ñ3Ô3Ñ4Ô4€IØŒ<˜8Ò#Ð#Ð#Ð#ØÐr+   z	List[Any]Ú_registered_cachesc                ó¦   — t          | d¦  «        rt          | j        ¦  «        st          | › d�¦  «        ‚t                               | ¦  «         | S )zq
    Use this decorator to register any caches that should be cache_clear'd
    with fresh_inductor_cache().
    Úcache_clearz# does not have a cache_clear method)r²   Úcallabler^  ÚAttributeErrorr\  rG  ©rp  s    r)   Úclear_on_fresh_inductor_cacherb     sY   € õ
 �3˜Ñ&Ô&ð J­h°s´Ñ.GÔ.Gð JÝ ÐHÐHÐHÑIÔIÐIå×Ò˜cÑ"Ô"Ð"Ø€Jr+   c                 óB   — t           D ]} |                      ¦   «          ŒdS )z&
    Clear all registered caches.
    N)r\  r^  ra  s    r)   Úclear_inductor_cachesrd  ,  s0   € õ "ð ð ˆØ�ŠÑÔÐÐðð r+   c              #  óÆ  ‡K  — t          ¦   «          t          j        |¬¦  «        }	 t          j                             t          j        d|i¦  «        5  t           	                    d|¦  «         t          j
                             |d¦  «        Št          j                             t          j        d‰i¦  «        5  dV — t          | t
          ¦  «        rqt          | ¦  «        dk    s
J d¦   «         ‚t          j
                             ‰¦  «        r5t          j        ‰¦  «        }|                      ˆfd	„|D ¦   «         ¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |rt#          j        |¦  «         n4# t&          $ r' t(          s	 t                               d
|¦  «         ‚ Y nw xY wt          ¦   «          dS # t          ¦   «          w xY w)zÆ
    Contextmanager that provides a clean tmp cachedir for inductor.

    Optionally, pass a dict as 'cache_entries' to get a list of filenames and sizes
    generated with this cache instance.
    )ÚdirÚTORCHINDUCTOR_CACHE_DIRzUsing inductor cache dir %sÚtritonÚTRITON_CACHE_DIRNr   z!expected empty cache_entries dictc           	     ó”   •— i | ]D}d |v¯|t           j                             t           j                             ‰|¦  «        ¦  «        “ŒES )z.lock)ÚosÚpathÚgetsizer¿  )r'   ÚfÚtriton_cache_dirs     €r)   rß   z(fresh_inductor_cache.<locals>.<dictcomp>L  sP   ø€ ð ð ð à$%Ø#*°!Ð#3Ð#3ð !"¥2¤7§?¢?µ2´7·<²<Ð@PÐRSÑ3TÔ3TÑ#UÔ#Uà#3Ð#3Ð#3r+   z(on error, temporary cache dir kept at %s)rd  ÚtempfileÚmkdtempr   ÚpatchÚdictrk  Úenvironr“   r”   rl  r¿  rP   r.   ÚexistsÚlistdirrR  ÚshutilÚrmtreeÚ	ExceptionÚ_IS_WINDOWSÚwarning)Úcache_entriesrf  ÚdeleteÚinductor_cache_dirÚfilesro  s        @r)   Úfresh_inductor_cacher€  4  s|  øè è € õ ÑÔÐå!Ô)¨cÐ2Ñ2Ô2Ðð ÝŒZ�_Š_ÝŒJÐ2Ð4FÐGñ
ô 
ð 	ð 	õ �IŠIÐ3Ð5GÑHÔHÐHÝ!œwŸ|š|Ð,>ÀÑIÔIÐÝ”—’¥¤Ð.@ÐBRÐ-SÑTÔTð ð Ø���Ý˜m­TÑ2Ô2ð 
Ý˜}Ñ-Ô-°Ò2Ð2Ð2Ð4WÑ2Ô2Ð2Ý”w—~’~Ð&6Ñ7Ô7ð Ý "¤
Ð+;Ñ <Ô <˜Ø%×,Ò,ðð ð ð à).ðñ ô ñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð$ ð 	.ÝŒMÐ,Ñ-Ô-Ð-øøÝð ð ð Ýð 	ðõ �KŠKÐBÐDVÑWÔWÐWØð	ð 	ðøøøõ 	ÑÔÐÐÐøÕÑÔÐÐøøøss   ¨,F ÁA(E*Â<BEÅE*ÅE	ÅE*ÅE	ÅE*ÅF Å*E.Å.F Å1E.Å2F ÆG Æ.F=Æ:G Æ<F=Æ=G ÇG ú	List[int]c           	     ó    — | j         }t          t          | ¦  «        ¦  «        }t          t	          t          ||d¬¦  «        ¦  «        ¦  «        S )NT)r  Úreverse)Ú__getitem__rŒ   r.   r  rY  rˆ  )ÚseqÚgetterÚa_rs      r)   Úargsortrˆ  `  s?   € àŒ_€FÝ
•�C‘”‰/Œ/€CÝ•� ¨¸Ð>Ñ>Ô>Ñ?Ô?Ñ@Ô@Ð@r+   r…  ú.Sequence[Union[int, torch.SymInt, sympy.Expr]]c                ó¢   ‡ — ˆ fd„}d„ t          |¦  «        D ¦   «         }t          |t          j        |¦  «        ¬¦  «        }d„ |D ¦   «         }|S )Nc                óŠ   •— | \  }}|\  }}ˆfd„} |||k     ¦  «        rdS  |||k    ¦  «        rdS ||k     rdS ||k    rdS dS )Nc                ó`   •— t          | t          ¦  «        r| S ‰                     | d¬¦  «        S )NT)Úsize_oblivious)rP   rª   Úevaluate_expr)rÿ  r%  s    €r)   Úevaluatez*argsort_sym.<locals>.cmp.<locals>.evaluaten  s3   ø€ Ý˜$¥Ñ%Ô%ð Ø�Ø×*Ò*¨4ÀÐ*ÑEÔEÐEr+   rx   r,   r   r"   )rÕ   rÖ   Úa_idxÚa_valÚb_idxÚb_valr�  r%  s          €r)   r|  zargsort_sym.<locals>.cmpj  sŽ   ø€ Ø‰ˆˆuØ‰ˆˆuð	Fð 	Fð 	Fð 	Fð 	Fð
 ˆ8�E˜E’MÑ"Ô"ð 	Ø�2Øˆ8�E˜E’MÑ"Ô"ð 	Ø�1ð
 �5Š=ˆ=Ø�1Ø�5Š=ˆ=Ø�2Øˆqr+   c                óh   — g | ]/\  }}|t          |t          j        ¦  «        r|j        j        n|f‘Œ0S r"   )rP   r$   r2  rS  rÿ  )r'   rß  r  s      r)   r*   zargsort_sym.<locals>.<listcomp>‚  sJ   € ð ð ð áˆC�ð 
�Z¨­5¬<Ñ8Ô8Ð?ˆaŒfŒkˆk¸aÐ@ðð ð r+   r‡  c                ó   — g | ]\  }}|‘ŒS r"   r"   )r'   rß  r¡   s      r)   r*   zargsort_sym.<locals>.<listcomp>‡  s   € Ð&Ð&Ð&‘f�c˜1ˆcÐ&Ð&Ð&r+   )r™   rˆ  rÈ   Ú
cmp_to_key)r%  r…  r|  Úexprsrb  s   `    r)   Úargsort_symr˜  g  sw   ø€ ðð ð ð ð ð0ð å ‘n”nðñ ô €Eõ �5�iÔ2°3Ñ7Ô7Ð8Ñ8Ô8€EØ&Ð& Ð&Ñ&Ô&€FØ€Mr+   c                óR   — t          j        d| ¬¦  «                             ¦   «         S )Nr"   ©rr   )r$   r‰   Úelement_sizerš  s    r)   Úget_dtype_sizerœ  ‹  s#   € åŒ;�r Ð'Ñ'Ô'×4Ò4Ñ6Ô6Ð6r+   c                  ó   — e Zd ZU ded<   dS )ÚLineContextr   ÚcontextN©re   rf   rg   Ú__annotations__r"   r+   r)   rž  rž  �  s   € € € € € € Ø€L€L�L€L€Lr+   rž  c                  óŠ   — e Zd ZdZdd„Zdd„Zdd„Zdd	„Zd
„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zdd„Zdd„Zdd„Zd d„Zd!d„Zd„ Zd„ ZdS )"ÚIndentedBufferé   r   c                ó"   — g | _         || _        d S r`   )Ú_linesÚ_indent)r‘  Úinitial_indents     r)   Ú__init__zIndentedBuffer.__init__—  s   € ØˆŒØ%ˆŒˆˆr+   r]   ú)tuple[str, list[tuple[int, LineContext]]]c                óÈ  — t          ¦   «         }d}g }| j        D ]³}t          |t          ¦  «        r |¦   «         }|€Œ$n2t          |t          ¦  «        r|                     ||j        f¦  «         ŒWt          |t          ¦  «        sJ ‚|                     |¦  «         |                     d¦  «         |d| 	                    d¦  «        z   z  }Œ´| 
                    ¦   «         |fS )Nr,   rÑ  )r   r¦  rP   ÚDeferredLineBaserž  rG  rŸ  rµ   ÚwriteÚcountÚgetvalue)r‘  Úbufr¥   ÚlinemapÚlines        r)   Úgetvaluewithlinemapz"IndentedBuffer.getvaluewithlinemap›  sã   € Ý‰jŒjˆØˆØˆØ”Kð 	&ð 	&ˆDÝ˜$Õ 0Ñ1Ô1ð Ø�t‘v”v�Ø�<Øð  å˜D¥+Ñ.Ô.ð Ø—’  4¤<Ð0Ñ1Ô1Ð1ØÝ˜d¥CÑ(Ô(Ð(Ð(Ð(Ø�IŠI�d‰OŒOˆOØ�IŠI�d‰OŒOˆOØ��T—Z’Z Ñ%Ô%Ñ%Ñ%ˆAˆAØ�|Š|‰~Œ~˜wÐ&Ð&r+   rµ   c                ó4   — |                       ¦   «         \  }}|S r`   )r³  )r‘  rM   r¡   s      r)   r¯  zIndentedBuffer.getvalue­  s   € Ø×'Ò'Ñ)Ô)‰ˆˆ1Øˆr+   c                ó´  — t          ¦   «         }| j        D ]¯}t          |t          ¦  «        r |¦   «         }|€Œ$nt          |t          ¦  «        rŒ;t          |t
          ¦  «        sJ ‚|                     d¦  «        r|                     |d d…         ¦  «         Œ…|                     |¦  «         |                     d¦  «         Œ°|                     ¦   «         S )Nú\rx   rÑ  )	r   r¦  rP   r¬  rž  rµ   Úendswithr­  r¯  )r‘  r°  r²  s      r)   ÚgetrawvaluezIndentedBuffer.getrawvalue±  sÑ   € Ý‰jŒjˆØ”Kð 	 ð 	 ˆDÝ˜$Õ 0Ñ1Ô1ð Ø�t‘v”v�Ø�<Øð  å˜D¥+Ñ.Ô.ð ØÝ˜d¥CÑ(Ô(Ð(Ð(Ð(à�}Š}˜TÑ"Ô"ð  Ø—	’	˜$˜s ˜sœ)Ñ$Ô$Ð$Ð$à—	’	˜$‘”�Ø—	’	˜$‘”��Ø�|Š|‰~Œ~Ðr+   c                ó8   — | j                              ¦   «          d S r`   )r¦  Úclearr�  s    r)   rº  zIndentedBuffer.clearÃ  s   € ØŒ×ÒÑÔÐÐÐr+   c                ó*   — t          | j        ¦  «        S r`   )rª   r¦  r�  s    r)   Ú__bool__zIndentedBuffer.__bool__Æ  s   € Ý�D”KÑ Ô Ð r+   c                ó&   — d| j         | j        z  z  S )NrÏ  )r§  Útabwidthr�  s    r)   r  zIndentedBuffer.prefixÉ  s   € Ø�d”l T¤]Ñ2Ñ3Ð3r+   c                ó0   — |                       d¦  «         d S )NrÑ  ©Ú	writeliner�  s    r)   ÚnewlinezIndentedBuffer.newlineÌ  s   € Ø�Š�tÑÔÐÐÐr+   c                óÔ  — t          |t          ¦  «        r| j                             |¦  «         d S t          |t          ¦  «        rA| j                             |                     |                      ¦   «         ¦  «        ¦  «         d S |                     ¦   «         r2| j                             |                      ¦   «         › |› �¦  «         d S | j                             d¦  «         d S ©Nr­  )rP   rž  r¦  rG  r¬  Úwith_prefixr  Ústrip©r‘  r²  s     r)   rÁ  zIndentedBuffer.writelineÏ  sÐ   € Ý�d�KÑ(Ô(ð 	#ØŒK×Ò˜tÑ$Ô$Ð$Ð$Ð$Ý˜Õ.Ñ/Ô/ð 	#ØŒK×Ò˜t×/Ò/°·²±´Ñ>Ô>Ñ?Ô?Ð?Ð?Ð?Ø�ZŠZ‰\Œ\ð 	#ØŒK×Ò $§+¢+¡-¤-Ð7°Ð7Ð7Ñ8Ô8Ð8Ð8Ð8àŒK×Ò˜rÑ"Ô"Ð"Ð"Ð"r+   c                ó:   — |D ]}|                       |¦  «         Œd S r`   rÀ  )r‘  Úlinesr²  s      r)   Ú
writelineszIndentedBuffer.writelinesÙ  s0   € Øð 	!ð 	!ˆDØ�NŠN˜4Ñ Ô Ð Ð ð	!ð 	!r+   r,   c                óJ   ‡ ‡— t           j        ˆˆ fd„¦   «         } |¦   «         S )Nc               3  ó€   •K  — ‰xj         ‰ z  c_         	 d V — ‰xj         ‰ z  c_         d S # ‰xj         ‰ z  c_         w xY wr`   ©r§  )Úoffsetr‘  s   €€r)   r¥  z"IndentedBuffer.indent.<locals>.ctxÞ  sQ   øè è € àˆLŒL˜FÑ"ˆLŒLð'Ø���à�” Ñ&�”��ø��” Ñ&�”����s   •+ «=)Ú
contextlibÚcontextmanager)r‘  rÎ  r¥  s   `` r)   ÚindentzIndentedBuffer.indentÝ  s=   øø€ Ý	Ô	"ð	'ð 	'ð 	'ð 	'ð 	'ñ 
#Ô	"ð	'ð ˆs‰uŒuˆr+   c                ó&   — | xj         |z  c_         d S r`   rÍ  ©r‘  rÎ  s     r)   Ú	do_indentzIndentedBuffer.do_indentè  ó   € ØˆŒ˜ÑˆŒˆˆr+   c                ó&   — | xj         |z  c_         d S r`   rÍ  rÓ  s     r)   Údo_unindentzIndentedBuffer.do_unindentë  rÕ  r+   Fc           	     óð  — t          |t          ¦  «        rñt          d¦  «        }|j        D ]X}t          |t          ¦  «        sA|r?t          |t          |¦  «        t          |                     ¦   «         ¦  «        z
  ¦  «        }ŒYt          j	        |¦  «        rd}|j        D ]b}t          |t          ¦  «        r| j         
                    |¦  «         Œ2t                               | |t          |¦  «        d …         ¦  «         Œcd S t          j        |¦  «        }|r|                     ¦   «         }|sd S |                     ¦   «         }|                     d¦  «        D ]}|                      |¦  «         Œd S )NÚinfr   rÑ  )rP   r£  rp   r¦  rž  Úminr.   r£  ÚmathÚisinfrG  rÁ  ra   ÚtextwrapÚdedentÚrstripr  )r‘  Ú
other_coderÆ  rÞ  r²  s        r)   ÚsplicezIndentedBuffer.spliceî  sˆ  € Ý�j¥.Ñ1Ô1ð 	%Ý˜5‘\”\ˆFØ"Ô)ð Ið I�Ý! $­Ñ4Ô4ð I¸ð IÝ  ­¨T©¬µS¸¿º¹¼Ñ5GÔ5GÑ)GÑHÔH�FøÝŒz˜&Ñ!Ô!ð Ø�Ø"Ô)ð Hð H�Ý˜d¥KÑ0Ô0ð HØ”K×&Ò& tÑ,Ô,Ð,Ð,å"×,Ò,¨T°4½¸F¹¼¸¸Ô3FÑGÔGÐGÐGð	Hð Hõ "œ¨Ñ4Ô4ˆJØð 1Ø'×.Ò.Ñ0Ô0�
Øð Ø�Ø#×*Ò*Ñ,Ô,ˆJØ"×(Ò(¨Ñ.Ô.ð %ð %�Ø—’˜tÑ$Ô$Ð$Ð$ð%ð %r+   r  úCallable[[Any], Any]c                ób   ‡— t          | j        ¬¦  «        }ˆfd„| j        D ¦   «         |_        |S )N©r¨  c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r"   r"   )r'   r²  r  s     €r)   r*   z&IndentedBuffer.map.<locals>.<listcomp>  s!   ø€ Ð9Ð9Ð9 T�d�d˜4‘j”jÐ9Ð9Ð9r+   )r£  r§  r¦  )r‘  r  r¨   s    ` r)   rU   zIndentedBuffer.map  s7   ø€ Ý¨D¬LÐ9Ñ9Ô9ˆØ9Ð9Ð9Ð9¨T¬[Ð9Ñ9Ô9ˆŒ
Øˆ
r+   c                óP   — t          | ¦  «        › d|                      ¦   «         › d�S )Nr  r  )r¿   r¯  r�  s    r)   Ú__repr__zIndentedBuffer.__repr__
  s'   € Ý�t‘*”*Ð1Ð1˜tŸ}š}™œÐ1Ð1Ð1Ð1r+   c                ó¼   — | j         |j         k    sJ ‚t          | j         ¬¦  «        }|                     | j        ¦  «         |                     |j        ¦  «         |S )Nrä  )r§  r£  rÊ  r¦  )r‘  Úotherr¨   s      r)   Ú__add__zIndentedBuffer.__add__  sV   € ØŒ|˜uœ}Ò,Ð,Ð,Ð,Ý¨D¬LÐ9Ñ9Ô9ˆØ�Š�t”{Ñ#Ô#Ð#Ø�Š�u”|Ñ$Ô$Ð$Øˆ
r+   Nr‚   )r]   rª  ©r]   rµ   r[   )F)r  râ  r]   r£  )re   rf   rg   r¾  r©  r³  r¯  r¸  rº  r¼  r  rÂ  rÁ  rÊ  rÑ  rÔ  r×  rá  rU   rç  rê  r"   r+   r)   r£  r£  ”  sE  € € € € € Ø€Hð&ð &ð &ð &ð'ð 'ð 'ð 'ð$ð ð ð ðð ð ð ð$ð ð ð!ð !ð !ð4ð 4ð 4ðð ð ð#ð #ð #ð!ð !ð !ð	ð 	ð 	ð 	ðð ð ð ðð ð ð ð%ð %ð %ð %ð.ð ð ð ð
2ð 2ð 2ðð ð ð ð r+   r£  c                  ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚFakeIndentedBufferr]   rV  c                óH   •— t          ¦   «                              ¦   «          d S r`   )Úsuperr©  )r‘  Ú	__class__s    €r)   r©  zFakeIndentedBuffer.__init__  s   ø€ Ý‰Œ×ÒÑÔÐÐÐr+   c                ój   — |dk    rt                                | |¦  «        S t          d|› d�¦  «        ‚)Nrð  zTried to call self.zÊ on FakeIndentedBuffer. This bufferis currently used on TritonTemplateKernel to prevent actualwrites to the body without explicitly specifying the body with`TritonTemplateKernel.set_subgraph_body(name)`)ÚobjectÚ__getattribute__r˜   )r‘  r~   s     r)   ró  z#FakeIndentedBuffer.__getattribute__  sK   € Ø�;ÒÐÝ×*Ò*¨4°Ñ6Ô6Ð6Ýð= $ð =ð =ð =ñ
ô 
ð 	
r+   r˜  )re   rf   rg   r©  ró  Ú__classcell__©rð  s   @r)   rí  rí    sL   ø€ € € € € ðð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
r+   rí  c              #  ó~   K  — 	 d V — | t           _        |t           _        d S # | t           _        |t           _        w xY wr`   )ÚsysÚstdoutÚstderr)Úinitial_stdoutÚinitial_stderrs     r)   Úrestore_stdout_stderrrü  $  sC   è è € ð$Øˆˆˆà#�Œ
Ø#�Œ
ˆ
ˆ
øð $�Œ
Ø#�Œ
Ð#Ð#Ð#Ð#s   „" ¢<c                  óF   — e Zd ZdZd„ Zdd„Zdd„Zd	„ Zd
„ Zd„ Z	d„ Z
d„ ZdS )r¬  z.A line that can be 'unwritten' at a later timec                ó@   — |                      ¦   «         sd}|| _        d S rÄ  )rÆ  r²  rÇ  s     r)   r©  zDeferredLineBase.__init__0  s"   € Ø�zŠz‰|Œ|ð 	ØˆDØˆŒ	ˆ	ˆ	r+   r]   úOptional[str]c                ó   — t           ‚)zJReturns either self.line or None to indicate the line has been 'unwritten'©r¾  r�  s    r)   r—  zDeferredLineBase.__call__5  ó   € å!Ð!r+   r²  rµ   c                ó   — t           ‚)z3Returns a new deferred line with the same conditionr  rÇ  s     r)   Ú	_new_linezDeferredLineBase._new_line9  r  r+   c                ó>   — |                       |› | j        › �¦  «        S r`   ©r  r²  )r‘  r  s     r)   rÅ  zDeferredLineBase.with_prefix=  s!   € Ø�~Š~ Ð4¨¬Ð4Ð4Ñ5Ô5Ð5r+   c                óZ   — |                       | j                             ¦   «         ¦  «        S r`   )r  r²  r£  r�  s    r)   r£  zDeferredLineBase.lstrip@  s"   € Ø�~Š~˜dœi×.Ò.Ñ0Ô0Ñ1Ô1Ð1r+   c                óB   — |                       | j        |         ¦  «        S r`   r  )r‘  r½   s     r)   r„  zDeferredLineBase.__getitem__C  s   € Ø�~Š~˜dœi¨Ô.Ñ/Ô/Ð/r+   c                ó*   — t          | j        ¦  «        S r`   )rª   r²  r�  s    r)   r¼  zDeferredLineBase.__bool__F  s   € Ý�D”I‰ŒÐr+   c                ó*   — t          | j        ¦  «        S r`   )r.   r²  r�  s    r)   Ú__len__zDeferredLineBase.__len__I  s   € Ý�4”9‰~Œ~Ðr+   N)r]   rÿ  )r²  rµ   r]   r¬  )re   rf   rg   rh   r©  r—  r  rÅ  r£  r„  r¼  r  r"   r+   r)   r¬  r¬  -  sœ   € € € € € Ø8Ð8ðð ð ð
"ð "ð "ð "ð"ð "ð "ð "ð6ð 6ð 6ð2ð 2ð 2ð0ð 0ð 0ðð ð ðð ð ð ð r+   r¬  c                  ó4   ‡ — e Zd ZdZdˆ fd„Zdd	„Zdd
„Zˆ xZS )ÚDelayReplaceLinez6At end of codegen call `line.replace(key, value_fn())`r  rµ   Úvalue_fnúCallable[[], str]r²  c                óf   •— t          ¦   «                              |¦  «         || _        || _        d S r`   )rï  r©  r  r  )r‘  r  r  r²  rð  s       €r)   r©  zDelayReplaceLine.__init__P  s-   ø€ Ý‰Œ×Ò˜ÑÔÐØˆŒØ ˆŒˆˆr+   r]   c                óf   — | j                              | j        |                      ¦   «         ¦  «        S r`   )r²  Úreplacer  r  r�  s    r)   r—  zDelayReplaceLine.__call__U  s$   € ØŒy× Ò  ¤¨4¯=ª=©?¬?Ñ;Ô;Ð;r+   c                ó8   — t          | j        | j        |¦  «        S r`   )r  r  r  rÇ  s     r)   r  zDelayReplaceLine._new_lineX  s   € Ý ¤¨$¬-¸Ñ>Ô>Ð>r+   )r  rµ   r  r  r²  rµ   rë  )r²  rµ   r]   r  )re   rf   rg   rh   r©  r—  r  rô  rõ  s   @r)   r  r  M  sk   ø€ € € € € Ø@Ð@ð!ð !ð !ð !ð !ð !ð
<ð <ð <ð <ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?r+   r  Úindex_or_deviceúUnion[int, torch.device]c                óŽ  — t          | t          j        ¦  «        r| }nt          j        d| ¦  «        }t          j        |¦  «        }t          j        j        r=|j        €J ‚|j        dk     s|j        dk    rt           	                    d¦  «         dS dS d}|j
        }||k     r!t           	                    d||d	œ¬
¦  «         dS dS )Nr   é	   re  z6GPU arch does not support max_autotune_gemm mode usageFTéD   z,Not enough SMs to use max_autotune_gemm mode)Úmin_smsÚ	avail_sms)Úextra)rP   r$   rs   r   ÚcreateÚversionÚhipÚmajorr“   r{  Úmulti_processor_count)r  rs   Úpropr  r  s        r)   Ú
is_big_gpur"  \  sÜ   € å�/¥5¤<Ñ0Ô0ð 7Ø ˆˆå”˜f oÑ6Ô6ˆåÔ" 6Ñ*Ô*€Dõ „}Ôð ØŒzÐ%Ð%Ð%ØŒ:˜Š>ˆ>˜TœZ¨2Ò-Ð-Ý�KŠKÐPÑQÔQÐQØ�5Øˆtà€GØÔ*€IØ�7ÒÐÝ�ŠØ:Ø%°IÐ>Ð>ð 	ñ 	
ô 	
ð 	
ð ˆuØˆ4r+   c                 óJ   — t           j        pt           j        pt           j        S r`   )rB   Úmax_autotuneÚmax_autotune_gemmÚsearch_autotune_cacher"   r+   r)   Úuse_max_autotuner'  y  s   € åÔÐW�vÔ7ÐW½6Ô;Wðr+   Úallowed_layout_dtypesúList[torch.dtype]c                ó\   — | j         j        dk    o| j        |v ot          | j         ¦  «        S )Nr   )rs   r¿   rr   r"  )Úlayoutr(  s     r)   Ú_use_template_for_cudar,    s6   € àŒÔ˜fÒ$ð 	&ØŒLÐ1Ð1ð	&å�v”}Ñ%Ô%ðr+   Úbackendc                ó    — |                       ¦   «         d„ t          j                              ¦   «                              d¦  «        D ¦   «         v S )Nc                ó6   — g | ]}|                      ¦   «         ‘ŒS r"   ©rÆ  r&   s     r)   r*   z)_use_autotune_backend.<locals>.<listcomp>ˆ  ó-   € ð ð ð Øˆ�Š‰	Œ	ðð ð r+   ú,)ÚupperrB   Úmax_autotune_gemm_backendsr  ©r-  s    r)   Ú_use_autotune_backendr6  ‡  óP   € Ø�=Š=‰?Œ?ð ð Ý!Ô<×BÒBÑDÔD×JÒJÈ3ÑOÔOðñ ô ð ð r+   c                ó    — |                       ¦   «         d„ t          j                              ¦   «                              d¦  «        D ¦   «         v S )Nc                ó6   — g | ]}|                      ¦   «         ‘ŒS r"   r0  r&   s     r)   r*   z._use_conv_autotune_backend.<locals>.<listcomp>Ž  r1  r+   r2  )r3  rB   Úmax_autotune_conv_backendsr  r5  s    r)   Ú_use_conv_autotune_backendr;  �  r7  r+   F)Úenable_int32Úenable_float8c               óê  — ddl m}m} t          j        t          j        t          j        g}|r.t          j        t          j        t          j        t          j        g}|r+|                     t          j	        t          j
        g¦  «         | j        j        dk    ot          | |¦  «        p| j        j        dk    o| j        |v o2t          ¦   «         o$t!          d¦  «        o || j        |j        ¦  «        S )Nr,   )ÚBackendFeatureÚhas_backend_featurer   r»   ÚTRITON)Úcodegen.commonr?  r@  r$   r÷   rù   rû   r  Úextendrõ   rö   rs   r¿   r,  rr   r'  r6  ÚTRITON_TEMPLATES)r+  r<  r=  r?  r@  Úlayout_dtypess         r)   Úuse_triton_templaterF  “  sü   € ØCÐCÐCÐCÐCÐCÐCÐCå”]¥E¤NµE´MÐB€MØð TÝœ­¬½¼ÅuÄ{ÐSˆØð GØ×Ò�eÔ1µ5Ô3DÐEÑFÔFÐFð ”Ô" fÒ,ð BÝ*¨6°=ÑAÔAðOð ”Ô" eÒ+ÐM°´ÀÐ0Mð		Põ ÑÔð		Põ " (Ñ+Ô+ð		Pð  Ð ¤¨~Ô/NÑOÔOðr+   c                óÒ  — ddl m} |j        j                             ||z  |z  d¬¦  «        }|dk    s|t
          j        j        k     rdS ddlm	} t          j        j        rdS t          j        t          j        t          j        t          j        g}t#          | |¦  «        ot%          ¦   «         ot'          d¦  «        }|r& |¦   «         st(                               d	¦  «         dS |S )
Nr,   r  rx   ©Úfallbackr   F)Útry_import_cutlassÚCUTLASSzˆFailed to import CUTLASS lib. Please check whether _inductor.config.cuda.cutlass_dir is set correctly. Skipping CUTLASS backend for now.)r'  r   r#  r$  Ú	size_hintrB   r   Úcutlass_backend_min_gemm_sizeÚcodegen.cuda.cutlass_utilsrJ  r$   r  r  r÷   rù   rû   r  r,  r'  r6  r“   r{  )	r+  ÚmrÈ  r*  r   Ú	gemm_sizerJ  rE  r¨   s	            r)   Úuse_cutlass_templaterQ  ©  s  € ØÐÐÐÐÐà”Ô ×*Ò*¨1¨q©5°1©9¸rÐ*ÑBÔB€IØ�A‚~€~˜¥V¤[Ô%NÒNÐNØˆuØ>Ð>Ð>Ð>Ð>Ð>õ „}Ôð Øˆuå”]¥E¤NµE´MÅ5Ä;ÐO€Må˜v }Ñ5Ô5ð 	-ÝÑÔð	-å! )Ñ,Ô,ð ð ð Ø!Ð!Ñ#Ô#ð 	Ý�KŠKð4ñô ð ð
 �5Ø€Jr+   c                óJ   — t           j                             | ¦  «        j        S r`   )r$   r   Úget_device_propertiesÚgcnArchName©rs   s    r)   Ú_rocm_native_device_arch_namerV  Ç  s   € åŒ:×+Ò+¨FÑ3Ô3Ô?Ð?r+   c                 óÈ   — 	 dd l } ddlm}m} ddlm} t          j                             | j	        ¦  «        }n%# t          $ r d„ }d„ } G d„ d¦  «        }d }Y nw xY w||||fS )Nr   )Úgen_ops_libraryÚgen_ops_preselected)ÚCKGemmOperationc                 ó   — g S r`   r"   r"   r+   r)   rX  z*try_import_ck_lib.<locals>.gen_ops_libraryÛ  ó   € ØˆIr+   c                 ó   — g S r`   r"   r"   r+   r)   rY  z.try_import_ck_lib.<locals>.gen_ops_preselectedÞ  r\  r+   c                  ó   — e Zd ZdS )ú*try_import_ck_lib.<locals>.CKGemmOperationN)re   rf   rg   r"   r+   r)   rZ  r_  á  s   € € € € € ØˆDr+   rZ  )Úck4inductorÚ(ck4inductor.universal_gemm.gen_instancesrX  rY  Úck4inductor.universal_gemm.oprZ  rk  rl  ÚdirnameÚ__file__r´   )r`  rX  rY  rZ  Úpackage_dirnames        r)   Útry_import_ck_librf  Ì  sñ   € ðØÐÐÐð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
õ œ'Ÿ/š/¨+Ô*>Ñ?Ô?ˆˆøÝð ð ð ð	ð 	ð 	ð	ð 	ð 	ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð ˆˆˆðøøøð ˜OÐ-@À/ÐQÐQs   ‚69 ¹AÁAc                ó4  ‡— t          ¦   «         sdS t          j        j        sdS | j        j        dk    sdS t          | j        ¦  «        }d„ t          j        j	        D ¦   «         p| 
                    d¦  «        d         |iŠˆfd„‰                     ¦   «         t          j        j        z  D ¦   «         }|sdS | j        t          j        t          j        t          j        fvrdS t#          ¦   «         \  }}}}|st$                               d¦  «         dS t          j        ¦   «         r|t          j        _        t          j        j        st$                               d¦  «         dS |t          j        j        k    rt$                               d	¦  «         dS d
S )NFr   c                óF   — i | ]}|                      d ¦  «        d         |“ŒS )ú:r   )r  )r'   r*  s     r)   rß   z#use_ck_template.<locals>.<dictcomp>õ  s(   € ÐDÐDÐD¨a�q—w’w˜s‘|”| A”¨ÐDÐDÐDr+   ri  r   c                ó    •— g | ]
}‰|         ‘ŒS r"   r"   )r'   r*  Úrequested_archss     €r)   r*   z#use_ck_template.<locals>.<listcomp>ø  s.   ø€ ð !ð !ð !àð 	˜Ôð!ð !ð !r+   z,Please pip install Composable Kernel packagez,Please set TORCHINDUCTOR_CK_DIR env variablezInvalid path to CK libraryT)r'  r$   r  r  rs   r¿   rV  rB   ÚrocmÚarchr  r×  Úck_supported_archrr   r÷   rù   rû   rf  r“   r{  Ú	is_fbcodeÚck_dir)r+  Únative_archÚrequested_supported_archsÚck_package_dirnamer¡   rk  s        @r)   Úuse_ck_templatert  è  s˜  ø€ åÑÔð ØˆuåŒ=Ôð ØˆuàŒ=Ô Ò'Ð'Øˆuõ 0°´Ñ>Ô>€KØDÐDµ6´;Ô3CÐDÑDÔDð Ø×Ò˜#ÑÔ˜qÔ! ;ðI€Oð!ð !ð !ð !à ×%Ò%Ñ'Ô'­&¬+Ô*GÑGð!ñ !ô !Ðð %ð Øˆuà„|�EœM­5¬>½5¼=ÐIÐIÐIØˆuå"3Ñ"5Ô"5ÑÐ˜˜1˜aàð Ý�ŠÐBÑCÔCÐCØˆuåÔÑÔð 0Ø/�ŒÔåŒ;Ôð Ý�ŠÐBÑCÔCÐCØˆuà�Vœ[Ô/Ò/Ð/Ý�ŠÐ0Ñ1Ô1Ð1Øˆuàˆ4r+   c                ó    — ddl m} t          d¦  «        o9t          | ¦  «        o*|j        j                             ||z  |z  d¬¦  «        dk    S )Nr,   r  ÚCKrx   rH  r   )r'  r   r6  rt  r#  r$  rL  )r+  rO  rÈ  r*  r   s        r)   Úuse_ck_gemm_templaterw    se   € ØÐÐÐÐÐõ 	˜dÑ#Ô#ð 	CÝ˜FÑ#Ô#ð	CàŒGÔ×&Ò& q¨1¡u¨q¡y¸2Ð&Ñ>Ô>ÀÒBðr+   c                ó>   — t          d¦  «        ot          | ¦  «        S )Nrv  )r;  rt  ©r+  s    r)   Úuse_ck_conv_templaterz     s   € Ý% dÑ+Ô+ÐGµÀÑ0GÔ0GÐGr+   c                ó>   — t          ¦   «         o| j        j        dk    S rX  )r'  rs   r¿   ry  s    r)   Ú_use_template_for_cpur|  $  s   € ÝÑÔÐ= &¤-Ô"4¸Ò"=Ð=r+   c                óZ   — t          | ||d¬¦  «        o|j                             ¦   «         S )NF)Úrequire_constant_mat2)Úuse_cpp_gemm_templater+  Úis_contiguous)r+  Úmat1Úmat2s      r)   Úuse_cpp_bmm_templaterƒ  (  s1   € å˜f d¨DÈÐNÑNÔNð 	(ØŒK×%Ò%Ñ'Ô'ðr+   c                óB  — ddl m} ddlm} ddlm} ddlm} t          | ¦  «        rt          d¦  «        sdS t          j        j        sdS |                     ¦   «         t          j        k    }	t          j        t          j        t          j        t          j        g}
 ||||	r| j        nd |¬¦  «        \  }}}} }}t)          ||f¦  «        rdS t+          ||j        ¦  «        r|                     ¦   «         } ||                     ¦   «         ¦  «        \  }} |d	||||                     ¦   «         |                     ¦   «         |t1          ¦   «         ¬
¦  «        }d„ }| j        |
v o:|d uo6 ||¦  «        o+t+          ||j        ¦  «        o|                     ¦   «         p| S )Nr,   r©  )Úcreate_micro_gemm)Ú*get_gemm_template_output_and_compute_dtype)Úmm_argsÚCPPF)Ú	out_dtypeÚmat2_transposedÚ
micro_gemm)Úinput_dtypeÚinput2_dtypeÚoutput_dtypeÚnum_threadsc                óf   — |                       ¦   «          |                      ¦   «         d         dk    S )Nrx   r,   )Úfreeze_layoutÚ
get_stride©r(   s    r)   Úis_last_dim_stride1z2use_cpp_gemm_template.<locals>.is_last_dim_stride1X  s*   € Ø	�ŠÑÔÐØ�|Š|‰~Œ~˜bÔ! QÒ&Ð&r+   )r­  rª  Úcodegen.cpp_micro_gemmr…  Úcodegen.cpp_utilsr†  Úkernel.mm_commonr‡  r|  r6  rB   ÚcppÚweight_prepackÚ	get_dtyper$   r  rû   rù   Úhalfrr   Úhas_free_symbolsrP   ÚBaseViewÚunwrap_viewÚparallel_num_threadsrò  Úis_module_buffer)r+  r�  r‚  rŠ  r~  rª  r…  r†  r‡  Ú	int8_gemmrE  rO  rÈ  r*  rŽ  r¡   r‹  r”  s                     r)   r  r  /  s	  € ð ÐÐÐÐÐØ9Ð9Ð9Ð9Ð9Ð9ØMÐMÐMÐMÐMÐMØ)Ð)Ð)Ð)Ð)Ð)å  Ñ(Ô(ð Õ0EÀeÑ0LÔ0Lð ØˆuåŒ:Ô$ð Øˆuà—’Ñ Ô ¥E¤KÒ/€IÝ”]¥E¤NµE´JÅÄÐL€MØ") 'ØØØ"+Ð5�&”,�,°Ø'ð	#ñ #ô #Ñ€A€qˆ!ˆV�T˜4õ ˜˜A˜ÑÔð ØˆuÝ�$˜œÑ$Ô$ð "Ø×ÒÑ!Ô!ˆà@Ð@ÀÇÂÑAQÔAQÑRÔR�O€L�!Ø"Ð"ØØ	Ø	Ø	Ø—N’NÑ$Ô$Ø—^’^Ñ%Ô%Ø!Ý(Ñ*Ô*ð	ñ 	ô 	€Jð'ð 'ð 'ð
 	Œ˜Ð%ð 	CØ˜dÐ"ð	CàÐ Ñ%Ô%ð	Cõ �t˜Rœ]Ñ+Ô+ð	Cð ×"Ò"Ñ$Ô$ÐAÐ,AÐ(Aðr+   c                 ó>   — t          ¦   «          pt          d¦  «        S )NÚATEN)r'  r6  r"   r+   r)   Úuse_aten_gemm_kernelsr¤  e  s   € ÝÑ!Ô!Ð!ÐBÕ%:¸6Ñ%BÔ%BÐBr+   c                  óN   — e Zd ZU  ej        d¦  «        Zded<   d
d„Zd„ Zd„ Z	d	S )ÚDebugDirManagerr   rµ   Úprev_debug_namer]   rV  c                óB   — t          t          j        ¦  «        | _        d S r`   )rW  r¦  ÚcounterrÞ   r�  s    r)   r©  zDebugDirManager.__init__m  s   € Ý•Ô.Ñ/Ô/ˆŒˆˆr+   c                óž   — t           j        j        j        | _        | j        › d| j        › �| _        | j        t           j        j        _        d S )NÚ_tmp_)r$   Ú_dynamorB   Údebug_dir_rootr§  rÞ   Únew_namer�  s    r)   Ú	__enter__zDebugDirManager.__enter__p  sA   € Ý$œ}Ô3ÔBˆÔØÔ/Ð?Ð?°d´gÐ?Ð?ˆŒØ.2¬m�ŒÔÔ+Ð+Ð+r+   c                ón   — t          j        | j        ¦  «         | j        t          j        j        _        d S r`   )rw  rx  r®  r§  r$   r¬  rB   r­  )r‘  rW   s     r)   Ú__exit__zDebugDirManager.__exit__u  s*   € ÝŒ�d”mÑ$Ô$Ð$Ø.2Ô.B�ŒÔÔ+Ð+Ð+r+   Nr˜  )
re   rf   rg   rú  r®  r©  r¡  r©  r¯  r±  r"   r+   r)   r¦  r¦  i  sj   € € € € € € ØˆiŒo˜aÑ Ô €GØÐÐÑð0ð 0ð 0ð 0ð<ð <ð <ð
Cð Cð Cð Cð Cr+   r¦  úTuple[Any, List[str]]c                óæ   ‡— ddl m} g Šdˆfd„}t          j                             |d|¦  «        5  t
          j                             ¦   «           | |i |¤Ž}d d d ¦  «         n# 1 swxY w Y   |‰fS )Nr,   ©ÚGraphLoweringÚcoderµ   c                ó2   •— ‰                      | ¦  «         d S r`   ©rG  ©r¶  Úsource_codess    €r)   Úsave_output_codez*run_and_get_code.<locals>.save_output_code  ó   ø€ Ø×Ò˜DÑ!Ô!Ð!Ð!Ð!r+   r»  ©r¶  rµ   ©r#  rµ  r   rr  rò  r$   r¬  Úreset)rn   rW   rR  rµ  r»  rb  rº  s         @r)   Úrun_and_get_coderÀ  z  sà   ø€ Ø$Ð$Ð$Ð$Ð$Ð$à €Lð"ð "ð "ð "ð "ð "õ 
Œ×	Ò	˜=Ð*<Ð>NÑ	OÔ	Oð %ð %ÝŒ×ÒÑÔÐØ��TÐ$˜VÐ$Ð$ˆð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð �<ÐÐs   ±'A$Á$A(Á+A(c                ó,   ‡ — ˆ fd„}t          |¦  «        S )Nc                 óh   •—  ‰¦   «         } |                       ¦   «                              ¦   «          | S r`   )r›   Úbackward)rb  rn   s    €r)   Úrun_with_backwardz1run_fw_bw_and_get_code.<locals>.run_with_backward‰  s-   ø€ Ø�‘”ˆØ�
Š
‰Œ×ÒÑÔÐØˆr+   )rÀ  )rn   rÄ  s   ` r)   Úrun_fw_bw_and_get_coderÅ  ˆ  s-   ø€ ðð ð ð ð õ
 Ð-Ñ.Ô.Ð.r+   c                ób  ‡‡— ddl m} g Šdˆfd„Šdˆfd„}t          j                             |d	|¦  «        5  t          j                             |d
‰¦  «        5  t
          j                             ¦   «           | |i |¤Ž}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ‰S )zLGet the inductor-generated code, but skip any actual compilation or running.r,   r´  r¶  rµ   c                ó2   •— ‰                      | ¦  «         d S r`   r¸  r¹  s    €r)   r»  z"get_code.<locals>.save_output_code—  r¼  r+   r‘  rµ  c                ó¬   •—  G d„ d¦  «        }| j         r|                      ¦   «         n|                      ¦   «         \  }} ‰|¦  «          |¦   «         S )Nc                  ó    — e Zd ZdZdd„Zd„ ZdS )ú@get_code.<locals>.patched_compile_to_module.<locals>.DummyModulez4This is empty to replace the generated triton moduler]   rV  c                ó   — d S r`   r"   r�  s    r)   r©  zIget_code.<locals>.patched_compile_to_module.<locals>.DummyModule.__init__ž  s   € Ø�r+   c                ó   — d S r`   r"   r–  s      r)   ÚcallzEget_code.<locals>.patched_compile_to_module.<locals>.DummyModule.call¡  s   € à�r+   Nr˜  )re   rf   rg   rh   r©  rÍ  r"   r+   r)   ÚDummyModulerÊ  ›  s=   € € € € € ØFÐFðð ð ð ðð ð ð ð r+   rÎ  )Úcpp_wrapperÚcodegen_with_cpp_wrapperÚcodegen)r‘  rÎ  r¶  r¡   r»  s       €r)   Úpatched_compile_to_modulez+get_code.<locals>.patched_compile_to_moduleš  sy   ø€ ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 04Ô/?ÐSˆD×)Ò)Ñ+Ô+Ð+ÀTÇ\Â\Á^Ä^ñ 	ˆˆað
 	Ð˜ÑÔÐàˆ{‰}Œ}Ðr+   Úcompile_to_moduler»  Nr½  )r‘  rµ  r¾  )rn   rW   rR  rµ  rÒ  r¡   r»  rº  s         @@r)   Úget_coderÔ  ‘  sr  øø€ à$Ð$Ð$Ð$Ð$Ð$à €Lð"ð "ð "ð "ð "ð "ðð ð ð ð ð õ( 
Œ×	Ò	ØÐ*Ð,Eñ
ô 
ð  ð  å„z×Ò˜Ð(:Ð<LÑMÔMð ð  õ 	Œ×ÒÑÔÐàˆB�Ð˜ÐÐˆð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð Ðs5   ¸"B$Á'BÂB$ÂB	ÂB$ÂB	ÂB$Â$B(Â+B(c                óž   — t          | g|¢R i |¤Ž}dt          |¦  «        cxk    rdk    sn J dt          |¦  «        › �¦   «         ‚|d         S ©Nr,   é   z%expected one or two code outputs got r   )rÔ  r.   )rn   rW   rR  rº  s       r)   Úget_triton_coderØ  ¸  ss   € Ý˜BÐ0 Ð0Ð0Ð0¨Ð0Ð0€Lð 	
�S�ÑÔÐ#Ð#Ò#Ð# !Ò#Ð#Ð#Ð#Ð#ØB­s°<Ñ/@Ô/@ÐBÐBñ 	$Ô#Ð#à˜Œ?Ðr+   c                ó¤   — t          | g|¢R i |¤Ž\  }}dt          |¦  «        cxk    rdk    sn J dt          |¦  «        › �¦   «         ‚|d         S rÖ  )rÀ  r.   )rn   rW   rR  r¡   rº  s        r)   Úrun_and_get_triton_coderÚ  Á  sw   € Ý& rÐ;¨DÐ;Ð;Ð;°FÐ;Ð;�O€A€|ð 	
�S�ÑÔÐ#Ð#Ò#Ð# !Ò#Ð#Ð#Ð#Ð#ØB­s°<Ñ/@Ô/@ÐBÐBñ 	$Ô#Ð#à˜Œ?Ðr+   c                óÊ   ‡‡‡— ddl mŠ ddlm} |j        Šg Šˆˆˆfd„}t
          j                             |d|¦  «        5   | |i |¤Ž}d d d ¦  «         n# 1 swxY w Y   |‰fS )Nr   r´  )ÚCompiledFxGraphc                 óv   •—  ‰| i |¤Ž | d         }t          |‰¦  «        sJ ‚‰                     |¦  «         d S )Nr×  )rP   rG  )rW   rR  r#  rµ  Úgraph_loweringsÚ	real_inits      €€€r)   Ú	fake_initz-run_and_get_graph_lowering.<locals>.fake_initÑ  sQ   ø€ Øˆ	�4Ð"˜6Ð"Ð"Ð"Ø�Q”ˆÝ˜% Ñ/Ô/Ð/Ð/Ð/Ø×Ò˜uÑ%Ô%Ð%Ð%Ð%r+   r©  )Útorch._inductor.graphrµ  Útorch._inductor.output_coderÜ  r©  r   rr  rò  )	rn   rW   rR  rÜ  rà  rb  rµ  rÞ  rß  s	         @@@r)   Úrun_and_get_graph_loweringrã  Ê  së   øøø€ Ø3Ð3Ð3Ð3Ð3Ð3Ø;Ð;Ð;Ð;Ð;Ð;àÔ(€IØ€Oð&ð &ð &ð &ð &ð &ð &õ 
Œ×	Ò	˜?¨J¸	Ñ	BÔ	Bð %ð %Ø��TÐ$˜VÐ$Ð$ˆð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð �?Ð"Ð"s   Á	AÁAÁAc              #  ó¦   K  — ddl m} |j        |          }	 t          j        ||¦  «        |j        | <   dV — ||j        | <   dS # ||j        | <   w xY w)z
    Override the lowering of aten_op with override_fn.
    The first argument of override_fn is the original lowering fn.
    r   )ÚloweringN)Útorch._inductorrå  Ú	loweringsrÈ   Úpartial)Úaten_opÚoverride_fnrå  Úorig_fns       r)   Úoverride_loweringrì  Ý  s{   è è € ð )Ð(Ð(Ð(Ð(Ð(àÔ  Ô)€Gð.Ý&/Ô&7¸ÀWÑ&MÔ&MˆÔ˜7Ñ#Øˆˆˆà&-ˆÔ˜7Ñ#Ð#Ð#ø gˆÔ˜7Ñ#Ð-Ð-Ð-Ð-s   —!A ÁAc                ó|   ‡ ‡‡— ddl m} |j        Šˆˆˆ fd„}t          j        j                             |d|¦  «        S )zr
    Add hook functions to be called at the beginning and end of Scheduler.__init__.
    Used for unit tests.
    r   )Ú	Schedulerc                óT   •—  ‰| |¦  «          ‰| |¦  «        }‰r ‰| |¦  «         |S r`   r"   )Ú	schedulerrÔ  Úoutrë  Úpost_fnÚpre_fns      €€€r)   r¦  z(add_scheduler_init_hook.<locals>.wrapperö  sE   ø€ Øˆˆy˜%Ñ Ô Ð Øˆg�i Ñ'Ô'ˆØð 	&ØˆG�I˜uÑ%Ô%Ð%Øˆ
r+   r©  )Útorch._inductor.schedulerrî  r©  Úunittestr   rr  rò  )ró  rò  rî  r¦  rë  s   ``  @r)   Úadd_scheduler_init_hookrö  í  sc   øøø€ ð
 4Ð3Ð3Ð3Ð3Ð3àÔ €Gðð ð ð ð ð ð õ Œ=Ô×%Ò% i°¸WÑEÔEÐEr+   c                óŠ   — t           j        rt                               | ¦  «         dS t                               | ¦  «         dS )z·
    Warnings that will be actionable for PyTorch developers, but not
    end users.  Allows us to easily disable them in stable releases but
    keep them on for nightly builds.
    N)rB   Údeveloper_warningsr“   r{  Úinfo)Úmsgs    r)   Údeveloper_warningrû     s:   € õ Ô ð Ý�Š�CÑÔÐÐÐå�Š�‰Œˆˆˆr+   c                 óÖ  — 	 t           j                             d¦  «        } | dz   t          t           j        ¦  «        k     rZt          t           j        | dz            ¦  «        dk    r4t           j        | dz            d         dk    rt           j        | dz            S n# t          $ r Y nw xY wt           j        D ]0}|                     d¦  «        r|t          d¦  «        d…         c S Œ1dS )a  
    An experimental API used only when config.benchmark_kernel is true.

    The benchmark name is only available at codegen time. So we can not
    directly call it in benchmark_all_kernels which is run after codegen.

    The function assumes the argument after --only is the benchmark name.
    It works for torchbench.py/hugginface.py/timm_models.py. But for ad-hoc
    scripts, this function may return None.

    There are 2 flavors of --only argument we need handle:
    1. --only model_name
    2. --only=model_name
    z--onlyr,   r   ú-z--only=N)r÷  Úargvr½   r.   Ú
ValueErrorÚ
startswith)rß  rF  s     r)   Úget_benchmark_namer    sï   € ð	ÝŒh�nŠn˜XÑ&Ô&ˆà�!‰G•c�#œ(‘m”mÒ#Ð#Ý•C”H˜S 1™WÔ%Ñ&Ô&¨Ò*Ð*Ý”˜˜q™Ô! !Ô$¨Ò+Ð+å”8˜C !™GÔ$Ð$øøÝð ð ð Øˆðøøøõ Œxð )ð )ˆØ�>Š>˜)Ñ$Ô$ð 	)Ø•s˜9‘~”~Ð'Ð'Ô(Ð(Ð(Ð(ð	)ð)ð )s   ‚BB Â
B)Â(B)c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó"   K  — | ]
}|d k    V — ŒdS ©r,   Nr"   r&   s     r)   r‡   zis_ones.<locals>.<genexpr>,  ó&   è è € Ð%Ð%˜!ˆq�AŠvÐ%Ð%Ð%Ð%Ð%Ð%r+   ©rT   ©rØ  s    r)   Úis_onesr  +  ó   € ÝÐ%Ð%˜uÐ%Ñ%Ô%Ñ%Ô%Ð%r+   c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó"   K  — | ]
}|d k    V — ŒdS )r   Nr"   r&   s     r)   r‡   zis_zeros.<locals>.<genexpr>0  r  r+   r  r  s    r)   Úis_zerosr  /  r	  r+   c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó„   K  — | ];}t          |t          j        ¦  «        ¯|j        t          j        d ¦  «        k    V — Œ<dS )r»   N)rP   r$   rL  rs   )r'   Úitems     r)   r‡   z is_cpu_device.<locals>.<genexpr>4  sY   è è € ð ð àÝ�d�EœLÑ)Ô)ðØŒ•u”| EÑ*Ô*Ò*ðð ð ð ð ð r+   r  )Úinputss    r)   Úis_cpu_devicer  3  s0   € Ýð ð àðñ ô ñ ô ð r+   rø  útorch.dtypec                óˆ   — t          | t          j        ¦  «        s
J d¦   «         ‚| j        rt          j        S t          j        S )Nz8only support sympy.Expr as input to get_sympy_Expr_dtype)rP   rQ   rç   rj   r$   r  rý   )rø  s    r)   Úget_sympy_Expr_dtyper  ;  sR   € ÝØ�UŒZñô ð Bð BàAñBô Bð ð „~ð ÝŒ{ÐåŒ}Ðr+   c              /  ó€   K  — | r5t          j        j        |i |¤Ž5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S d V — d S r`   )r$   r�   r‘   )Úshould_profilerW   rR  r¥   s       r)   Úmaybe_profiler  E  sŸ   è è € àð ÝŒ^Ô# TÐ4¨VÐ4Ð4ð 	¸ØˆGˆGˆGð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆˆˆˆˆs   ›-­1´1c                 óZ   — t           j        j        } | dk     rt          j        ¦   «         } | S )Nr,   )rB   r˜  Úthreadsr$   Úget_num_threads)r  s    r)   rŸ  rŸ  N  s(   € ÝŒjÔ €GØ�‚{€{ÝÔ'Ñ)Ô)ˆØ€Nr+   c                 ót   — ddl m}   | ¦   «         }|                     dt          j        j        rdnd¦  «        S )Nr,   )Úget_backend_optionsÚ
num_stagesr×  é   )Úruntime.triton_helpersr  rS  r$   r  r  )r  Úoptionss     r)   Úget_backend_num_stagesr!  U  sD   € à;Ð;Ð;Ð;Ð;Ð;à!Ð!Ñ#Ô#€GØ�;Š;�|­%¬-Ô*;Ð%B Q QÀÑCÔCÐCr+   c                ó†  — ddl m}m} | t          j        t          j        t          j        fv sJ ‚t          j        |¦  «        j	         
                    d¦  «        r}ddlm}  |¦   «         }| t          j        t          j        fv r || |¦  «        S t          j        j        j        j        r |t          j        |¦  «        S  |t          j        |¦  «        S | t          j        t          j        fv r || ¦  «        S t          j        j        j        j        r |t          j        ¦  «        S  |t          j        ¦  «        S )Nr   )Úget_max_simd_tflopsÚget_max_tensorcore_tflopsÚ
clock_rate)Úmax_clock_rate)Útriton.testingr#  r$  r$   r÷   rù   rû   ÚinspectÚ	signatureÚ
parametersrS  Útorch._utils_internalr&  Úbackendsr   ÚmatmulÚ
allow_tf32)rr   r#  r$  r&  Úsm_clocks        r)   Úget_device_tflopsr0  ]  s?  € àMÐMÐMÐMÐMÐMÐMÐMà•U”]¥E¤NµE´MÐBÐBÐBÐBÐBåÔÐ,Ñ-Ô-Ô8×<Ò<¸\ÑJÔJð 6à8Ð8Ð8Ð8Ð8Ð8à!�>Ñ#Ô#ˆØ•U”]¥E¤NÐ3Ð3Ð3Ø,Ð,¨U°HÑ=Ô=Ð=åŒ>ÔÔ%Ô0ð 	@Ø,Ð,­U¬]¸HÑEÔEÐEà&Ð&¥u¤}°hÑ?Ô?Ð?à•U”]¥E¤NÐ3Ð3Ð3Ø,Ð,¨UÑ3Ô3Ð3åŒ>ÔÔ%Ô0ð 	6Ø,Ð,­U¬]Ñ;Ô;Ð;à&Ð&¥u¤}Ñ5Ô5Ð5r+   c                 ó"   — ddl m}   | ¦   «         S )Nr   ©Úget_dram_gbps)r'  r3  r2  s    r)   Úget_gpu_dram_gbpsr4  y  s    € à,Ð,Ð,Ð,Ð,Ð,àˆ=‰?Œ?Ðr+   c                 ót   — ddl m}  | j        j                             d¦  «                             dd¦  «        S )Nr   ©ÚdriverÚmax_shared_mem)Útriton.runtimer7  ÚactiveÚutilsrS  rS  r6  s    r)   Úget_gpu_shared_memoryr<  €  s>   € Ø%Ð%Ð%Ð%Ð%Ð%àŒ=Ô×4Ò4°QÑ7Ô7×;Ò;Ð<LÈaÑPÔPÐPr+   Úreduction_typec                ó,   — |                       d¦  «        S )NÚwelford)r   ©r=  s    r)   Úis_welford_reductionrA  †  s   € Ø×$Ò$ YÑ/Ô/Ð/r+   c                ó(   — t          | ¦  «        rdndS )Nr  r,   )rA  r@  s    r)   Úreduction_num_outputsrC  Š  s   € Ý$ ^Ñ4Ô4Ð;ˆ1ˆ1¸!Ð;r+   c                 ó0   — t          j        ¦   «         dk    S )NÚLinux)ÚplatformÚsystemr"   r+   r)   Úis_linuxrH  Ž  s   € ÝŒ?ÑÔ Ò'Ð'r+   c                 ó"   — t           j        dk    S )NrD   )r÷  rF  r"   r+   r)   Ú
is_windowsrJ  ’  s   € ÝŒ<˜7Ò"Ð"r+   ÚitrúIterable[Any]c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  óZ   K  — | ]&}t          |t          j        ¦  «        o|j         V — Œ'd S r`   )rP   rQ   rç   Ú	is_numberr&   s     r)   r‡   z#has_free_symbols.<locals>.<genexpr>—  s7   è è € ÐJÐJÀ�z˜!�UœZÑ(Ô(Ð<°´¨_ÐJÐJÐJÐJÐJÐJr+   r6  )rK  s    r)   rœ  rœ  –  s   € ÝÐJÐJÀcÐJÑJÔJÑJÔJÐJr+   c            	     ót  — ddl m} | D ]®}t          ||j        |j        |j        |j        |j        f¦  «        rJt          | 	                    ¦   «         pd¦  «        s#t          | 
                    ¦   «         pd¦  «        r dS Œzt          ||j        ¦  «        sŒ�t          dt          |¦  «        › �¦  «        ‚dS )Nr,   r©  r"   Tzunexpected type for is_dynamic F)r­  rª  rP   rð  rò  r�  ÚComputedBufferÚBufferrœ  Úmaybe_get_sizeÚmaybe_get_strideró  Ú	TypeErrorr¿   )rW   rª  Úts      r)   Ú
is_dynamicrW  š  sæ   € ØÐÐÐÐÐàð Ið IˆÝØ�”˜bœm¨R¬[¸"Ô:KÈRÌYÐWñ
ô 
ð 
	Iõ   × 0Ò 0Ñ 2Ô 2Ð 8°bÑ9Ô9ð Õ=MØ×"Ò"Ñ$Ô$Ð*¨ñ>ô >ð ð �t�tðõ ˜A˜rœyÑ)Ô)ð 	IØåÐG½dÀ1¹g¼gÐGÐGÑHÔHÐHàˆ5r+   c                  ó   — e Zd ZdZdZdS )ÚPlaceholderÚKERNEL_NAMEÚDESCRIPTIVE_NAMEN)re   rf   rg   rZ  r[  r"   r+   r)   rY  rY  ®  s   € € € € € ð  €Kð *ÐÐÐr+   rY  c                óœ  — ddl m} t          j        ddd¬¦  «        5 }t	          j        ¦   «         }t	          j        ¦   «         } t          |t          |¦  «        ¬¦  «        j        |Ž  t          d|j
        › �|¬	¦  «         t          |j
        |¬	¦  «         t          j        ¦   «         }t          ||¦  «        5   | |j
        ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        ¦   «         |z
  }	 ||j
        ¦  «         |j
                             ¦   «          |                     ¦   «          t          d
|j
        › �|¬	¦  «         t          |j
        |¬	¦  «         |                     ¦   «         |                     ¦   «         k    }
t"                               d||j        |
|	¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr,   )Ústable_topological_sortÚwzutf-8F)ÚmodeÚencodingr}  )rT  Ú	fake_modezBefore:
)ÚfilezAfter:
zZ%s, save before/after graph to %s, graph before/after are the same = %s, time elapsed = %s)Úpattern_matcherr]  rp  ÚNamedTemporaryFileÚior   r8   r4   Ú	propagaterj  r#  r   Únowr7   ÚlintÚ	recompiler¯  r“   rù  r~   )r  rT  Úinprú  r]  rn  Ú	before_ioÚafter_ioÚ
start_timeÚtime_elapsedrV  s              r)   Úpass_execution_and_savero  ¸  sB  € Ø8Ð8Ð8Ð8Ð8Ð8å	Ô	$ØØØð
ñ 
ô 
ð 
ð 
Ý”K‘M”Mˆ	Ý”;‘=”=ˆØC�	�RÕ#3°CÑ#8Ô#8Ð9Ñ9Ô9ÔCÀSÐIÐIÝÐ$˜"œ(Ð$Ð$¨1Ð-Ñ-Ô-Ð-ÝˆbŒh˜YÐ'Ñ'Ô'Ð'Ý”\‘^”^ˆ
Ý# B¨Ñ,Ô,ð 	ð 	ØˆD�”‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	å”|‘~”~¨
Ñ2ˆàÐ ¤Ñ)Ô)Ð)Ø
Œ�Š‰ŒˆØ
�Š‰ŒˆåÐ#˜œÐ#Ð#¨!Ð,Ñ,Ô,Ð,ÝˆbŒh˜XÐ&Ñ&Ô&Ð&Ø×ÒÑ Ô  H×$5Ò$5Ñ$7Ô$7Ò7ˆÝ�ŠØhØØŒFØØñ	
ô 	
ð 	
ð-
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s7   žBGÂ=CÃGÃC	ÃGÃ!C	Ã"CGÇGÇGc                ó  — ddl m} t          | ¦  «        |j        k    o|d u p| j        |u pàt          | ¦  «        |j        k    oÈt          t          j        j	        d¦  «        o#| j        t          j        j	        j
        j        k    p…t          t          j        j	        d¦  «        o#| j        t          j        j	        j        j        k    pBt          t          j        j	        d¦  «        o#| j        t          j        j	        j        j        k    S )Nr,   r©  Úall_to_all_singleÚall_gather_into_tensorÚreduce_scatter_tensor)r­  rª  r¿   Ú_CollectiveKernelÚop_overloadÚFallbackKernelr²   r$   r³   Útorchrecrq  Údefaultrr  rs  ©rS  r)  rª  s      r)   Úis_collectiverz  Ú  s  € ØÐÐÐÐÐõ 	ˆT‰
Œ
�bÔ*Ò*ÐU°°d°
Ð0T¸dÔ>NÐRTÐ>Tðõ 	ˆT‰
Œ
�bÔ'Ò'ð 	
õ
 �œ	Ô*Ð,?Ñ@Ô@ð UØÔ$­¬	Ô(:Ô(LÔ(TÒTðõ
 �œ	Ô*Ð,DÑEÔEð EØÔ$Ý”9Ô%Ô<ÔDòEðõ �œ	Ô*Ð,CÑDÔDð YØÔ$­¬	Ô(:Ô(PÔ(XÒXð+r+   c                ó>   — ddl m} t          | ¦  «        |j        k    S ©Nr,   r©  )r­  rª  r¿   Ú_WaitKernel)rS  rª  s     r)   Úis_waitr~  ø  s'   € ØÐÐÐÐÐå�‰:Œ:˜œÒ'Ð'r+   c                óº   — ddl m}m} t          | |¦  «        sJ ‚t          | |¦  «        rt	          d„ | j        D ¦   «         ¦  «        S t          | j        ¦  «        S )Nr   ©ÚBaseSchedulerNodeÚGroupedSchedulerNodec              3  ó4   K  — | ]}t          |¦  «        V — Œd S r`   )Úcontains_collectiver&   s     r)   r‡   z&contains_collective.<locals>.<genexpr>  s+   è è € Ð@Ð@¨aÕ& qÑ)Ô)Ð@Ð@Ð@Ð@Ð@Ð@r+   )rô  r�  r‚  rP   r1  Úsnodesrz  rS  ©Úsnoder�  r‚  s      r)   r„  r„  þ  ss   € ØQÐQÐQÐQÐQÐQÐQÐQå�eÐ.Ñ/Ô/Ð/Ð/Ð/Ý�%Ð-Ñ.Ô.ð )ÝÐ@Ð@°5´<Ð@Ñ@Ô@Ñ@Ô@Ð@å˜UœZÑ(Ô(Ð(r+   c                óº   — ddl m}m} t          | |¦  «        sJ ‚t          | |¦  «        rt	          d„ | j        D ¦   «         ¦  «        S t          | j        ¦  «        S )Nr   r€  c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r`   )Úcontains_waitr&   s     r)   r‡   z contains_wait.<locals>.<genexpr>  s*   è è € Ð:Ð:¨•= Ñ#Ô#Ð:Ð:Ð:Ð:Ð:Ð:r+   )rô  r�  r‚  rP   r1  r…  r~  rS  r†  s      r)   rŠ  rŠ    ss   € ØQÐQÐQÐQÐQÐQÐQÐQå�eÐ.Ñ/Ô/Ð/Ð/Ð/Ý�%Ð-Ñ.Ô.ð #ÝÐ:Ð:¨U¬\Ð:Ñ:Ô:Ñ:Ô:Ð:å�u”zÑ"Ô"Ð"r+   c                óŽ   — ddl m} t          |t          j        j        ¦  «        r|h}t          | |j        ¦  «        o| j        |v S r|  )r­  rª  rP   r$   r/  r0  rv  ru  ry  s      r)   Úis_fallback_oprŒ    sR   € ØÐÐÐÐÐå�"•e”jÔ+Ñ,Ô,ð ØˆTˆÝ�d˜BÔ-Ñ.Ô.ÐI°4Ô3CÀrÐ3IÐIr+   c                óL   — |||          j                              ¦   «                  S r`   )Údefining_opr„  )Úbuf_nameÚname_to_bufÚname_to_fused_nodes      r)   Úbuf_name_to_fused_snoder’    s!   € Ø˜k¨(Ô3Ô?×HÒHÑJÔJÔKÐKr+   c                óÀ   — |r || ¦  «        rd S |                      | ¦  «         | j        D ]1}t          |j        ||¦  «        }||v rŒt	          |||||¬¦  «         Œ2d S )N©Úcriteria_cb)ré  Úunmet_dependenciesr’  r~   Úfind_recursive_deps_of_node)r‡  Úcollected_node_setr�  r‘  r•  ÚdepÚdefining_op_for_deps          r)   r—  r—    s¨   € ð ð �{�{ 5Ñ)Ô)ð ØˆØ×Ò˜5Ñ!Ô!Ð!ØÔ'ð 
ð 
ˆÝ5ØŒH�kÐ#5ñ
ô 
Ðð Ð"4Ð4Ð4ØÝ#ØØØØØ#ð	
ñ 	
ô 	
ð 	
ð 	
ð
ð 
r+   c           	     ó†  — |r || ¦  «        rd S |                      | ¦  «         |                      ¦   «         D ]‡}|j        D ]}}|j        €J ‚|j                             ¦   «         dk    rŒ)|j                             ¦   «         |vrŒE||j                             ¦   «                  }||v rŒit          |||||¬¦  «         Œ~Œˆd S )NÚOUTPUTr”  )ré  Úget_outputsr?  rS  r„  Úfind_recursive_users_of_node)r‡  r˜  r�  r‘  r•  Úorì  Úuser_ops           r)   rž  rž  3  s
  € ð ð �{�{ 5Ñ)Ô)ð ØˆØ×Ò˜5Ñ!Ô!Ð!Ø×ÒÑ Ô ð ð ˆØ”Gð 	ð 	ˆDØ”9Ð(Ð(Ð(ØŒy×!Ò!Ñ#Ô# xÒ/Ð/ØØŒy×!Ò!Ñ#Ô#Ð+=Ð=Ð=ØØ(¨¬×);Ò);Ñ)=Ô)=Ô>ˆGØÐ,Ð,Ð,ØÝ(ØØ"ØØ"Ø'ðñ ô ð ð ð	ðð r+   Údynamo_gm_num_inputsÚaot_fw_gm_num_inputsc                ó¼   — t           j        j        j        rdnd}t           j        j        j        r%t           j        j                             ¦   «         sdS || z
  |z
  S )zaComputes the number of inputs to the aot fw graph which have fixed addresses (params and buffers)r×  r   )r$   Ú
_functorchrB   Úfunctionalize_rng_opsr¬  Úinline_inbuilt_nn_modulesr;  Úis_parameter_freezing)r¡  r¢  Únum_rng_seed_offset_inputss      r)   Únum_fw_fixed_argumentsr©  L  sb   € õ ÔÔ$Ô:ÐAˆˆÀð õ 	ŒÔÔ6ðå”Ô#×9Ò9Ñ;Ô;ðð ˆqàÐ"6Ñ6Ð9SÑSÐSr+   Úfx_gc                ó
  — d„ }d}g }| j         j        D ]2}|j        dk    r% ||¦  «        r|                     |¦  «         |dz  }Œ3|t	          t          t          |¦  «        ¦  «        ¦  «        k    sJ ‚t          |¦  «        S )z>
    Infers which inputs are static for a backwards graph
    c                ó8   — d| j         vod| j         vod| j         vS )NÚtangentsÚbwd_seedÚbwd_base_offsetr  r“  s    r)   Úis_saved_tensorz'count_tangents.<locals>.is_saved_tensorb  s/   € à˜aœfÐ$ð 0Ø !¤&Ð(ð0à!¨¬Ð/ð	
r+   r   rH  r,   )r#  rÔ  r)  rG  r  rŒ   r.   )rª  r°  Ú	arg_countÚstatic_arg_idxsrÈ  s        r)   Úcount_tangentsr³  ]  s¥   € ð

ð 
ð 
ð €IØ€OØŒZÔð ð ˆØŒ4�=Ò Ð Øˆ˜qÑ!Ô!ð 2Ø×&Ò& yÑ1Ô1Ð1Ø˜‰NˆIøà�d¥5­¨_Ñ)=Ô)=Ñ#>Ô#>Ñ?Ô?Ò?Ð?Ð?Ð?ÝˆÑÔÐr+   c                  ó6   — e Zd ZU ded<   d„ Zed„ ¦   «         ZdS )Ú	BoxedBoolrª   r\   c                ó   — | j         S r`   )r\   r�  s    r)   r¼  zBoxedBool.__bool__y  s
   € ØŒzÐr+   c                óB   — t          | t          ¦  «        r	d| _        | S dS ©NF)rP   rµ  r\   ra  s    r)   ÚdisablezBoxedBool.disable|  s%   € å�c�9Ñ%Ô%ð 	ØˆCŒIØˆJØˆur+   N)re   rf   rg   r¡  r¼  r™  r¹  r"   r+   r)   rµ  rµ  u  sI   € € € € € € à€K€K�Kðð ð ð ðð ñ „\ðð ð r+   rµ  c              #  óº   ‡ ‡K  — ddl m} |j        Šˆ ˆfd„}t          j        j                             |d|¦  «        5  d V — d d d ¦  «         d S # 1 swxY w Y   d S )Nr,   )ÚPythonWrapperCodegenc                óL   •— ‰                      |¦  «          ‰| |||g|¢R i |¤ŽS r`   r¸  )r¦  r~   Úkernel_coderá  rW   rR  Úkernel_listÚorig_define_kernels         €€r)   Únew_define_kernelz2collect_defined_kernels.<locals>.new_define_kernelŠ  s?   ø€ à×Ò˜;Ñ'Ô'Ð'Ø!Ð! '¨4°¸hÐXÈÐXÐXÐXÐQWÐXÐXÐXr+   Údefine_kernel)Úcodegen.wrapperr»  rÁ  rõ  r   rr  rò  )r¾  r»  rÀ  r¿  s   `  @r)   Úcollect_defined_kernelsrÃ  „  sÛ   øøè è € à5Ð5Ð5Ð5Ð5Ð5à-Ô;ÐðYð Yð Yð Yð Yð Yõ
 
ŒÔ	×	#Ò	#Ø˜oÐ/@ñ
ô 
ð ð ð 	ˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ¾AÁAÁAc                ó   — | dz   S )NÚ__original__r"   r  s    r)   Ú get_cloned_parameter_buffer_namerÆ  •  s   € Ø�.Ñ Ð r+   rÿ  c                óV   — t          | t          ¦  «        s| �
J | ¦   «         ‚| t          v S r`   )rP   rµ   r-   rU  s    r)   Úis_gpurÈ  ™  s,   € Ý�f�cÑ"Ô"Ð< f n n°f¡n¤nÐ4Ø•YÐÐr+   c                óN   — t          | t          ¦  «        sJ ‚t          | ¦  «        S r`   )rP   rµ   rÈ  rU  s    r)   Údevice_need_guardrÊ  ž  s$   € Ý�f�cÑ"Ô"Ð"Ð"Ð"Ý�&‰>Œ>Ðr+   c                ó–   — t          j        ¦   «         r| t          j        k    rdS | t          j        t          j        t          j        hv S r¸  )rB   ro  r$   rù   r  rª   rš  s    r)   Ú,needs_fallback_due_to_atomic_add_limitationsrÌ  £  s?   € õ ÔÑÔð B˜e¥u¤~Ò5Ð5Øˆuà�œ¥e¤jµ%´.ÐAÐAÐAr+   ru  c                ó*  — | j         t          j        j        j        t          j        j        j        fv r|€dS | j         t          j        j        j        k    rdnd}|d |hvp³|ot          |¦  «        ot          |¦  «        p“| j         t          j        j        j        k    oA|dk    o;|o9|dk    o3t          j
        j        o"t          j
        j        pt          ¦   «         dk    p2||k    o|t          j        t          j        hv pt          j        ¦   «         S )NFré  r›   r»   r,   )Úoverloadpacketr$   r³   ÚatenÚscatter_reduce_Úscatter_reduceÚscatter_rÈ  rÌ  rB   r˜  Úfallback_scatter_reduce_sumÚdynamic_threadsrŸ  rª   r  rQ  )ru  r=  Ú
self_dtypeÚ	src_dtypeÚsrc_device_typeÚsrc_is_tensorÚ	reduce_tys          r)   Úuse_scatter_fallbackrÚ  ­  s=  € ð 	Ô"ÝŒIŒNÔ*­E¬I¬NÔ,IÐJð	Kð 	KàÐ"àˆuð Ô+­u¬y¬~Ô/FÒFÐFˆˆÈEð ð
 	˜t YÐ/Ð/ð 	8àð HÝ�Ñ'Ô'ðHå<¸YÑGÔGð		8ð Ô&­%¬)¬.Ô*HÒHð LØ %Ò'ðLàðLð   5Ò(ðLõ ”
Ô6ð	Lõ
 ”Ô+ÐJÕ/CÑ/EÔ/EÈÒ/Jð	8ð ˜iÒ'ÐS¨J½5¼:ÅuÄ{Ð:SÐ,Sð	8õ Ô5Ñ7Ô7ð!r+   c                óÆ  — ddl m}m} ddlm} t          dt          | ¦  «        › d�¦  «         t          | ¦  «        D �]!\  }}t          d|d›d�¦  «         ||u rt          d	¦  «         Œ.||u rt          d
¦  «         ŒBt          ||¦  «        r²| 	                    ¦   «         }t          |rdnd› d�¦  «         |r*|j
        €J ‚t          d|j
        j        j        › �¦  «         t          d¦  «         |j        j        D ]}t          |¦  «         Œt          d¦  «         |j        j        D ]}t          |¦  «         Œ�Œt!          dt#          |¦  «        › �¦  «        ‚dS )z�
    An API that can be used in pdb to dump a node_schedule.
    Right mainly dump the read/write dependencies but can add more as needed.
    r   )ÚDisableReductionÚEnableReduction)ÚSchedulerNodezNode schedule with z nodesrÏ  Ú3ri  zenable reductionzdisable reductionÚredÚpwz scheduler nodeNzoriginal reduction hint zReadDep:z	WriteDep:zUnrecognized node type: )Útorch._inductor.codegen.simdrÜ  rÝ  rô  rÞ  rj  r.   r™   rP   Úis_reductionrS  rñ  Úreduction_hintÚread_writesÚreadsÚwritesr˜   r¿   )r±  rÜ  rÝ  rÞ  rß  rS  Úis_redr™  s           r)   Údump_node_scheduleré  Ô  sÊ  € ð
 OÐNÐNÐNÐNÐNÐNÐNØ7Ð7Ð7Ð7Ð7Ð7å	Ð
:¥ MÑ 2Ô 2Ð
:Ð
:Ð
:Ñ;Ô;Ð;Ý˜}Ñ-Ô-ð Hñ H‰	ˆˆTÝˆl�#ˆlˆlˆlˆlÑÔÐØ�?Ð"Ð"ÝÐ$Ñ%Ô%Ð%Ð%ØÐ%Ð%Ð%ÝÐ%Ñ&Ô&Ð&Ð&Ý˜˜mÑ,Ô,ð 	HØ×&Ò&Ñ(Ô(ˆFÝ˜fÐ.�U�U¨$Ð?Ð?Ð?Ñ@Ô@Ð@Øð RØ”yÐ,Ð,Ð,ÝÐP°´´Ô1NÐPÐPÑQÔQÐQÝ�*ÑÔÐØÔ'Ô-ð ð �Ý�c‘
”
�
�
Ý�+ÑÔÐØÔ'Ô.ð ð �Ý�c‘
”
�
�
ñõ ÐF½$¸t¹*¼*ÐFÐFÑGÔGÐGð'Hð Hr+   r¾   útorch.Tensorc                óŠ   — ddl m}  ||                      ¦   «         t          | j        ¦  «        z  t
          z  dk    ¦  «        S )Nr   )Ústatically_known_true)rP  rì  Ústorage_offsetrœ  rr   ÚGPU_ALIGN_BYTES)r¾   rì  s     r)   Útensor_is_alignedrï  ó  sU   € ð LÐKÐKÐKÐKÐKà Ð Ø	×	Ò	Ñ	 Ô	 ¥>°&´,Ñ#?Ô#?Ñ	?Å?ÑRÐVWÒWñô ð r+   Úexample_inputc                ón   — t          | j        j        ¦  «        sdS t          j        pt          | ¦  «        S r¸  )rÈ  rs   r¿   rB   Úassume_aligned_inputsrï  )rð  s    r)   Úshould_assume_input_alignedró    s6   € õ �-Ô&Ô+Ñ,Ô,ð ØˆuÝÔ'ÐKÕ+<¸]Ñ+KÔ+KÐKr+   c                 óÜ   — t           j        j                             ¦   «         } | st	          j        ¦   «         S | j        j        }|st	          j        ¦   «         S |                     ¦   «         S r`   )	r$   Ú_guardsÚTracingContextÚtry_getrÏ  Únullcontextra  r%  Úsuppress_guards)Útracing_contextr%  s     r)   Ú#maybe_get_suppress_shape_guards_ctxrû  
  sg   € õ
 ”mÔ2×:Ò:Ñ<Ô<€OØð (ÝÔ%Ñ'Ô'Ð'ð  Ô)Ô3€IØð (ÝÔ%Ñ'Ô'Ð'à×$Ò$Ñ&Ô&Ð&r+   c                ó  — t           j        j                             t          dd¦  «        5  t
          j                             ¦   «          dd l}dd l	} |j
        ¦   «         } |j        |¦  «        }ddlm} |                     |¦  «         |j        }|                     |j        ¦  «          | |i |¤Ž}	|                     ¦   «         }
|                     |¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |	|
fS )Nr”   Tr   )Úoutput_code_log)rõ  r   rr  rò  rB   r$   r¬  r¿  re  Úloggingr   ÚStreamHandlerÚtorch._inductor.codecacherý  Ú
addHandlerÚlevelÚsetLevelÚDEBUGr¯  ÚremoveHandler)rn   rW   rR  re  rþ  Úlog_capture_stringÚchrý  Ú
prev_levelrb  r  s              r)   Úrun_and_get_cpp_coder	    sZ  € õ 
ŒÔ	×	#Ò	#¥F¨G°TÑ	:Ô	:ð *ð *ÝŒ×ÒÑÔÐØˆ	ˆ	ˆ	Øˆˆˆà(˜Rœ[™]œ]ÐØ"ˆWÔ"Ð#5Ñ6Ô6ˆØ=Ð=Ð=Ð=Ð=Ð=à×"Ò" 2Ñ&Ô&Ð&Ø$Ô*ˆ
Ø× Ò  ¤Ñ/Ô/Ð/Ø��TÐ$˜VÐ$Ð$ˆØ×'Ò'Ñ)Ô)ˆØ× Ò  Ñ,Ô,Ð,Ø×%Ò% bÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð  �1ˆ9Ðs   ¬CD Ä DÄDr  úSequence[InputType]c                ó”   — d }t          | ¦  «        }|�|j        S | D ]*}t          |t          j        ¦  «        r|j        j        c S Œ+d S r`   )r4   r%  rP   r$   r2  rS  )r  r%  ra  Úinputs       r)   Úshape_env_from_inputsr  2  sg   € Ø€IÝ  Ñ(Ô(€Ið ÐØÔ"Ð"ð ð (ð (ˆÝ�e�Uœ\Ñ*Ô*ð 	(Ø”:Ô'Ð'Ð'Ð'ð	(ð ˆ4r+   ú Callable[[List[InputType]], Any]Úinputs_to_checkúSequence[int]c                óB   ‡ ‡— t          ‰¦  «        dk    r‰ S dˆˆ fd„}|S )Nr   Ú
new_inputsúList[InputType]c                ó:   •— t          | ‰¦  «          ‰| ¦  «        S r`   )Úcopy_misaligned_inputs)r  r  rY  s    €€r)   Úrunz)align_inputs_from_check_idxs.<locals>.runN  s#   ø€ Ý˜z¨?Ñ;Ô;Ð;Øˆu�ZÑ Ô Ð r+   )r  r  )r.   )rY  r  r  s   `` r)   Úalign_inputs_from_check_idxsr  G  sH   øø€ õ ˆ?ÑÔ˜qÒ Ð Øˆð!ð !ð !ð !ð !ð !ð !ð €Jr+   c                ó–  — d|                       ¦   «         v rd}nNt          d„ t          |                       ¦   «         |                      ¦   «         ¦  «        D ¦   «         ¦  «        dz   }t	          j        | |fd¦  «                             ¦   «         }t	          j        ||                       ¦   «         |                      ¦   «         ¦  «        S )Nr   c              3  ó,   K  — | ]\  }}|d z
  |z  V — ŒdS r  r"   )r'   Úshaper3  s      r)   r‡   z)clone_preserve_strides.<locals>.<genexpr>[  s/   è è € ÐTÐT©¨°�˜‘˜fÑ$ÐTÐTÐTÐTÐTÐTr+   r,   r[   )r~  r›   rØ   r3  r$   Ú
as_stridedÚclone)r(   Úneeded_sizeÚbuffers      r)   Úclone_preserve_stridesr  U  s¤   € ØˆA�FŠF‰HŒH€}€}àˆˆõ ÐTÐT½#¸a¿fºf¹h¼hÈÏÊÉ
Ì
Ñ:SÔ:SÐTÑTÔTÑTÔTÐWXÑXð 	õ Ô˜a + °Ñ6Ô6×<Ò<Ñ>Ô>€FÝÔ˜F A§F¢F¡H¤H¨a¯hªh©j¬jÑ9Ô9Ð9r+   r  r  Úcheck_inputs_idxsc                ó´   — |D ]T}| |         }t          |t          j        ¦  «        sJ ‚|                     ¦   «         t          z  rt          |¦  «        | |<   ŒUd S r`   )rP   r$   rL  Údata_ptrÚ	ALIGNMENTr  )r  r   rƒ   Ú_inps       r)   r  r  a  se   € ð ð 9ð 9ˆØ˜!Œ}ˆÝ˜$¥¤Ñ-Ô-Ð-Ð-Ð-Ø�=Š=‰?Œ?�YÑ&ð 	9Ý2°4Ñ8Ô8ˆJ�q‰Møð	9ð 9r+   Ústatic_input_idxsc                ó  — g }|D ]Y}| |         }t          |t          j        ¦  «        r5|                     ¦   «         t          z  dk    r|                     |¦  «         ŒZt          |¦  «        t          |¦  «        k    r|S |S )z[
    We require all inputs to be aligned, so introduce a copy for any
    that aren't.
    r   )rP   r$   rL  r"  r#  rG  r.   )r  r%  Úaligned_static_input_idxsrß  r  s        r)   Úremove_unaligned_input_idxsr(  k  sŽ   € ð !#ÐØ ð 2ð 2ˆØ�s”ˆÝ�e�Uœ\Ñ*Ô*ð 	2°·²Ñ0@Ô0@Å9Ñ0LÐQRÒ/RÐ/RØ%×,Ò,¨SÑ1Ô1Ð1øÝ
Ð$Ñ%Ô%­Ð->Ñ)?Ô)?Ò?Ð?Ø(Ð(ØÐr+   r¶   c                ó   — ddl m} t          j        t          j        ¦  «        j        }|j        j        j        }|j        j        j	        j
        }|j        j                             | |k    ¦  «        rdS  || ¦  «        o || ¦  «        |k    S )Nr,   r  T)r'  r   r$   Úiinfor  r�   r#  r$  rL  r%  Úhas_hintÚis_expr_static_and_true)r¶   r   Úint_maxrL  r+  s        r)   Úexpr_fits_within_32bitr.  }  s‹   € ØÐÐÐÐÐåŒk�%œ+Ñ&Ô&Ô*€GØ”Ô Ô*€IØŒwÔÔ)Ô2€Hð 	„wÔ×/Ò/°°W²Ñ=Ô=ð Øˆtàˆ8�A‰;Œ;Ð2˜9˜9 Q™<œ<¨7Ò2Ð2r+   c                óÚ  ‡‡‡— t           j        j                             ¦   «         }|�¾|j        �¹t          |j        ¦  «        dk    sJ ‚t          | ¦  «        Š|j        D ]Š}|€|j                             d ¦  «         ŒdŠt           j        j                             ¦   «         x}r|j        Šˆˆfd„Š|j                             t          ˆfd„|D ¦   «         ¦  «        ¦  «         Œ‡d S d S d S )Nr   Fc                ó~   •— ‰€t          | ¦  «        S ‰r‰                     | ¦  «        S ‰                     | ¦  «        S r`   )ra   Údeserialize_symexprÚevaluate_symexpr)r¶   Úfakify_first_callr%  s    €€r)   Úmap_exprz4set_tracing_context_output_strides.<locals>.map_exprš  sE   ø€ Ø Ð(Ý" 1™vœv˜Ø(ð @Ø(×<Ò<¸QÑ?Ô?Ð?Ø$×5Ò5°aÑ8Ô8Ð8r+   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r`   r"   )r'   r¶   r4  s     €r)   r‡   z5set_tracing_context_output_strides.<locals>.<genexpr>¡  s+   øè è € Ð3OÐ3OÀA°H°H¸Q±K´KÐ3OÐ3OÐ3OÐ3OÐ3OÐ3Or+   )
r$   rõ  rö  r÷  Úoutput_stridesr.   r  rG  r3  Útuple)r`  Úcompiled_graphrŸ  r—  r¥  r3  r4  r%  s        @@@r)   Ú"set_tracing_context_output_stridesr9  Œ  s#  øøø€ åŒmÔ*×2Ò2Ñ4Ô4€GØÐ˜wÔ5ÐAÝ�7Ô)Ñ*Ô*¨aÒ/Ð/Ð/Ð/Ý)¨.Ñ9Ô9ˆ	Ø#Ô2ð 	Qð 	QˆEØˆ}ØÔ&×-Ò-¨dÑ3Ô3Ð3Ð3à$)Ð!Ýœ-Ô6×>Ò>Ñ@Ô@Ð@�3ð >Ø(+Ô(=Ð%ð9ð 9ð 9ð 9ð 9ð 9ð Ô&×-Ò-­eÐ3OÐ3OÐ3OÐ3OÈÐ3OÑ3OÔ3OÑ.OÔ.OÑPÔPÐPÐPð% ÐÐAÐAð	Qð 	Qr+   c                 ó  — t           j        �t           j        S t          j        ¦   «         sdS t          j                             ¦   «         rdS 	 ddlm}  n# t          $ r Y dS w xY w| t          j         	                    d¦  «        k    S )NFr   ©ÚREMOTE_CACHE_VERSIONz.pytorch/remote_cache:fx_graph_memcache_version)
rB   Úfx_graph_remote_cachero  r$   Ú_utils_internalÚis_fb_unit_testÚtorch._inductor.fb.remote_cacher<  ÚModuleNotFoundErrorÚjustknobs_getval_intr;  s    r)   Ú should_use_remote_fx_graph_cacherC  ¤  s©   € ÝÔ#Ð/ÝÔ+Ð+ÝÔÑÔð ØˆuåÔ×,Ò,Ñ.Ô.ð ØˆuðØHÐHÐHÐHÐHÐHÐHøÝð ð ð Øˆuˆuðøøøð  ¥5Ô#8×#MÒ#MØ8ñ$ô $ò ð s   ÁA Á
A$Á#A$c                ó.   — t          j        dd| ¦  «        S )Nz[^a-zA-Z0-9_]r¡   )ÚreÚsubr  s    r)   Únormalize_namerG  ·  s   € ÝŒ6Ð" C¨Ñ.Ô.Ð.r+   ztl.int1ztl.float8e4nvztl.float8e5ztl.float8e4b8ztl.float8e5b16)ztl.boolztl.float8_e4m3fnztl.float8_e5m2ztl.float8_e4m3fnuzztl.float8_e5m2fnuzc                ó   — i | ]\  }}||“Œ	S r"   r"   )r'   r*  rM   s      r)   rß   rß   Ã  s   € ÐGÐGÐG¡$ ! Q˜˜AÐGÐGÐGr+   z^.*[.]rr   c                óˆ   — t                                dt          | ¦  «        ¦  «        }t                               ||¦  «        S )z"Convert torch.dtype to triton typeútl.)Ú_triton_type_rerF  rµ   Ú_triton_type_mappingrS  )rr   Útriton_type_names     r)   Útriton_typerN  É  s6   € å&×*Ò*¨5µ#°e±*´*Ñ=Ô=ÐÝ×#Ò#Ð$4Ð6FÑGÔGÐGr+   c                óÊ   — t                                | | ¦  «        }|                     dd¦  «        }t          t          |¦  «        }t          |t          j        ¦  «        sJ ‚|S )NrJ  r­  )Ú_torch_triton_mappingrS  r  r#   r$   rP   rr   )rr   Úadjusted_typeÚ	type_namer‰  s       r)   Útriton_type_to_torchrS  Ï  sY   € Ý)×-Ò-¨e°UÑ;Ô;€MØ×%Ò% e¨RÑ0Ô0€IÝ�˜yÑ)Ô)€IÝ�i¥¤Ñ-Ô-Ð-Ð-Ð-ØÐr+   rñ  r\   c                óê  — | j          oë|                      ¦   «         |                     ¦   «         k    oÁ|                      ¦   «         |                     ¦   «         k    o—| j        |j        k    o‡| j        |j        k    ow|                      ¦   «                              ¦   «         |                     ¦   «                              ¦   «         k    o)|                      ¦   «         |                     ¦   «         k    S r`   )Ú	is_mkldnnr~  r3  rr   rs   Úuntyped_storager"  rí  ©rñ  r\   s     r)   Úis_same_tensorrX  ×  sÕ   € àŒNÐð 	<Ø�IŠI‰KŒK˜5Ÿ:š:™<œ<Ò'ð	<à�KŠK‰MŒM˜UŸ\š\™^œ^Ò+ð	<ð ŒJ˜%œ+Ò%ð	<ð ŒK˜5œ<Ò'ð		<ð
 × Ò Ñ"Ô"×+Ò+Ñ-Ô-°×1FÒ1FÑ1HÔ1H×1QÒ1QÑ1SÔ1SÒSð	<ð ×ÒÑ!Ô! U×%9Ò%9Ñ%;Ô%;Ò;ðr+   c                ó8  — | j         o“|                      ¦   «         |                     ¦   «         k    oi| j        |j        k    oY| j        |j        k    oIt          j        j                             | ¦  «        t          j        j                             |¦  «        k    S r`   )rU  r~  rr   rs   r$   r³   Úmkldnnr"  rW  s     r)   Úis_same_mkldnn_tensorr[  ã  s†   € àŒð 	PØ�IŠI‰KŒK˜5Ÿ:š:™<œ<Ò'ð	PàŒJ˜%œ+Ò%ð	Pð ŒK˜5œ<Ò'ð	Põ ŒIÔ×%Ò% dÑ+Ô+­u¬yÔ/?×/HÒ/HÈÑ/OÔ/OÒOðr+   c                 ó   — dS )N)rÜ  ÚisnanÚlogical_notÚlogical_andÚsignbitÚand_ÚleÚltÚgeÚgtÚeqÚner®  Úxorr"   r"   r+   r)   Úboolean_opsri  í  s   € ðð r+   c                  ó$   — e Zd ZU ded<   ded<   dS )ÚOpDtypeRuler   Útype_promotion_kindúOptional[torch.dtype]Úoverride_return_dtypeNr   r"   r+   r)   rk  rk  	  s*   € € € € € € à8Ð8Ð8Ñ8Ø0Ð0Ð0Ñ0Ð0Ð0r+   rk  zDict[str, OpDtypeRule]Úop_dtype_propagation_rulesrl  r   rn  rm  c                ó6   — t          ||¦  «        t          | <   d S r`   )rk  ro  )r~   rl  rn  s      r)   Ú#register_op_dtype_propagation_rulesrq  
	  s%   € õ
 (3ØÐ2ñ(ô (Õ˜tÑ$Ð$Ð$r+   c                ót   — t           j        j        r&| t          j        t          j        fv rt          j        S | S )z"Maybe upcast [b]float16 to float32)rB   rh  Úcodegen_upcast_to_fp32r$   r÷   rù   rû   rš  s    r)   Úupcast_compute_typert  	  s0   € å„}Ô+ð Ø•%”-¥¤Ð0Ð0Ð0åŒ}ÐØ€Lr+   )Úfrozen_default©Úfrozenrw  c              ó.   ‡— dˆfd„}| €|S  || ¦  «        S )Nrc   rE   r]   c                ó~   •— t           j        dk    rt          j        | d‰¬¦  «        S t          j        | ‰¬¦  «        S )N)r  re  T)Úkw_onlyrw  rv  )r÷  Úversion_infoÚdataclassesÚ	dataclass)rc   rw  s    €r)   Úwrapzir_dataclass.<locals>.wrap	  sA   ø€ ÝÔ˜wÒ&Ð&ÝÔ(¨°dÀ6ÐJÑJÔJÐJõ Ô(¨°VÐ<Ñ<Ô<Ð<r+   )rc   rE   r]   rE   r"   )rc   rw  r~  s    ` r)   Úir_dataclassr  	  s;   ø€ ð=ð =ð =ð =ð =ð =ð €{ØˆØˆ4�‰9Œ9Ðr+   úOptional[List[int]]c                 óv   — t           j        j                             ¦   «         } | �| j        r| j        j        S d S r`   )r$   rõ  rö  r÷  Úfw_metadataÚbw_donated_idxs)rú  s    r)   Úget_donated_idxsr„  ,	  s7   € Ý”mÔ2×:Ò:Ñ<Ô<€OØÐ" Ô'BÐ"ØÔ*Ô:Ð:Øˆ4r+   )rM   rN   )rl   rm   )rn   ro   r]   rp   )r]   rª   )rs   r¸   r]   r¹   )rÅ   rÆ   r]   rN   )rÐ   rÑ   rÒ   rÑ   r]   rN   )rÅ   rÚ   r]   rÛ   )râ   rã   rä   rã   r]   rã   )r  r  r]   r  )r  r  r]   r  )r)  r*  r]   rª   r`   )r6  r7  r]   rª   )r   )rs   rµ   r]   rV  )r,   r   )rY  rZ  r[  ra   rs   rµ   r]   rp   )r"   re  re  rf  r   )rs   rµ   )rp  r   rq  rµ   )rp  r   rw  rx  )r]   ra   )r(   r€  r]   r�  )rn   rš  r]   r›  )rå  ræ  r]   rç  )rÿ  rN   r]   rµ   )r  r?   rß  ra   r]   r  )r~   rµ   r]   r  )rÿ  rN   r!  r"  r]   rN   )rÕ   r   r]   r-  )rW   r   r]   rª   )rT  r8  r]   r9  )rT  r8  )rp  r   )NNT)r]   r�  )r…  r‰  r]   r�  r‚   )r  r  r]   rª   )r(  r)  r]   rª   )r-  rµ   r]   rª   )FT)r]   r²  )rø  rN   r]   r  )r=  rµ   r]   rª   )r=  rµ   r]   ra   )rK  rL  r]   rª   )r¡  ra   r¢  ra   )rª  r8  )r~   rµ   )rs   rÿ  )ru  r*  )r¾   rê  )rð  rê  )r  r
  )rY  r  r  r  r]   r  )r(   rê  )r  r  r   r  r]   rV  )r  r
  r%  r  r]   r  )r¶   rN   )r~   rµ   r]   rµ   )rr   r  r]   rµ   )rr   rµ   r]   r  )rñ  rê  r\   rê  )rl  r   rn  rm  )rr   r  r]   r  )rw  rª   )r]   r€  )þÚ
__future__r   rÒ  rÏ  r|  ÚenumrÈ   r(  re  rú  rþ  rÛ  rÊ   rk  rF  rE  rw  r÷  rp  rÝ  r^  rõ  r   r   Útypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   r   r   rQ   r$   Útorch._inductor.runtime.hintsr   Útorch._prims_commonr   Útorch.utils._pytreer   r-   Ú	lru_cacher2   Útorch._dynamo.device_interfacer3   Útorch._dynamo.utilsr4   Útorch.autogradr5   Útorch.autograd.profiler_utilr6   Ú(torch.fx.passes.graph_transform_observerr7   Útorch.fx.passes.shape_propr8   Útorch.utils._sympy.functionsr9   r:   r;   r<   r=   Útorch.utils._sympy.symbolr>   r?   Útorch.utils._sympy.value_rangesr@   rA   r­  rB   Úruntime.runtime_utilsrC   ré   rz  Ú	getLoggerre   r“   rE   rç   Ú	VarRangesrL  ra   r2  Ú	InputTypeÚGPU_KERNEL_BIN_EXTSrî  r#  rJ   rL   rV   ÚFunctionrX   r©   r·   rÄ   rÏ   rÙ   rá   r  r  r(  r5  r;  rU  rˆ   rd  ro  rv  rz  r|  r  r‰  rŠ  r‹  rŽ  r§  r²  rÄ  rä  rí  rþ  r  r  r  r  r   r,  r1  r7  rU  r[  r\  r¡  rb  rd  rÐ  r€  rˆ  r˜  rœ  rž  r£  rí  rü  r¬  r  r"  r'  r,  r6  r;  rF  rQ  rV  rf  rt  rw  rz  r|  rƒ  r  r¤  r¦  rÀ  rÅ  rÔ  rØ  rÚ  rã  rì  rö  rû  r  r  r  r  r  r  rŸ  r!  r0  r4  r<  rA  rC  rH  rJ  rœ  rW  ÚEnumrY  ro  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(  r.  r9  rC  rG  rL  rØ  rP  ÚcompilerK  rN  rS  rX  r[  ri  rk  ro  rq  rt  r  r„  r"   r+   r)   ú<module>rž     sù  ðà "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ UÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ Ð Ð Ð Ð Ð à €€€à €€€Ø :Ð :Ð :Ð :Ð :Ð :ð ð DØCÐCÐCÐCÐCÐCà -Ð -Ð -Ð -Ð -Ð -ð �UˆO€	ð
 €Ô�TÑÔðð ñ Ôðð DÐ CÐ CÐ CÐ CÐ CØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø %Ð %Ð %Ð %Ð %Ð %Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø KÐ KÐ KÐ KÐ KÐ KØ 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =ð Œl˜gÒ%€à€gÔ˜Ñ!Ô!€à€WˆT�]„]€Ø�”˜UœZÐ'Ô(€	Ø�U˜5œ<¨¨e¬lÐ:Ô;Ô<€	à'°Ð7Ð7Ð à€Ø€	à€Ø�{ Q‘Ñ'¨AÒ-Ð-°+ÀÒ2BÐ2BÐ2BÐDXÑ2BÔ2BÐBð5ð 5ð 5ñ
Lð Lð Lð Lðð ð ð ð ˆEŒNñ ô ð ñOñ Oð Oð Oð Oðd €Ô�TÑÔñð ð ñ Ôðñð ð ð ñ;ð ;ð ;ð ;ñ@ð @ð @ð @ñ
+ð +ð +ð +ñ)ð )ð )ð )ð Að  Að  AñF+ð +ð +ð +ñð ð ð ñ.Gð Gð Gð Gð OSññ ð ð ð ð2ð ð ñ,'ñ 'ð 'ð 'ð 'ð NTññ ð ð ð ð  CIññ ð ð ð ñ)ð )ð )ð )ñ'ð 'ð 'ð 'ñ#ð #ð #ð #ðð ð ñ$ð $ð $ð $ð €Iˆc�N„N€Ø€WˆT˜TÐ"Ñ"Ô"€ðð ð ð ð �8˜W Q¨ Uœ^ñ ô ð ñð ð ð ð8ð ð ð&)ð )ð )ðB52ð 52ð 52ðr 9=ññ ð ð ð ð&>ð >ð >ñ"ð ð ð ð$%ð %ð %ñ	Dð 	Dð 	Dð 	DðUð Uð Uñ	>ð 	>ð 	>ð 	>ñð ð ð ñ.ð ð ð ñ-ð -ð -ð -ñ)ð )ð )ð )ñXð ð ð ð !#Ð Ð "Ð "Ð "Ñ "ñ	ð 	ð 	ð 	ðð ð ð Ôñ( ð ( ð ( ñ Ôð( ñVAð Að Að Añ!ð !ð !ð !ðH €Ô�QÑÔð7ð 7ñ Ôð7ðð ð ð ð �*ñ ô ð ð~ð ~ð ~ð ~ð ~ñ ~ô ~ð ~ðB
ð 
ð 
ð 
ð 
˜ñ 
ô 
ð 
ð Ôð$ð $ñ Ôð$ðð ð ð ð ñ ô ð ð@?ð ?ð ?ð ?ð ?Ð'ñ ?ô ?ð ?ð €Ô�TÑÔññ ð ð ñ Ôðñ8ð ð ð ñð ð ð ñð ð ð ñð ð ð ð 16ÀUð ð ð ð ð ð,ð ð ð< €Ô�TÑÔð@ð @ñ Ôð@ð €Ô�TÑÔðRð Rñ ÔðRð6+ð +ð +ð\ð ð ðHð Hð Hð>ð >ð >ðð ð ð FJñ3ð 3ð 3ð 3ðlCð Cð CðCð Cð Cð Cð Cñ Cô Cð Cñ" ð  ð  ð  ð/ð /ð /ð$ð $ð $ðNð ð ðð ð ð#ð #ð #ð& Ôð.ð .ñ Ôð.ñFð Fð Fð Fð&	ð 	ð 	ð)ð )ð )ð>&ð &ð &ð&ð &ð &ðð ð ñð ð ð ð Ôðð ñ Ôððð ð ð €Ô�TÑÔðDð Dñ ÔðDð €Ô�TÑÔð6ð 6ñ Ôð6ð6 €Ô�TÑÔñð ð ñ ÔðñQð Qð Qð Qñ0ð 0ð 0ð 0ñ<ð <ð <ð <ñ(ð (ð (ð (ñ#ð #ð #ð #ñKð Kð Kð Kñð ð ð ð(*ð *ð *ð *ð *�$”)ñ *ô *ð *ð
ð 
ð 
ñDð ð ð ð<(ð (ð (ð)ð )ð )ð#ð #ð #ðJð Jð JðLð Lð Lð
 MQñ
ð 
ð 
ð 
ð, MQñð ð ð ñ2Tð Tð Tð Tñ" ð  ð  ð  ð0 Ôðð ð ð ð ñ ô ñ Ôðð Ôðð ñ Ôðñ !ð !ð !ð !ñð ð ð ñ
ð ð ð ð
Bð Bð Bñ$ð $ð $ð $ðNHð Hð Hñ>ñ ð ð ñLñ Lð Lð Lñ'ð 'ð 'ñ"ð ð ñ.ñ ð ð ñ*ñ ð ð ñ	:ñ 	:ð 	:ð 	:ñ9ñ 9ð 9ð 9ññ ð ð ñ$3ñ 3ð 3ð 3ñQð Qð Qñ0ð ð ñ&/ñ /ð /ð /ñ Ù'Ù#Ù)Ù*ñð Ð ñ HÐGÐ*>×*DÒ*DÑ*FÔ*FÐGÑGÔGÐ ð �"”*™YÑ'Ô'€ñHñ Hð Hð Hññ ð ð ñ	ñ 	ð 	ð 	ññ ð ð ð €Ô�TÑÔñð ñ Ôðð& Ôð1ð 1ñ 1ð 1ñ 1ñ 1ô 1ñ Ôð1ð
 68Ð Ñ 7Ð 7Ñ 7Ñ 7ññ ð ð ññ ð ð ð Ð DÑ)Ñ)Ô)ñ°ñ ð ñ ñ ð ñ *Ô)ðññ ð ð ð ð r+   