Ë
    g^(hðW ã                  ó   — 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Zd dlmZmZmZmZm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* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0 d dlm1Z1 d dl2Z2d dl3Z3d d	l4m5Z5 d d
l6m7Z7 d dl8m9Z9 e(r\d dlm:Z:m;Z;m<Z< d dl3m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZG ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZOmPZPmQZQmRZRmSZSmTZT ddlUmVZV ddlWmXZXmYZY g d¢ZZ e)d«      Z[ ej¸                  d«      dòd„«       Z]d dl^m_Z_ d dl`maZa d dlbmcZc d dldmeZe d d lfmgZg d d!lhmiZi d d"ljmkZkmlZlmmZmmnZnmoZo d d#lpmqZqmrZr d d$lsmtZtmuZu dd%lvmwZw dd&lxmyZz ej                  d'k(  Z{ ejø                  e}«      Z~ e)d(«      Ze€e2�j                  e2�j                  f   Z‚e&e*e3�j                  e„e3j~                  f      Z…d)d*d+œZ†d,Z‡d,Zˆd,Z‰d-ZŠd.Z‹e‹e‹dz
  z  d k(  re‹d/k\  sJ d0«       ‚dód1„ZŒdôd2„Z� G d3„ d4e2�j                  «      Z�	 dõ	 	 	 	 	 	 	 död5„Z� ej¸                  d«      d÷d6„«       Z‘død7„Z’dùd8„Z“dúd9„Z”dûd:„Z•	 	 	 	 	 	 düd;„Zydýd<„Z–	 	 	 	 dþd=„Z—	 	 	 	 dÿd>„Z˜�d d?„Z™d@„ f	 	 	 	 	 �ddA„Zš	 	 	 	 	 	 	 	 �ddC„Z›�d�ddD„Zœ	 	 �d	 	 	 	 	 	 	 	 	 �ddE„Z�	 	 	 	 	 �d	 	 	 	 	 	 	 	 	 	 	 	 	 �ddF„Zž�d	dG„ZŸ�d
dH„Z �ddI„Z¡�ddJ„Z¢�ddK„Z£ e.dL«      Z¤ e)dMdN¬O«      Z¥ G dP„ dQe'e#e¤e¥f   «      Z¦�ddR„Z§	 	 	 	 �ddS„Z¨	 	 	 	 	 	 �ddT„Z©	 	 	 	 	 	 �ddU„Zª	 �d	 	 	 	 	 �ddV„Z«	 	 	 	 	 	 �ddW„Z¬�ddX„Z­�ddY„Z®�ddZ„Z¯�dd[„Z°�dd\„Z±�dd]„Z²�dd^„Z³�dd_„Z´�dd`„Zµ	 	 	 	 �dda„Z¶�ddb„Z·g Z¸dBe¹dc<   �d dd„Zº�d!de„Z»d dl¼Z¼�d!df„Z½e�j|                  	 	 	 �d"	 	 	 	 	 	 	 �d#dg„«       Z¿�d$dh„ZÀ	 	 	 	 	 	 �d%di„ZÁ ej¸                  d/«      �d&dj„«       ZÂ G dk„ dle%«      ZÃe�jˆ                   G dm„ dn«      «       ZÅ G do„ dp«      ZÆ G dq„ dreÆ«      ZÇe�j|                  �d'ds„«       ZÈ G dt„ du«      ZÉ G dv„ dweÉ«      ZÊ ej¸                  d«      �d(�d)dx„«       ZËej¸                  �d*dy„«       ZÌ�d*dz„ZÍ	 	 	 	 	 	 �d+d{„ZÎd÷d|„ZÏ	 	 	 	 	 	 �d,d}„ZÐ�d-d~„ZÑ�d-d„ZÒd€d€d�œ	 	 	 	 	 	 	 �d.d‚„ZÓ�d/dƒ„ZÔ�d0d„„ZÕ ej¸                  d«      �d1d…„«       ZÖ ej¸                  d«      �d2d†„«       Z×�d3d‡„ZØ�d0dˆ„ZÙ�d3d‰„ZÚ�d3dŠ„ZÛ	 	 	 	 	 	 	 	 �d4d‹„ZÜ	 	 	 	 �d5	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �d6dŒ„ZÝd÷d�„ZÞ G dŽ„ d�«      Zß	 	 	 	 	 	 	 	 �d7d�„Zà	 	 	 	 	 	 	 	 �d8d‘„Zá�d9d’„Zâ�d:d“„Zã�d;d”„Zä�d;d•„Zå	 	 	 	 	 	 	 	 �d<d–„Zæe�j|                  	 	 	 	 	 	 �d=d—„«       Zç	 �d	 	 	 	 	 �d>d˜„Zè�d?d™„Zé�d@dš„Zê�dAd›„Zë�dAdœ„Zì�dBd�„Zí�dCdž„Zîe�j|                  �dDdŸ„«       Zï�d*d „Zð ej¸                  d«      �d*d¡„«       Zñ ej¸                  d«      �d&d¢„«       Zò ej¸                  d«      �d*d£„«       Zó�d*d¤„Zô�dEd¥„Zõ�dFd¦„Zöd÷d§„Z÷d÷d¨„Zø�dGd©„Zù�ddª„Zú G d«„ d¬e�jö                  «      Zü	 	 	 	 	 	 	 	 	 	 �dHd­„Zý�dId®„Zþ	 	 	 	 �dId¯„Zÿ	 �d	 	 	 	 	 �dJd°„�Z �dKd±„�Z�dLd²„�Z�dLd³„�Z	 	 	 	 	 	 �dMd´„�Z	 	 	 	 	 	 	 	 �dNdµ„�Zd¶„ f	 	 	 	 	 	 	 	 	 	 	 �dOd·„�Zd¸„ f	 	 	 	 	 	 	 	 	 	 	 �dOd¹„�Z�dPdº„�Z�dQd»„�Z	e�jˆ                   G d¼„ d½«      «       �Z
e�j|                  �dRd¾„«       �Z�dSd¿„�Z�dTdÀ„�Z�dUdÁ„�Z�dVdÂ„�Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 �dWdÃ„�Z�dXdÄ„�Z�dYdÅ„�Z�dZdÆ„�Z�d[dÇ„�Z	 	 	 	 	 	 	 	 �d\dÈ„�Z�d]dÉ„�Z	 	 	 	 	 	 �d^dÊ„�Z�d_dË„�Z	 	 	 	 	 	 �d`dÌ„�Z	 	 	 	 	 	 �dadÍ„�Z�dbdÎ„�Z	 	 	 	 	 	 �dcdÏ„�Zd÷dÐ„�Z�dSdÑ„�ZdÒdÓdÔdÕdÖd×dØœ�Z�e�jA                  «       D � �ci c]  \  } }|| “Œ
 c}} �Z! e�jD                  dÙ«      �Z#�dddÚ„�Z$�dedÛ„�Z%�dfdÜ„�Z&�dfdÝ„�Z' ej¸                  d«      �dgdÞ„«       �Z(e�jˆ                   G dß„ dà«      «       �Z)i �Z*dáe¹dâ<   	 	 	 	 	 	 	 	 �dhdã„�Z+�didä„�Z, e)då«      �Z- e)dæ«      �Z. G dç„ dèe�e-�e.f   «      �Z/ e-dN¬é«      �ddNdêœ�djdë„«       �Z0�dkdì„�Z1	 	 	 	 	 	 �dldí„�Z2 G dî„ dïe�jö                  «      �Z3 ej¸                  d«      �dmdð„«       �Z4d÷dñ„�Z5yc c}} w (n  é    )ÚannotationsN)Ú
CollectionÚIteratorÚMappingÚMutableMappingÚ
MutableSet)Údatetime)ÚStringIO)ÚAnyÚCallableÚcastÚGenericÚLiteralÚ
NamedTupleÚOptionalÚProtocolÚTYPE_CHECKINGÚTypeVarÚUnion)ÚConcatenateÚdataclass_transformÚ	ParamSpecÚSelfÚ	TypeGuard)Úmock)ÚDeviceProperties)Ú
OrderedSet)Útree_map_only)ÚIterableÚSequenceÚ
ValuesView)ÚSymBoolÚSymFloatÚSymInt)ÚELEMENTWISE_TYPE_PROMOTION_KIND)ÚGraphModule)ÚShapeEnv)ÚNodeé   )ÚWorkspaceArg©ÚPythonWrapperCodegen©ÚGraphLowering)ÚBufferÚExternKernelÚIRNodeÚLayoutÚ	OperationÚReinterpretView©ÚCompiledFxGraph)ÚBaseSchedulerNodeÚSchedulerBuffer)ÚcudaÚmpsÚxpuÚTc                 óØ   — t         D � cg c]#  } t        t        | «      j                  «       sŒ"| ‘Œ% }} t	        |«      dk  sJ ‚t	        |«      dk(  rd}|S |j                  «       }|S c c} w )Nr)   r   r9   )Ú	GPU_TYPESÚgetattrÚtorchÚis_availableÚlenÚpop)ÚxÚ
avail_gpusÚgpu_types      úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/utils.pyÚget_gpu_typerH   P   sg   € ä&ÖK˜¬'´%¸Ó*;×*HÑ*HÕ*J’!ÐK€JÐKÜˆz‹?˜aÒÐÐÜ˜Z›¨AÒ-ˆv€HØ€Oð 4>·>±>Ó3C€HØ€Oùò Ls
   ‰#A'­A')Úget_interface_for_device)Údetect_fake_mode)Ú
DeviceType)Ú	EventList)ÚGraphTransformObserver)Ú	ShapeProp)ÚCeilDivÚCleanDivÚFloorDivÚIdentityÚModularIndexing)Úmake_symbolÚSymT)Úbound_sympyÚValueRanges)Úconfig)ÚceildivÚwin32Ú_Tz.cubinz.spv)r9   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    rG   Ú_alignrc   €   s   € à”[Ñ  1Ñ$¬¨Ñ4Ð4ó    c                ó  — t        | t        j                  t        j                  f«      r#t	        t        t        | j                  «      «      S t        | t        «      xs! 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Úgcdra   )Úvs    rG   rl   rl   …   sQ   € ä�!”e—i‘i¤§¡Ð+Ô,Ü”3”{ A§F¡FÓ+Ó,Ð,Ü�aœÓÒK¤5§9¡9¨Q´Ó#<ÄÑ#KÐKrd   c                  ó*   — e Zd ZdZdZdZedd„«       Zy)rn   z<Symbolically round up to the nearest multiple of ALIGN_BYTES©r)   Tc                ó†   — t        |t        t        j                  f«      rt	        t        |«      «      S t        |«      r|S y ©N)rf   Úintrg   ÚIntegerrc   rl   )ÚclsÚvalues     rG   Úevalz
align.eval’   s6   € ä�eœc¤5§=¡=Ð1Ô2Üœ#˜e›*Ó%Ð%Ü�uÔØˆLð rd   N)rx   ú
sympy.ExprÚreturnzOptional[sympy.Expr])Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnargsÚ
is_integerÚclassmethodry   © rd   rG   rn   rn   Œ   s!   „ ÙFà€EØ€Jàòó ñrd   rn   c                ó  —  | «        t         j                  j                  «        t        j                  t	        d«      t         j                  d¬«      }t         j                  j                  d¬«      }t         j                  j                  d¬«      }|j                  «        t        d«      D ]  }|j                  «         | «        Œ |j                  «        t         j                  j                  «        |j                  |«      dz  }t        dt	        ||z  «      «      }t        dt	        ||z  «      «      }	t        |«      D ]	  } | «        Œ t         j                  j                  t         j                  j                  j                  g¬«      5 }
t        |	«      D ]  }|j                  «         | «        Œ t         j                  j                  «        d	d	d	«       t        j!                  d
«       t        j!                  
j#                  «       j%                  dd¬«      «       t'        |
j)                  «       D �cg c]0  }|j*                  t,        j                  k(  r|j.                  dk7  r|‘Œ2 c}«      }t1        |«      |	z  dk7  rt3        dt1        |«      |	«      ‚t1        |«      |	z  }t'        t5        |«      D ��cg c]  \  }}||z  dk7  r|‘Œ c}}«      }|j7                  «        |j#                  «       }t        j!                  d«       t        j!                  |j%                  d¬«      «       t9        d„ |D «       «      dz  |	z  }t        j!                  d|«       |S # 1 sw Y   �Œ”xY wc c}w c c}}w )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    €„ŽAr9   )ÚdtypeÚdeviceT)Úenable_timingé   r)   )Ú
activitiesNz
raw eventsÚself_device_time_totaléÿÿÿÿ)Úsort_byÚ	row_limitzContext Syncr   zYFailed to divide all profiling events into #repeat groups. #CUDA events: %d, #repeats: %szprofiling time breakdown)r�   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wrt   )Údevice_time_total)Ú.0Úevents     rG   ú	<genexpr>z+do_bench_using_profiling.<locals>.<genexpr>é   s   è ø€ ÒA¨%ˆe×%Õ%ÑAùó   ‚g     @�@zprofiling results: %s ms)r@   r9   ÚsynchronizeÚemptyru   ÚEventÚrecordÚrangeÚzero_Úelapsed_timeÚmaxÚprofilerÚprofileÚProfilerActivityÚCUDAÚlogÚdebugÚkey_averagesÚtablerL   ÚeventsÚdevice_typerK   ÚnamerB   ÚRuntimeErrorÚ	enumerateÚ_build_treeÚsum)ÚfnÚwarmupÚrepÚcacheÚstart_eventÚ	end_eventÚ_Úestimate_msÚn_warmupÚn_repeatÚpÚir‘   Úfiltered_eventsÚnum_event_per_groupÚactual_eventsÚress                    rG   Údo_bench_using_profilingr»   š   sø  € ñ „DÜ	‡J�J×ÑÔÜ�K‰Kœ˜J›¬u¯y©yÀÔH€Eô —*‘*×"Ñ"°Ð"Ó6€KÜ—
‘
× Ñ ¨tÐ Ó4€IØ×ÑÔÜ�1‹Xò ˆØ�‰ŒÙ
�ðð ×ÑÔÜ	‡J�J×ÑÔØ×*Ñ*¨9Ó5¸Ñ9€Kô �1”c˜& ;Ñ.Ó/Ó0€HÜ�1”c˜# Ñ+Ó,Ó-€Hô �8‹_ò ˆÙ
�ðô 
�‰×	Ñ	ä�N‰N×+Ñ+×0Ñ0ð
ð 
 ó 
ð !ð 
ä�x“ò 	ˆAà�K‰KŒMá�Dð		ô 	�
‰
×ÑÔ ÷!ô ‡I�IˆlÔÜ‡I�Iˆa�n‰nÓ×$Ñ$Ð-EÐQSÐ$ÓTÔUäð Ÿ™›ö	
àØ× Ñ ¤J§O¡OÒ3¸¿
¹
ÀnÒ8Tò ò	
ó€Oô ˆ?Ó˜hÑ&¨!Ò+Üð-ä�Ó Øó	
ð 	
ô ˜oÓ.°Ñ9ÐÜô & oÓ6÷	
á��5ØÐ&Ñ&¨!Ò+ò ó	
ó€Mð ×ÑÔØ!×.Ñ.Ó0€Mä‡I�IÐ(Ô)Ü‡I�Iˆm×!Ñ!¨BÐ!Ó/Ô0ä
ÑA°=ÔAÓ
AÀFÑ
JÈXÑ
U€CÜ‡I�IÐ(¨#Ô.Ø€J÷_!ñ !üò$	
ùó	
s   ÆAM0É5M=Ë
N
Í0M:c                 ó  — 	 ddl m}  t        j                  j	                  dd«       | d uxr% t        t        t        j                  dd «      d«      S # t        $ r Y yt        $ r}dt        |«      v sJ ‚Y d }~y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     rG   Úhas_torchvision_roi_alignrÈ   î   s|   € ðÝ-ä�‰×6Ñ6Ð7IÈ6ÔRØ Ð$ò 
¬Ü”E—I‘I˜}¨dÓ3°[ó*
ð 	
øô ò ÙÜò Ø0´C¸³FÑ:Ð:Ð:Üûðús   ‚AA Á	A?ÁA?Á&A:Á:A?c                ób  — | €t        j                  d«      j                  S t        | t        «      rt        j                  | «      } | j
                  dvrZ| j                  €Nt        | j
                  «      }t        j                  | j
                  |j                  j                  «       ¬«      S | S )Ng        )ÚcpuÚmeta)Úindex)
r@   Útensorr†   rf   rÆ   ÚtyperÌ   rI   ÚWorkerÚcurrent_device©r†   Údevice_interfaces     rG   Údecode_devicerÓ   þ   s‚   € Ø€~Ü�|‰|˜CÓ ×'Ñ'Ð'Ü�&œ#ÔÜ—‘˜fÓ%ˆØ‡{�{˜/Ñ)¨f¯l©lÐ.BÜ3°F·K±KÓ@ÐÜ�|‰|˜FŸK™KÐ/?×/FÑ/F×/UÑ/UÓ/WÔXÐXØ€Mrd   c                ó|   — t        j                  t        j                  | t        j
                  j                  «      S rt   )Ú	functoolsÚreduceÚoperatorÚmulrg   ÚSÚOne)Úits    rG   Úsympy_productrÜ   	  s#   € Ü×ÑœHŸL™L¨"¬e¯g©g¯k©kÓ:Ð:rd   c           	     ó’   — t        | «      t        |«      k(  sJ ‚t        j                  t        d„ t	        | |«      D «       «      «      S )Nc              3  ó,   K  — | ]  \  }}||z  –— Œ y ­wrt   rƒ   )r�   ÚaÚbs      rG   r’   zsympy_dot.<locals>.<genexpr>  s   è ø€ Ò>¡d a¨˜A �EÑ>ùs   ‚)rB   rg   Úexpandrª   Úzip)Úseq1Úseq2s     rG   Ú	sympy_dotrå     s8   € Üˆt‹9œ˜D›	Ò!Ð!Ð!Ü�<‰<œÑ>¬c°$¸«oÔ>Ó>Ó?Ð?rd   c                ó\   — | D �ci c]  }t        |«      |“Œ c}j                  «       S c c}w rt   )ÚidÚvalues)rÛ   rD   s     rG   Úuniqueré     s'   € Ø Ö!˜ŒBˆq‹E�1‰HÒ!×(Ñ(Ó*Ð*ùÒ!s   …)c           
     ón  — t        | t        j                  «      st        |t        j                  «      r2t        t        j                  | «      t        j                  |«      «      S t        | t
        «      rt        |t
        «      s$J | › dt        | «      › d|› dt        |«      › �«       ‚t        | |«      S )Nz: ú, )rf   rg   ÚExprrO   Úsympifyru   rÎ   Úruntime_ceildiv)ÚnumerÚdenoms     rG   rY   rY     s‘   € ô �%œŸ™Ô$¬
°5¼%¿*¹*Ô(EÜ”u—}‘} UÓ+¬U¯]©]¸5Ó-AÓBÐBô �eœSÔ!¤j°¼Ô&<ð Øˆ'�”D˜“K�=  5 '¨¬D°«K¨=Ð9óÐ<ô ˜5 %Ó(Ð(rd   c                ó2  — | €yt        | «      j                  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%d&œ¥}t        |j                  «       «      D ]  }|||<   Œ	 t	        | t         «      r| S d'||   › �S )(Nz*i8ú.r‹   ÚboolÚi1Ú
float8e4nvÚfp8e4nvÚfloat8e5Úfp8e5Úfloat8e4b15Úfp8e4b15Úfloat8e4b15x4Ú
fp8e4b15x4Úfloat8_e4m3fnÚfloat8_e5m2Úfloat8_e8m0fnuÚu8Úfloat16Úfp16Úbfloat16Úbf16Úfloat32Úfp32Úfloat64Úfp64Úint8Úi8Úint16Úi16Úint32Úi32Úint64Úi64Úuint8Úu16Úu32Úu64)Úuint16Úuint32Úuint64Ú*)rÆ   ÚsplitÚlistrè   rf   )ÚkeyÚ	dtype_strÚtysrp   s       rG   Ú_type_ofr  $  sG  € ð
 €{ØÜ�C“—‘˜sÓ# BÑ'€IðØ�ðà�iðð 	�Gðð 	�zð	ð
 	˜ðð 	˜ðð 	�wðð 	˜$ðð 	�6ðð 	�Fðð 	�6ðð 	�6ðð 	�ðð  	�ð!ð" 	�ð#ð$ 	�ð%ð& 	�ð'ð( ØØò-€Cô2 �#—*‘*“,Óò ˆØˆˆAŠðä˜S¤#Ô&ˆ3Ð@¨a°°I±Ð/?Ð,@Ð@rd   c                óR   — | D �cg c]  }t        j                  |«      ‘Œ c}S c c}w )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.
    )rg   rí   )Úlstr¶   s     rG   Úconvert_shape_to_inductorr!  J  s!   € ð '*Ö* ŒE�M‰M˜!ÕÒ*Ð*ùÒ*s   …$c                ó  — ddl m} | D �cg c]j  }t        |t        «      r|nUt        |t        j
                  «      rt        |«      n0|j                  j                  j                  j                  |d¬«      ‘Œl c}S c c}w )zz
    Takes a list of shapes from Inductor and converts them into symints (or just
    ints if all shapes are static).
    r)   ©ÚVN)Úhint)
Úvirtualizedr$  rf   ru   rg   rv   ÚgraphÚsizevarsÚ	shape_envÚcreate_symintnode)r   r$  r¶   s      rG   Úconvert_shape_to_symintr+  U  sx   € õ ð öð ô ˜!œSÔ!ñ ô ˜a¤§¡Ô/ô �A”à—W‘W×%Ñ%×/Ñ/×AÑAÀ!È$ÐAÓOñòð ùò s   ‹A/A=c                óN   — t        d„ | j                  j                  D «       «      S )z-
    Does this op overload have aliasing
    c              3  ó8   K  — | ]  }|j                   d u–— Œ y ­wrt   )Ú
alias_info©r�   rß   s     rG   r’   zis_view.<locals>.<genexpr>p  s   è ø€ ÒF¨Aˆq�|‰| 4Ô'ÑFùs   ‚)ÚanyÚ_schemaÚ	arguments)Úops    rG   Úis_viewr4  l  s   € ô ÑF°·±×1EÑ1EÔFÓFÐFrd   c                 ó   — y©NFrƒ   )r±   s    rG   ú<lambda>r7  u  ó   � rd   c                óì  ‡— | j                   dk(  syt        | j                  t        j                  j
                  «      s| j                  t        j                  u syt        t        j                  j
                  | j                  «      }|t        j                  u st        |«      rt        ˆfd„| j                  D «       «      S t        j                  j                  |j                  v xs  ‰|«      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  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wrt   )Úis_pointwise_use)r�   ÚuÚis_pointwise_fns     €rG   r’   z#is_pointwise_use.<locals>.<genexpr>†  s   øè ø€ ÒK¸AÔ# A ×7ÑKùs   ƒ)r3  rf   Útargetr@   Ú_opsÚ
OpOverloadr×   Úgetitemr   r4  rj   ÚusersÚTagÚ	pointwiseÚtags)Úuser>  r?  s    ` rG   r<  r<  s  s¦   ø€ ð �6‰6�_Ò$Øä�3—:‘:œuŸz™z×4Ñ4Ô5¸¿¹Äx×GWÑGWÑ9Wàä”%—*‘*×'Ñ'¨¯©Ó4€FØ”×!Ñ!Ñ!¤W¨V¤_ÜÓKÀÇÁÔKÓKÐKä�9‰9×Ñ &§+¡+Ð-ÒH±ÀÓ1HÐHrd   ú	list[Any]c           	     óÂ  ‡‡— t         j                  j                  «       Šg Šdˆˆfd„} ‰j                  | gt	        t         j
                  |||f«      ¢­Ž }t        | j                  j                  «      dk(  r2t        | j                  j                  d   j                  «      dk(  r|f}‰j                  |«       t         j                  j                  i ‰«      }|‰fS )Nc                ó`   •— ‰j                  | «       ‰j                  dt        ‰«      › �«      S )NÚarg)ÚappendÚplaceholderrB   )rK  ÚgÚ
graph_argss    €€rG   Úadd_tensor_argz)gen_gm_and_inputs.<locals>.add_tensor_arg‘  s,   ø€ Ø×Ñ˜#ÔØ�}‰}˜s¤3 z£?Ð"3Ð4Ó5Ð5rd   r)   r   ÚTensor)rK  útorch.Tensorr{   r(   )r@   ÚfxÚGraphr:  r   rQ  rB   r1  ÚreturnsrÆ   rÎ   Úoutputr&   )r?  rm   ÚkwargsrP  ÚnodeÚgmrN  rO  s         @@rG   Úgen_gm_and_inputsrZ  ‹  sº   ù€ ô 	�‰�‰Ó€AØ%'€Jö6ð ˆ1�?‰?ØðÜœuŸ|™|¨^¸dÀF¸^ÓLò€Dô 	ˆF�N‰N×"Ñ"Ó# qÒ(Ü�—‘×&Ñ& qÑ)×.Ñ.Ó/°8Ò;àˆwˆØ‡H�HˆT„Nä	�‰×	Ñ	˜b !Ó	$€BØˆzˆ>Ðrd   c                óh   — | dk(  ry t        | «      }|j                  «       r|j                  «        y y ©NrÊ   )rI   rA   r”   rÑ   s     rG   r”   r”   £  s4   € Ø�‚ØÜ/°Ó7ÐØ×$Ñ$Ô&Ø×$Ñ$Õ&ð 'rd   c                óä   — t        |«       t        j                  d«       t        j                  «       }t        |«      D ]  } | |Ž }t        |«       Œ t        j                  «       }€J ‚||z
  S )Ni9  )r”   r@   Úmanual_seedÚtimeÚperf_counterr˜   )ÚmodelÚexample_inputsÚtimesr†   Út0r±   ÚresultÚt1s           rG   Útimedrg  «  sr   € ô �ÔÜ	×Ñ�dÔÜ	×	Ñ	Ó	€BÜ�5‹\ò ˆÙ˜Ð'ˆÜ�FÕðô 
×	Ñ	Ó	€BàÐÐÐØ�‰7€Nrd   c                óì   — t        j                  t        |«      D �cg c]  }t        | |||«      ‘Œ c}«      }t        j                  |«      |z  }t        ||z  d›«       |j                  «       S c c}w )Nz.6f)r@   rÍ   r˜   rg  ÚmedianÚprintÚitem)	ra  rb  rc  ÚrepeatÚbaseliner†   r±   ÚtimingsÚtooks	            rG   Úprint_performancerp  ½  sg   € ô �l‰lÜ>CÀF»mÖL¸Œˆu�n e¨VÕ	4ÒLó€Gô �<‰<˜Ó  5Ñ(€DÜ	ˆT�H‰_˜SÐ!Ô#Ø�9‰9‹;Ðùò	 	Ms   �A1c                óH   ‡—  t        | |«      «       Št        | |ˆfd„«       y)zKReplace obj.method() with a new method that returns a precomputed constant.c                 ó   •— ‰ S rt   rƒ   )re  s   €rG   r7  z#precompute_method.<locals>.<lambda>Ð  s   ø€  € rd   N)r?   Úsetattr)ÚobjÚmethodre  s     @rG   Úprecompute_methodrv  Í  s    ø€ à!ŒW�S˜&Ó!Ó#€FÜˆC�›Õ(rd   c                ó*   — |D ]  }t        | |«       Œ y)zFReplace methods with new methods that returns a precomputed constants.N)rv  )rt  Úmethodsru  s      rG   Úprecompute_methodsry  Ó  s   € àò 'ˆÜ˜#˜vÕ&ñ'rd   c                ó<   — t        | |kD  «      t        | |k  «      z
  S rt   )ru   )rß   rà   s     rG   Úcmpr{  Ù  s   € Üˆq�1‰u‹:œ˜A ™E›
Ñ"Ð"rd   c                ó~   — t        | t        «      r| g|z  S t        | «      dk(  r t        | «      | d   g«      |z  S | S )Nr)   r   )rf   ru   rB   rÎ   )rD   Úsizes     rG   Úpad_listliker~  Ý  sC   € Ü�!”SÔØˆs�T‰zÐÜ
ˆ1ƒv�‚{ØŒt�A‹w˜˜!™�v‹ Ñ%Ð%Ø€Hrd   c                óD   — t        | «      dk(  rg S dd„}t        | |¬«      S )Nr   c                ón   — t        | t        «      r| S ddlm} t        | |«      sJ ‚| j	                  «       S )Nr)   )r7   )rf   rÆ   Ú	schedulerr7   Úget_name)Úelemr7   s     rG   Ú	sort_funcztuple_sorted.<locals>.sort_funcê  s1   € Ü�dœCÔ ØˆKå0ä˜$Ð 1Ô2Ð2Ð2Ø�}‰}‹Ðrd   ©r  )rƒ  r[   r{   rÆ   )rB   Úsorted)rD   r„  s     rG   Útuple_sortedr‡  æ  s&   € Ü
ˆ1ƒv�‚{Øˆ	óô �!˜Ô#Ð#rd   ÚPÚRVT)Ú	covariantc                  ó&   — e Zd Zedd„«       Zdd„Zy)ÚCachedMethodc                 ó   — y rt   rƒ   )r®   s    rG   Úclear_cachezCachedMethod.clear_cacheû  s   € Ø),rd   c                 ó   — y rt   rƒ   ©Úselfrm   rW  s      rG   Ú__call__zCachedMethod.__call__þ  r8  rd   N)r®   r   r{   ÚNone)rm   úP.argsrW  úP.kwargsr{   r‰  )r|   r}   r~   ÚstaticmethodrŽ  r’  rƒ   rd   rG   rŒ  rŒ  ú  s   „ ØÚ,ó Ø,äDrd   rŒ  c           	     óØ   ‡— | j                   }d|› d�Šd| i}t        d|› d‰› d‰› d�j                  «       |«        t        j                  | «      ||› d�   «      }d
ˆfd	„}||_        |S )NÚ__Ú_cacher«   z        def zC_cache_on_self(self):
            try:
                return self.zy
            except AttributeError:
                pass
            rv = fn(self)
            object.__setattr__(self, "z%", rv)
            return rv
        Ú_cache_on_selfc                ó8   •— t        | ‰«      rt        | ‰«       y y rt   )rÃ   Údelattr©r‘  r  s    €rG   rŽ  z"cache_on_self.<locals>.clear_cache  s   ø€ Ü�4˜ÔÜ�D˜#Õð rd   )r‘  r   r{   r“  )r|   ÚexecÚlstriprÕ   ÚwrapsrŽ  )r«   r¦   ÚctxÚwrapperrŽ  r  s        @rG   Úcache_on_selfr£    sš   ø€ Ø�;‰;€DØˆtˆf�FÐ
€Cð �ˆ*€CÜðØˆFð à ˜Eð "'ð (+ eð ,	ð		÷ ‰F‹HØôð "Œi�o‰o˜bÓ! #¨¨¨nÐ&=Ñ">Ó?€Gõð &€GÔØ€Nrd   c           
     ó^  — ddl m} t        | t        «      rgt	        j
                  t        j                  | D �cg c]0  }t        |d«      r"|j                  r|j                  j                  ‘Œ2 c}t        «       «      S t        | |j                  «      r| j                  S t        «       S c c}w )Nr)   ©ÚirrX  )Ú r¦  rf   r  rÕ   rÖ   r×   Úor_rÃ   rX  Úoriginsr   r0   )Únode_scheduler¦  rX  s      rG   Úaggregate_originsr«    s�   € õ ä�-¤Ô&Ü×ÑÜ�L‰Lð *öàÜ˜4 Ô(¨T¯YªYð —	‘	×!Ó!òô
 ‹Ló
ð 	
ô 
�M 2§?¡?Ô	3Ø×$Ñ$Ð$ä‹|Ðùòs   ¹5B*
c                óä  — t        | «      }|dk(  rq|D �cg c]Q  }|j                  dk(  r@d|j                  v r2|j                  d   �#|j                  d   j                  j                  ‘ŒS }}t        t        |«      «      }nÏ|dk(  r•g }|D ]y  }|j                  dk(  sŒd|j                  v sŒ"|j                  d   d   }t        |d   t        «      r|j                  |d   «       Œ\|j                  |d   j                  «       Œ{ t        t        |«      «      }n5|dk(  r*|D �cg c]  }|j                  dk(  sŒ|j                  ‘Œ  }}nt        ‚|}dj                  d	g|z   «      S c c}w c c}w )
NÚoriginal_atenr:  r@   Úsource_fn_stackr‹   r)   Úinductor_noder±   Úfused)r«  r3  rË   Ú_overloadpacketr|   r†  r   rf   rÆ   rL  r¦   ÚNotImplementedErrorÚjoin)rª  Údescriptive_namesÚall_originsÚoriginÚsourcesÚ	source_fns         rG   Úget_fused_kernel_namer¹  4  sm  € ô $ MÓ2€KØ˜OÒ+ð &ö
àØ�y‰y˜OÒ+Ø 6§;¡;Ñ.Ø—‘˜OÑ,Ð8ð	 �K‰K˜Ñ(×8Ñ8×AÓAð
ˆð 
ô œ GÓ,Ó-‰Ø	˜gÒ	%àˆØ!ò 	:ˆFØ�y‰y˜OÓ+Ð0AÀVÇ[Á[Ò0PØ"ŸK™KÐ(9Ñ:¸2Ñ>�	Ü˜i¨™l¬CÔ0Ø—N‘N 9¨Q¡<Õ0à—N‘N 9¨Q¡<×#8Ñ#8Õ9ð	:ô œ GÓ,Ó-‰Ø	˜oÒ	-à&1ö
Ø"°V·Y±YÀ/Ó5QˆF�K‹Kð
ˆñ 
ô "Ð!Ø€GØ�8‰8�W�I Ñ'Ó(Ð(ùò5
ùò(
s   •AE(Ä%E-Ä:E-c                óˆ  ‡— t        | «      }|D �cg c]  }|j                  dk(  sŒ|‘Œ }}t        j                  t        «      }t        j                  t        «      }d Št        |«      r{t        d„ |D «       «      }t        |«      dk(  r[|d   j                  Št        ‰d«      s+i }t        ‰j                  «      D ]
  \  }	}
|	||
<   Œ |‰_        |j                  ˆfd„¬«       |D ]¨  }d|j                  v rO|j                  d   �@t        |j                  d   j                  «      }||   j!                  |j"                  «       d	|j                  v sŒo|j                  d	   d   j"                  }||   j!                  |j"                  «       Œª ‰�d
nd}|j$                  › d|› ddj'                  |j)                  «       «      › ddj'                  |j)                  «       «      › d�}|j$                  › d�g}t+        |j-                  «       «      D ]@  \  }}|j!                  |j$                  › d|› ddj'                  t+        |«      «      › �«       ŒB ‰�S|j!                  |j$                  › d�«       |D ]0  }
|j!                  |j$                  › d|
j/                  «       › �«       Œ2 |dj'                  |«      fS c c}w )Nr:  c              3  ó4   K  — | ]  }|j                   –— Œ y ­wrt   )r'  )r�   Úns     rG   r’   z&get_kernel_metadata.<locals>.<genexpr>g  s   è ø€ Ò"C¨q 1§7¥7Ñ"Cùr“   r)   r   Ú)_inductor_kernel_metadata_node_to_idx_mapc                ó"   •— ‰j                   |    S rt   )r½  )r¼  Úsingle_graphs    €rG   r7  z%get_kernel_metadata.<locals>.<lambda>q  s   ø€ ˜l×TÑTÐUVÑW€ rd   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«  r3  ÚcollectionsÚdefaultdictr  rB   r   r'  rÃ   r¨   Únodesr½  ÚsortrË   rÆ   r±  rL  r¦   Úcommentr³  Úkeysr†  ÚitemsÚformat_node)rª  r¢  rµ  r¶  Úinductor_nodesÚfrom_node_dictÚoriginal_aten_dictÚunique_graphsÚnode_to_idx_mapÚidxr¼  rX  r  Úsort_strÚmetadataÚdetailed_metadataÚoriginal_noderÇ  r¿  s                     @rG   Úget_kernel_metadatar×  X  sÄ  ø€ ô $ MÓ2€KØ+6ÖW ¸&¿)¹)ÀÓ:V’fÐW€NÐWä ×,Ñ,¬TÓ2€NÜ$×0Ñ0´Ó6Ðð
 €LÜ
ˆ>ÔÜ"Ñ"C°NÔ"CÓCˆÜˆ}Ó Ò"Ø)¨!Ñ,×2Ñ2ˆLä˜<Ð)TÔUØ"$�Ü'¨×(:Ñ(:Ó;ò -‘F�C˜Ø),�O AÒ&ð-àIX�ÔFØ×ÑÛWð  ô ð ò 2ˆØ˜dŸi™iÑ'¨D¯I©I°oÑ,FÐ,RÜ�d—i‘i Ñ0×@Ñ@ÓAˆCØ˜sÑ#×*Ñ*¨4¯9©9Ô5Ø˜$Ÿ)™)Ò#Ø—)‘)˜KÑ(¨Ñ+×0Ñ0ˆCØ˜3Ñ×&Ñ& t§y¡yÕ1ð2ð *6Ð)AÑ%Àz€Hà�?‰?Ð
˜1˜X˜JÐ&6°t·y±yÀ×ATÑATÓAVÓ7WÐ6Xð YØŸ9™9Ð%7×%<Ñ%<Ó%>Ó?Ð@Àð	Cð ð $ŸO™OÐ,Ð,NÐOÐPÐÜ & ~×';Ñ';Ó'=Ó >ò 
Ñˆ�uØ× Ñ Ø�‰Ð˜s = /°°d·i±iÄÀuÃÓ6NÐ5OÐPõ	
ð
ð ÐØ× Ñ  G§O¡OÐ#4Ð4DÐ!EÔFØò 	OˆAð ×$Ñ$¨¯©Ð'8¸¸A¿M¹M»OÐ;LÐ%MÕNð	Oð
 �T—Y‘YÐ0Ó1Ð1Ð1ùòg Xs
   ‘J?¦J?c                óâ   — t        | «      } t        | «      }| rV| j                  «       }|j                  D ]4  }|r	 ||«      rŒ||vsŒ|j	                  |«       | j                  |«       Œ6 | rŒV|S )zJReturns the set of nodes whose values depend on those within initial_queue)r  r   rC   rC  ÚaddrL  )Úinitial_queueÚskip_filterÚdominated_setrX  Úusers        rG   Údominated_nodesrÞ  “  sz   € ô
 ˜Ó'€MÜ˜}Ó-€Má
Ø× Ñ Ó"ˆØ—J‘Jò 	+ˆDÙ™{¨4Ô0ØØ˜=Ò(Ø×!Ñ! $Ô'Ø×$Ñ$ TÕ*ð	+ò ð Ðrd   c                ó  ‡‡— dd l }ddlmŠ dˆˆfd„Š|j                  «       D �cg c]  } ‰|«      sŒ|j                  ‘Œ }}| D �cg c]  } ‰|«      sŒ|j                  ‘Œ }}t         |j                  g |¢|¢­Ž «      S c c}w c c}w )Nr   r)   r¥  c                ó   •— t        | ‰j                  «      r ‰| j                  «      S t        | ‰j                  «      r ‰| j                  «      S t        | ‰j                  «      xr t        | ‰j
                  «      S rt   )rf   Ú	TensorBoxÚdataÚ
StorageBoxr1   Ú	Pointwise)r¼  r¦  Úis_unrealized_nodes    €€rG   rå  z*gather_origins.<locals>.is_unrealized_node®  s^   ø€ Ü�a˜Ÿ™Ô&Ù% a§f¡fÓ-Ð-Ü�a˜Ÿ™Ô'Ù% a§f¡fÓ-Ð-Ü˜!˜RŸY™YÓ'ÒG¬J°q¸"¿,¹,Ó,GÐGrd   )r¼  r1   r{   ró   )Ú	itertoolsr§  r¦  rè   r©  r   Úchain)	rm   rW  ræ  ÚvalÚkwarg_originsrK  Úarg_originsr¦  rå  s	          @@rG   Úgather_originsrë  §  s   ù€ ó åöHð -3¯M©M«OÖW SÑ?QÐRUÕ?V�S—[“[ÐW€MÐWØ*.ÖJ 3Ñ2DÀSÕ2I�3—;“;ÐJ€KÐJÜ�o�i—o‘oÐC {ÐC°]ÒCÓDÐDùò XùÚJs   ¦B´BÁBÁBc                ó6  — t        | t        j                  «      r| j                  S t        | t        j                  «      r)dj                  t        t        | j                  «      «      S t        | t        j                  «      r)dj                  t        t        | j                  «      «      S t        | t        t        t        t        f«      rC| j                  j                  › ddj                  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ë   ú))rf   rg   ÚSymbolr¦   rh   r³  rk   Ú	sympy_strrm   ÚMulrS   rP   rQ   rR   Úfuncr|   rÆ   )Úexprs    rG   rð  rð  º  s¼   € ô �$œŸ™Ô%Ø�y‰yÐÜ�$œŸ	™	Ô"Ø�z‰zœ#œi¨¯©Ó3Ó4Ð4Ü�$œŸ	™	Ô"Ø�z‰zœ#œi¨¯©Ó3Ó4Ð4ä�$œ¬(´H¼hÐGÔHØ—)‘)×$Ñ$Ð% Q t§y¡y´´YÀÇ	Á	Ó1JÓ'KÐ&LÈAÐNÐNÜˆt‹9Ðrd   c                ó¼   — ddl m} t        j                  r3t	        |j
                  dd «      x}r|j                  dk7  rt        | «      S t        j                  «       S )Nr)   r#  Úcurrent_nodeÚ
index_expr)
r&  r$  rX   Úcompute_all_boundsr?   Úinterpreterr?  rV   rW   Úunknown)rÌ   r$  Úfx_nodes      rG   Úget_bounds_index_exprrû  Ì  sN   € Ýô 	×!Ò!Ü §¡¨~¸tÓDÐDˆWÐDØ�N‰N˜lÒ*ä˜5Ó!Ð!ä×"Ñ"Ó$Ð$rd   c                ó   — | d   dk(  S )Nr   Úrrƒ   )Úprefixs    rG   Úprefix_is_reductionrÿ  Ú  s   € Ø�!‰9˜ÑÐrd   c                óJ   — | t         j                  k7  sJ ‚t        | |dd¬«      S )ú9
    Used to generate an integer-nonnegative symbol.
    T©ÚintegerÚnonnegative)rU   ÚSIZErT   )rþ  rÒ  s     rG   Úsympy_index_symbol_with_prefixr  Þ  s)   € ð ”T—Y‘YÒÐÐô �v˜s¨D¸dÔCÐCrd   c                óN   — | xs t         j                  xr t         j                  S rt   )rX   Údebug_index_assertsÚassert_indirect_indexing)Úchecks    rG   Úgenerate_assertr  ê  s   € ØÒ/”V×/Ñ/ÒT´V×5TÑ5TÐTrd   c                óF   — | d   dk7  sJ ‚t        j                  | dd¬«      S )r  r   ÚsTr  )rg   rï  ©r¦   s    rG   Úsympy_index_symbolr  î  s)   € ð �‰7�cŠ>Ðˆ>ô �<‰<˜ d¸Ô=Ð=rd   c                ó¼   — 	 	 	 	 	 	 dd„}t        j                  | «      j                  |j                  «       D ��ci c]  \  }}| |||«      “Œ c}}«      S c c}}w )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  )rf   rg   rì   rÆ   rï  r�   Úis_nonnegative)ÚreplacedÚreplacements     rG   Ú	to_symbolzsympy_subs.<locals>.to_symbol   sP   € ô ˜(¤E§J¡JÔ/Ð/Ð/Ü�k¤3Ô'Ü—<‘<ØØ ×+Ñ+Ø$×3Ñ3ôð ð Ðrd   )r  rz   r  zUnion[sympy.Expr, str]r{   úsympy.Symbol)rg   rí   ÚxreplacerË  )ró  Úreplacementsr  Úkrp   s        rG   Ú
sympy_subsr  ú  sf   € ðØðØ+Aðà	óô �=‰=˜Ó×'Ñ'Ø(4×(:Ñ(:Ó(<×=¡  1ˆ‰I�a˜‹OÑ	Ó=óð ùÛ=s   ¼A
c                óö   — t        | t        j                  «      xs^ t        | t        j                  «      xrB t	        d„ t        j                  | j                  «       | j                  «       «      D «       «      S )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrt   ©Úis_symbolic©r�   rD   s     rG   r’   zis_symbolic.<locals>.<genexpr>  s   è ø€ ÒN 1”˜A—ÑNùó   ‚)	rf   r@   r$   rQ  r0  ræ  rç  r}  Ústride)rß   s    rG   r  r    sS   € Ü�aœŸ™Ó&ò Ü�1”e—l‘lÓ#ò 	OÜÑN¬	¯©¸¿¹»À!Ç(Á(Ã*Ó(MÔNÓNðrd   c                 ó&   — t        d„ | D «       «      S )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrt   r  r/  s     rG   r’   z"any_is_symbolic.<locals>.<genexpr>  s   è ø€ Ò, !Œ{˜1�~Ñ,ùr   ©r0  )rm   s    rG   Úany_is_symbolicr%    s   € ÜÑ, tÔ,Ó,Ð,rd   c                ó4  — ddl m} t        g d¢«      }t        j                  «       r|j                  d«       | j                  j                  D ]G  }t        |j                  «      |v r|c S |j                  j                  d«      x}€Œ< ||«      sŒE|c S  y )Nr   )Úfree_unbacked_symbols)z,aten._fused_moving_avg_obs_fq_helper.defaultz7aten._fused_moving_avg_obs_fq_helper_functional.defaultzfbgemm.dense_to_jagged.defaultz%fbgemm.jagged_to_padded_dense.defaultÚrun_and_save_rng_stateÚrun_with_rng_statezaten._local_scalar_densezaten._assert_scalar)zaten._unsafe_index_put.defaultz0aten._unsafe_masked_index_put_accumulate.defaultzaten.index_put.defaultzaten.index_put_.defaultzaten.scatter.srczaten.scatter.reducezaten.scatter.value_reducezaten.scatter_add_zaten.scatter_add.defaultzaten.scatter_reduce.twozaten.scatter_reduce_.twozaten.scatter_reduce.two_outrè  )Ú%torch.fx.experimental.symbolic_shapesr'  r   r@   Ú$are_deterministic_algorithms_enabledÚupdater'  rÇ  rÆ   r?  rË   Úget)rY  r'  Úforbidden_setrX  rè  s        rG   Ú%get_first_incompatible_cudagraph_noder/    s‘   € õ Läò	
ó€Mô  ×1Ñ1Ô3Ø×Ñðô	
ð" —‘—‘ò ˆÜˆt�{‰{Ó˜}Ñ,ØŠKØ—9‘9—=‘= Ó'Ð'ˆCÑ4Ñ9NÈsÕ9SØŠKð	ð
 rd   c                óŠ   — t        t        t        | j                  j                  «      «      «      }|j
                  dk(  sJ ‚|S )z$Get the output node from an FX graphrV  )ÚnextÚiterÚreversedr'  rÇ  r3  )rY  Ú	last_nodes     rG   Úoutput_noder5  M  s6   € ä”Tœ( 2§8¡8§>¡>Ó2Ó3Ó4€IØ�<‰<˜8Ò#Ð#Ð#ØÐrd   Ú_registered_cachesc                óŽ   — t        | d«      rt        | j                  «      st        | › d�«      ‚t        j                  | «       | 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Ã   Úcallabler8  ÚAttributeErrorr6  rL  ©rt  s    rG   Úclear_on_fresh_inductor_cacher<  W  s?   € ô
 �3˜Ô&¬h°s·±Ô.GÜ ˜uÐ$GÐHÓIÐIä×Ñ˜cÔ"Ø€Jrd   c                 ó:   — t         D ]  } | j                  «        Œ y)z&
    Clear all registered caches.
    N)r6  r8  r;  s    rG   Úclear_inductor_cachesr>  c  s   € ô "ò ˆØ�‰Õñrd   c                 ó"  — t        t        j                  j                  «       «      D ]í  } | j	                  d«      sŒt        j                  |    }|j
                  j                  «       D ]˜  }|j	                  d«      sŒt        ||«      }t        |t        j                  j                  j                  j                  «      sŒZ|j                  D ]0  }|j                  j                  j                   j#                  «        Œ2 Œš t        j                  | = Œï dt        j                  v rRt        j                  d   }t%        |j&                  j(                  j*                  «      `|j&                  j(                  `t/        j0                  «        y )Nz&torch._inductor.runtime.compile_tasks.Útriton_ztriton.runtime.driver)r  ÚsysÚmodulesrÊ  Ú
startswithÚ__dict__r?   rf   r@   Ú	_inductorÚruntimeÚtriton_heuristicsÚCachingAutotunerÚcompile_resultsÚkernelÚrunÚmodÚ__del__rÎ   ÚdriverÚactiveÚutilsÚinstanceÚgcÚcollect)Úmodule_nameÚmÚ	attr_namerJ  re  rL  s         rG   Úunload_xpu_triton_pydsrW  n  s,  € äœCŸK™K×,Ñ,Ó.Ó/ò %ˆØ×%Ñ%Ð&NÔOØÜ�K‰K˜Ñ$ˆØŸ™Ÿ™Ó*ò 	8ˆIØ×#Ñ# IÕ.Ü   IÓ.�ÜØœEŸO™O×3Ñ3×EÑE×VÑVõð #)×"8Ñ"8ò 8˜ØŸ™×)Ñ)×-Ñ-×5Ñ5Õ7ñ8ð	8ô �K‰K˜Ñ$ð%ð ¤#§+¡+Ñ-Ü�k‰kÐ1Ñ2ˆÜ�—‘×"Ñ"×(Ñ(Ó)Ð2Ø�J‰J×ÑÐ#ä‡J�J…Lrd   c              #  óh  ‡K  — t        «        t        j                  |¬«      Š	 t        j                  j                  t        j                  d‰i«      5  t        j                  d‰«       t        j                  j                  ‰d«      }t        j                  j                  t        j                  d|i«      5  d–— t        | t
        «      r¨t        | «      dk(  sJ d«       ‚t        j                  j                  |«      rtt        j                  |«      }| j!                  |D �ci c]D  }d	|vr>|t        j                  j#                  t        j                  j                  ||«      «      “ŒF c}«       ddd«       ddd«       |rLt%        «       r(t&        j(                  j+                  «       r
t-        «        t/        j0                  ‰ˆfd
„¬«       t        «        yc c}w # 1 sw Y   ŒoxY w# 1 sw Y   ŒsxY w# t2        $ r t        j5                  d‰«       ‚ w xY w# t        «        w xY w­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 dictz.lockc                ó4   •— t         j                  d‰|¬«      S )Nz*Failed to remove temporary cache dir at %s)Úexc_info)r    Úwarning)rò  Úpathr^  Úinductor_cache_dirs      €rG   r7  z&fresh_inductor_cache.<locals>.<lambda>²  s   ø€ ´S·[±[Ø@Ø&Ø%ð 6Aó 6€ rd   )Úonerrorz(on error, temporary cache dir kept at %s)r>  ÚtempfileÚmkdtempr   ÚpatchÚdictÚosÚenvironr    r¡   r`  r³  rf   rB   ÚexistsÚlistdirr,  ÚgetsizeÚ
is_windowsr@   r;   rA   rW  ÚshutilÚrmtreeÚ	Exceptionr_  )Úcache_entriesrY  ÚdeleteÚtriton_cache_dirÚfilesÚfra  s         @rG   Úfresh_inductor_cacheru  ‡  s·  øè ø€ ô Ôä!×)Ñ)¨cÔ2Ðð& Ü�Z‰Z�_‰_Ü�J‰JÐ2Ð4FÐGó
ñ 	ô �I‰IÐ3Ð5GÔHÜ!Ÿw™wŸ|™|Ð,>ÀÓIÐÜ—‘—‘¤§¡Ð.@ÐBRÐ-SÓTñ ÛÜ˜m¬TÔ2Ü˜}Ó-°Ò2ÐWÐ4WÓWÐ2Ü—w‘w—~‘~Ð&6Ô7Ü "§
¡
Ð+;Ó <˜Ø%×,Ñ,ð */öà$%Ø#*°!Ñ#3ð !"¤2§7¡7§?¡?´2·7±7·<±<Ð@PÐRSÓ3TÓ#UÑ Uòô÷÷	ñ$ ÜŒ|¤§	¡	× 6Ñ 6Ô 8Ü&Ô(ä�M‰MØ"óõ
ô 	Õùò3÷ð ú÷	ð 	ûôB ò Ü�‰Ð>Ð@RÔSØðûô 	Õüsn   ƒ!H2¥0G? ÁA'G3Â<A-G'Ä)A	G"Å2G'Å9G3ÆAG? ÇH2Ç"G'Ç'G0	Ç,G3Ç3G<Ç8G? Ç?!H È H# È#H/È/H2c           	     ó‚   — | j                   }t        t        | «      «      }t        t	        t        ||d¬«      «      «      S )NT)r  Úreverse)Ú__getitem__r˜   rB   r  r3  r†  )ÚseqÚgetterÚa_rs      rG   Úargsortr|  ¿  s1   € à�_‰_€FÜ
”�C“‹/€CÜ”œ ¨¸Ô>Ó?Ó@Ð@rd   c           	     ó2  ‡ — dˆ fd„}t        |«      D ��cg c]9  \  }}|t        |t        j                  «      r|j                  j
                  n|f‘Œ; }}}t        |t        j                  |«      ¬«      }|D ��cg c]  \  }}|‘Œ	 }}}|S c c}}w c c}}w )Nc                ón   •— | \  }}|\  }}dˆfd„} |||k  «      ry |||kD  «      ry||k  ry||kD  ryy)Nc                óN   •— t        | t        «      r| S ‰j                  | d¬«      S )NT)Úsize_oblivious)rf   ró   Úevaluate_expr)ró  r)  s    €rG   Úevaluatez*argsort_sym.<locals>.cmp.<locals>.evaluateÍ  s(   ø€ Ü˜$¤Ô%Ø�Ø×*Ñ*¨4ÀÐ*ÓEÐErd   r‹   r)   r   )ró  z%Union[bool, torch.SymInt, sympy.Expr]r{   ró   rƒ   )rß   rà   Úa_idxÚa_valÚb_idxÚb_valr‚  r)  s          €rG   r{  zargsort_sym.<locals>.cmpÉ  sT   ø€ Ø‰ˆˆuØ‰ˆˆuõ	Fñ
 �E˜E‘MÔ"ØÙ�E˜E‘MÔ"Øð
 �5Š=ØØ�5Š=ØØrd   r…  )rß   útuple[int, sympy.Expr]rà   r‡  r{   ru   )	r¨   rf   r@   r$   rX  ró  r†  rÕ   Ú
cmp_to_key)r)  ry  r{  rÒ  r  Úexprsr±   re  s   `       rG   Úargsort_symrŠ  Æ  sŠ   ø€ õô4   “n÷áˆC�ð 
œZ¨¬5¯<©<Ô8ˆa�f‰f�kŠk¸aÒ@ð€Eñ ô �5œi×2Ñ2°3Ó7Ô8€EØ %×&‘f�c˜1ŠcÐ&€FÑ&Ø€Mùóùó
 's   –>BÁ<Bc                ót   — | t         j                  k(  ryt        j                  d| ¬«      j                  «       S )Nr_   rƒ   ©r…   )r@   r  r•   Úelement_sizerŒ  s    rG   Úget_dtype_sizerŽ  ê  s-   € ð ”—‘ÒØÜ�;‰;�r Ô'×4Ñ4Ó6Ð6rd   c                  ó   — e Zd ZU ded<   y)ÚLineContextr   ÚcontextN©r|   r}   r~   Ú__annotations__rƒ   rd   rG   r�  r�  ó  s   … Ø„Lrd   r�  c                  ó"   — e Zd ZU ded<   ded<   y)ÚValueWithLineMaprÆ   rx   zlist[tuple[int, LineContext]]Úline_mapNr’  rƒ   rd   rG   r•  r•  ÷  s   … àƒJØ+Ô+rd   r•  c                  ó¶   — e Zd ZdZddd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Z	 	 	 	 dd„Zddd„Zddd„Zddd„Z	 d	 	 	 	 	 d d„Zd!d„Zdd„Zd"d„Zy)#ÚIndentedBufferé   c                ó    — g | _         || _        y rt   )Ú_linesÚ_indent)r‘  Úinitial_indents     rG   Ú__init__zIndentedBuffer.__init__   s   € ØGIˆŒØ%ˆ�rd   c                óž  — t        «       }d}g }| j                  D ]—  }t        |t        «      r
 |«       }|€1Œt        |t        «      r|j                  ||j                  f«       ŒK|}t        |t        «      sJ ‚|j                  |«       |j                  d«       |d|j                  d«      z   z  }Œ™ t        |j                  «       |«      S )Nr)   rÄ  )r
   r›  rf   ÚDeferredLineBaser�  rL  r‘  rÆ   ÚwriteÚcountr•  Úgetvalue)r‘  Úbufrµ   ÚlinemapÚliÚlines         rG   Úgetvaluewithlinemapz"IndentedBuffer.getvaluewithlinemap  s¹   € Ü‹jˆØˆØ13ˆØ—+‘+ò 	&ˆBÜ˜"Ô.Ô/Ù“t�Ø�<ØÜ˜B¤Ô,Ø—‘  2§:¡:˜Ô/Øà�Ü˜d¤CÔ(Ð(Ð(Ø�I‰I�dŒOØ�I‰I�dŒOØ��T—Z‘Z Ó%Ñ%Ñ%‰Að	&ô   §¡£°Ó8Ð8rd   c                ó6   — | j                  «       j                  S rt   )r¨  rx   ©r‘  s    rG   r£  zIndentedBuffer.getvalue  s   € Ø×'Ñ'Ó)×/Ñ/Ð/rd   c                óf  — t        «       }| j                  D ]‰  }t        |t        «      r
 |«       }|€Œt        |t        «      rŒ.|}t        |t
        «      sJ ‚|j                  d«      r|j                  |d d «       Œh|j                  |«       |j                  d«       Œ‹ |j                  «       S )Nú\r‹   rÄ  )	r
   r›  rf   r   r�  rÆ   Úendswithr¡  r£  )r‘  r¤  r¦  r§  s       rG   ÚgetrawvaluezIndentedBuffer.getrawvalue  sš   € Ü‹jˆØ—+‘+ò 	 ˆBÜ˜"Ô.Ô/Ù“t�Ø�<ØÜ˜B¤Ô,Øà�Ü˜d¤CÔ(Ð(Ð(à�}‰}˜TÔ"Ø—	‘	˜$˜s ˜)Õ$à—	‘	˜$”Ø—	‘	˜$•ð	 ð  �|‰|‹~Ðrd   c                ó8   — | j                   j                  «        y rt   )r›  Úclearrª  s    rG   r°  zIndentedBuffer.clear/  s   € Ø�‰×ÑÕrd   c                ó,   — t        | j                  «      S rt   )ró   r›  rª  s    rG   Ú__bool__zIndentedBuffer.__bool__2  s   € Ü�D—K‘KÓ Ð rd   c                ó:   — d| j                   | j                  z  z  S )NrÂ  )rœ  Útabwidthrª  s    rG   rþ  zIndentedBuffer.prefix5  s   € Ø�d—l‘l T§]¡]Ñ2Ñ3Ð3rd   c                ó&   — | j                  d«       y )NrÄ  ©Ú	writelinerª  s    rG   ÚnewlinezIndentedBuffer.newline8  s   € Ø�‰�tÕrd   c                ó   — t        |t        «      r| j                  j                  |«       y t        |t        «      r9| j                  j                  |j                  | j                  «       «      «       y |j                  «       r.| j                  j                  | j                  «       › |› �«       y | j                  j                  d«       y ©Nr§  )rf   r�  r›  rL  r   Úwith_prefixrþ  Ústrip©r‘  r§  s     rG   r·  zIndentedBuffer.writeline;  sˆ   € Ü�dœKÔ(Ø�K‰K×Ñ˜tÕ$Ü˜Ô.Ô/Ø�K‰K×Ñ˜t×/Ñ/°·±³Ó>Õ?Ø�Z‰ZŒ\Ø�K‰K×Ñ $§+¡+£- °°Ð7Õ8à�K‰K×Ñ˜rÕ"rd   c                ó4   — |D ]  }| j                  |«       Œ y rt   r¶  )r‘  Úlinesr§  s      rG   Ú
writelineszIndentedBuffer.writelinesE  s   € ð ò 	!ˆDØ�N‰N˜4Õ ñ	!rd   c                óH   ‡ ‡— t         j                  dˆˆ fd„«       } |«       S )Nc               3  ó    •K  — ‰xj                   ‰ z  c_         	 d –— ‰xj                   ‰ z  c_         y # ‰xj                   ‰ z  c_         w xY w­wrt   ©rœ  )Úoffsetr‘  s   €€rG   r¡  z"IndentedBuffer.indent.<locals>.ctxL  s9   øè ø€ à�LŠL˜FÑ"�Lð'Ûà—’ Ñ&–ø�—’ Ñ&–üs   ƒAš4 žA´AÁA©r{   úIterator[None])Ú
contextlibÚcontextmanager)r‘  rÄ  r¡  s   `` rG   ÚindentzIndentedBuffer.indentK  s$   ù€ Ü	×	"Ñ	"õ	'ó 
#ð	'ñ ‹uˆrd   c                ó.   — | xj                   |z  c_         y rt   rÃ  ©r‘  rÄ  s     rG   Ú	do_indentzIndentedBuffer.do_indentV  ó   € Ø�Š˜ÑŽrd   c                ó.   — | xj                   |z  c_         y rt   rÃ  rË  s     rG   Údo_unindentzIndentedBuffer.do_unindentY  rÍ  rd   c           	     ó’  — t        |t        «      rÖt        d«      }|j                  D ]E  }t        |t        «      rŒ|sŒt        |t        |«      t        |j                  «       «      z
  «      }ŒG t        j                  |«      rd}|j                  D ]P  }t        |t        «      r| j                  j                  |«       Œ/t        j                  | |t        |«      d  «       ŒR y t        j                  |«      }|r|j                  «       }|sy |j                  «       }|j!                  d«      D ]  }| j                  |«       Œ y )NÚinfr   rÄ  )rf   r˜  Úfloatr›  r�  ÚminrB   rŸ  ÚmathÚisinfrL  r·  ru   ÚtextwrapÚdedentÚrstripr  )r‘  Ú
other_coder¼  r×  r§  r  s         rG   ÚsplicezIndentedBuffer.splice\  s  € ô �j¤.Ô1Ü˜5“\ˆFØ"×)Ñ)ò I�Ü! $¬Õ4ºÜ  ¬¨T«´S¸¿¹»Ó5GÑ)GÓH‘FðIô �z‰z˜&Ô!Ø�Ø"×)Ñ)ò H�Ü˜d¤KÔ0Ø—K‘K×&Ñ& tÕ,ä"×,Ñ,¨T°4¼¸F»¸Ð3FÕGñ	Hô "Ÿ™¨Ó4ˆJÙØ'×.Ñ.Ó0�
ÙØØ#×*Ñ*Ó,ˆJØ×%Ñ% dÓ+ò "�Ø—‘˜qÕ!ñ"rd   c                ó†   — t        | j                  ¬«      }| j                  D �cg c]
  } ||«      ‘Œ c}|_        |S c c}w ©N)r�  )r˜  rœ  r›  )r‘  rò  rº   r§  s       rG   rk   zIndentedBuffer.mapu  s4   € Ü¨D¯L©LÔ9ˆØ-1¯[©[Ö9 T‘d˜4•jÒ9ˆŒ
Øˆ
ùò :s   ¥>c                ó@   — t        | «      › d| j                  «       › d�S )Nrí  rî  )rÎ   r£  rª  s    rG   Ú__repr__zIndentedBuffer.__repr__z  s    € Ü�t“*�˜Q˜tŸ}™}›Ð/¨qÐ1Ð1rd   c                óÔ   — | j                   |j                   k(  sJ ‚t        | j                   ¬«      }|j                  | j                  «       |j                  |j                  «       |S rÜ  )rœ  r˜  rÀ  r›  )r‘  Úotherrº   s      rG   Ú__add__zIndentedBuffer.__add__}  sK   € Ø�|‰|˜uŸ}™}Ò,Ð,Ð,Ü¨D¯L©LÔ9ˆà�‰�t—{‘{Ô#Ø�‰�u—|‘|Ô$Øˆ
rd   N©r   )r�  ru   r{   r“  )r{   r•  ©r{   rÆ   ©r{   r“  ©r{   ró   )r§  z)Union[LineContext, DeferredLineBase, str]r{   r“  )r¿  z3Sequence[Union[LineContext, DeferredLineBase, str]]r{   r“  rr   )rÄ  ru   r{   ú'contextlib.AbstractContextManager[None])rÄ  ru   r{   r“  )F)rÙ  zUnion[IndentedBuffer, str]r¼  ró   r{   r“  )rò  zCallable[[Any], Any]r{   r˜  )rà  r   r{   r˜  )r|   r}   r~   r´  rž  r¨  r£  r®  r°  r²  rþ  r¸  r·  rÀ  rÉ  rÌ  rÏ  rÚ  rk   rÞ  rá  rƒ   rd   rG   r˜  r˜  ý  s‹   „ Ø€Hô&ó9ó(0óó(ó!ó4óó#ð!ØHð!à	ó!ô	ôôð EJð"Ø4ð"Ø=Að"à	ó"ó2ó
2ôrd   r˜  c                  ó(   ‡ — e Zd Zdˆ fd„Zdd„Zˆ xZS )ÚFakeIndentedBufferc                ó"   •— t         ‰| �  «        y rt   )Úsuperrž  )r‘  Ú	__class__s    €rG   rž  zFakeIndentedBuffer.__init__‡  s   ø€ Ü‰ÑÕrd   c                óV   — |dk(  rt         j                  | |«      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     rG   rî  z#FakeIndentedBuffer.__getattribute__Š  s;   € Ø�;ÒÜ×*Ñ*¨4°Ó6Ð6ÜØ! $ ð (=ð =ó
ð 	
rd   rä  )r¦   rÆ   r{   r   )r|   r}   r~   rž  rî  Ú__classcell__©rë  s   @rG   rè  rè  †  s   ø„ õ÷
rd   rè  c               #  ó¼   K  — t         j                  t         j                  }} 	 d –— | |ct         _        t         _        y # | |ct         _        t         _        w xY w­wrt   )rA  ÚstdoutÚstderr)Úinitial_stdoutÚinitial_stderrs     rG   Úrestore_stdout_stderrrö  •  s@   è ø€ ä%(§Z¡Z´·±�N€Nð@Ûà!/°ÐŒŒ
”C•Jø °ÐŒŒ
”C•Jüs   ‚!A¤A  ¨AÁ AÁAc                  óP   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zy
)r   z.A line that can be 'unwritten' at a later timec                ó6   — |j                  «       sd}|| _        y rº  )r¼  r§  r½  s     rG   rž  zDeferredLineBase.__init__¡  s   € Ø�z‰zŒ|ØˆDØˆ�	rd   c                ó   — t         ‚)zJReturns either self.line or None to indicate the line has been 'unwritten'©r²  rª  s    rG   r’  zDeferredLineBase.__call__¦  ó   € ä!Ð!rd   c                ó   — t         ‚)z3Returns a new deferred line with the same conditionrú  r½  s     rG   Ú	_new_linezDeferredLineBase._new_lineª  rû  rd   c                ó@   — | j                  |› | j                  › �«      S rt   ©rý  r§  )r‘  rþ  s     rG   r»  zDeferredLineBase.with_prefix®  s   € Ø�~‰~  ¨¯©¨Ð4Ó5Ð5rd   c                óT   — | j                  | j                  j                  «       «      S rt   )rý  r§  rŸ  rª  s    rG   rŸ  zDeferredLineBase.lstrip±  s   € Ø�~‰~˜dŸi™i×.Ñ.Ó0Ó1Ð1rd   c                ó>   — | j                  | j                  |   «      S rt   rÿ  )r‘  rÌ   s     rG   rx  zDeferredLineBase.__getitem__´  s   € Ø�~‰~˜dŸi™i¨Ñ.Ó/Ð/rd   c                ó,   — t        | j                  «      S rt   )ró   r§  rª  s    rG   r²  zDeferredLineBase.__bool__·  s   € Ü�D—I‘I‹Ðrd   c                ó,   — t        | j                  «      S rt   )rB   r§  rª  s    rG   Ú__len__zDeferredLineBase.__len__º  s   € Ü�4—9‘9‹~Ðrd   N)r§  rÆ   )r{   zUnion[str, None])r§  rÆ   r{   r   )rþ  rÆ   r{   r   )r{   r   )rÌ   zUnion[int, slice]r{   r   rå  ©r{   ru   )r|   r}   r~   r   rž  r’  rý  r»  rŸ  rx  r²  r  rƒ   rd   rG   r   r   ž  s-   „ Ù8óó
"ó"ó6ó2ó0óôrd   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())`c                ó@   •— t         ‰| �  |«       || _        || _        y rt   )rê  rž  r  Úvalue_fn)r‘  r  r	  r§  rë  s       €rG   rž  zDelayReplaceLine.__init__Á  s   ø€ Ü‰Ñ˜ÔØˆŒØ ˆ�rd   c                ój   — | j                   j                  | j                  | j                  «       «      S rt   )r§  Úreplacer  r	  rª  s    rG   r’  zDelayReplaceLine.__call__Æ  s#   € Ø�y‰y× Ñ  §¡¨4¯=©=«?Ó;Ð;rd   c                óD   — t        | j                  | j                  |«      S rt   )r  r  r	  r½  s     rG   rý  zDelayReplaceLine._new_lineÉ  s   € Ü §¡¨$¯-©-¸Ó>Ð>rd   )r  rÆ   r	  zCallable[[], str]r§  rÆ   rã  )r§  rÆ   r{   r  )r|   r}   r~   r   rž  r’  rý  rï  rð  s   @rG   r  r  ¾  s   ø„ Ù@õ!ó
<÷?rd   r  c                óÜ  — t        | t        j                  «      r| }nt        j                  t        «       | «      }t	        j
                  |«      }t        j                  j                  rC|j                  €J ‚|j                  dk  s|j                  dk(  rt        j                  d«       yy|j                  dk(  rdnd}|j                  }||k  rt        j                  d	||d
œ¬«       yy)Né	   é
   z6GPU arch does not support max_autotune_gemm mode usageFTr;   r\   éD   z,Not enough SMs to use max_autotune_gemm mode)Úmin_smsÚ	avail_sms)Úextra)rf   r@   r†   rH   r   ÚcreateÚversionÚhipÚmajorr    r_  rÎ   Úmulti_processor_count)Úindex_or_devicer†   Úpropr  r  s        rG   Ú
is_big_gpur  Í  sÈ   € ä�/¤5§<¡<Ô0Ø ‰ä—‘œl›n¨oÓ>ˆä×"Ñ" 6Ó*€Dô ‡}�}×ÒØ�z‰zÐ%Ð%Ð%Ø�:‰:˜Š>˜TŸZ™Z¨2Ò-Ü�K‰KÐPÔQØØà—K‘K 5Ò(‰b¨b€GØ×*Ñ*€IØ�7ÒÜ�‰Ø:Ø%°IÑ>ð 	ô 	
ð Ørd   c                 óT   — t         j                  j                  d«      j                  S )Nr9   )r@   r9   Úget_device_propertiesr  rƒ   rd   rG   Úget_max_num_smsr  ê  s   € ä�:‰:×+Ñ+¨FÓ3×IÑIÐIrd   c                 ód   — t         j                  j                  «       } t        «       | �| z
  S dz
  S )zFHandle experimental carveout if set otherwise return hardware SM countr   )r@   rÁ   Ú_get_sm_carveout_experimentalr  )Úcarveouts    rG   Úget_num_smsr"  ï  s1   € ô �x‰x×5Ñ5Ó7€HÜÓ¨HÐ,@ ÑHÐHÀaÑHÐHrd   c                ó’   — ddl m}m} |j                  d«      }t	        «       | z  t
        z  } |||| |j                  «       ¬«      S )zKBuilds and returns a WorkspaceArg for the device side TMA workspace buffer.r)   )r*   ÚWorkspaceZeroModeF)r¢  Ú	zero_moder†   Ú
outer_name)Úcodegen.commonr*   r$  Ú	from_boolr"  ÚTMA_DESCRIPTOR_SIZEÚunique_name)Únum_tma_descriptorsr†   r*   r$  r%  r}  s         rG   Úget_tma_workspace_argr,  ö  sO   € ÷
 @à!×+Ñ+¨EÓ2€IÜ‹=Ð.Ñ.Ô1DÑD€DÙØØØØ+�<×+Ñ+Ó-ô	ð rd   c                 ój   — t         j                  xs" t         j                  xs t         j                  S rt   )rX   Úmax_autotuneÚmax_autotune_gemmÚsearch_autotune_cacherƒ   rd   rG   Úuse_max_autotuner1    s&   € ä×ÑÒWœv×7Ñ7ÒW¼6×;WÑ;Wðrd   c                óŽ   — t        | j                  j                  «      xr% | j                  |v xr t	        | j                  «      S rt   )Úis_gpur†   rÎ   r…   r  )ÚlayoutÚallowed_layout_dtypess     rG   Ú_use_template_for_gpur6    s>   € ô 	ˆv�}‰}×!Ñ!Ó"ò 	&Ø�L‰LÐ1Ð1ò	&ä�v—}‘}Ó%ðrd   c                ó¾   — | j                  «       t        j                  j                  «       j                  d«      D �cg c]  }|j	                  «       ‘Œ c}v S c c}w ©Nú,)ÚupperrX   Úmax_autotune_gemm_backendsr  r¼  ©ÚbackendrD   s     rG   Ú_use_autotune_backendr>    óM   € Ø�=‰=‹?Ü!×<Ñ<×BÑBÓD×JÑJÈ3ÓOöØˆ�‰�	òð ð ùò ó   ¿Ac                ó¾   — | j                  «       t        j                  j                  «       j                  d«      D �cg c]  }|j	                  «       ‘Œ c}v S c c}w r8  )r:  rX   Úmax_autotune_conv_backendsr  r¼  r<  s     rG   Ú_use_conv_autotune_backendrC    r?  r@  F)Úenable_int32Úenable_float8c               ór  — ddl m}m} t        j                  t        j
                  t        j                  g}|r>t        j                  t        j
                  t        j                  t        j                  g}|r/|j                  t        j                  t        j                  g«       t        | j                  j                  «      xr t        | |«      xs) | j                  j                  dk(  xr | j                  |v xr6 t!        «       xr* t#        d«      xr  || j                  |j$                  «      S )Nr)   )ÚBackendFeatureÚhas_backend_featurerÊ   ÚTRITON)r'  rG  rH  r@   r  r  r  r  Úextendrý   rþ   r3  r†   rÎ   r6  r…   r1  r>  ÚTRITON_TEMPLATES)r4  rD  rE  rG  rH  Úlayout_dtypess         rG   Úuse_triton_templaterM  #  sî   € ÷ Dä—]‘]¤E§N¡N´E·M±MÐB€MÙÜŸ™¬¯©¼¿¹ÄuÇ{Á{ÐSˆÙØ×Ñœe×1Ñ1´5×3DÑ3DÐEÔFô �v—}‘}×)Ñ)Ó*ò AÜ)¨&°-Ó@òOð —‘×"Ñ" eÑ+ÒM°·±ÀÐ0Mò		Pô Óò		Pô " (Ó+ò		Pñ   §¡¨~×/NÑ/NÓOðrd   c                 óœ   ‡‡— ddl m} ddlmŠ dˆfd„Št        j
                  j                  xr  |«       xr t        ˆfd„| D «       «      S )Nr   )Úhas_triton_tma_devicer)   r#  c                ó¼  •— t        | j                  «       «      dk7  ry| j                  «       }|t        j                  t        j
                  fvry| j                  «       }|j                  «       }|j                  «       s|sy|j                  d   }|r|j                  d   }||j                  z  }‰j                  j                  j                  |t        «      S )Né   Fr)   r   )rB   Úget_sizeÚ	get_dtyper@   r  r  Ú
get_layoutÚis_transposedÚis_contiguousr}  Úitemsizer'  r(  Ústatically_known_multiple_ofÚTMA_ALIGNMENT)rD   r…   r4  Ú
transposedÚ	inner_dimÚinner_bytesr$  s         €rG   Ú_is_tma_compatiblez3use_triton_tma_template.<locals>._is_tma_compatible@  s®   ø€ Üˆq�z‰z‹|Ó Ò!Øà—‘“ˆØœŸ™¬¯©Ð7Ñ7Øà—‘“ˆØ×)Ñ)Ó+ˆ
Ø×$Ñ$Ô&©*Øà—K‘K ‘Nˆ	ÙØŸ™ A™ˆIØ %§.¡.Ñ0ˆØ�w‰w×Ñ×<Ñ<¸[Ì-ÓXÐXrd   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wrt   rƒ   )r�   rU  r]  s     €rG   r’   z*use_triton_tma_template.<locals>.<genexpr>V  s   øè ø€ Ò8¨!Ñ" 1×%Ñ8ùó   ƒ©rD   r1   r{   ró   )Útorch.utils._tritonrO  r&  r$  rX   r[  Úenable_persistent_tma_matmulrj   )ÚmatricesrO  r$  r]  s     @@rG   Úuse_triton_tma_templaterd  ;  sA   ù€ Ý9åõYô( 	�‰×2Ñ2ò 	9Ù!Ó#ò	9äÓ8¨xÔ8Ó8ðrd   c                óø  — ddl m} |j                  j                  j	                  ||z  |z  d¬«      }|dk  s|t
        j                  j                  k  ryddlm	} t        j                  j                  ryt        j                  t        j                  t        j                  t        j                   g}t#        | |«      xr t%        «       xr t'        d«      }|r |«       st(        j+                  d	«       y|S )
Nr)   r#  r‹   ©Ú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_hintrX   r9   Úcutlass_backend_min_gemm_sizeÚcodegen.cuda.cutlass_utilsrh  r@   r  r  r  r  r  r  r6  r1  r>  r    r_  )	r4  rU  r¼  r  r$  Ú	gemm_sizerh  rL  rº   s	            rG   Úuse_cutlass_templatern  Z  sÇ   € Ýà—‘× Ñ ×*Ñ*¨1¨q©5°1©9¸rÐ*ÓB€IØ�A‚~˜¤V§[¡[×%NÑ%NÒNØÝ>ô ‡}�}×ÒØä—]‘]¤E§N¡N´E·M±MÄ5Ç;Á;ÐO€Mä˜f mÓ4ò 	-ÜÓò	-ä! )Ó,ð ñ Ù!Ô#Ü�K‰Kð4ôð
 Ø€Jrd   c                óT   — t         j                  j                  | «      j                  S rt   )r@   r9   r  ÚgcnArchName©r†   s    rG   Ú_rocm_native_device_arch_namerr  x  s   € ä�:‰:×+Ñ+¨FÓ3×?Ñ?Ð?rd   c                 óÌ   — 	 dd l } ddlm}m} ddlm} t        j                  j                  | j                  «      }||||fS # t        $ r dd„}dd„} G d„ d«      }d }Y Œ%w xY w)	Nr   )Úgen_ops_libraryÚgen_ops_preselected)ÚCKGemmOperationc                 ó   — g S rt   rƒ   rƒ   rd   rG   rt  z*try_import_ck_lib.<locals>.gen_ops_libraryŽ  ó   € ØˆIrd   c                 ó   — g S rt   rƒ   rƒ   rd   rG   ru  z.try_import_ck_lib.<locals>.gen_ops_preselected‘  rx  rd   c                  ó   — e Zd Zy)ú*try_import_ck_lib.<locals>.CKGemmOperationN)r|   r}   r~   rƒ   rd   rG   rv  r{  ”  s   „ Ørd   rv  )r{   rH  )Úck4inductorÚ(ck4inductor.universal_gemm.gen_instancesrt  ru  Úck4inductor.universal_gemm.oprv  rg  r`  ÚdirnameÚ__file__rÅ   )r|  rt  ru  rv  Úpackage_dirnames        rG   Útry_import_ck_libr‚  }  sl   € ðÛ÷	
õ	
ô Ÿ'™'Ÿ/™/¨+×*>Ñ*>Ó?ˆð ˜OÐ-@À/ÐQÐQøô ò ó	ó	÷	ñ 	ð Šðús   ‚;A ÁA#Á"A#c                óÂ  — t        «       syt        j                  j                  sy| j                  j
                  dk(  syt        | j                  «      }t        j                  j                  D �ci c]  }|j                  d«      d   |“Œ c}xs |j                  d«      d   |i}|j                  «       t        j                  j                  z  D �cg c]  }||   ‘Œ	 }}|sy| j                  t        j                  t        j                  t        j                   fvryt#        «       \  }}}}|st$        j'                  d«       yt        j(                  «       r|t        j                  _        t        j                  j*                  st$        j'                  d«       y|t        j                  j*                  k7  rt$        j'                  d«       yyc c}w c c}w )	NFr9   ú:r   z,Please pip install Composable Kernel packagez,Please set TORCHINDUCTOR_CK_DIR env variablezInvalid path to CK libraryT)r1  r@   r  r  r†   rÎ   rr  rX   ÚrocmÚarchr  rÊ  Úck_supported_archr…   r  r  r  r‚  r    r_  Ú	is_fbcodeÚck_dir)r4  Únative_archr  Úrequested_archsÚrequested_supported_archsÚck_package_dirnamer±   s          rG   Úuse_ck_templaterŽ  ›  s|  € äÔØä�=‰=×ÒØà�=‰=×Ñ Ò'Øô 0°·±Ó>€KÜ39·;±;×3CÑ3CÖD¨a�q—w‘w˜s“| A‘¨Ñ)ÒDò Ø×Ñ˜#Ó˜qÑ! ;ðI€Oð
 !×%Ñ%Ó'¬&¯+©+×*GÑ*GÑGö!àð 	˜Óð!Ðð !ñ %Øà‡|�|œEŸM™M¬5¯>©>¼5¿=¹=ÐIÑIØä"3Ó"5ÑÐ˜˜1˜aáÜ�‰ÐBÔCØä×ÑÔØ/Œ�‰Ôä�;‰;×ÒÜ�‰ÐBÔCØàœVŸ[™[×/Ñ/Ò/Ü�‰Ð0Ô1Øàùò= Eùò!s   Á2GÃGc                ó¢   — ddl m} t        d«      xr= t        | «      xr0 |j                  j
                  j                  ||z  |z  d¬«      dkD  S )Nr)   r#  ÚCKr‹   rf  r   )r&  r$  r>  rŽ  r'  r(  rj  )r4  rU  r¼  r  r$  s        rG   Úuse_ck_gemm_templater‘  É  sR   € Ýô 	˜dÓ#ò 	CÜ˜FÓ#ò	Cà�G‰G×Ñ×&Ñ& q¨1¡u¨q¡y¸2Ð&Ó>ÀÑBðrd   c                ó2   — t        d«      xr t        | «      S )Nr�  )rC  rŽ  ©r4  s    rG   Úuse_ck_conv_templater”  Ó  s   € Ü% dÓ+ÒG´ÀÓ0GÐGrd   c                óL   — t        «       xr | j                  j                  dk(  S r\  )r1  r†   rÎ   r“  s    rG   Ú_use_template_for_cpur–  ×  s   € ÜÓÒ= &§-¡-×"4Ñ"4¸Ñ"=Ð=rd   c                ó”   — ddl m} t        |j                  |«      sJ ‚t	        | ||d¬«      xr |j                  j                  «       S )Nr)   )r2   F)Úrequire_constant_mat2)r¦  r2   rf   r4  Úuse_cpp_gemm_templaterV  )r4  Úmat1Úmat2r2   s       rG   Úuse_cpp_bmm_templaterœ  Û  sE   € õ ä�d—k‘k 6Ô*Ð*Ð*ô 	˜f d¨DÈÔNò 	(Ø�K‰K×%Ñ%Ó'ðrd   c                ó`  — ddl m} ddlm} ddlm}	 ddlm}
 t        | «      rt        d«      syt        j                  j                  sy|j                  «       t        j                  t        j                   fv }t        j"                  t        j$                  t        j&                  t        j                  g} |
|||r| j(                  nd ||¬«      \  }}}} }}t+        ||f«      ryt-        ||j.                  «      r|j1                  «       } |	|j                  «       «      \  }} |d	||||j                  «       |j                  «       |t3        «       | |¬
«
      }dd„}| j(                  |v xr= |d uxr7  ||«      xr- t-        ||j4                  «      xr |j7                  «       xs | S )Nr)   r¥  )Úcreate_micro_gemm)Ú*get_gemm_template_output_and_compute_dtype)Úmm_argsÚCPPF)Ú	out_dtypeÚmat2_transposedÚuse_4x2_dimÚ
micro_gemm)Úinput_dtypeÚinput2_dtypeÚoutput_dtypeÚnum_threadsÚuse_refÚq_group_sizec                óN   — | j                  «        | j                  «       d   dk(  S )Nr‹   r)   )Úfreeze_layoutÚ
get_stride©rD   s    rG   Úis_last_dim_stride1z2use_cpp_gemm_template.<locals>.is_last_dim_stride1  s"   € Ø	�‰ÔØ�|‰|‹~˜bÑ! QÑ&Ð&rd   r`  )r§  r¦  Úcodegen.cpp_micro_gemmrž  Úcodegen.cpp_utilsrŸ  Úkernel.mm_commonr   r–  r>  rX   ÚcppÚweight_prepackrS  r@   r  r	  r  r  Úhalfr…   Úhas_free_symbolsrf   ÚBaseViewÚunwrap_viewÚparallel_num_threadsrã  Úis_module_buffer)r4  rš  r›  r£  r˜  Úis_woq_int4r«  r¦  rž  rŸ  r   Ú	int8_gemmrL  rU  r¼  r  r¨  r±   r¥  r°  s                       rG   r™  r™  è  s�  € õ Ý9ÝMÝ)ä  Ô(Ô0EÀeÔ0LØä�:‰:×$Ò$Øà—‘Ó ¤U§[¡[´%·*±*Ð$=Ð=€IÜ—]‘]¤E§N¡N´E·J±JÄÇÁÐL€MÙ")ØØÙ"+�&—,’,°Ø'Øô#Ñ€A€qˆ!ˆV�T˜4ô ˜˜A˜ÔØÜ�$˜Ÿ™Ô$Ø×ÑÓ!ˆá@ÀÇÁÓAQÓR�O€L�!Ù"ØØ	Ø	Ø	Ø—N‘NÓ$Ø—^‘^Ó%Ø!Ü(Ó*Ø�Ø!ô€Jó'ð
 	�‰˜Ð%ò 	CØ˜dÐ"ò	Cá Ó%ò	Cô �t˜RŸ]™]Ó+ò	Cð ×"Ñ"Ó$ÒAÐ,AÐ(Aðrd   c                 ó2   — t        «        xs t        d«      S )NÚATEN)r1  r>  rƒ   rd   rG   Úuse_aten_gemm_kernelsrÀ  '  s   € ÜÓ!Ð!ÒBÔ%:¸6Ó%BÐBrd   c                  óT   — e Zd ZU  ej                  d«      Zded<   dd„Zdd„Zd	d„Z	y)
ÚDebugDirManagerr   rÆ   Úprev_debug_namec                ó@   — t        t        j                  «      | _        y rt   )r1  rÂ  Úcounterrç   rª  s    rG   rž  zDebugDirManager.__init__/  s   € Ü”×.Ñ.Ó/ˆ�rd   c                óè   — t         j                  j                  j                  | _        | j                  › d| j
                  › �| _        | j                  t         j                  j                  _        y )NÚ_tmp_)r@   Ú_dynamorX   Údebug_dir_rootrÃ  rç   Únew_namerª  s    rG   Ú	__enter__zDebugDirManager.__enter__2  sM   € Ü$Ÿ}™}×3Ñ3×BÑBˆÔØ×/Ñ/Ð0°°d·g±g°YÐ?ˆŒØ.2¯m©mŒ�‰×ÑÕ+rd   c                ó”   — t        j                  | j                  «       | j                  t        j
                  j                  _        y rt   )rm  rn  rÊ  rÃ  r@   rÈ  rX   rÉ  )r‘  rm   s     rG   Ú__exit__zDebugDirManager.__exit__7  s*   € Ü�‰�d—m‘mÔ$Ø.2×.BÑ.BŒ�‰×ÑÕ+rd   Nrä  )rm   r   r{   r“  )
r|   r}   r~   ræ  r¢  rÅ  r“  rž  rË  rÍ  rƒ   rd   rG   rÂ  rÂ  +  s(   … Øˆi�o‰o˜aÓ €GØÓó0ó<ô
Crd   rÂ  c                óæ   ‡— ddl m} g Šdˆfd„}t        j                  j	                  |d|«      5  t
        j                  j                  «         | |i |¤Ž}d d d «       |‰fS # 1 sw Y   ‰fS xY w)Nr)   r-   c                ó(   •— ‰j                  | «       y rt   ©rL  ©ÚcodeÚsource_codess    €rG   Úsave_output_codez*run_and_get_code.<locals>.save_output_codeE  ó   ø€ Ø×Ñ˜DÕ!rd   rÔ  ©rÒ  rÆ   r{   r“  ©r'  r.   r   re  rí  r@   rÈ  Úreset)r«   rm   rW  r.   rÔ  re  rÓ  s         @rG   Úrun_and_get_coderÙ  <  su   ø€ õ
 %à €Lõ"ô 
�‰×	Ñ	˜=Ð*<Ð>NÓ	Oñ %Ü�‰×ÑÔÙ�TÐ$˜VÑ$ˆ÷%ð �<ÐÐ÷%ð �<ÐÐús   ±'A$Á$A0c                ó¨   — t        | g|¢­i |¤Ž\  }}g }|D ]6  }|j                  t        j                  d|t        j                  «      «       Œ8 ||fS )Nz	'''.*?''')rÙ  rJ  ÚreÚfindallÚDOTALL)r«   rm   rW  re  rÓ  ÚkernelsrÒ  s          rG   Úrun_and_get_kernelsrß  N  sZ   € ô ,¨BÐ@°Ò@¸Ñ@Ñ€FˆLØ€GØò BˆØ�‰”r—z‘z ,°´b·i±iÓ@ÕAðBà�7ˆ?Ðrd   c                ó&   ‡ — dˆ fd„}t        |«      S )Nc                 óR   •—  ‰«       } | j                  «       j                  «        | S rt   )rª   Úbackward)re  r«   s    €rG   Úrun_with_backwardz1run_fw_bw_and_get_code.<locals>.run_with_backwardY  s!   ø€ Ù“ˆØ�
‰
‹×ÑÔØˆrd   )r{   r   )rÙ  )r«   rã  s   ` rG   Úrun_fw_bw_and_get_coderä  X  s   ø€ õô
 Ð-Ó.Ð.rd   c                óX  ‡‡— ddl m} g Šdˆfd„Šd	ˆfd„}t        j                  j	                  |d|«      5  t        j                  j	                  |d‰«      5  t
        j                  j                  «         | |i |¤Ž}ddd«       ddd«       ‰S # 1 sw Y   ŒxY w# 1 sw Y   ‰S xY w)
zLGet the inductor-generated code, but skip any actual compilation or running.r)   r-   c                ó(   •— ‰j                  | «       y rt   rÐ  rÑ  s    €rG   rÔ  z"get_code.<locals>.save_output_codeg  rÕ  rd   c                óÐ   •—  G d„ d«      }| j                   r| j                  «       n| j                  «       \  }} ‰|j                  «       |r ‰|j                  «        |«       S )Nc                  ó    — e Zd ZdZdd„Zdd„Zy)ú@get_code.<locals>.patched_compile_to_module.<locals>.DummyModulez4This is empty to replace the generated triton modulec                 ó   — y rt   rƒ   rª  s    rG   rž  zIget_code.<locals>.patched_compile_to_module.<locals>.DummyModule.__init__n  s   € Ørd   c                 ó   — y rt   rƒ   r�  s      rG   ÚcallzEget_code.<locals>.patched_compile_to_module.<locals>.DummyModule.callq  s   € àrd   Nrä  ©rm   r   rW  r   r{   r“  )r|   r}   r~   r   rž  rì  rƒ   rd   rG   ÚDummyModuleré  k  s   „ ÙFóôrd   rî  )Úcpp_wrapperÚcodegen_with_cpp_wrapperÚcodegenrx   )r‘  rî  Úwrapper_codeÚkernel_coderÔ  s       €rG   Úpatched_compile_to_modulez+get_code.<locals>.patched_compile_to_modulej  s]   ø€ ÷	ñ 	ð 04×/?Ò/?ˆD×)Ñ)Ô+ÀTÇ\Á\Ã^ñ 	"ˆ�kñ
 	˜×+Ñ+Ô,ÙÙ˜[×.Ñ.Ô/á‹}Ðrd   Úcompile_to_modulerÔ  NrÖ  )r‘  r.   r{   r   r×  )r«   rm   rW  r.   rô  r±   rÔ  rÓ  s         @@rG   Úget_coderö  a  s¢   ù€ å$à €Lõ"õô. 	�
‰
×ÑØÐ.Ð0Ió	
ñ ô 	�
‰
×Ñ˜-Ð);Ð=MÓNñ	 ô 	�‰×ÑÔá�Ð˜Ñˆ÷ ÷  ð Ð÷ ð  ú÷  ð Ðús#   ¸"BÁ'BÂBÂB	ÂBÂB)c                ó|   — t        | g|¢­i |¤Ž}dt        |«      cxk  rdk  sn J dt        |«      › �«       ‚|d   S ©Nr)   rQ  z%expected one or two code outputs got r   )rö  rB   )r«   rm   rW  rÓ  s       rG   Úget_triton_coderù  �  sQ   € Ü˜BÐ0 Ò0¨Ñ0€Là”�LÓ!Ô& QÔ&ð Ø
/´°LÓ0AÐ/BÐCóÐ&ð ˜‰?Ðrd   c                ó‚   — t        | g|¢­i |¤Ž\  }}dt        |«      cxk  rdk  sn J dt        |«      › �«       ‚|d   S rø  )rÙ  rB   )r«   rm   rW  r±   rÓ  s        rG   Úrun_and_get_triton_coderû  –  sU   € Ü& rÐ;¨DÒ;°FÑ;�O€A€|à”�LÓ!Ô& QÔ&ð Ø
/´°LÓ0AÐ/BÐCóÐ&ð ˜‰?Ðrd   c                óÖ   ‡‡‡— ddl mŠ ddlm} |j                  Šg Šdˆˆˆfd„}t
        j                  j                  |d|«      5   | |i |¤Ž}d d d «       |‰fS # 1 sw Y   ‰fS xY w)Nr   r-   r5   c                 ó^   •—  ‰| i |¤Ž | d   }t        |‰«      sJ ‚‰j                  |«       y )NrQ  )rf   rL  )rm   rW  r'  r.   Úgraph_loweringsÚ	real_inits      €€€rG   Ú	fake_initz-run_and_get_graph_lowering.<locals>.fake_init¨  s7   ø€ Ù�4Ð"˜6Ò"Ø�Q‘ˆÜ˜% Ô/Ð/Ð/Ø×Ñ˜uÕ%rd   rž  rí  )Útorch._inductor.graphr.   Útorch._inductor.output_coder6   rž  r   re  rí  )	r«   rm   rW  r6   r   re  r.   rþ  rÿ  s	         @@@rG   Úrun_and_get_graph_loweringr  Ÿ  sq   ú€ õ 4Ý;à×(Ñ(€IØ€O÷&ô 
�‰×	Ñ	˜?¨J¸	Ó	Bñ %Ù�TÐ$˜VÑ$ˆ÷%ð �?Ð"Ð"÷%ð �?Ð"Ð"ús   Á	AÁA(c              #  óÌ   K  — ddl m} |j                  |    }	 t        j                  ||«      |j                  | <   d–— ||j                  | <   y# ||j                  | <   w xY w­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       rG   Úoverride_loweringr  ´  s`   è ø€ õ )à× Ñ  Ñ)€Gð.Ü&/×&7Ñ&7¸ÀWÓ&Mˆ×Ñ˜7Ñ#Ûà&-ˆ×Ñ˜7Ò#ø gˆ×Ñ˜7Ò#üs   ‚A$™'A Á A$ÁA!Á!A$c                ó’   ‡ ‡‡— ddl m} |j                  Šdˆˆˆ fd„}t        j                  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                óB   •—  ‰| |«        ‰| |«      }‰r	 ‰| |«       |S rt   rƒ   )r�  rÇ  Úoutr  Úpost_fnÚpre_fns      €€€rG   r¢  z(add_scheduler_init_hook.<locals>.wrapperÑ  s+   ø€ Ùˆy˜%Ô Ù�i Ó'ˆÙÙ�I˜uÔ%Øˆ
rd   rž  )r�  r   rÇ  r   r{   r   )Útorch._inductor.schedulerr  rž  Úunittestr   re  rí  )r  r  r  r¢  r  s   ``  @rG   Úadd_scheduler_init_hookr  Æ  s9   ú€ õ 4à× Ñ €G÷ô �=‰=×Ñ×%Ñ% i°¸WÓEÐErd   c                óz   — t         j                  rt        j                  | «       yt        j	                  | «       y)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)rX   Údeveloper_warningsr    r_  Úinfo)Úmsgs    rG   Údeveloper_warningr  Û  s$   € ô × Ò Ü�‰�CÕä�‰��rd   c                 ó´  — 	 t         j                  j                  d«      } | dz   t        t         j                  «      k  rTt        t         j                  | dz      «      dkD  r2t         j                  | dz      d   dk7  rt         j                  | dz      S t         j                  D ]#  }|j                  d«      sŒ|t        d«      d c S  y# t        $ r Y ŒBw xY w)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)rA  ÚargvrÌ   rB   Ú
ValueErrorrC  )rÒ  rK  s     rG   Úget_benchmark_namer  ç  sÀ   € ð	Ü�h‰h�n‰n˜XÓ&ˆà�!‰G”cœ#Ÿ(™(“mÒ#Ü”C—H‘H˜S 1™WÑ%Ó&¨Ò*Ü—‘˜˜q™Ñ! !Ñ$¨Ò+ä—8‘8˜C !™GÑ$Ð$ô �x‰xò )ˆØ�>‰>˜)Õ$Ø”s˜9“~Ð'Ð(Ò(ð)ð øô ò Ùðús   ‚BC Ã	CÃCc                ó&   — t        d„ | D «       «      S )Nc              3  ó&   K  — | ]	  }|d k(  –— Œ y­w©r)   Nrƒ   r  s     rG   r’   zis_ones.<locals>.<genexpr>	  ó   è ø€ Ò%˜!ˆq�A�vÑ%ùó   ‚©rj   ©rË  s    rG   Úis_onesr'    ó   € ÜÑ%˜uÔ%Ó%Ð%rd   c                ó&   — t        d„ | D «       «      S )Nc              3  ó&   K  — | ]	  }|d k(  –— Œ y­w)r   Nrƒ   r  s     rG   r’   zis_zeros.<locals>.<genexpr>  r#  r$  r%  r&  s    rG   Úis_zerosr+    r(  rd   c                ó&   — t        d„ | D «       «      S )Nc              3  ó”   K  — | ]@  }t        |t        j                  «      r$|j                  t        j                  d «      k(  –— ŒB y­w)rÊ   N)rf   r@   rQ  r†   )r�   rk  s     rG   r’   z is_cpu_device.<locals>.<genexpr>  s8   è ø€ ò àÜ�dœEŸL™LÔ)ð 	�‰”u—|‘| EÓ*Õ*ñùs   ‚AAr%  )Úinputss    rG   Úis_cpu_devicer/    s   € Üñ àôó ð rd   c                óœ   — 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)rf   rg   rì   r�   r@   r  r  )rè  s    rG   Úget_sympy_Expr_dtyper1    s=   € Ü�cœ5Ÿ:™:Ô&ð ØBóÐ&ð ‡~‚~Ü�{‰{Ðä�}‰}Ðrd   c              /  óŠ   K  — | r-t        j                  j                  |i |¤Ž5 }|–— d d d «       y d –— y # 1 sw Y   y xY w­wrt   )r@   rœ   r�   )Úshould_profilerm   rW  rµ   s       rG   Úmaybe_profiler4  "  sE   è ø€ áÜ�^‰^×#Ñ# TÐ4¨VÑ4ð 	¸ØŠG÷	ð 	ô 	÷	ð 	üs   ‚"A¤7©A·A ¼Ac                 ól   — t         j                  j                  } | dk  rt        j                  «       } | S ©Nr)   )rX   r´  Úthreadsr@   Úget_num_threads)r7  s    rG   rº  rº  +  s+   € Ü�j‰j× Ñ €GØ�‚{Ü×'Ñ'Ó)ˆØ€Nrd   c                 ó€   — ddl m}   | «       }|j                  dt        j                  j
                  rd«      S d«      S )Nr)   )Úget_backend_optionsÚ
num_stagesrQ  é   )Úruntime.triton_helpersr:  r-  r@   r  r  )r:  Úoptionss     rG   Úget_backend_num_stagesr?  2  s2   € å;á!Ó#€GØ�;‰;�|¬%¯-©-×*;Ò*; QÓCÐCÀÓCÐCrd   c                ó  — ddl m}m} | t        j                  t        j
                  t        j                  fv sJ ‚t        j                  |«      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.testingrA  rB  r@   r  r  r  ÚinspectÚ	signatureÚ
parametersr-  Útorch._utils_internalrD  Úbackendsr9   ÚmatmulÚ
allow_tf32)r…   rA  rB  rD  Úsm_clocks        rG   Úget_device_tflopsrN  :  s  € çMà”U—]‘]¤E§N¡N´E·M±MÐBÑBÐBÐBä×ÑÐ,Ó-×8Ñ8×<Ñ<¸\ÔJå8á!Ó#ˆØ”U—]‘]¤E§N¡NÐ3Ñ3Ù,¨U°HÓ=Ð=ä�>‰>×Ñ×%Ñ%×0Ò0Ù,¬U¯]©]¸HÓEÐEá&¤u§}¡}°hÓ?Ð?à”U—]‘]¤E§N¡NÐ3Ñ3Ù,¨UÓ3Ð3ä�>‰>×Ñ×%Ñ%×0Ò0Ù,¬U¯]©]Ó;Ð;á&¤u§}¡}Ó5Ð5rd   c                 ó   — ddl m}   | «       S )Nr   ©Úget_dram_gbps)rE  rQ  rP  s    rG   Úget_gpu_dram_gbpsrR  V  s   € å,á‹?Ðrd   c                 óx   — ddl m}  | j                  j                  j	                  d«      j                  dd«      S )Nr   ©rN  Úmax_shared_mem)Útriton.runtimerN  rO  rP  r  r-  rT  s    rG   Úget_gpu_shared_memoryrW  ]  s.   € Ý%à�=‰=×Ñ×4Ñ4°QÓ7×;Ñ;Ð<LÈaÓPÐPrd   c                ó$   — | j                  d«      S )NÚwelford)rC  ©Úreduction_types    rG   Úis_welford_reductionr\  c  s   € Ø×$Ñ$ YÓ/Ð/rd   c                ó(   — t        | «      ry| dk(  ryy)Nr<  Úonline_softmax_reducerQ  r)   )r\  rZ  s    rG   Úreduction_num_outputsr_  g  s   € Ü˜NÔ+ØØ	Ð2Ò	2Øàrd   c                 ó0   — t        j                  «       dk(  S )NÚLinux)ÚplatformÚsystemrƒ   rd   rG   Úis_linuxrd  p  s   € Ü�?‰?Ó Ñ'Ð'rd   c                 ó(   — t         j                  dk(  S )NrZ   )rA  rb  rƒ   rd   rG   rl  rl  t  s   € Ü�<‰<˜7Ñ"Ð"rd   c                ó&   — t        d„ | D «       «      S )Nc              3  ón   K  — | ]-  }t        |t        j                  «      xr |j                   –— Œ/ y ­wrt   )rf   rg   rì   Ú	is_numberr  s     rG   r’   z#has_free_symbols.<locals>.<genexpr>y  s)   è ø€ ÒJÀŒz˜!œUŸZ™ZÓ(Ò<°·±¨_Ó<ÑJùs   ‚35r$  )Úitrs    rG   r·  r·  x  s   € ÜÑJÀcÔJÓJÐJrd   c            	     óx  — ddl m} | D ]¯  }t        ||j                  |j                  |j
                  |j                  |j                  f«      r=t        |j                  «       xs d«      st        |j                  «       xs d«      sŒ� yt        ||j                  «      sŒšt        dt        |«      › �«      ‚ y)Nr)   r¥  rƒ   Tzunexpected type for is_dynamic F)r§  r¦  rf   rá  rã  r¸  ÚComputedBufferr/   r·  Úmaybe_get_sizeÚmaybe_get_strider1   Ú	TypeErrorrÎ   )rm   r¦  Úts      rG   Ú
is_dynamicrp  |  s§   € Ýàò IˆÜØ�—‘˜bŸm™m¨R¯[©[¸"×:KÑ:KÈRÏYÉYÐWô
ô   × 0Ñ 0Ó 2Ò 8°bÔ9Ô=MØ×"Ñ"Ó$Ò*¨õ>ñ Ü˜A˜rŸy™yÔ)ØäÐ=¼dÀ1»g¸YÐGÓHÐHðIð rd   c                  ó   — e Zd ZdZdZy)ÚPlaceholderÚKERNEL_NAMEÚDESCRIPTIVE_NAMEN)r|   r}   r~   rs  rt  rƒ   rd   rG   rr  rr  �  s   „ ð  €Kð *Ñrd   rr  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 «       t        j                  «       |z
  }	 ||j                  «       |j                  j                  «        |j                  «        t        d
|j                  › �|¬	«       t        |j                  |¬	«       |j!                  «       |j!                  «       k(  }
t"        j%                  d||j&                  |
|	«       d d d «       y # 1 sw Y   ŒÚxY w# 1 sw Y   y xY w)Nr)   )Ústable_topological_sortÚwzutf-8F)ÚmodeÚencodingrq  )rY  Ú	fake_modezBefore:
)ÚfilezAfter:
zZ%s, save before/after graph to %s, graph before/after are the same = %s, time elapsed = %s)Úpattern_matcherrv  rc  ÚNamedTemporaryFileÚior
   rN   rJ   Ú	propagaterj  r'  r	   ÚnowrM   ÚlintÚ	recompiler£  r    r  r¦   )rò  rY  Úinpr  rv  rt  Ú	before_ioÚafter_ioÚ
start_timeÚtime_elapsedro  s              rG   Úpass_execution_and_saverˆ  š  sX  € õ 9ä	×	$Ñ	$ØØØô
ð 
ð 
Ü—K‘K“Mˆ	Ü—;‘;“=ˆØCŒ	�RÔ#3°CÓ#8Ô9×CÑCÀSÑIÜ�	˜"Ÿ(™(˜Ð$¨1Õ-Üˆb�h‰h˜YÕ'Ü—\‘\“^ˆ
Ü# B¨Ó,ñ 	Ù�—‘ŒN÷	ä—|‘|“~¨
Ñ2ˆá §¡Ô)Ø
�‰�‰ŒØ
�‰Œä�˜Ÿ™˜
Ð#¨!Õ,Üˆb�h‰h˜XÕ&Ø×ÑÓ  H×$5Ñ$5Ó$7Ñ7ˆÜ�‰ØhØØ�F‰FØØô	
÷-
ð 
÷	ð 	ú÷
ð 
ús%   ŸBF4Â<F(ÃCF4Æ(F1	Æ-F4Æ4F=c                ó~   — ddl m} t        | |j                  «      xr  t        | j                  |j
                  «      S )zB
    Check if input buffer is a multi-outputs template buffer
    r)   r¥  )r§  r¦  rf   ÚCppTemplateBufferr4  ÚMultiOutputLayout©Ú	input_bufr¦  s     rG   Úis_multi_outputs_templaterŽ  ¾  s9   € õ ä�i ×!5Ñ!5Ó6ò ¼:Ø×Ñ˜"×.Ñ.ó<ð rd   c                ó¢   — ddl m} t        | |j                  «      xr2 t	        | j
                  «      dk(  xr t        | j
                  d   «      S )zL
    Check if input buffer is a output of multi-outputs template buffer
    r)   r¥  r   )r§  r¦  rf   ÚMultiOutputrB   r.  rŽ  rŒ  s     rG   Ú#is_output_of_multi_outputs_templater‘  É  sL   € õ ô 	�9˜bŸn™nÓ-ò 	;Ü�	× Ñ Ó! QÑ&ò	;ä% i×&6Ñ&6°qÑ&9Ó:ðrd   c                óú  — | €yddl m} t        | «      |j                  k(  xr |d u xs | j                  |u x�sB t        | «      |j
                  k(  x�r' t        t        j                  j                  d«      xr; | j                  t        j                  j                  j                  j                  k(  xsÄ t        t        j                  j                  d«      xr; | j                  t        j                  j                  j                  j                  k(  xsa t        t        j                  j                  d«      xr; | j                  t        j                  j                  j                  j                  k(  S )NFr)   r¥  Úall_to_all_singleÚall_gather_into_tensorÚreduce_scatter_tensor)r§  r¦  rÎ   Ú_CollectiveKernelÚop_overloadÚFallbackKernelrÃ   r@   rÄ   Útorchrecr“  Údefaultr”  r•  ©rX  r3  r¦  s      rG   Úis_collectiverœ  Ø  s1  € ð €|Øåô 	ˆT‹
�b×*Ñ*Ñ*ÒU°°d°
Ò0T¸d×>NÑ>NÐRTÐ>Tóô 	ˆT‹
�b×'Ñ'Ñ'ó 	
ô
 œŸ	™	×*Ñ*Ð,?Ó@ò UØ×$Ñ$¬¯	©	×(:Ñ(:×(LÑ(L×(TÑ(TÑTòô
 œŸ	™	×*Ñ*Ð,DÓEò EØ×$Ñ$Ü—9‘9×%Ñ%×<Ñ<×DÑDñEòô œŸ	™	×*Ñ*Ð,CÓDò YØ×$Ñ$¬¯	©	×(:Ñ(:×(PÑ(P×(XÑ(XÑXð+rd   c                ó>   — ddl m} t        | «      |j                  k(  S ©Nr)   r¥  )r§  r¦  rÎ   Ú_WaitKernel)rX  r¦  s     rG   Úis_waitr   ü  s   € Ýä�‹:˜Ÿ™Ñ'Ð'rd   c                óˆ   — ddl m} t        | |«      rt        d„ | j                  D «       «      S t        | j                  «      S )Nr   ©ÚGroupedSchedulerNodec              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrt   )Úcontains_collectiver  s     rG   r’   z&contains_collective.<locals>.<genexpr>  s   è ø€ Ò@¨aÔ& q×)Ñ@ùr   )r  r£  rf   r0  Úsnodesrœ  rX  ©Úsnoder£  s     rG   r¥  r¥    s4   € Ý>ä�%Ð-Ô.ÜÑ@°5·<±<Ô@Ó@Ð@ä˜Ÿ™Ó$Ð$rd   c                óˆ   — ddl m} t        | |«      rt        d„ | j                  D «       «      S t        | j                  «      S )Nr   r¢  c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrt   )Úcontains_waitr  s     rG   r’   z contains_wait.<locals>.<genexpr>  s   è ø€ Ò:¨”= ×#Ñ:ùr   )r  r£  rf   r0  r¦  r   rX  r§  s     rG   r«  r«    s4   € Ý>ä�%Ð-Ô.ÜÑ:¨U¯\©\Ô:Ó:Ð:ä�u—z‘zÓ"Ð"rd   c                ó¨   — ddl m} t        |t        j                  j
                  «      r|g}t        | |j                  «      xr | j                  |v S rž  )r§  r¦  rf   r@   r@  rA  r˜  r—  r›  s      rG   Úis_fallback_opr­    sE   € õ ä�"”e—j‘j×+Ñ+Ô,ØˆTˆÜ�d˜B×-Ñ-Ó.ÒI°4×3CÑ3CÀrÐ3IÐIrd   c                óB   — |||    j                   j                  «          S rt   )Údefining_opr‚  )Úbuf_nameÚname_to_bufÚname_to_fused_nodes      rG   Úbuf_name_to_fused_snoder³    s#   € ð ˜k¨(Ñ3×?Ñ?×HÑHÓJÑKÐKrd   c                 ó   — yr6  rƒ   ©r¨  s    rG   r7  r7  *  r8  rd   c                ó²   —  || «      ry |j                  | «       | j                  D ].  }t        |j                  ||«      }||v rŒt	        |||||¬«       Œ0 y )N©Úcriteria_cb)rÙ  Úunmet_dependenciesr³  r¦   Úfind_recursive_deps_of_node)r¨  Úcollected_node_setr±  r²  r¸  ÚdepÚdefining_op_for_deps          rG   rº  rº  %  sn   € ñ �5ÔØØ×Ñ˜5Ô!Ø×'Ñ'ò 
ˆÜ5Ø�H‰H�kÐ#5ó
Ðð Ð"4Ñ4ØÜ#ØØØØØ#ö	
ñ
rd   c                 ó   — yr6  rƒ   rµ  s    rG   r7  r7  C  r8  rd   c           	     óz  —  || «      ry |j                  | «       | j                  «       D ]Ž  }|j                  D ]}  }|j                  €J ‚|j                  j	                  «       dk(  rŒ/|j                  j	                  «       |vrŒL||j                  j	                  «          }||v rŒnt        |||||¬«       Œ Œ� y )NÚOUTPUTr·  )rÙ  Úget_outputsrC  rX  r‚  Úfind_recursive_users_of_node)r¨  r»  r±  r²  r¸  ÚorÝ  Úuser_ops           rG   rÂ  rÂ  >  sÃ   € ñ �5ÔØØ×Ñ˜5Ô!Ø×ÑÓ ò ˆØ—G‘Gò 	ˆDØ—9‘9Ð(Ð(Ð(Ø�y‰y×!Ñ!Ó# xÒ/ØØ�y‰y×!Ñ!Ó#Ð+=Ñ=ØØ(¨¯©×);Ñ);Ó)=Ñ>ˆGØÐ,Ñ,ØÜ(ØØ"ØØ"Ø'öñ	ñrd   c                ób   — t         j                  j                  j                  rdnd}|| z
  |z
  S )zaComputes the number of inputs to the aot fw graph which have fixed addresses (params and buffers)rQ  r   )r@   Ú
_functorchrX   Úfunctionalize_rng_ops)Údynamo_gm_num_inputsÚaot_fw_gm_num_inputsÚnum_rng_seed_offset_inputss      rG   Únum_fw_fixed_argumentsrË  [  s6   € ô ×Ñ×$Ñ$×:Ò:‰Àð ð  Ð"6Ñ6Ð9SÑSÐSrd   c                óþ   — dd„}d}g }| j                   j                  D ]0  }|j                  dk(  sŒ ||«      r|j                  |«       |dz  }Œ2 |t	        t        t        |«      «      «      k(  sJ ‚t        |«      S )z>
    Infers which inputs are static for a backwards graph
    c                ó~   — d| j                   vxr. d| j                   vxr d| j                   vxr d| j                   vS )NÚtangentsÚbwd_seedÚbwd_base_offsetÚbwd_rng_stater  r¯  s    rG   Úis_saved_tensorz'count_tangents.<locals>.is_saved_tensork  sH   € à˜aŸf™fÐ$ò .Ø !§&¡&Ð(ò.à!¨¯©Ð/ò.ð   q§v¡vÐ-ð		
rd   r   rM  r)   )rD   r(   r{   ró   )r'  rÇ  r3  rL  r  r˜   rB   )Úfx_grÒ  Ú	arg_countÚstatic_arg_idxsr¼  s        rG   Úcount_tangentsrÖ  f  s�   € ó

ð €IØ€OØ�Z‰Z×Ñò ˆØ�4‰4�=Ó Ù˜qÔ!Ø×&Ñ& yÔ1Ø˜‰N‰Ið	ð œd¤5¬¨_Ó)=Ó#>Ó?Ò?Ð?Ð?ÜˆÓÐrd   c                  ó2   — e Zd ZU ded<   dd„Zedd„«       Zy)Ú	BoxedBoolró   rx   c                ó   — | j                   S rt   )rx   rª  s    rG   r²  zBoxedBool.__bool__ƒ  s   € Ø�z‰zÐrd   c                ó6   — t        | t        «      r	d| _        | S yr6  )rf   rØ  rx   r;  s    rG   ÚdisablezBoxedBool.disable†  s   € ä�cœ9Ô%ØˆCŒIØˆJØrd   Nrå  )rt  r   r{   zUnion[BoxedBool, bool])r|   r}   r~   r“  r²  r–  rÛ  rƒ   rd   rG   rØ  rØ    s    … àƒKóð òó ñrd   rØ  c              #  óØ   ‡ ‡K  — ddl m} |j                  Š	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ ˆfd„}t        j                  j                  |d|«      5  d –— d d d «       y # 1 sw Y   y xY w­w)Nr)   r+   c                ó@   •— ‰j                  |«        ‰| |||||«      S rt   rÐ  )r‘  Úkernel_nameró  rÔ  ÚgpuÚcpp_definitionÚkernel_listÚorig_define_kernels         €€rG   Údefine_kernelz.collect_defined_kernels.<locals>.define_kernel”  s-   ø€ ð 	×Ñ˜;Ô'Ù!Ø�+˜{¨H°c¸>ó
ð 	
rd   rã  )NTN)r‘  r,   rÞ  rÆ   ró  rÆ   rÔ  úOptional[str]rß  ró   rà  rä  r{   r   )Úcodegen.wrapperr,   rã  r   re  rí  )rá  r,   rã  râ  s   `  @rG   Úcollect_defined_kernelsræ  Ž  s˜   ùè ø€ å5à-×;Ñ;Ðð #'ØØ(,ð
Ø"ð
àð
ð ð
ð  ð	
ð
 ð
ð &ð
ð 
ö
ô 
�‰×	Ñ	Ð/°À-Ó	Pñ Û÷÷ ñ üs   „AA*ÁAÁ	A*ÁA'Á#A*c                ó   — | dz   S )NÚ__original__rƒ   r  s    rG   Ú get_cloned_parameter_buffer_nameré  ¥  s   € Ø�.Ñ Ð rd   c                ó   — | t         v S rt   )r>   rq  s    rG   r3  r3  ©  s   € Ø”YÐÐrd   c                ó   — t        | «      S rt   )r3  rq  s    rG   Údevice_need_guardrì  ­  s   € Ü�&‹>Ðrd   c                óD  — t        j                  «       rS| t        j                  k(  r@t        j                  j                  «       r"t        j                  j                  «       dk\  ry| t        t        j                  t        j                  t        j                  g«      v S )N)r  r   F)
rX   rˆ  r@   r  r9   rA   Úget_device_capabilityr   r  ró   rŒ  s    rG   Ú,needs_fallback_due_to_atomic_add_limitationsrï  ±  sg   € ô
 	×ÑÔØ”U—^‘^Ò#Ü�J‰J×#Ñ#Ô%Ü�J‰J×,Ñ,Ó.°&Ò8ààœ
¤E§K¡K´·±¼U¿^¹^Ð#LÓMÐMÐMrd   c                óü  — | j                   t        j                  j                  j                  t        j                  j                  j
                  fv r|€y| j                   t        j                  j                  j                  k(  rdnd}|d |fvxsé |xr t        |«      xr t        |«      xsË | j                   t        j                  j                  j                  k(  xrW |dk(  xrP |xrL |dk(  xrE t        j                  j                  xr) t        j                  j                  xs t        «       dk7  xs? ||k(  xr" |t        j                  t        j                  fv xs t        j                   «       S )NFrÙ  rª   rÊ   r)   )Úoverloadpacketr@   rÄ   ÚatenÚscatter_reduce_Úscatter_reduceÚscatter_r3  rï  rX   r´  Úfallback_scatter_reduce_sumÚdynamic_threadsrº  ró   r  r+  )r—  r[  Ú
self_dtypeÚ	src_dtypeÚsrc_device_typeÚsrc_is_tensorÚ	reduce_tys          rG   Úuse_scatter_fallbackrý  À  sZ  € ð 	×"Ñ"Ü�I‰I�N‰N×*Ñ*¬E¯I©I¯N©N×,IÑ,IÐJñ	KàÐ"àð ×+Ñ+¬u¯y©y¯~©~×/FÑ/FÒF‰ÈEð ð
 	˜t YÐ/Ð/ò 	8àò HÜ�Ó'òHä<¸YÓGò		8ð ×&Ñ&¬%¯)©)¯.©.×*HÑ*HÑHò LØ %Ñ'òLàòLð   5Ñ(òLô —
‘
×6Ñ6ò	Lô
 —‘×+Ñ+ÒJÔ/CÓ/EÈÑ/Jò	8ð ˜iÑ'ÒS¨J¼5¿:¹:ÄuÇ{Á{Ð:SÐ,Sò	8ô ×5Ñ5Ó7ð!rd   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
«       Œ7t        ||«      rÂ|j                  «       }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#        |«      › �«      ‚ y)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Â  Ú3r„  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  rB   r¨   rf   Úis_reductionrX  râ  Úreduction_hintÚread_writesÚreadsÚwritesr§   rÎ   )rª  r   r  r  rÒ  rX  Úis_redr¼  s           rG   Údump_node_scheduler  ç  s=  € ÷
 OÝ7ä	Ð¤ MÓ 2Ð3°6Ð
:Ô;Ü˜}Ó-ó H‰	ˆˆTÜ��#�a�˜ˆlÔØ�?Ñ"ÜÐ$Õ%ØÐ%Ñ%ÜÐ%Õ&Ü˜˜mÔ,Ø×&Ñ&Ó(ˆFÜ™f‘U¨$Ð/¨Ð?Ô@ÙØ—y‘yÐ,Ð,Ð,ÜÐ0°·±·±×1NÑ1NÐ0OÐPÔQÜ�*ÔØ×'Ñ'×-Ñ-ò �Ü�c•
ðä�+ÔØ×'Ñ'×.Ñ.ò �Ü�c•
òô Ð!9¼$¸t»*¸ÐFÓGÐGñ'Hrd   c                óz   — ddl m}  || j                  «       t        | j                  «      z  t
        z  dk(  «      S )Nr   )Ústatically_known_true)r*  r  Ústorage_offsetrŽ  r…   ÚGPU_ALIGN_BYTES)rÍ   r  s     rG   Útensor_is_alignedr  	  s:   € õ Lá Ø	×	Ñ	Ó	 ¤>°&·,±,Ó#?Ñ	?Ä?ÑRÐVWÑWóð rd   c                ó|   — t        | j                  j                  «      syt        j                  xs t        | «      S r6  )r3  r†   rÎ   rX   Úassume_aligned_inputsr  )Úexample_inputs    rG   Úshould_assume_input_alignedr  	  s2   € ô �-×&Ñ&×+Ñ+Ô,ØÜ×'Ñ'ÒKÔ+<¸]Ó+KÐKrd   c                 óö   — t         j                  j                  j                  «       } | st	        j
                  «       S | j                  j                  }|st	        j
                  «       S |j                  «       S rt   )	r@   Ú_guardsÚTracingContextÚtry_getrÇ  Únullcontextrz  r)  Úsuppress_guards)Útracing_contextr)  s     rG   Ú#maybe_get_suppress_shape_guards_ctxr  	  sb   € ô
 —m‘m×2Ñ2×:Ñ:Ó<€OÙÜ×%Ñ%Ó'Ð'ð  ×)Ñ)×3Ñ3€IÙÜ×%Ñ%Ó'Ð'à×$Ñ$Ó&Ð&rd   c                ó  — t         j                  j                  j                  t        dd«      5  t
        j                  j                  «        dd l}dd l	} |j                  «       } |j                  |«      }ddlm} |j                  |«       |j                  }|j!                  |j"                  «        | |i |¤Ž}	|j%                  «       }
|j!                  |«       |j'                  |«       d d d «       |	|
fS # 1 sw Y   	
fS xY w)Nr¡   Tr   )Úoutput_code_log)r  r   re  rí  rX   r@   rÈ  rØ  r~  Úloggingr
   ÚStreamHandlerÚtorch._inductor.codecacher   Ú
addHandlerÚlevelÚsetLevelÚDEBUGr£  ÚremoveHandler)r«   rm   rW  r~  r!  Úlog_capture_stringÚchr   Ú
prev_levelre  r  s              rG   Úrun_and_get_cpp_coder,  .	  sæ   € ô 
�‰×	Ñ	×	#Ñ	#¤F¨G°TÓ	:ñ *Ü�‰×ÑÔÛÛà(˜RŸ[™[›]ÐØ"ˆW×"Ñ"Ð#5Ó6ˆÝ=à×"Ñ" 2Ô&Ø$×*Ñ*ˆ
Ø× Ñ  §¡Ô/Ù�TÐ$˜VÑ$ˆØ×'Ñ'Ó)ˆØ× Ñ  Ô,Ø×%Ñ% bÔ)÷*ð  �1ˆ9Ð÷!*ð  �1ˆ9Ðús   °CC>Ã>D
c                ó¨   — t        | «      }|�|j                  S | D ]4  }t        |t        j                  «      sŒ|j
                  j                  c S  y rt   )rJ   r)  rf   r@   r$   rX  )r.  rz  Úinputs      rG   Úshape_env_from_inputsr/  G	  sT   € Ü  Ó(€Ið ÐØ×"Ñ"Ð"ð ò (ˆÜ�eœUŸ\™\Õ*Ø—:‘:×'Ñ'Ò'ð(ð
 rd   c                ó8   ‡ ‡— t        ‰«      dk(  r‰ S dˆˆ fd„}|S )Nr   c                ó,   •— t        | ‰«        ‰| «      S rt   )Úcopy_misaligned_inputs)Ú
new_inputsÚinputs_to_checkra  s    €€rG   rK  z)align_inputs_from_check_idxs.<locals>.runb	  s   ø€ Ü˜z¨?Ô;Ù�ZÓ Ð rd   )r3  úlist[InputType]r{   r   )rB   )ra  r4  rK  s   `` rG   Úalign_inputs_from_check_idxsr6  [	  s#   ù€ ô ˆ?Ó˜qÒ Øˆö!ð €Jrd   c                óT  — d| j                  «       v rd}n;t        d„ t        | j                  «       | j                  «       «      D «       «      dz   }t	        j
                  | |fd«      j                  «       }t	        j
                  || j                  «       | j                  «       «      S )Nr   c              3  ó2   K  — | ]  \  }}|d z
  |z  –— Œ y­wr"  rƒ   )r�   Úshaper!  s      rG   r’   z)clone_preserve_strides.<locals>.<genexpr>o	  s   è ø€ ÒT©¨°�˜‘˜fÕ$ÑTùr   r)   rr   )r}  rª   râ   r!  r@   Ú
as_stridedÚclone)rD   Úneeded_sizeÚbuffers      rG   Úclone_preserve_stridesr>  i	  s„   € ØˆA�F‰F‹H�}à‰ô ÑT¼#¸a¿f¹f»hÈÏÉË
Ó:SÔTÓTÐWXÑXð 	ô ×Ñ˜a + °Ó6×<Ñ<Ó>€FÜ×Ñ˜F A§F¡F£H¨a¯h©h«jÓ9Ð9rd   c                ó    — |D ]I  }| |   }t        |t        j                  «      sJ ‚|j                  «       t        z  sŒ<t        |«      | |<   ŒK y rt   )rf   r@   rQ  Údata_ptrÚ	ALIGNMENTr>  )r3  Úcheck_inputs_idxsr¶   Ú_inps       rG   r2  r2  u	  sL   € ð ò 9ˆØ˜!‰}ˆÜ˜$¤§¡Ô-Ð-Ð-Ø�=‰=‹?œYÓ&Ü2°4Ó8ˆJ�qŠMñ	9rd   c                óâ   — g }|D ]N  }| |   }t        |t        j                  «      sŒ#|j                  «       t        z  dk(  sŒ>|j                  |«       ŒP t        |«      t        |«      k7  r|S |S )z[
    We require all inputs to be aligned, so introduce a copy for any
    that aren't.
    r   )rf   r@   rQ  r@  rA  rL  rB   )r.  Ústatic_input_idxsÚaligned_static_input_idxsrÒ  r.  s        rG   Úremove_unaligned_input_idxsrG  	  st   € ð !#ÐØ ò 2ˆØ�s‘ˆÜ�eœUŸ\™\Õ*°·±Ó0@Ä9Ñ0LÐQRÓ/RØ%×,Ñ,¨SÕ1ð2ô Ð$Ó%¬Ð->Ó)?Ò?Ø(Ð(ØÐrd   c                óx  — ddl m} t        j                  t        j                  «      j
                  }|j                  j                  j                  }|j                  j                  j                  j                  }|j                  j                  j                  | |k  «      ry || «      xr  || «      |k  S )Nr)   r#  T)r&  r$  r@   Úiinfor  r›   r'  r(  rj  r)  Úhas_hintÚis_expr_static_and_true)rÇ   r$  Úint_maxrj  rJ  s        rG   Úexpr_fits_within_32bitrM  ‘	  s†   € Ýä�k‰kœ%Ÿ+™+Ó&×*Ñ*€GØ—‘× Ñ ×*Ñ*€IØ�w‰w×Ñ×)Ñ)×2Ñ2€Hð 	‡w�w×Ñ×/Ñ/°°W±Ô=Øá�A‹;Ò2™9 Q›<¨7Ñ2Ð2rd   c                ó  ‡‡‡— t         j                  j                  j                  «       }|�Ü|j                  �Ït        |j                  «      dk(  sJ ‚t        | «      Š|j                  €J ‚|j                  D ]Œ  }|€|j                  j                  d «       Œ!dŠt         j                  j                  j                  «       x}r|j                  Šdˆˆfd„Š|j                  j                  t        ˆfd„|D «       «      «       ŒŽ y y y )Nr   Fc                óf   •— ‰€t        | «      S ‰r‰j                  | «      S ‰j                  | «      S rt   )ru   Údeserialize_symexprÚevaluate_symexpr)rÇ   Úfakify_first_callr)  s    €€rG   Úmap_exprz4set_tracing_context_output_strides.<locals>.map_expr±	  s7   ø€ Ø Ð(Ü" 1›v˜Ù(Ø(×<Ñ<¸QÓ?Ð?Ø$×5Ñ5°aÓ8Ð8rd   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wrt   rƒ   )r�   rÇ   rS  s     €rG   r’   z5set_tracing_context_output_strides.<locals>.<genexpr>¹	  s   øè ø€ Ò5¨!™( 1Ÿ+Ñ5ùr_  )rÇ   r   r{   z,Union[float, int, SymInt, SymFloat, SymBool])
r@   r  r  r  Úoutput_stridesrB   r/  rL  rR  Útuple)rb  Úcompiled_graphr‘  r‰  r¡  rR  rS  r)  s        @@@rG   Ú"set_tracing_context_output_stridesrX   	  só   ú€ ô �m‰m×*Ñ*×2Ñ2Ó4€GØÐ˜w×5Ñ5ÐAÜ�7×)Ñ)Ó*¨aÒ/Ð/Ð/Ü)¨.Ó9ˆ	Ø×,Ñ,Ð8Ð8Ð8Ø#×2Ñ2ò 	ˆEØˆ}Ø×&Ñ&×-Ñ-¨dÕ3à$)Ð!ÜŸ-™-×6Ñ6×>Ñ>Ó@Ð@�3Ð@Ø(+×(=Ñ(=Ð%ö9ð ×&Ñ&×-Ñ-ÜÓ5¨uÔ5Ó5õñ	ð	  BÐrd   c                 ó  — t         j                  �t         j                  S t        j                  «       syt        j                  j                  «       ry	 ddlm}  | t        j                  j                  d«      k\  S # t        $ r Y yw xY w)NFr   ©ÚREMOTE_CACHE_VERSIONz.pytorch/remote_cache:fx_graph_memcache_version)
rX   Úfx_graph_remote_cacherˆ  r@   Ú_utils_internalÚis_fb_unit_testÚtorch._inductor.fb.remote_cacher[  ÚModuleNotFoundErrorÚjustknobs_getval_intrZ  s    rG   Ú should_use_remote_fx_graph_cacherb  ½	  s   € Ü×#Ñ#Ð/Ü×+Ñ+Ð+Ü×ÑÔØä×Ñ×,Ñ,Ô.ØðÝHð  ¤5×#8Ñ#8×#MÑ#MØ8ó$ñ ð øô ò Ùðús   ÁA> Á>	B
Â	B
c                ó0   — t        j                  dd| «      S )Nz[^a-zA-Z0-9_]r±   )rÛ  Úsubr  s    rG   Únormalize_namere  Ð	  s   € Ü�6‰6Ð" C¨Ó.Ð.rd   ztl.int1ztl.float8e4nvztl.float8e5ztl.float8e4b8ztl.float8e5b16ztl.uint8)ztl.boolztl.float8_e4m3fnztl.float8_e5m2ztl.float8_e4m3fnuzztl.float8_e5m2fnuzztl.float8_e8m0fnuz^.*[.]c                ól   — t         j                  dt        | «      «      }t        j	                  ||«      S )z"Convert torch.dtype to triton typeútl.)Ú_triton_type_rerd  rÆ   Ú_triton_type_mappingr-  )r…   Útriton_type_names     rG   Útriton_typerk  å	  s.   € ä&×*Ñ*¨5´#°e³*Ó=ÐÜ×#Ñ#Ð$4Ð6FÓGÐGrd   c                ó®   — t         j                  | | «      }|j                  dd«      }t        t        |«      }t        |t        j                  «      sJ ‚|S )Nrg  r§  )Ú_torch_triton_mappingr-  r  r?   r@   rf   r…   )r…   Úadjusted_typeÚ	type_namer¢  s       rG   Útriton_type_to_torchrp  ë	  sL   € Ü)×-Ñ-¨e°UÓ;€MØ×%Ñ% e¨RÓ0€IÜœ˜yÓ)€IÜ�i¤§¡Ô-Ð-Ð-ØÐrd   c                óØ  — | j                    xrÜ | j                  «       |j                  «       k(  xr¹ | j                  «       |j                  «       k(  xr– | j                  |j                  k(  xr{ | j                  |j                  k(  xr` | j                  «       j                  «       |j                  «       j                  «       k(  xr! | j                  «       |j                  «       k(  S rt   )Ú	is_mkldnnr}  r!  r…   r†   Úuntyped_storager@  r  ©râ  rx   s     rG   Úis_same_tensorru  ó	  sÅ   € à�N‰NÐò 	<Ø�I‰I‹K˜5Ÿ:™:›<Ñ'ò	<à�K‰K‹M˜UŸ\™\›^Ñ+ò	<ð �J‰J˜%Ÿ+™+Ñ%ò	<ð �K‰K˜5Ÿ<™<Ñ'ò		<ð
 × Ñ Ó"×+Ñ+Ó-°×1FÑ1FÓ1H×1QÑ1QÓ1SÑSò	<ð ×ÑÓ! U×%9Ñ%9Ó%;Ñ;ðrd   c                óv  — | j                   xr¬ | j                  «       |j                  «       k(  xr‰ | j                  |j                  k(  xrn | j                  |j                  k(  xrS t        j
                  j                  j                  | «      t        j
                  j                  j                  |«      k(  S rt   )rr  r}  r…   r†   r@   rÄ   Úmkldnnr@  rt  s     rG   Úis_same_mkldnn_tensorrx  ÿ	  s�   € à�‰ò 	PØ�I‰I‹K˜5Ÿ:™:›<Ñ'ò	Pà�J‰J˜%Ÿ+™+Ñ%ò	Pð �K‰K˜5Ÿ<™<Ñ'ò	Pô �I‰I×Ñ×%Ñ% dÓ+¬u¯y©y×/?Ñ/?×/HÑ/HÈÓ/OÑOðrd   c                  ó   — y)N)rÕ  ÚisnanÚlogical_notÚlogical_andÚsignbitÚand_ÚleÚltÚgeÚgtÚeqÚner¨  Úxorrƒ   rƒ   rd   rG   Úboolean_opsr†  	
  s   € ðrd   c                  ó"   — e Zd ZU ded<   ded<   y)ÚOpDtypeRuler%   Útype_promotion_kindúOptional[torch.dtype]Úoverride_return_dtypeNr’  rƒ   rd   rG   rˆ  rˆ  
  s   … à8Ó8Ø0Ô0rd   rˆ  zdict[str, OpDtypeRule]Úop_dtype_propagation_rulesc                ó*   — t        ||«      t        | <   y rt   )rˆ  rŒ  )r¦   r‰  r‹  s      rG   Ú#register_op_dtype_propagation_rulesrŽ  &
  s   € ô
 (3ØÐ2ó(Ô˜tÒ$rd   c                óž   — t         j                  j                  r2| t        j                  t        j
                  fv rt        j                  S | S )z"Maybe upcast [b]float16 to float32)rX   r[  Úcodegen_upcast_to_fp32r@   r  r  r  rŒ  s    rG   Úupcast_compute_typer‘  0
  s3   € ä‡}�}×+Ò+Ø”%—-‘-¤§¡Ð0Ñ0ä�}‰}ÐØ€Lrd   ÚKeyTypeÚValTypec                  óZ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zddd„Zdd„Z	dd	„Z
dd
„Zdd„Zy)Ú
ScopedDictzè
    A dictionary-like object that allows for scoped updates. It maintains
    an original dictionary and a set of new items that can override
    the original items within the scope.  The original dictionary is
    unmodified.
    c                ó    — || _         i | _        y rt   ©Úoriginal_dictÚ	new_items)r‘  r˜  s     rG   rž  zScopedDict.__init__E
  s   € Ø*ˆÔØ13ˆ�rd   c                óZ   — || j                   v r| j                   |   S | j                  |   S rt   ©r™  r˜  r�  s     rG   rx  zScopedDict.__getitem__I
  s.   € Ø�$—.‘.Ñ Ø—>‘> #Ñ&Ð&Ø×!Ñ! #Ñ&Ð&rd   c                ó"   — || j                   |<   y rt   )r™  )r‘  r  rx   s      rG   Ú__setitem__zScopedDict.__setitem__N
  s   € Ø#ˆ�‰�sÒrd   c                ó>   — || j                   v xs || j                  v S rt   r›  r�  s     rG   Ú__contains__zScopedDict.__contains__Q
  s!   € Ø�d—n‘nÐ$ÒA¨¨t×/AÑ/AÐ(AÐArd   Nc                ót   — || j                   v r| j                   |   S | j                  j                  ||«      S rt   )r™  r˜  r-  )r‘  r  rš  s      rG   r-  zScopedDict.getT
  s6   € Ø�$—.‘.Ñ Ø—>‘> #Ñ&Ð&Ø×!Ñ!×%Ñ% c¨7Ó3Ð3rd   c                óz   — t        | j                  «      }| j                  D ]  }|| j                  vsŒ|dz  }Œ |S r6  )rB   r˜  r™  )r‘  r¼  r  s      rG   r  zScopedDict.__len__Y
  sC   € Ü�×"Ñ"Ó#ˆØ—‘ò 	ˆAØ˜×*Ñ*Ò*Ø�Q‘‘ð	ð ˆrd   c              #  ó€   K  — | j                   E d {  –—†  | j                  D ]  }|| j                   vsŒ|–— Œ y 7 Œ)­wrt   r—  )r‘  r  s     rG   Ú__iter__zScopedDict.__iter__`
  s@   è ø€ Ø×%Ñ%×%Ð%Ø—‘ò 	ˆAØ˜×*Ñ*Ò*Ø“ñ	ð 	&ús   ‚>’<“!>µ>c                óH   — t        | j                  xs | j                  «      S rt   )ró   r˜  r™  rª  s    rG   r²  zScopedDict.__bool__f
  s   € Ü�D×&Ñ&Ò8¨$¯.©.Ó9Ð9rd   c                ó   — t         ‚rt   rú  r�  s     rG   Ú__delitem__zScopedDict.__delitem__i
  s   € Ü!Ð!rd   )r˜  zMapping[KeyType, ValType])r  r’  r{   r“  )r  r’  rx   r“  r{   r“  )r  rí  r{   ró   rt   )r  r’  rš  úOptional[ValType]r{   r§  r  )r{   zIterator[KeyType]rå  )r  r’  r{   r“  )r|   r}   r~   r   rž  rx  r�  rŸ  r-  r  r£  r²  r¦  rƒ   rd   rG   r•  r•  =
  s5   „ ñó4ó'ó
$óBô4ó
óó:ô"rd   r•  )Úfrozen_default©Úfrozenc              ó(   ‡— dˆfd„}| €|S  || «      S )Nc                óˆ   •— t         j                  dk\  rt        j                  | d‰¬«      S t        j                  | ‰¬«      S )N)r<  r  T)Úkw_onlyrª  r©  )rA  Úversion_infoÚdataclassesÚ	dataclass)rw   rª  s    €rG   Úwrapzir_dataclass.<locals>.wrapo
  s;   ø€ Ü×Ñ˜wÒ&Ü×(Ñ(¨°dÀ6ÔJÐJô ×(Ñ(¨°VÔ<Ð<rd   )rw   r[   r{   r[   rƒ   )rw   rª  r±  s    ` rG   Úir_dataclassr²  m
  s   ø€ õ=ð €{ØˆÙ�‹9Ðrd   c                 óœ   — t         j                  j                  j                  «       } | �"| j                  r| j                  j
                  S y rt   )r@   r  r  r  Úfw_metadataÚbw_donated_idxs)r  s    rG   Úget_donated_idxsr¶  |
  s=   € Ü—m‘m×2Ñ2×:Ñ:Ó<€OØÐ" ×'BÒ'BØ×*Ñ*×:Ñ:Ð:Ørd   c                óê   — ddl m}m} ddlm} | D ][  }|||fvsŒ
|j
                  €Œ|j
                  j                  D �cg c]  }|j                  ‘Œ c}|j                  j                  |<   Œ] y c c}w )Nr)   rÿ  r#  )
Úcodegen.simd_kernel_featuresr   r  r&  r$  rX  r©  r¦   r¡   Ú._inductor_triton_kernel_to_post_grad_node_info)rª  rÞ  r   r  r$  rX  r¶  s          rG   Ú'set_kernel_post_grad_provenance_tracingrº  ƒ
  sq   € ÷ PÝàò ˆØ˜Ð)9Ð:Ò:Ø�y‰yÑ$ð #'§)¡)×"3Ñ"3öWàð —K“KòW�—‘×FÑFÀ{ÒSñùòWs   Á A0c                  ó    — e Zd ZdZdZdZdZdZy)ÚTritonAttrsDescriptorVersionr   r)   rQ  r<  r™  N)r|   r}   r~   ÚV0_NO_TRITONÚV1_COMPILERÚV2_BACKENDSÚV3_BACKENDS_TUPLEÚV4_DICTrƒ   rd   rG   r¼  r¼  ’
  s    „ Ø€LØ€KØ€Kà	ð ð �Grd   r¼  c                 óP  — t         j                  j                  d«      €t        j                  S dd l} dd l} t        | j                  j                  d«      rt        j                  S t        | j                  j                  d«      rt        j                  S t        j                  S )Nr[  r   ÚAttrsDescriptor)Ú	importlibÚutilÚ	find_specr¼  r½  Útriton.backends.compilerÚtriton.compiler.compilerrÃ   rJ  Úcompilerr¿  r¾  rÁ  )r[  s    rG   Ú#get_triton_attrs_descriptor_versionrÊ  œ
  s{   € ä‡~�~×Ñ Ó)Ð1Ü+×8Ñ8Ð8ã#Û#äˆv�‰×'Ñ'Ð):Ô;ô ,×7Ñ7Ð7Ü	�—‘×)Ñ)Ð+<Ô	=ä+×7Ñ7Ð7ô ,×3Ñ3Ð3rd   c                 ó8   — t        «       t        j                  k(  S rt   )rÊ  r¼  rÁ  rƒ   rd   rG   Útriton_version_uses_attrs_dictrÌ  ¶
  s   € Ü.Ó0Ô4P×4XÑ4XÑXÐXrd   rã  )rb   ru   r{   ru   )rp   rz   r{   ró   )é   éd   )r«   zCallable[[], Any]r¬   ru   r­   ru   r{   rÒ  rå  )r†   z"Union[Optional[torch.device], str]r{   útorch.device)rÛ   zIterable[sympy.Expr]r{   rz   )rã   úSequence[sympy.Expr]rä   rÐ  r{   rz   )rÛ   zIterable[_T]r{   zValuesView[_T])rï   úUnion[int, sympy.Expr]rð   rÑ  r{   rÑ  )r  rŠ  r{   rÆ   )r   z"Iterable[Union[int, torch.SymInt]]r{   zlist[sympy.Expr])r   z Iterable[Union[int, sympy.Expr]]r{   zlist[Union[int, torch.SymInt]])r3  útorch._ops.OpOverloadr{   ró   )rG  r(   r>  z'Callable[[torch._ops.OpOverload], bool]r{   ró   )r?  r   rm   rH  rW  údict[str, Any]r{   z&tuple[GraphModule, list[torch.Tensor]])r9   )r†   rÆ   r{   r“  )r)   r9   )
ra  úCallable[..., Any]rb  úSequence[Any]rc  ru   r†   rÆ   r{   rÒ  )rƒ   r  r  g      ð?r9   )ra  rÔ  rb  rÕ  rc  ru   rl  ru   rm  rÒ  r†   rÆ   r{   rÒ  )rt  r   ru  rÆ   r{   r“  )rt  r   rx  ú	list[str]r{   r“  )rß   ru   rà   ru   r{   ru   )rD   zUnion[int, Sequence[int]]r}  ru   r{   úSequence[int])rD   ztuple[_T, ...]r{   zlist[_T])r«   z!Callable[Concatenate[Any, P], RV]r{   zCachedMethod[P, RV])rª  ú0Union[Sequence[BaseSchedulerNode], ExternKernel]r{   zOrderedSet[Node])rª  úSequence[BaseSchedulerNode]r´  z8Literal[True, 'torch', 'original_aten', 'inductor_node']r{   rÆ   )rª  rØ  r¢  r,   r{   ztuple[str, str]rt   )rÚ  zIterable[torch.fx.Node]rÛ  zOptional[Callable[[Any], bool]]r{   zOrderedSet[torch.fx.Node])rm   zSequence[IRNode]rW  zdict[str, IRNode]r{   zOrderedSet[IRNode])ró  rz   r{   rÆ   )rÌ   rz   r{   zValueRanges[Any])rþ  rÆ   r{   ró   )rþ  rU   rÒ  ru   r{   r  )r
  ró   r{   ró   )r¦   rÆ   r{   r  )ró  rz   r  zdict[sympy.Expr, Any]r{   rz   )rß   r   r{   z,TypeGuard[Union[torch.SymInt, torch.Tensor]])rm   r   r{   ró   )rY  útorch.fx.GraphModuler{   zOptional[torch.fx.Node])rY  rÚ  r{   r(   )rt  r   r{   r   rä  )NNT)rp  zOptional[dict[str, Any]]rY  rä  rq  ró   r{   rÆ  )ry  rÕ  r{   ú	list[int])r)  r'   ry  z.Sequence[Union[int, torch.SymInt, sympy.Expr]]r{   rÛ  )r…   útorch.dtyper{   ru   rÅ  râ  )r  zUnion[int, torch.device]r{   ró   r  )r+  ru   r†   rÏ  r{   r*   )r4  r2   r5  zlist[torch.dtype]r{   ró   )r=  rÆ   r{   ró   )r4  r2   rD  ró   rE  ró   r{   ró   )rc  r1   r{   ró   )
r4  r2   rU  ru   r¼  ru   r  ru   r{   ró   )r†   rÆ   r{   rÆ   )r{   zQtuple[Optional[str], Callable[[], list[Any]], Callable[[], list[Any]], type[Any]])r4  r2   r{   ró   )r4  r2   rš  zUnion[ReinterpretView, Buffer]r›  r1   r{   ró   )FTFN)r4  r2   rš  r1   r›  r1   r£  ró   r˜  ró   r¼  ró   r«  zOptional[int]r{   ró   )r«   zCallable[P, _T]rm   r”  rW  r•  r{   ztuple[_T, list[str]])r«   rÔ  rm   r   rW  r   r{   útuple[Any, list[str]])r«   rÔ  r{   rÝ  )r«   rÔ  rm   r   rW  r   r{   rÖ  )r«   rÔ  rm   r   rW  r   r{   rÆ   )r«   rÔ  rm   r   rW  r   r{   ztuple[Any, list[GraphLowering]])r	  rÔ  r
  rÔ  r{   rÆ  )r  rÔ  r  zOptional[Callable[..., Any]]r{   r   )r  rÆ   r{   r“  )r{   rä  )rË  rÕ  r{   ró   )r.  zSequence[torch.Tensor]r{   ró   )rè  rz   r{   rÜ  )r3  ró   rm   r   rW  r   r{   zIterator[Any])r[  rÆ   r{   ró   )r[  rÆ   r{   ru   )ri  zIterable[Any]r{   ró   )
rò  rÔ  rY  r&   rƒ  rÕ  r  rÆ   r{   r“  )r�  z"Optional[Union[Buffer, Operation]]r{   ró   )rX  z Optional[Union[Node, Operation]]r3  z!Optional[torch._ops.OperatorBase]r{   ró   )rX  z"Optional[Union[IRNode, Operation]]r{   ró   )r¨  r7   r{   ró   )rX  zOptional[Operation]r3  z?Union[torch._ops.OpOverload, Collection[torch._ops.OpOverload]]r{   ró   )r°  rÆ   r±  rÓ  r²  rÓ  r{   r   )r¨  r7   r»  zMutableSet[BaseSchedulerNode]r±  zdict[str, SchedulerBuffer]r²  zdict[str, BaseSchedulerNode]r¸  zCallable[[Any], bool]r{   r“  )rÈ  ru   rÉ  ru   r{   ru   )rÓ  rÚ  r{   ru   )rá  rÖ  r{   rÆ  )r¦   rÆ   r{   rÆ   )r†   rä  r{   ró   )r†   rÆ   r{   ró   )r…   rÜ  r{   ró   )r—  rÒ  r[  rä  rø  rÜ  rù  rÜ  rú  rÆ   rû  ró   r{   ró   )rª  rÙ  r{   r“  )rÍ   rR  r{   ró   )r  rR  r{   ró   )r{   ræ  )r«   rÔ  rm   r   rW  r   r{   ztuple[Any, str])r.  úSequence[InputType]r{   zOptional[ShapeEnv])ra  ú Callable[[list[InputType]], Any]r4  r×  r{   rß  )rD   rR  r{   rR  )r3  r5  rB  r×  r{   r“  )r.  rÞ  rE  r×  r{   r×  )rÇ   rz   r{   ró   )rb  rÕ  rW  r6   r{   r“  )r…   rÜ  r{   rÆ   )r…   rÆ   r{   rÜ  )râ  rR  rx   rR  r{   ró   )r{   ztuple[str, ...])r¦   rÆ   r‰  r%   r‹  rŠ  r{   r“  )r…   rÜ  r{   rÜ  )rw   zOptional[type[Any]]rª  ró   r{   r   )r{   zOptional[list[int]])rª  rÙ  rÞ  rÆ   r{   r“  )r{   r¼  (6  Ú
__future__r   rÅ  rÇ  r¯  ÚenumrÕ   rÄ  rF  r~  ræ  r!  rÔ  r×   rg  rb  rÛ  rm  rA  rc  rÖ  r_  r  Úcollections.abcr   r   r   r   r   r	   r
   Útypingr   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   r   r   r   rg   r@   Útorch._inductor.runtime.hintsr   Útorch.utils._ordered_setr   Útorch.utils._pytreer   r   r    r!   r"   r#   r$   Útorch._prims_commonr%   Útorch.fxr&   r*  r'   Útorch.fx.noder(   r'  r*   rå  r,   r'  r.   r¦  r/   r0   r1   r2   r3   r4   Úoutput_coder6   r�  r7   r8   r>   r<   Ú	lru_cacherH   Útorch._dynamo.device_interfacerI   Útorch._dynamo.utilsrJ   Útorch.autogradrK   Útorch.autograd.profiler_utilrL   Ú(torch.fx.passes.graph_transform_observerrM   Útorch.fx.passes.shape_proprN   Útorch.utils._sympy.functionsrO   rP   rQ   rR   rS   Útorch.utils._sympy.symbolrT   rU   Útorch.utils._sympy.value_rangesrV   rW   r§  rX   Úruntime.runtime_utilsrY   rî   Ú_IS_WINDOWSÚ	getLoggerr|   r    r[   rf  rì   Ú	VarRangesrQ  ru   Ú	InputTypeÚGPU_KERNEL_BIN_EXTSr  rA  rY  r)  ra   rc   rl   ÚFunctionrn   r»   rÈ   rÓ   rÜ   rå   ré   r  r!  r+  r4  r<  rZ  r”   rg  rp  rv  ry  r{  r~  r‡  rˆ  r‰  rŒ  r£  r«  r¹  r×  rÞ  rë  rð  rû  rÿ  r  r  r  r  r  r%  r/  r5  r6  r“  r<  r>  rR  rW  rÈ  ru  r|  rŠ  rŽ  r�  r°  r•  r˜  rè  rö  r   r  r  r  r"  r,  r1  r6  r>  rC  rM  rd  rn  rr  r‚  rŽ  r‘  r”  r–  rœ  r™  rÀ  rÂ  rÙ  rß  rä  rö  rù  rû  r  r  r  r  r  r'  r+  r/  r1  r4  rº  r?  rN  rR  rW  r\  r_  rd  rl  r·  rp  ÚEnumrr  rˆ  rŽ  r‘  rœ  r   r¥  r«  r­  r³  rº  rÂ  rË  rÖ  rØ  ræ  ré  r3  rì  rï  rý  r  r  r  r  r,  r/  r6  r>  r2  rG  rM  rX  rb  re  ri  rË  rm  Úcompilerh  rk  rp  ru  rx  r†  rˆ  rŒ  rŽ  r‘  r’  r“  r•  r²  r¶  rº  r¼  rÊ  rÌ  )r  rp   s   00rG   ú<module>rÿ     sŽ  ðÞ "ã Û Û Û Û Û Û Û 	Û Û Û Û Û 	Û Û 	Û Û 
Û Û Û Û ß UÕ UÝ Ý ÷÷ ÷ ñ ÷õ õ ã ã Ý :Ý /Ý -ñ ß>Ñ>ç/Ñ/ÝCÝ$Ý>Ý"å,Ý5Ý$ßT×TÝ,ß=ò #€	ÙˆCƒL€ð
 €×Ñ�TÓòó ðõ DÝ 0Ý %Ý 2Ý KÝ 0÷õ ÷ 8ß Då Ý =ð �l‰l˜gÑ%€à€g×Ñ˜Ó!€áˆTƒ]€Ø�—’˜UŸZšZÐ'Ñ(€	Ø�U˜5Ÿ<š<¨¨e¯l©lÐ:Ñ;Ñ<€	à'°Ñ7Ð à€Ø€	à€ØÐ à€Ø�{ Q‘Ñ'¨AÒ-°+ÀÒ2BÐ XÐDXÓ XÐBó5ó
LôˆE�NŠNô ð 9<ðQØðQØ#&ðQØ25ðQà
óQðh €×Ñ�TÓòó ðóó;ó@ó
+ð)Ø!ð)Ø*@ð)àó)ó#AðL+Ø	+ð+àó+ðØ	)ðà#óô.Gñ @OðIØ	ðIà<ðIð 
ôIð0ØðØ ðØ*8ðà+ôö0'ð Øñ	Øðà!ðð ðð ð	ð
 ôð( %'ØØØØñØðà!ðð ðð ð	ð
 ðð ðð ôô )ô'ô#ôô$ñ  ˆcƒN€ÙˆT˜TÔ"€ôE�8˜W Q¨ U™^ô Eôð:ØCðàôð*!)Ø.ð!)àOð!)ð 	ô!)ðH82ØCð82à!ð82ð ô82ðz 48ñØ*ðà0ðð ôð(EØ
ðEØ$5ðEàôEô&ô$%ôô	DôUô	>ôô2ô-ð,Øð,àô,ô^ð !#Ð �IÓ "ô	ôó 
ôð2 ×Òà.2ØØñ4 Ø+ð4 à	ð4 ð ð4 ð ó	4 ó ð4 ônAð!Øð!ØLð!àô!ðH €×Ñ�QÓó7ó ð7ô�*ô ð ×Ò÷,ð ,ó ð,÷
Fñ FôR
˜ô 
ð ×Òó@ó ð@÷ñ ô@?Ð'ô ?ð €×Ñ�TÓõó ðð8 ×ÑóJó ðJôIðØðàðð ôó"ðØðØ+<ðà	ôôôð -2ÈñØðØ%)ðØBFðà	ôô0ô>ð< €×Ñ�TÓó@ó ð@ð €×Ñ�TÓóRó ðRô:+ô\ôHô>ð
Øð
Ø8ð
Ø@Fð
à	ô
ð" "Ø"&ØØ"&ñ<Øð<à
ð<ð ð<ð ð	<ð
  ð<ð ð<ð  ð<ð 
ô<ó~C÷Cñ Cð" Øð àð ð ð ð ô	 ð$ØðØ#&ðØ25ðàôô/ô)ôXôð#Øð#Ø#&ð#Ø25ð#à$ô#ð* ×Òð.Øð.Ø.@ð.àó.ó ð.ð$ IMñFØðFØ)EðFàôFô*	ôôB&ô&ôôð ×Òóó ðôð €×Ñ�TÓóDó ðDð €×Ñ�TÓó6ó ð6ð6 €×Ñ�TÓóó ðôQô0ôó(ó#ôKôô(*�$—)’)ô *ð!
Ø
ð!
Ø"-ð!
Ø4Að!
ØHKð!
à	ô!
ôHðØ1ðà	ôð" -1ñ!Ø
*ð!à)ð!ð 
õ!õH(õ%õ#ðJØ
ðJàGðJð 
õJðLØðLØ .ðLØDRðLàõLñ *=ð
Øð
à5ð
ð ,ð
ð 5ð	
ð
 'ð
ð 
õ
ñ< *=ðØðà5ðð ,ðð 5ð	ð
 'ðð 
õõ:Tõ ð2 ×Ò÷ð ó ñð ×Òóó ñõ,!õõõNð$Ø&ð$à!ð$ð ð$ð ð	$ð
 ð$ð ð$ð 
õ$õNHõ>õLõ'ð"ØðØ#&ðØ25ðàõõ2ð(Ø+ðà"ðð &õõ	:ð9Øð9Ø4Að9à	õ9ðØðà$ðð õõ$3ðØ!ðØ3Bðà	õô:õ&/ð Ø'Ø#Ø)Ø*ð $ñ	Ñ ñ +?×*DÒ*DÓ*F×G¡$ ! Q˜˜A™ÓGÑ ð �"—*’*˜YÓ'�õHõõ	õð €×Ñ�TÓóó ñð& ×Ò÷1ð 1ó ñ1ð
 68Ñ Ð2Ó 7ðØ
ðà8ðð 1ðð 
õ	õñ �)Ó
�Ù
�)Ó
�ô-"�¡©Ð 0Ñ1õ -"ñ`  DÔ)ñÀtõ ó *ñõðØ.ðØ=@ðà	õô 4§9¢9õ ð €×Ñ�TÓó4ó ñ4õ2Yùóo Hs   ß$c: