ó
    Eñi(I ã                  ó8  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJrJrJrJrJrJrJ r   S SK!J!r!  S SKJ"r"  S SK	J#r#  S SK$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1  S SK2J3r3J4r4J5r5  S S	KJ6r6  S SK7r7S SK8r8S SK9J:s  J;r<  S S
K=J>r>  S SK?J@r@  S SKAJBrB  S SKCJDrD  S SKEJFrF  S SK9JGrGJHrH  SS/rIS SKJJKrKJLrLJMrMJNrN  \-(       ah  S SKJOrOJPrPJQrQ  S SKRJSrS  S SK8JTrTJUrUJVrV  S SKWJXrX  S SKYJZrZ  S SK[J\r\  S SK]J^r^  SSK_J`r`  SSKaJbrb  SSKcJdrd  SSKeJfrf  SSKgJhrhJiriJjrjJkrkJlrlJmrm  SS KnJoro  SS!KpJqrqJrrr  / S"Qrs\0" S#5      rt\Rê                  GSGS$ j5       rvS S%KwJxrx  S S&KyJzrz  S S'K{J|r|  S S(K}J~r~  S S)KJ€r€  S S*K�J‚r‚  S S+KƒJ„r„J…r…J†r†J‡r‡Jˆrˆ  S S,K‰JŠrŠJ‹r‹  S S-KŒJ�r�JŽrŽ  SS.K�J�r�  SS/K‘J’r“  \R                  S0:H  r”\GR*                  " \–5      r—\0" S15      r˜\™\7GR4                  \7GR4                  4   r›\+\1\8GR8                  \�\8R¬                  4      rž\”(       a  S2O\GR>                  " S3S45      r S5S6S7\  3S8.r¡S9r¢S9r£S9r¤S:r¥\F" \8GRL                  \8GRN                  \8GRP                  \8GRR                  \8GRT                  \8GRV                  \8GRX                  \8GRZ                  \8GR\                  \8GR^                  \8GR`                  \8GRb                  \8GRd                  \8GRf                  \8GRh                  /5      rµS;\¶S<'   S=r·\·\·S-
  -  S :X  a  \·S>:¼  d   S?5       eGSHS@ jr¸GSISA jr¹ " SB SC\7GRt                  5      r»\GRx                  " SDSE9 " SF SG5      5       r½GSJGSKSH jjr¾   GSL         GSMSJ jjr¿   GSL         GSMSK jjrÀ\Rê                  GSNSL j5       rÁGSOSM jrÂGSPSN jrÃGSQSO jrÄGSRSP jrÅ      GSSSQ jr’GSTSR jrÆ    GSUSS jrÇGSVST jrÈGSWSU jrÉ    GSXSV jrÊGSYSW jrËSX 4     GSZSY jjrÌ        GS[S[ jrÍGS\GS]S\ jjrÎ  GS^         GS_S] jjrÏ     GS`             GSaS^ jjrÐGSbS_ jrÑGScS` jrÒGSdSa jrÓGSeSb jrÔGSfSc jrÕ\4" Sd5      rÖ\0" SeSDSf9r×\\'\%\Ö4   \×4   rØ " Sg Sh\,\(\Ö\×4   5      rÙGSgSi jrÚ    GSgSj jrÛ    GShSk jrÜ    GSiSl jrÝ      GSjSm jrÞ      GSkSn jrß GSl     GSmSo jjrà      GSnSp jráGSoSq jrâGSpSr jrãGSqSs jräGSrSt jråGSsSu jræGStSv jrçGSuSw jrèGSvSx jréGSwSy jrê\ë" / SzQ5      rì    GSxS{ jríGSyS| jrîGSzS} jrïS SKðrðGS{S~ jrñ/ ròSZ\¶S'   GS|S€ jróGS{S� jrô\GRê                  GS}S‚ j5       rö\GRê                     GS~       GSSƒ jj5       r÷\órø\ôrù\÷rúSIS„.GS€S… jjrûSIS„.       GS�S† jjrü\RD                  " S>5      GS‚S‡ j5       rý " Sˆ S‰\*5      rþ\GRx                   " SŠ S‹5      5       rÿ " SŒ S�5      Gr  " SŽ S�G\ 5      Gr\GRê                  GSƒS� j5       Gr " S‘ S’5      Gr " S“ S”G\5      Gr\Rê                  GS„GS…S• jj5       Gr\RD                  GS†S– j5       Gr\RD                  GSNS— j5       GrGS†S˜ jGr GSl       GS‡S™ jjGr	      GSˆSš jGr
GS‰S› jGrGS‰Sœ jGrSISISDS�.         GSŠSž jjGrSSISŸ.       GS‹S  jjGrSIS¡.       GSŒS¢ jjGrSIS¡.       GSŒS£ jjGr        GS�S¤ jGr\RD                  " SS¥9GSNS¦ j5       Gr\RD                  " SS¥9GSNS§ j5       Gr\RD                  " SS¥9GSNS¨ j5       Gr                  GSŽS© jGrGS�Sª jGr  GS�                 GS‘S¬ jjGrGS’S­ jGr\1\�\7GR4                  4   GrS®\¶S«'   \Rê                   GS“         GS”S¯ jj5       Gr\Rê                  GS•S° j5       Gr\Rê                  GS–S± j5       Gr\Rê                  GS—S² j5       Gr\Rê                  GS˜S³ j5       GrGS™S´ jGrGS�Sµ jGr GS�S¶ jGr!GS™S· jGr"GS™S¸ jGr#        GSšS¹ jGr$    GS›               GSœSº jjGr%GSNS» jGr& " S¼ S½5      Gr'        GS�S¾ jGr(        GS�S¿ jGr)GSžSÀ jGr*GSŸSÁ jGr+GS SÂ jGr,        GS SÃ jGr-        GS¡SÄ jGr.\GRê                        GS¢SÅ j5       Gr/ GSl     GS£SÆ jjGr0GS¤SÇ jGr1GS¥SÈ jGr2GS¦SÉ jGr3GS¦SÊ jGr4GS§SË jGr5GS¨SÌ jGr6\GRê                  GS©SÍ j5       Gr7GS†SÎ jGr8\Rê                  GS†SÏ j5       Gr9\Rê                  GSªSÐ j5       Gr:\Rê                  GS†SÑ j5       Gr;GS†SÒ jGr<GS†SÓ jGr=GS«SÔ jGr>GS¬SÕ jGr?GSNSÖ jGr@GSNS× jGrAGS­SØ jGrBGSwSÙ jGrC " SÚ SÛ\GRˆ                  5      GrE          GS®SÜ jGrFGS¯SÝ jGrG    GS¯SÞ jGrH GSl     GS°Sß jjGrIGS±Sà jGrJ GSl     GS²Sá jjGrKGS³Sâ jGrL      GS´Sã jGrM        GSµSä jGrNSå 4           GS¶Sæ jjGrOSç 4           GS¶Sè jjGrPGS·Sé jGrQGS¸Sê jGrR\GRx                   " Së Sì5      5       GrS\GRê                  GS¹Sí j5       GrTGSºSî jGrUGS»Sï jGrVGSNSð jGrWGS¼Sñ jGrXGS½Sò jGrY              GS¾Só jGrZGS¿Sô jGr[GSÀSõ jGr\GSÁSö jGr]GSÂS÷ jGr^        GSÃSø jGr_GSÄSù jGr`        GSÅSú jGraGSÆSû jGrb GSl       GSÇSü jjGrc      GSÈSý jGrdGSÉSþ jGre      GSÊSÿ jGrfGSNGS  jGrgGSºGS jGrhGSGSGSGSGSGSGSGS.GriG\iGRÕ                  5        V Vs0 s H  u  pX_M	     snn Grk\GRØ                  " GS	5      GrmGSËGS
 jGrnGSÌGS jGroGSÍGS jGrpGSÍGS jGrq\Rê                  GSÎGS j5       Grr\GRx                   " GS GS5      5       Grs0 GrtGS\¶GS'           GSÏGS jGru\F" 5       GrvGS\¶GS'   GSÐGS jGrwGSlGSÑGS jjGrxGSÒGS jGry\0" GS5      Grz\0" GS5      Gr{ " GS GS\G\zG\{4   5      Gr|\3" SDGS9GSlSDSE.GSÓGS jjj5       Gr}GSÔGS jGr~ " GS  GS!\GRˆ                  5      Gr\Rê                  GSÕGS" j5       Gr€GSNGS# jGr�GSÖGS$ jGr‚GS×GS% jGrƒGS×GS& jGr„GSØGS' jGr…GSGGS( jGr†GSÙGS) jGr‡GSNGS* jGrˆGSÚGS+ jGr‰GS,GrŠGSÛGS- jGr‹GSÛGS. jGrŒGSÜGS/ jGr�  GS�         GSÝGS0 jjGrŽGSÞGS1 jGr�GSßGS2 jGr�GSNGS3 jGr‘GSàGS4 jGr’GSáGS5 jGr“\GRx                  " SDSE9 " GS6 GS75      5       Gr”\GS8\%4   Gr•\G\•G\”/G\•4   Gr– " GS9 GS:5      Gr—G\—" 5       Gr˜GSâGS; jGr™GSãGS< jGršGSäGS= jGr›GSåGS> jGrœGSæGS? jGr�\F" / GS@Q5      GržGS’GSA jGrŸ\"GSçGSB j5       Gr GSèGSC jGr¡              GSéGSD jGr¢      GSêGSE jGr£ GSë       GSìGSF jjGr¤gs  snn f (í  é    )ÚannotationsN)ÚCallableÚ
CollectionÚ	GeneratorÚIteratorÚMappingÚMutableMappingÚ
MutableSet)Údatetime)Ú	lru_cache)ÚStringIO)ÚAnyÚcastÚConcatenateÚGenericÚLiteralÚ
NamedTupleÚOptionalÚProtocolÚTYPE_CHECKINGÚ	TypeAliasÚ	TypeGuardÚTypeVarÚUnion)Údataclass_transformÚ	ParamSpecÚSelf)Úmock)Údatasheet_tops)ÚDeviceProperties)Ú_needs_inductor_compile)Údtype_abbrs)Ú
OrderedSet)Útree_flattenÚtree_map_onlyÚ!activation_quantization_aten_passÚinductor_autotune_lookup_table)Úfree_symbolsÚfree_unbacked_symbolsÚIterateExprsÚShapeEnv)ÚIterableÚSequenceÚ
ValuesView)ÚPath)ÚSymBoolÚSymFloatÚSymInt)ÚELEMENTWISE_TYPE_PROMOTION_KIND)ÚGraphModule)ÚNode)ÚScalingTypeé   )ÚWorkspaceArg©ÚPythonWrapperCodegen)ÚDep©ÚGraphLowering)ÚBufferÚExternKernelÚIRNodeÚLayoutÚ	OperationÚReinterpretView©ÚCompiledFxGraph)ÚBaseSchedulerNodeÚSchedulerBuffer)ÚcudaÚmpsÚxpuÚmtiaÚTc                 óî   • [          V s/ s H*  n [        [        U 5      R                  5       (       d  M(  U PM,     nn [	        U5      S::  d   e[	        U5      S:X  a  SnU$ UR                  5       nU$ s  sn f )Nr7   r   rH   )Ú	GPU_TYPESÚgetattrÚtorchÚis_availableÚlenÚpop)ÚxÚ
avail_gpusÚgpu_types      ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/utils.pyÚget_gpu_typerX   j   sh   € å&ÓKšY˜¬'´%¸Ó*;×*HÑ*H×*J—!™Y€JÐKÜˆz‹?˜aÓÐÐÜ˜Z›¨AÓ-ˆv€HØ€Oð 4>·>±>Ó3C€HØ€Oùò Ls
   ‰'A2´A2)Ú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Ú_TÚspvÚTORCHINDUCTOR_XPU_KERNEL_FORMATÚzebinz.cubinz.hsacoÚ.)rH   ÚhiprJ   é   é€   zOrderedSet[torch.dtype]Ú_TMA_SUPPORTED_DTYPESé@   é   zmust be power of 2c                ó*   • U [         -   S-
  [         * -  $ )z/Round up to the nearest multiple of ALIGN_BYTESr7   )ÚALIGN_BYTES)Únbytess    rW   Ú_alignrz   º   s   € à”[Ñ  1Ñ$¬¨Ñ4Ð4ó    c                ó  • [        U [        R                  [        R                  45      (       a#  [	        [        [        U R                  5      5      $ [        U [        5      =(       d"    [        R                  " U [        5      [        :H  $ )z:v can be statically proven to be a multiple of ALIGN_BYTES)Ú
isinstanceÚsympyÚAddÚMaxÚallÚmapÚ_is_alignedÚargsÚalignÚgcdrx   )Úvs    rW   rƒ   rƒ   ¿   sT   € ä�!”e—i‘i¤§¡Ð+×,Ñ,Ü”3”{ A§F¡FÓ+Ó,Ð,Ü�aœÓ×K¤5§9¢9¨Q´Ó#<ÄÑ#KÐKr{   c                  ó4   • \ rS rSrSrSrSr\SS j5       rSr	g)	r…   éÆ   z<Symbolically round up to the nearest multiple of ALIGN_BYTES©r7   Tc                óš   • [        U[        [        R                  45      (       a  [	        [        U5      5      $ [        U5      (       a  U$ g ©N)r}   Úintr~   ÚIntegerrz   rƒ   )ÚclsÚvalues     rW   ÚevalÚ
align.evalÌ   s<   € ä�eœc¤5§=¡=Ð1×2Ñ2Üœ#˜e›*Ó%Ð%Ü�u×ÑØˆLð r{   © N)r�   ú
sympy.ExprÚreturnzOptional[sympy.Expr])
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚnargsÚ
is_integerÚclassmethodr‘   Ú__static_attributes__r“   r{   rW   r…   r…   Æ   s!   † ÙFà€EØ€Jàóó ór{   r…   T)Úfrozenc                  óB   • \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
rg)ÚGraphPartitionMapéÔ   zH
Mapping from the partition info (e.g., input/output) to the graph info
r�   Úidzlist[Optional[int]]Úinput_index_mappingÚoutput_index_mappingú	list[str]Úconstant_namesr“   N©r–   r—   r˜   r™   rš   Ú__annotations__rž   r“   r{   rW   r¡   r¡   Ô   s$   ‡ ñð
 	ƒGð -Ó,Ø-Ó-ð Ör{   r¡   c           
     óª  • U " 5         [         R                  R                  5         [         R                  " [	        S5      [         R
                  SS9n[         R                  R                  SS9n[         R                  R                  SS9nUR                  5         [        S5       H  nUR                  5         U " 5         M     UR                  5         [         R                  R                  5         UR                  U5      S-  n[        S[	        X-  5      5      n[        S[	        X'-  5      5      n	[        U5       H
  nU " 5         M     [        U	5       Vs/ s H   n[         R                  R                  SS9PM"     nn[        U	5       Vs/ s H   n[         R                  R                  SS9PM"     nn[         R                  R                  [         R                  R                  R                  /S9 n
[         R                  R                  5         [        U	5       Hp  nUR                  5         XK   R                  5         [         R                  R                   R                  S	5         U " 5         S
S
S
5        X[   R                  5         Mr     [         R                  R                  5         [         R"                  " [%        XE5       VVs/ s H  u  pÍUR                  U5      PM     snn5      nS
S
S
5        [         R&                  " W5      R)                  5       n[*        R-                  S5        [*        R-                  W
R/                  5       R1                  SSS95        [3        U
R5                  5        Vs/ s HI  nUR6                  [8        R                  :X  d  M#  [:        R<                  " SUR>                  5      c  MG  UPMK     sn5      nU(       a#  U[@        R&                  " S U 5       5      S-  -  n[*        R-                  SU5        U$ s  snf s  snf ! , (       d  f       GN²= fs  snnf ! , (       d  f       GNK= fs  snf )á:  
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.
ç    €„ŽArH   ©ÚdtypeÚdeviceT©Úenable_timingé   r7   ©Ú
activitiesÚRunCudaModuleNú
raw eventsÚself_device_time_totaléÿÿÿÿ©Úsort_byÚ	row_limitzfused_abs_max_\dc              3  ó8   #   • U  H  oR                   v •  M     g 7frŒ   ©Údevice_time_total©Ú.0Úevents     rW   Ú	<genexpr>Úfp8_bench.<locals>.<genexpr>(  s   é € ÐQÂ¸×3Ö3Âùó   ‚ç     @�@úprofiling results: %s ms)!rP   rH   ÚsynchronizeÚemptyr�   Úfloat16ÚEventÚrecordÚrangeÚzero_Úelapsed_timeÚmaxÚprofilerÚprofileÚProfilerActivityÚCUDAÚnvtxÚtensorÚzipÚmeanÚitemÚlogÚdebugÚkey_averagesÚtabler\   ÚeventsÚdevice_typer[   ÚreÚmatchÚnameÚ
statistics)ÚfnÚwarmupÚrepÚcacheÚstart_eventÚ	end_eventÚ_Úestimate_msÚn_warmupÚn_repeatÚpÚiÚsÚeÚtimesÚresrÁ   Úfiltered_eventss                     rW   Ú	fp8_benchrô   æ   s>  € ñ „DÜ	‡J�J×ÑÔÜ�KŠKœ˜J›¬u¯}©}ÀVÑL€Eô —*‘*×"Ñ"°Ð"Ð6€KÜ—
‘
× Ñ ¨tÐ Ð4€IØ×ÑÔÜ�1ŽXˆØ�‰ŒÙ
Žñ ð ×ÑÔÜ	‡J�J×ÑÔØ×*Ñ*¨9Ó5¸Ñ9€Kô �1”c˜&Ñ.Ó/Ó0€HÜ�1”c˜#Ñ+Ó,Ó-€Hô �8Ž_ˆÙ
Žñ ô BGÀxÄÓQÂ¸A”5—:‘:×#Ñ#°$Ð#Ó7Á€KÐQÜ?DÀX¼ÓOº¸!”—‘×!Ñ!°Ð!Ó5¹€IÐOÜ	�‰×	Ñ	ä�N‰N×+Ñ+×0Ñ0ð
ð 
 ñ 
ð 
Ü�
‰
×ÑÔ Ü�x–ˆAØ�K‰KŒMØ‰N×!Ñ!Ô#Ü—‘—‘×&Ñ& Õ7Ù”÷ 8à‰L×ÑÖ!ñ !ô 	�
‰
×ÑÔ Ü—’Ü+.¨{Ô+FÔGÒ+F¡4 1ˆQ�^‰^˜AÖÑ+FÒGó
ˆ÷
ô" �*Š*�UÓ
×
 Ñ
 Ó
"€CÜ‡I�IˆlÔÜ‡I�Iˆa�n‰nÓ×$Ñ$Ð-EÐQSÐ$ÐTÔUÜð Ÿ™œó	
â#�à×!Ñ!¤Z§_¡_Ñ4ó ô —H’HÐ0°%·*±*Ó=÷	 Ù#ñ	
ó	€Oö ØÜ�OŠOÑQÁÓQÓQØññ	
ˆô
 ‡I�IÐ(¨#Ô.Ø€JùòO RùÚO÷ 8Ö7üó
 H÷
ö 
üò*	
sP   Å'PÆ'P!Ç;A8P>É3P&É;AP>ËP8Ë2P>Î"QÎ) QÏQÐ&
P5Ð0P>Ð>
QFc                ó4   • SSK Jn  U" [        5      " XX#5      $ )Nr   )Úmay_distort_benchmarking_result)Ú$torch._inductor.runtime.benchmarkingrö   Ú_do_bench_using_profiling)rã   rä   rå   Úis_vetted_benchmarkingrö   s        rW   Údo_bench_using_profilingrú   0  s    € õ" Uá*Ô+DÔEØ
�Cóð r{   c           
     ó(  • U(       d  SSK Jn  U" 5         [        5       nUR                  5       n[	        U5      nU " 5         UR                  5         [        R                  " [        S5      [        R                  US9nUR                  SS9n	UR                  SS9n
U	R                  5         [        S5       H  nUR                  5         U " 5         M     U
R                  5         UR                  5         U	R                  U
5      S-  n[        S[        X-  5      5      n[        S[        X,-  5      5      n[        U5       H
  nU " 5         M     UR                  5         [        R                  R!                  [#        [        R                  R$                  U5      /S	9 n[        U5       H  nUR                  5         U " 5         M     UR                  5         S
S
S
5        [&        R)                  S5        [&        R)                  WR+                  5       R-                  SSS95        [/        UR1                  5        Vs/ s H7  nUR2                  [#        [4        U5      :X  d  M#  UR6                  S:w  d  M5  UPM9     sn5      n[9        U5      U-  S:w  a  [;        SU[9        U5      U5      e[9        U5      U-  n[/        [=        U5       VVs/ s H  u  nnUU-  S:w  d  M  UPM     snn5      nUR?                  5         UR+                  5       n[&        R)                  S5        [&        R)                  UR-                  SS95        [A        S U 5       5      S-  U-  n[&        R)                  SU5        U$ ! , (       d  f       GN¤= fs  snf s  snnf )r«   r   )Úmay_ban_benchmarkingr¬   r­   Tr°   r²   r7   r³   Nr¶   r·   r¸   r¹   zContext SynczWFailed to divide all profiling events into #repeat groups. #%s events: %d, #repeats: %szprofiling time breakdown)r»   c              3  ó8   #   • U  H  oR                   v •  M     g 7frŒ   r½   r¿   s     rW   rÂ   Ú,_do_bench_using_profiling.<locals>.<genexpr>¥  s   é € ÐA²=¨%×%Ö%²=ùrÄ   rÅ   rÆ   )!r÷   rü   rX   ÚupperrY   rÇ   rP   rÈ   r�   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rO   rÒ   rÙ   rÚ   rÛ   rÜ   r\   rÝ   rÞ   r[   rá   rR   ÚRuntimeErrorÚ	enumerateÚ_build_treeÚsum)rã   rä   rå   rù   rü   rÞ   Údevice_type_upperÚdevice_interfaceræ   rç   rè   ré   rê   rë   rì   rí   rÁ   ró   Únum_event_per_grouprî   Úactual_eventsrò   s                         rW   rø   rø   H  s   € ö "ÝMáÔä“.€KØ#×)Ñ)Ó+ÐÜ/°Ó<ÐÙ„DØ× Ñ Ô"Ü�KŠKœ˜J›¬u¯y©yÀÑM€Eð #×(Ñ(°tÐ(Ð<€KØ ×&Ñ&°TÐ&Ð:€IØ×ÑÔÜ�1ŽXˆØ�‰ŒÙ
Žñ ð ×ÑÔØ× Ñ Ô"Ø×*Ñ*¨9Ó5¸Ñ9€Kô �1”c˜&Ñ.Ó/Ó0€HÜ�1”c˜#Ñ+Ó,Ó-€Hô �8Ž_ˆÙ
Žñ ð × Ñ Ô"Ü	�‰×	Ñ	ä”E—N‘N×3Ñ3Ð5FÓGð
ð 
 ñ 
ð 
ä�x–ˆAà�K‰KŒMáŽDñ	 !ð 	×$Ñ$Ô&÷
ô ‡I�IˆlÔÜ‡I�Iˆa�n‰nÓ×$Ñ$Ð-EÐQSÐ$ÐTÔUäð Ÿ™œó	
â#�Ø× Ñ ¤G¬JÐ8IÓ$JÑJó ð —
‘
˜nÑ,÷ Ù#ñ	
ó€Oô ˆ?Ó˜hÑ&¨!Ó+Üð+àÜ�Ó Øó
ð 	
ô ˜oÓ.°Ñ9ÐÜô & oÔ6ô	
â6‘��5ØÐ&Ñ&¨!Ñ+÷ Ù6ò	
ó€Mð ×ÑÔØ!×.Ñ.Ó0€Mä‡I�IÐ(Ô)Ü‡I�Iˆm×!Ñ!¨BÐ!Ð/Ô0ä
ÑA±=ÓAÓ
AÀFÑ
JÈXÑ
U€CÜ‡I�IÐ(¨#Ô.Ø€J÷c
ö 
üò$	
ùó"	
s*   Æ :M7È?"N	É%N	É7N	ËN
Ë"N
Í7
Nc                 ó  •  SSK Jn   [        R                  R	                  SS5        U S L=(       a%    [        [        [        R                  SS 5      S5      $ ! [         a     g[         a  nS[        U5      ;   d   e S nAgS nAff = f)	Nr   )Ú	roi_alignztorchvision::nmsÚMetaÚtorchvisionr	  Fztorchvision::nms does not exist)Útorchvision.opsr	  rP   Ú_CÚ%_dispatch_has_kernel_for_dispatch_keyÚhasattrrO   ÚopsÚImportErrorr   Ústr)r	  rð   s     rW   Úhas_torchvision_roi_alignr  ª  s|   € ðÝ-ä�‰×6Ñ6Ð7IÈ6ÔRØ Ð$÷ 
¬Ü”E—I‘I˜}¨dÓ3°[ó*
ð 	
øô ó ÙÜó Ø0´C¸³FÓ:Ð:Ð:Üûðús   ‚AA Á
BÁ$	BÁ-BÂBc                ót  • U c   [         R                  " S5      R                  $ [        U [        5      (       a  [         R                  " U 5      n U R
                  S;  aY  U R                  cL  [        U R
                  5      n[         R                  " U R
                  UR                  R                  5       S9$ U $ )Ng        )ÚcpuÚmeta)Úindex)
rP   rÕ   r¯   r}   r  Útyper  rY   ÚWorkerÚcurrent_device©r¯   r  s     rW   Údecode_devicer  º  s…   € Ø�~Ü�|Š|˜CÓ ×'Ñ'Ð'Ü�&œ#×ÑÜ—’˜fÓ%ˆØ‡{�{˜/Ó)¨f¯l©lÑ.BÜ3°F·K±KÓ@ÐÜ�|Š|˜FŸK™KÐ/?×/FÑ/F×/UÑ/UÓ/WÑXÐXØ€Mr{   c                ó~   • [         R                  " [        R                  U [        R
                  R                  5      $ rŒ   )Ú	functoolsÚreduceÚoperatorÚmulr~   ÚSÚOne)Úits    rW   Úsympy_productr%  Å  s#   € Ü×ÒœHŸL™L¨"¬e¯g©g¯k©kÓ:Ð:r{   c           	     ó”   • [        U 5      [        U5      :X  d   e[        R                  " [        S [	        X5       5       5      5      $ )Nc              3  ó.   #   • U  H  u  pX-  v •  M     g 7frŒ   r“   )rÀ   ÚaÚbs      rW   rÂ   Úsympy_dot.<locals>.<genexpr>Ë  s   é € Ð>ªo¡d a˜AžEªoùs   ‚)rR   r~   Úexpandr  rÖ   )Úseq1Úseq2s     rW   Ú	sympy_dotr.  É  s6   € Üˆt‹9œ˜D›	Ó!Ð!Ð!Ü�<Š<œÑ>¬c°$¬oÓ>Ó>Ó?Ð?r{   c                ób   • U  Vs0 s H  n[        U5      U_M     snR                  5       $ s  snf rŒ   )r£   Úvalues)r$  rT   s     rW   Úuniquer1  Î  s+   € Ù Ó!šb˜ŒBˆq‹E�1ŠH™bÑ!×(Ñ(Ó*Ð*ùÒ!s   …,c           
     ó˜  • [        U [        R                  5      (       d  [        U[        R                  5      (       a4  [        [        R                  " U 5      [        R                  " U5      5      $ [        U [
        5      (       a  [        U[
        5      (       d$   U  S[        U 5       SU S[        U5       35       e[        X5      $ )Nz: ú, )r}   r~   ÚExprr_   Úsympifyr�   r  Úruntime_ceildiv)ÚnumberÚdenoms     rW   rj   rj   Ò  s›   € ô �&œ%Ÿ*™*×%Ñ%¬°E¼5¿:¹:×)FÑ)FÜ”u—}’} VÓ,¬e¯mªm¸EÓ.BÓCÐCô �fœc×"Ñ"¤z°%¼×'=Ñ'=ð Øˆ(�"”T˜&“\�N " U G¨2¬d°5«k¨]Ð;óÐ=ô ˜6Ó)Ð)r{   c                ót  • U c  g[        U 5      R                  S5      S   n0 SS_SS_SS	_S
S_SS_SS_SS	_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_SS#S$S%S&.EnUR                  [        UR	                  5       5       Vs0 s H  o3U_M     sn5        [        U [         5      (       a  U $ S'X!    3$ s  snf )(Nz*i8rp   r¸   ÚboolÚi1Ú
float8e4nvÚfp8e4nvÚfloat8e5Úfp8e5Úfloat8e4b15Úfp8e4b15Úfloat8e4b15x4Ú
fp8e4b15x4Úfloat8_e4m3fnÚfloat8_e5m2Úfloat8_e8m0fnuÚu8Úfloat4_e2m1fn_x2rÉ   Úfp16Úbfloat16Úbf16Úfloat32Úfp32Úfloat64Úfp64Úint8Úi8Úint16Úi16Úint32Úi32Úint64Úi64Úu16Úu32Úu64)Úuint8Úuint16Úuint32Úuint64Ú*)r  ÚsplitÚupdateÚlistr0  r}   )ÚkeyÚ	dtype_strÚtysr‡   s       rW   Ú_type_ofrf  à  sW  € ð
 �{ØÜ�C“—‘˜sÓ# BÑ'€IðØ�ðà�iðð 	�Gðð 	�zð	ð
 	˜ðð 	˜ðð 	�wðð 	˜$ðð 	˜Dðð 	�6ðð 	�Fðð 	�6ðð 	�6ðð  	�ð!ð" 	�ð#ð$ 	�ð%ð& 	�ð'ð( ØØØò/€Cð4 ‡J�Jœd 3§:¡:£<Ô0Ó1Ò0˜�1’Ñ0Ñ1Ô2Ü˜S¤#×&Ñ&ˆ3Ð@¨a°±Ð/?Ð,@Ð@ùò 2s   ÂB5c                óZ   • U  Vs/ s H  n[         R                  " U5      PM     sn$ s  snf )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.
)r~   r5  ©Úlstrî   s     rW   Úconvert_shape_to_inductorrj    s%   € ñ '*Ó*¢c ŒE�MŠM˜!Ö¡cÑ*Ð*ùÒ*s   … (c                óp   • [        U [        R                  5      (       a  U R                  R                  $ U $ )z²
Convert SymInt to sympy.Expr, leave int as is.

Unlike sympy.sympify() which converts int to sympy.Integer,
this function preserves int as int and only converts SymInt to Expr.
)r}   rP   r2   ÚnodeÚexpr©Úvals    rW   Úconvert_symint_to_exprrp    s(   € ô �#”u—|‘|×$Ñ$Ø�x‰x�}‰}ÐØ€Jr{   c                óì   • SSK Jn  [        U [        5      (       a  U $ [        U [        R
                  5      (       a  [        U 5      $ UR                  R                  R                  R                  U SS9$ )zD
Like convert_shape_to_symint, but operates on a single expression.
r7   ©ÚVN)Úhint)
Úvirtualizedrs  r}   r�   r~   rŽ   ÚgraphÚsizevarsÚ	shape_envÚcreate_symintnode)rî   rs  s     rW   Úconvert_to_symintrz    sk   € õ ô �aœ×Ñð 	
ðô
 ˜!œUŸ]™]×+Ñ+ô �‹Fð	ð —‘×!Ñ!×+Ñ+×=Ñ=¸aÀdÐ=ÐKðr{   c                óD   • U  Vs/ s H  n[        U5      PM     sn$ s  snf )zn
Takes a list of shapes from Inductor and converts them into symints (or just
ints if all shapes are static).
)rz  rh  s     rW   Úconvert_shape_to_symintr|  .  s"   € ñ +.Ó.ª# QÔ˜aÖ ©#Ñ.Ð.ùÒ.s   …c                óN   • [        S U R                  R                   5       5      $ )z%
Does this op overload have aliasing
c              3  ó<   #   • U  H  oR                   S Lv •  M     g 7frŒ   )Ú
alias_info©rÀ   r(  s     rW   rÂ   Úis_view.<locals>.<genexpr><  s   é € ÐFÒ1E¨A�|‰| 4Õ'Ò1Eùs   ‚)ÚanyÚ_schemaÚ	arguments©Úops    rW   Úis_viewr‡  8  s   € ô ÑF°·±×1EÒ1EÓFÓFÐFr{   c                ó   • g©NFr“   )ré   s    rW   Ú<lambda>rŠ  A  s   € Èr{   c                ó  ^• U R                   S:w  a  g[        U R                  [        R                  R
                  5      (       d  U R                  [        R                  L d  g[        [        R                  R
                  U R                  5      nU[        R                  L d  [        U5      (       a  [        U4S jU R                   5       5      $ [        R                  R                  UR                  ;   =(       d    T" U5      $ )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  ó<   >#   • U  H  n[        UT5      v •  M     g 7frŒ   )Úis_pointwise_use)rÀ   ÚuÚis_pointwise_fns     €rW   rÂ   Ú#is_pointwise_use.<locals>.<genexpr>R  s   øé € ÐKÂ¸AÔ# A ×7Ð7Âùs   ƒ)r†  r}   ÚtargetrP   Ú_opsÚ
OpOverloadr   Úgetitemr   r‡  r�   ÚusersÚTagÚ	pointwiseÚtags)Úuser�  r’  s    ` rW   rŽ  rŽ  ?  s«   ø€ ð ‡v�v�Ó Øä�3—:‘:œuŸz™z×4Ñ4×5Ñ5¸¿¹Äx×GWÑGWÒ9Wàä”%—*‘*×'Ñ'¨¯©Ó4€FØ”×!Ñ!Ò!¤W¨V§_¡_ÜÔKÀÇÂÓKÓKÐKä�9‰9×Ñ &§+¡+Ñ-×H±ÀÓ1HÐHr{   ú	list[Any]c           	     óÈ  ^^• [         R                  R                  5       m/ mSUU4S jjnTR                  " U /[	        [         R
                  X1U45      Q76 n[        U R                  R                  5      S:X  a3  [        U R                  R                  S   R                  5      S:X  a  U4nTR                  U5        [         R                  R                  0 T5      nUT4$ )Nc                ó`   >• TR                  U 5        TR                  S[        T5       35      $ )NÚarg)ÚappendÚplaceholderrR   )rž  ÚgÚ
graph_argss    €€rW   Úadd_tensor_argÚ)gen_gm_and_inputs.<locals>.add_tensor_arg]  s,   ø€ Ø×Ñ˜#ÔØ�}‰}˜s¤3 z£?Ð"3Ð4Ó5Ð5r{   r7   r   ÚTensor)rž  útorch.Tensorr•   r5   )rP   ÚfxÚGraphrŒ  r%   r¥  rR   rƒ  Úreturnsr  r  Úoutputr4   )r’  r„   Úkwargsr£  rl  Úgmr¡  r¢  s         @@rW   Úgen_gm_and_inputsr­  W  s»   ù€ ô 	�‰�‰Ó€AØ%'€J÷6ð 6ð �?Š?ØðÜœuŸ|™|¨^ÀF¸^ÓLò€Dô 	ˆF�N‰N×"Ñ"Ó# qÓ(Ü�—‘×&Ñ& qÑ)×.Ñ.Ó/°8Ó;àˆwˆØ‡H�HˆT„Nä	�‰×	Ñ	˜b !Ó	$€BØˆzˆ>Ðr{   c                ót   • U S:X  a  g [        U 5      nUR                  5       (       a  UR                  5         g g ©Nr  )rY   rQ   rÇ   r  s     rW   rÇ   rÇ   o  s7   € Ø�ƒØÜ/°Ó7ÐØ×$Ñ$×&Ñ&Ø×$Ñ$Õ&ð 'r{   c                óî   • [        U5        [        R                  " S5        [        R                  " 5       n[        U5       H  nU " U6 n[        U5        M     [        R                  " 5       nWc   eXt-
  $ )Ni9  )rÇ   rP   Úmanual_seedÚtimeÚperf_counterrÌ   )ÚmodelÚexample_inputsrñ   r¯   Út0ré   ÚresultÚt1s           rW   Útimedr¹  w  sk   € ô �ÔÜ	×Ò�dÔÜ	×	Ò	Ó	€BÜ�5Ž\ˆÙ˜Ð'ˆÜ�FÖñ ô 
×	Ò	Ó	€BàÑÐÐØ‰7€Nr{   c                óð   • [         R                  " [        U5       Vs/ s H  n[        XX%5      PM     sn5      n[         R                  " U5      U-  n[        X„-  S 5        UR                  5       $ s  snf )Nz.6f)rP   rÕ   rÌ   r¹  ÚmedianÚprintrØ   )	r´  rµ  rñ   ÚrepeatÚbaseliner¯   ré   ÚtimingsÚtooks	            rW   Úprint_performancerÁ  ‰  se   € ô �lŠlÜ>CÀF¼mÓLºm¸Œˆu eÖ	4¹mÑLó€Gô �<Š<˜Ó  5Ñ(€DÜ	ˆT‰_˜SÐ!Ô#Ø�9‰9‹;Ðùò	 	Ms   žA3c                óF   ^• [        X5      " 5       m[        XU4S j5        g)zKReplace obj.method() with a new method that returns a precomputed constant.c                 ó   >• T $ rŒ   r“   )r·  s   €rW   rŠ  Ú#precompute_method.<locals>.<lambda>œ  s   ø€ ¡r{   N)rO   Úsetattr)ÚobjÚmethodr·  s     @rW   Úprecompute_methodrÈ  ™  s   ø€ ä�SÔ!Ó#€FÜˆCœÕ(r{   c                ó,   • U H  n[        X5        M     g)zFReplace methods with new methods that returns a precomputed constants.N)rÈ  )rÆ  ÚmethodsrÇ  s      rW   Úprecompute_methodsrË  Ÿ  s   € ãˆÜ˜#Ö&ò r{   c                ó8   • [        X:„  5      [        X:  5      -
  $ rŒ   )r�   ©r(  r)  s     rW   ÚcmprÎ  ¥  s   € Üˆq‰u‹:œ˜A™E›
Ñ"Ð"r{   c                óŠ   • [        U [        5      (       a  U /U-  $ [        U 5      S:X  a  [        U 5      " U S   /5      U-  $ U $ )Nr7   r   )r}   r�   rR   r  )rT   Úsizes     rW   Úpad_listlikerÑ  ©  sD   € Ü�!”S×ÑØˆs�T‰zÐÜ
ˆ1ƒv�ƒ{Ü�AŒw˜˜!™�v‹ Ñ%Ð%Ø€Hr{   c                ó@   • [        U 5      S:X  a  / $ SS jn[        XS9$ )Nr   c                ó€   • [        U [        5      (       a  U $ SSKJn  [        X5      (       d   eU R	                  5       $ )Nr7   )rF   )r}   r  Ú	schedulerrF   Úget_name)ÚelemrF   s     rW   Ú	sort_funcÚtuple_sorted.<locals>.sort_func¶  s4   € Ü�dœC× Ñ ØˆKå0ä˜$×2Ñ2Ð2Ð2Ø�}‰}‹Ðr{   ©rc  )rÖ  rl   r•   r  )rR   Úsorted)rT   r×  s     rW   Útuple_sortedrÛ  ²  s$   € Ü
ˆ1ƒv�ƒ{Øˆ	ôô �!Ñ#Ð#r{   ÚPÚRV)Ú	covariantc                  ó2   • \ rS rSr\SS j5       rSS jrSrg)ÚCachedMethodiÇ  c                ó   • g rŒ   r“   )ræ   s    rW   Úclear_cacheÚCachedMethod.clear_cacheÈ  s   € Ø),r{   c                ó   • g rŒ   r“   ©Úselfr„   r«  s      rW   Ú__call__ÚCachedMethod.__call__Ë  s   € Àr{   r“   N)ræ   r   r•   ÚNone)r„   úP.argsr«  úP.kwargsr•   rÝ  )r–   r—   r˜   r™   Ústaticmethodrâ  rç  rž   r“   r{   rW   rà  rà  Ç  s   † ØÛ,ó Ø,çDr{   rà  c           	     óÚ   ^• U R                   nSU S3mSU 0n[        SU ST ST S3R                  5       U5        [        R                  " U 5      " X! S3   5      nS
U4S	 jjnXCl        U$ )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                óB   >• [        U T5      (       a  [        U T5        g g rŒ   ©r  Údelattr©ræ  rc  s    €rW   râ  Ú"cache_on_self.<locals>.clear_cacheä  s   ø€ Ü�4˜×ÑÜ�D˜#Õð r{   ©ræ  r   r•   ré  ©r–   ÚexecÚlstripr  Úwrapsrâ  )rã   rá   ÚctxÚwrapperrâ  rc  s        @rW   Úcache_on_selfrý  Ï  s”   ø€ Ø�;‰;€DØˆtˆf�FÐ
€Cð �ˆ*€CÜðØˆFð à ˜Eð "'ð (+ eð ,	ð		÷ ‰F‹HØôô �oŠo˜bÔ! #¨¨nÐ&=Ñ">Ó?€G÷ð &ÔØ€Nr{   c                ó   • [        U 5      $ )zU
Variant of cache_on_self for properties. The only difference is the type signature.
)rý  )rã   s    rW   Úcache_property_on_selfrÿ  ì  s   € ô ˜ÓÐr{   c                ó    ^ •     SU 4S jjnU$ )Nc           	     óÚ   >^• ST SU R                    S3mSU 0n[        ST ST ST S3R                  5       U5        [        R                  " U 5      " US	   5      nSU4S
 jjnX2l        U$ )Nrî  ré   rï  rã   z¶            def inner(self: Any, *args: P.args, **kwargs: P.kwargs) -> RV:
                args_kwargs = (args, tuple(sorted(kwargs.items())))

                if not hasattr(self, "z2"):
                    object.__setattr__(self, "z%", {})

                cache = self.zþ

                try:
                    return cache[args_kwargs]
                except KeyError:
                    pass

                rv = fn(self, *args, **kwargs)

                cache[args_kwargs] = rv
                return rv
            Úinnerc                óB   >• [        U T5      (       a  [        U T5        g g rŒ   rò  rô  s    €rW   râ  Ú<cache_on_self_and_args.<locals>.wrapper.<locals>.clear_cache  s   ø€ Ü�t˜S×!Ñ!Ü˜˜cÕ"ð "r{   rö  r÷  )rã   rû  r  râ  rc  Ú
class_names       @€rW   rü  Ú'cache_on_self_and_args.<locals>.wrapperû  s‘   ù€ ð �:�,˜a §¡˜}¨FÐ3ˆð �RˆjˆÜð'ð (+ eð ,/Ø/2¨eð 4à!˜Uð #ð÷$ ‘“Øô)	
ô, —’ Ô# C¨¡LÓ1ˆ÷	#ð (ÔØˆr{   )rã   úFN_TYPE[P, RV]r•   r  r“   )r  rü  s   ` rW   Úcache_on_self_and_argsr  ö  s    ø€ ð
$Øð$à	÷$ðL €Nr{   c           
     ó”  • SSK Jn  [        U [        5      (       ay  [        R
                  " [        R                  U  Vs/ s H?  n[        US5      (       d  M  UR                  (       d  M)  UR                  R                  PMA     sn[        5       5      $ [        XR                  5      (       a  U R                  $ [        5       $ s  snf )Nr7   ©Úirrl  )Ú r  r}   rb  r  r  r   Úor_r  rl  Úoriginsr#   r?   )Únode_scheduler  rl  s      rW   Úaggregate_originsr  $  s    € õ ä�-¤×&Ñ&Ü×ÒÜ�L‰Lñ *óò *�DÜ˜4 ×(ó "à-1¯Y­Yó "�—	‘	×!Ô!Ù)ñô ‹Ló	
ð 		
ô 
�M§?¡?×	3Ñ	3Ø×$Ñ$Ð$ä‹|Ðùòs   ¿C
ÁC
Á+C
c                ó`  • [        U 5      nUS:X  ag  S nU Vs/ s HA  nUR                  S:X  d  M  SUR                  ;   d  M'  UR                  S   c  M9  U" U5      PMC     nn[        [	        U5      5      nGOUS:X  aØ  / nU H»  nUR                  S:X  d  M  S nSnSUR                  ;   a  UR                  S   S   nO$SUR                  ;   a  UR                  S   S   nS	nU(       d  Mi  [        US
   [        5      (       a  UR                  US
   U-   5        Mš  UR                  US
   R                  U-   5        M½     [        [	        U5      5      nO:US:X  a.  U Vs/ s H   oDR                  S:X  d  M  UR                  PM"     nnO[        eSR                  S/U-   5      $ s  snf s  snf )NÚoriginal_atenc                ó.  • U R                   S   nSn[        U[        R                  R                  5      (       a  UR
                  R                  nU$ [        U[        R                  R                  5      (       a  [        UR                  5       5      nU$ )Nr  r  )
r  r}   rP   r“  r”  Ú_overloadpacketr–   ÚHigherOrderOperatorr  rá   )Úoriginr  rc  s      rW   Úget_origin_meta_strÚ2get_fused_kernel_name.<locals>.get_origin_meta_strA  su   € Ø"ŸK™K¨Ñ8ˆMØˆCÜ˜-¬¯©×)>Ñ)>×?Ñ?Ø#×3Ñ3×<Ñ<�ð ˆJô ˜M¬5¯:©:×+IÑ+I×JÑJÜ˜-×,Ñ,Ó.Ó/�ØˆJr{   rŒ  rP   r  Úsource_fn_stackr¸   Úfwd_source_fn_stackÚbackwardr7   Úinductor_noderé   Úfused)r  r†  r  rÚ  r#   r}   r  rŸ  r–   rá   ÚNotImplementedErrorÚjoin)r  Údescriptive_namesÚall_originsr  r  ÚsourcesÚ	source_fnÚsuffixs           rW   Úget_fused_kernel_namer%  :  s°  € ô $ MÓ2€KØ˜OÓ+ò	ñ &ó
â%�Ø�y‰y˜OÑ+ó (ð   6§;¡;Ñ.ó (ð —‘˜OÑ,ó	 (Ñ Ö'Ù%ð 	ð 
ô œ GÓ,Ó-ŠØ	˜gÓ	%àˆÛ!ˆFØ�y‰y˜OÕ+Ø �	Ø�Ø$¨¯©Ó3Ø &§¡Ð,=Ñ >¸rÑ B‘IØ*¨f¯k©kÓ9à &§¡Ð,AÑ BÀ2Ñ F�IØ'�FÞ ÙÜ˜i¨™l¬C×0Ñ0Ø—N‘N 9¨Q¡<°&Ñ#8Ö9à—N‘N 9¨Q¡<×#8Ñ#8¸6Ñ#AÖBñ "ô" œ GÓ,Ó-‰Ø	˜oÓ	-á&1ó
Ú&1˜F·Y±YÀ/Ñ5Q‹KˆF�KŒK¡kð 	ð 
ˆô "Ð!Ø�8‰8�W�I Ñ'Ó(Ð(ùòG
ùò<
s"   ™F&±F&ÁF&ÁF&Å!F+Å8F+c                óÂ  ^^ ^!• [        U 5      nU Vs/ s H  o3R                  S:X  d  M  UPM     nn[        R                  " [        5      n[        R                  " [        5      nSm U(       a„  [        S U 5       5      n[        U5      S:X  ac  US   R                  m [        T S5      (       d0  [        T R                  5       VV	s0 s H  u  p‰X˜_M	     n
nn	U
T l        UR                  U 4S jS9  U GHo  nS	UR                  ;   aÆ  UR                  S	   b¶  UR                  S	   nSn[        U[        R                   R"                  5      (       a  [%        UR&                  5      nOB[        U[        R                   R(                  5      (       a  [%        UR+                  5       5      nU(       a  Xm   R-                  UR*                  5        S
UR                  ;   a<  UR                  S
   S   R*                  nX]   R-                  UR*                  5        GM&  UR                  R/                  S5      S:X  d  GMH  X[R*                     R-                  UR*                  5        GMr     T b  SOSnUR0                   SU SSR3                  UR5                  5       5       SSR3                  UR5                  5       5       S3nUR0                   S3/n[7        UR9                  5       5       HA  u  nnUR-                  UR0                   SU SSR3                  [7        U5      5       35        MC     T Gb�  SSKJm  UR-                  UR0                   S35        [        5       n/ n[        U TR>                  5      (       GdÞ  SSK J!n        S)U4S jjnS*S jm!S+U!4S jjnU  GH¶  n	[        U	S5      (       a  U	RD                  c  M$  [        U	RD                  S5      (       aÎ  U	RD                  RF                  b·  U	RD                  RF                   H�  nUR*                  U;   a  M  URI                  UR*                  5        UR                  RK                  UR*                  5      nUc  MZ  U" UUR*                  5      u  nnUR-                  UR0                   SU S U" U5       S!U S35        MŸ     [        U	RD                  S"5      (       d  GM+  U	RD                  RL                  c  GME  U	RD                  RL                   HW  nUR                  RK                  UR*                  5      nUc  M-  U" UUR*                  5      u  nnUR-                  S#U-   5        MY     GM¹     U H0  nUR-                  UR0                   SURO                  S$S%9 35        M2     UR-                  UR0                   S&S'R3                  U5       35        US(R3                  U5      4$ s  snf s  sn	nf ),a  
Retrieves metadata information for a kernel.
Args:
    node_schedule (Union[Sequence[BaseSchedulerNode], ExternKernel]):
        Either a sequence of BaseSchedulerNode objects or an ExternKernel instance.
    wrapper (PythonWrapperCodegen):
        An instance of PythonWrapperCodegen, used to define the code comment format.
Returns:
    tuple[str, str]:
        A tuple containing two strings:
            - The first string represents the kernel's metadata.
            - The second string represent the kernel's detailed metadata.
rŒ  Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frŒ   )rv  )rÀ   Úns     rW   rÂ   Ú&get_kernel_metadata.<locals>.<genexpr>Ž  s   é € Ð"C²N¨q§7¦7²NùrÄ   r7   r   Ú)_inductor_kernel_metadata_node_to_idx_mapc                ó"   >• TR                   U    $ rŒ   )r*  )r(  Úsingle_graphs    €rW   rŠ  Ú%get_kernel_metadata.<locals>.<lambda>–  s   ø€ ˜l×TÑTÐUVÒWr{   rÙ  r  Ú	from_nodeÚpartitioner_tagÚis_backwardzTopologically SortedÚUnsortedÚ z Source Nodes: [r3  z], Original ATen: [Ú]z" Source node to ATen node mapping:z   z => r
  z Graph fragment:rr  c                óR  >• [        U TR                  5      (       aF  [        U R                  TR                  5      (       a!  U R                  R                  R                  nOU R                  nUc  UnOUR
                  n U R                  5       nX44$ ! [         a    S n X44$ f = frŒ   )r}   Ú	TensorBoxÚdataÚ
StorageBoxÚorigin_noderá   Ú
get_layoutr  )ÚbufferÚrw_namer8  rá   Úlayoutr  s        €rW   Úget_buffer_infoÚ,get_kernel_metadata.<locals>.get_buffer_infoÀ  s¢   ø€ ô ˜f b§l¡l×3Ñ3¼
Ø—K‘K §¡÷9ñ 9ð #)§+¡+×"2Ñ"2×">Ñ">‘Kà"(×"4Ñ"4�KØÑ&à"‘Dà&×+Ñ+�Dð"Ø#×.Ñ.Ó0�Fð �|Ð#øô +ó "Ø!‘FØ�|Ð#ð"ús   ÂB ÂB&Â%B&c           	     ój   • SSR                  U  Vs/ s H  n[        U5      PM     sn5       S3$ s  snf )NÚ[r3  r3  )r  r  )ÚshaperT   s     rW   Ústringify_shapeÚ,get_kernel_metadata.<locals>.stringify_shapeÔ  s1   € Ø˜4Ÿ9™9±eÓ%<²e°¤c¨!¦f±eÑ%<Ó=Ð>¸aÐ@Ð@ùÒ%<s   ‘0
c                ó¬   >• U c  gT" U R                   5       nT" U R                  5       nU R                   nS[        U R                      U U U S3$ )Nr  Ú")rÐ  Ústrider¯   r"   r®   )r<  Úshape_annotationÚstride_annotationÚdevice_annotationrB  s       €rW   Ústringfy_layoutÚ,get_kernel_metadata.<locals>.stringfy_layout×  sl   ø€ Ø‘>ØÙ&5°f·k±kÓ&BÐ%CÐ Ù'6°v·}±}Ó'EÐ&FÐ!Ø'-§}¡} oÐ!ð œ F§L¡LÑ1Ð2Ð3CÐ2DØ(Ð)Ð*;Ð)<¸Að?ðr{   Úread_writesÚreadsz   %z
 : Tensor z = PlaceHolder[target=ÚwritesÚ%T)Úinclude_tensor_metadataz
   return Ú,Ú
)r:  z2Union[ir.TensorBox, ir.Buffer, ir.TorchBindObject]r;  r  r•   ztuple[str, ir.Layout | None])rA  zIterable[int]r•   r  )r<  zir.Layout | Noner•   r  )(r  r†  ÚcollectionsÚdefaultdictrb  r#   rR   rv  r  r  Únodesr*  Úsortr  r}   rP   r“  r”  r  r  r  rá   rŸ  ÚgetÚcommentr  ÚkeysrÚ  Úitemsr  r  r?   ru  rs  rL  rM  ÚaddÚtry_get_bufferrN  Úformat_node)"r  rü  r!  r  Úinductor_nodesÚfrom_node_dictÚoriginal_aten_dictÚunique_graphsÚidxr(  Únode_to_idx_maprl  r  rc  Úsort_strÚmetadataÚdetailed_metadataÚoriginal_noderU  Ú	all_readsÚ
all_writesrs  r=  rJ  Úrr:  Ú
input_namer<  ÚwÚoutput_nameré   r  r,  rB  s"                                  @@@rW   Úget_kernel_metadatarn  q  s  ú€ ô$ $ MÓ2€KÙ+6ÓWª; ¿)¹)ÀÑ:V—f©;€NÐWä ×,Ò,¬TÓ2€NÜ$×0Ò0´Ó6Ðð
 €LÞÜ"Ñ"C±NÓ"CÓCˆÜˆ}Ó Ó"Ø)¨!Ñ,×2Ñ2ˆLä˜<Ð)T×UÑUÜ8AÀ,×BTÑBTÔ8UÔ"VÒ8U©f¨c 1¢6Ñ8U�Ñ"VØIX�ÔFØ×ÑÜWð  ñ ô ˆØ˜dŸi™iÓ'¨D¯I©I°oÑ,FÑ,RØ ŸI™I oÑ6ˆMØˆCÜ˜-¬¯©×)>Ñ)>×?Ñ?Ü˜-×7Ñ7Ó8‘Ü˜M¬5¯:©:×+IÑ+I×JÑJÜ˜-×,Ñ,Ó.Ó/�ÞØ"Ñ'×.Ñ.¨t¯y©yÔ9Ø˜$Ÿ)™)Ó#Ø—)‘)˜KÑ(¨Ñ+×0Ñ0ˆCØÑ×&Ñ& t§y¡y×1Ø�Y‰Y�]‰]Ð,Ó-°Ö>àŸ9™9Ñ%×,Ñ,¨T¯Y©Y×7ñ ð  *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Ü%/£\ˆ	Ø "ˆ
Ü˜-¨¯©×9Ò9Ý&ð$ØJð$ØUXð$à-÷$ô(A÷
ô #�Ü˜q -×0Ñ0°A·M±MÑ4IÙÜ˜1Ÿ=™=¨'×2Ñ2°q·}±}×7JÑ7JÑ7VØŸ]™]×0Ô0˜àŸ6™6 YÓ.Ù$Ø!Ÿ™ a§f¡fÔ-Ø!"§¡×!7Ñ!7¸¿¹Ó!?˜Ø!™>Ù$Ù-<¸VÀQÇVÁVÓ-LÑ*˜
 FØ)×0Ñ0Ø&Ÿ™Ð/¨t°J°<¸zÙ.¨vÓ6Ð7Ð7MÈjÈ\ÐYZð\öñ 1ô ˜AŸM™M¨8×4Ô4ØŸ™×,Ñ,Ô8àŸ]™]×1Ô1˜Ø!"§¡×!7Ñ!7¸¿¹Ó!?˜Ø!™>Ù$Ù)8¸ÀÇÁÓ)H™˜ Qà"×)Ñ)¨#°Ñ*;Ö<ô 2ñ- #ó< #ˆDØ×$Ñ$Ø—?‘?Ð# 3 t×'7Ñ'7ÐPTÐ'7Ð'UÐ&VÐWöñ #ð
 	× Ñ  G§O¡OÐ#4°J¸s¿x¹xÈ
Ó?SÐ>TÐ!UÔVà�T—Y‘YÐ0Ó1Ð1Ð1ùòI Xùó #Ws   “WªWÃWc                ó  • [        U 5      n [        U 5      nU (       ak  U R                  5       nUR                   HB  nU(       a  U" U5      (       a  M  XB;  d  M   UR	                  U5        U R                  U5        MD     U (       a  Mk  U$ )zJReturns the set of nodes whose values depend on those within initial_queue)rb  r#   rS   r–  r[  rŸ  )Úinitial_queueÚskip_filterÚdominated_setrl  Úusers        rW   Údominated_nodesrt    sx   € ô
 ˜Ó'€MÜ˜}Ó-€Mæ
Ø× Ñ Ó"ˆØ—J”JˆDÞ™{¨4×0Ñ0ÙØÕ(Ø×!Ñ! $Ô'Ø×$Ñ$ TÖ*ñ ÷ ˆ-ð Ðr{   c                óZ  ^^	• SSK Jm  SUU	4S jjm	[        U5      u  p#U Vs/ s H  nT	" U5      (       d  M  UR                  PM      nn[        U 5      u  pcU Vs/ s H  nT	" U5      (       d  M  UR                  PM      nn[	        [
        R                  " / UQUQ76 5      $ s  snf s  snf )Nr7   r
  c                ól  >• [        U TR                  5      (       a  T" U R                  5      $ [        U TR                  5      (       a  T" U R                  5      $ [        U TR                  5      =(       a=    [        U TR
                  TR                  TR                  TR                  45      (       + $ rŒ   )	r}   r5  r6  r7  r@   ÚComputedBufferÚInputsKernelÚInputBufferÚTemplateBuffer)r(  r  Úis_unrealized_nodes    €€rW   r{  Ú*gather_origins.<locals>.is_unrealized_node$  s�   ø€ Ü�a˜Ÿ™×&Ñ&Ù% a§f¡fÓ-Ð-Ü�a˜Ÿ™×'Ñ'Ù% a§f¡fÓ-Ð-Ü˜!˜RŸY™YÓ'÷ 
´
Øà×!Ñ!Ø—‘Ø—‘Ø×!Ñ!ð	ó1
ô -
ð 	
r{   )r(  r@   r•   r:  )r  r  r$   r  r#   Ú	itertoolsÚchain)
r„   r«  Úkwargs_flattenré   ro  Úkwargs_originsÚargs_flattenÚargs_originsr  r{  s
           @@rW   Úgather_originsrƒ    s—   ù€ õ ÷
ð 
ô" % VÓ,Ñ€NÙ-;ÓWª^ cÑ?QÐRU×?V“k�c—k”k©^€NÐWÜ" 4Ó(�O€LÙ+7ÓSª< CÑ;MÈc×;R“K�C—K”K©<€LÐSÜ”i—o’oÐE |ÐE°nÒEÓFÐFùò XùâSs   £B#¸B#ÁB(Á0B(c                óX   ^^^^• SS jmSUU4S jjmSUU4S jjmSU4S jjmT" U 5      $ )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.
c                ó¦   • [        U [        R                  5      =(       a1    [        U R                  5      S:H  =(       a    U R                  S   S:H  $ )Né   r   r¸   )r}   r~   ÚMulrR   r„   )rm  s    rW   Úis_neg_leadÚsympy_str.<locals>.is_neg_leadC  s:   € ä�tœUŸY™YÓ'×V¬C°·	±	«N¸aÑ,?×VÀDÇIÁIÈaÁLÐTVÑDVð	
r{   c                óv  >• [        U [        R                  5      (       a’  [        U R                  5      S:X  aT  T" U R                  S   5      (       a:  T" U R                  S   5       ST" U R                  S   R                  S   5       3$ SR                  [        TU R                  5      5      $ T" U 5      $ )Nr†  r7   r   z - z + )r}   r~   r   rR   r„   r  r‚   )rm  rˆ  Úsympy_str_muls    €€rW   Úsympy_str_addÚ sympy_str.<locals>.sympy_str_addH  s—   ø€ Ü�dœEŸI™I×&Ñ&ô �4—9‘9‹~ Ó"¡{°4·9±9¸Q±<×'@Ñ'@Ù'¨¯	©	°!©Ó5Ð6°c¹-ÈÏ	É	ÐRSÉ×HYÑHYÐZ[ÑH\Ó:]Ð9^Ð_Ð_à—z‘z¤# m°T·Y±YÓ"?Ó@Ð@á  Ó&Ð&r{   c                óæ   >• [        U [        R                  5      (       aJ  T" U 5      (       a  ST" U R                  S   5       3$ SR	                  [        TU R                  5      5      $ T" U 5      $ )NÚ-r7   z * )r}   r~   r‡  r„   r  r‚   )rm  rˆ  Úsympy_str_atoms    €€rW   r‹  Ú sympy_str.<locals>.sympy_str_mulS  sa   ø€ Ü�dœEŸI™I×&Ñ&Ù˜4× Ñ ð ™>¨$¯)©)°A©,Ó7Ð8Ð9Ð9à—z‘z¤# n°d·i±iÓ"@ÓAÐAá! $Ó'Ð'r{   c                ó¶  >• [        U [        R                  5      (       a  U R                  $ [        U [        R                  [        R
                  45      (       a  ST" U 5       S3$ [        U [        [        [        [        45      (       aC  U R                  R                   SSR                  [        [        U R                  5      5       S3$ [!        U 5      $ )NÚ(Ú)r3  )r}   r~   ÚSymbolrá   r   r‡  rc   r`   ra   rb   Úfuncr–   r  r‚   Ú	sympy_strr„   r  )rm  rŒ  s    €rW   r�  Ú!sympy_str.<locals>.sympy_str_atom^  s¡   ø€ Ü�dœEŸL™L×)Ñ)Ø—9‘9ÐÜ˜œuŸy™y¬%¯)©)Ð4×5Ñ5Ø‘} TÓ*Ð+¨1Ð-Ð-Ü˜œ´¼(ÄHÐM×NÑNØ—i‘i×(Ñ(Ð)¨¨4¯9©9´S¼ÀDÇIÁIÓ5NÓ+OÐ*PÐPQÐRÐRä�t“9Ðr{   )rm  r”   r•   r:  ©rm  r”   r•   r  r“   )rm  rˆ  rŒ  r�  r‹  s    @@@@rW   r—  r—  <  s.   û€ ô
÷
	'ð 	'÷	(ð 	(÷ñ ˜ÓÐr{   c                óÔ   • SSK Jn  [        R                  (       a9  [	        UR
                  SS 5      =n(       a  UR                  S:w  a  [        U 5      $ [        R                  " 5       $ )Nr7   rr  Úcurrent_nodeÚ
index_expr)
ru  rs  ri   Úcompute_all_boundsrO   Úinterpreterr’  rf   rg   Úunknown)r  rs  Úfx_nodes      rW   Úget_bounds_index_exprr¡  k  sN   € Ýô 	×!×!Ü §¡¨~¸tÓDÐDˆWÕDØ�N‰N˜lÓ*ä˜5Ó!Ð!ä×"Ò"Ó$Ð$r{   c                ó   • U S   S:H  $ )Nr   rj  r“   )Úprefixs    rW   Úprefix_is_reductionr¤  y  s   € Ø�!‰9˜ÑÐr{   c                óD   • U [         R                  :w  d   e[        XSSS9$ )ú1
Used to generate an integer-nonnegative symbol.
T©ÚintegerÚnonnegative)re   ÚSIZErd   )r£  rb  s     rW   Úsympy_index_symbol_with_prefixr«  }  s'   € ð ”T—Y‘YÓÐÐô �v¨D¸dÑCÐCr{   c                ób   • U =(       d    [         R                  =(       a    [         R                  $ rŒ   )ri   Údebug_index_assertsÚassert_indirect_indexing)Úchecks    rW   Úgenerate_assertr°  ‰  s   € Ø×/”V×/Ñ/×T´V×5TÑ5TÐTr{   c                óD   • U S   S:w  d   e[         R                  " U SSS9$ )r¦  r   rï   Tr§  )r~   r•  ©rá   s    rW   Úsympy_index_symbolr³  �  s)   € ð �‰7�c‹>Ðˆ>ô �<Š<˜ d¸Ñ=Ð=r{   c                óÀ   •       SS jn[         R                  " U 5      R                  UR                  5        VVs0 s H  u  p4X2" X45      _M     snn5      $ s  snnf )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                óÆ   • [        U [        R                  5      (       d   e[        U[        5      (       a*  [        R                  " UU R
                  U R                  S9$ U$ )Nr§  )r}   r~   r4  r  r•  rœ   Úis_nonnegative)ÚreplacedÚreplacements     rW   Ú	to_symbolÚsympy_subs.<locals>.to_symbolŸ  sV   € ô ˜(¤E§J¡J×/Ñ/Ð/Ð/Ü�k¤3×'Ñ'Ü—<’<ØØ ×+Ñ+Ø$×3Ñ3ñð ð Ðr{   )r·  r”   r¸  zUnion[sympy.Expr, str]r•   úsympy.Symbol)r~   r5  ÚxreplacerZ  )rm  Úreplacementsr¹  Úkr‡   s        rW   Ú
sympy_subsr¿  ™  sh   € ðØðØ+Aðà	ôô �=Š=˜Ó×'Ñ'Ø(4×(:Ñ(:Ô(<Ô=Ò(<¡ ˆˆI�a‹OÒ	Ñ(<Ò=óð ùÛ=s   ¾A
c                óž   • [        U [        R                  5      =(       d-    [        U [        R                  5      =(       a    U R                  $ rŒ   )r}   rP   r2   r¥  Ú_has_symbolic_sizes_strides)r(  s    rW   Úis_symbolicrÂ  ²  s3   € Ü�aœŸ™Ó&÷ Ü�1”e—l‘lÓ#×E¨×(EÑ(Eðr{   c                 ó&   • [        S U  5       5      $ )Nc              3  ó8   #   • U  H  n[        U5      v •  M     g 7frŒ   )rÂ  r€  s     rW   rÂ   Ú"any_is_symbolic.<locals>.<genexpr>¹  s   é € Ð,¢t !Œ{˜1�~ˆ~¢tùrÄ   ©r‚  )r„   s    rW   Úany_is_symbolicrÇ  ¸  s   € ÜÑ,¡tÓ,Ó,Ð,r{   )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_scalarc                óÔ   • SSK Jn  U R                  R                   HH  n[	        U5      (       a  Us  $ UR
                  R                  S5      =nc  M7  U" U5      (       d  MF  Us  $    g )Nr   )r)   ro  )Ú%torch.fx.experimental.symbolic_shapesr)   rv  rU  Úis_cudagraph_unsafe_fx_noder  rW  )r¬  r)   rl  ro  s       rW   Ú%get_first_incompatible_cudagraph_noderÍ  Ð  sW   € õ Là—‘—”ˆÜ& t×,Ñ,ØŠKà—9‘9—=‘= Ó'Ð'ˆCÓ4Ñ9NÈs×9SÓ9SØŠKñ ð r{   c                óŒ   • [        [        [        U R                  R                  5      5      5      nUR
                  S:X  d   eU$ )z$Get the output node from an FX graphrª  )ÚnextÚiterÚreversedrv  rU  r†  )r¬  Ú	last_nodes     rW   Úoutput_noderÓ  ß  s6   € ä”Tœ( 2§8¡8§>¡>Ó2Ó3Ó4€IØ�<‰<˜8Ó#Ð#Ð#ØÐr{   c                óè   • U R                   R                  SS9n[        S U 5       5      n[        U 5      R                  S   n[        U[        5      (       a  UOU4n[        S U 5       5      nX%-  $ )Nr   r…  c              3  óÈ   #   • U  HX  n[        UR                  R                  S 5      [        R                  5      (       d  M=  UR                  S    R
                  v •  MZ     g7f©ro  N)r}   r  rW  rP   r¥  r¯   )rÀ   rl  s     rW   rÂ   Ú"get_all_devices.<locals>.<genexpr>è  sC   é € ð 9â%ˆDÜ�d—i‘i—m‘m EÓ*¬E¯L©L×9ó 	 ˆ�	‰	�%Ñ×ÖÚ%ùs   ‚<A"Á A"r   c              3  ó  #   • U  Hƒ  n[        U[        R                  R                  5      (       d  M.  [        UR                  R                  S 5      [        R                  5      (       d  Mh  UR                  S    R                  v •  M…     g7frÖ  )r}   rP   r§  r5   r  rW  r¥  r¯   )rÀ   rž  s     rW   rÂ   r×  ð  s[   é € ð 7âˆCÜ�cœ5Ÿ8™8Ÿ=™=×)ó 	ô �s—x‘x—|‘| EÓ*¬E¯L©L×9ó 	ˆ�‰�‰×ÖÚùs   ‚-B³6BÁ- B)rv  Ú
find_nodesr#   rÓ  r„   r}   Útuple)r¬  Úplaceholder_nodesÚinput_devicesÚout_argÚout_argsÚout_devicess         rW   Úget_all_devicesrà  æ  s~   € ØŸ™×+Ñ+¨}Ð+Ð=ÐÜ.8ñ 9á%ó9ó /€Mô ˜"‹o×"Ñ" 1Ñ%€GÜ$ W¬e×4Ñ4‰w¸7¸*€HÜ,6ñ 7áó7ó -€Kð Ñ&Ð&r{   c                 ó¼  • [        [        R                  R                  5       5       GH5  n U R	                  S5      (       d  M  [        R                  U    nUR
                   Hå  nUR	                  S5      (       d  M  [        X5      n[        U[        R                  R                  R                  R                  5      (       d  Me  UR                   Hp  n[        U[        R                  R                  R                  R                  5      (       d  MB  UR                  R                   R"                  R%                  5         Mr     Mç     [        R                  U 	 GM8     S[        R                  ;   aR  [        R                  S   n['        UR(                  R*                  R,                  5      ?UR(                  R*                  ?[0        R2                  " 5         g )Nz&torch._inductor.runtime.compile_tasks.Útriton_ztriton.runtime.driver)rb  ÚsysÚmodulesrY  Ú
startswithÚ__dict__rO   r}   rP   Ú	_inductorÚruntimeÚtriton_heuristicsÚCachingAutotunerÚcompile_resultsÚTritonCompileResultÚkernelÚrunÚmodÚ__del__r  ÚdriverÚactiveÚutilsÚinstanceÚgcÚcollect)Úmodule_nameÚmÚ	attr_namerí  r·  rï  s         rW   Úunload_xpu_triton_pydsrú  ü  sJ  € äœCŸK™K×,Ñ,Ó.×/ˆØ×%Ñ%Ð&N×OÑOÙÜ�K‰K˜Ñ$ˆØŸœˆIØ×#Ñ# I×.Ó.Ü  Ó.�ÜØœEŸO™O×3Ñ3×EÑE×VÑV÷ó ð #)×"8Ô"8˜Ü%Ø"Ü!ŸO™O×3Ñ3×EÑE×YÑY÷ó ð
 #ŸM™M×-Ñ-×1Ñ1×9Ñ9Ö;ó #9ñ $ô �K‰K˜Ó$ñ# 0ð( ¤#§+¡+Ó-Ü�k‰kÐ1Ñ2ˆÜ�—‘×"Ñ"×(Ñ(Ó)Ð2Ø�J‰J×ÑÐ#ä‡J‚J…Lr{   Ú_registered_cachesc                ó¢   • [        U S5      (       a  [        U R                  5      (       d  [        U  S35      e[        R                  U 5        U $ )z\
Use this decorator to register any caches that should be cache_clear'd
with fresh_cache().
Úcache_clearz# does not have a cache_clear method)r  Úcallablerý  ÚAttributeErrorrû  rŸ  ©rÆ  s    rW   Úclear_on_fresh_cacher    sE   € ô
 �3˜×&Ñ&¬h°s·±×.GÑ.GÜ ˜uÐ$GÐHÓIÐIä×Ñ˜cÔ"Ø€Jr{   c                 ó>   • [          H  n U R                  5         M     g)z
Clear all registered caches.
N)rû  rý  r   s    rW   Úclear_cachesr  )  s   € ÷ "ˆØ�‰Öò "r{   c              #  ó`  #   • [         R                  R                  U 5      n U[         R                  U '   Sv •  Uc!  [         R                  R                  U S5        gU[         R                  U '   g! Uc!  [         R                  R                  U S5        f U[         R                  U '   f = f7f)a¿  Thread-safe env var set/restore using atomic C-level lookups.

We avoid mock.patch.dict(os.environ, ...) because it internally calls
os.environ.copy(), which iterates all env var keys then fetches values in
separate steps. That approach is not atomic and can race with background threads
(e.g. Triton async compilation) modifying the environment, causing KeyError,
so we use os.environ.get() for individual keys which is an atomic C-level lookup.
N)ÚosÚenvironrW  rS   )rc  r�   Úolds      rW   Ú_set_envr  1  sy   é € ô �*‰*�.‰.˜Ó
€Cð"ØŒ�
‰
�3‰Ûà‰;Ü�J‰J�N‰N˜3 Õ%à!ŒB�J‰J�sŠOøð ‰;Ü�J‰J�N‰N˜3 Õ%à!ŒB�J‰J�sŠOüs   ‚ B.£A2 º8B.Á29B+Â+B.c              #  ó`  ^#   • [        5         SSKJn  U" [        R                  " US95      m [        ST5         [        R                  ST5        U" [        R                  R                  TS5      5      n[        SU5         Sv •  [        U [        5      (       aµ  [        U 5      S:X  d   S	5       e[        R                  R                  U5      (       a{  [        R                  " U5      nU R!                  U Vs0 s HH  nS
U;  d  M  U[        R                  R#                  [        R                  R                  XF5      5      _MJ     sn5        SSS5        SSS5        U(       a^  [%        5       (       a-  [&        R(                  R+                  5       (       a
  [-        5         [.        R0                  " T[%        5       U4S jS9  [        5         gs  snf ! , (       d  f       N‹= f! , (       d  f       N”= f! [2         a    [        R5                  ST5        e f = f! [        5         f = f7f)z¸
Contextmanager that provides a clean tmp cachedir for pt2 caches.

Optionally, pass a dict as 'cache_entries' to get a list of filenames and sizes
generated with this cache instance.
r   )Únormalize_path_separator)ÚdirÚTORCHINDUCTOR_CACHE_DIRzUsing inductor cache dir %sÚtritonÚTRITON_CACHE_DIRNz!expected empty cache_entries dictz.lockc                ó.   >• [         R                  STUS9$ )Nz*Failed to remove temporary cache dir at %s)Úexc_info)rÙ   Úwarning)r–  Úpathr  Úinductor_cache_dirs      €rW   rŠ  Úfresh_cache.<locals>.<lambda>t  s   ø€ ´S·[±[Ø@Ø&Ø%ð 6Añ 6r{   )Úignore_errorsÚonerrorz(on error, temporary cache dir kept at %s)r  Útorch._inductor.cpp_builderr
  ÚtempfileÚmkdtempr  rÙ   rÚ   r  r  r  r}   ÚdictrR   ÚexistsÚlistdirra  ÚgetsizeÚ
is_windowsrP   rJ   rQ   rú  ÚshutilÚrmtreeÚ	Exceptionr  )Úcache_entriesr  Údeleter
  Útriton_cache_dirÚfilesÚfr  s          @rW   Úfresh_cacher'  F  s«  øé € ô „NåDá1´(×2BÒ2BÀsÑ2KÓLÐð'ÜÐ/Ð1CÕDÜ�I‰IÐ3Ð5GÔHÙ7Ü—‘—‘Ð/°Ó:ó Ðô Ð,Ð.>Õ?ÛÜ˜m¬T×2Ñ2Ü˜}Ó-°Ó2ÐWÐ4WÓWÐ2Ü—w‘w—~‘~Ð&6×7Ñ7Ü "§
¢
Ð+;Ó <˜Ø%×,Ñ,ñ */óâ). AØ#*°!Ñ#3ó !V ¤2§7¡7§?¡?´2·7±7·<±<Ð@PÓ3TÓ#UÒ UÙ).ñô÷ @÷ Eö$ Ü�|‰|¤§	¡	× 6Ñ 6× 8Ñ 8Ü&Ô(ä�MŠMØ"ô )›lôòô  	�ùò5÷ @Õ?ú÷ EÕDûôD ó Ü�‰Ð>Ð@RÔSØðûô 	�üss   ƒ+H.¯G: »A	G)ÂA9GÃ=
GÄAGÅGÅG)ÅA-G: ÇH.ÇGÇ
G&	Ç"G)Ç)
G7Ç3G: Ç:"HÈH ÈH+È+H.)Úreversec               ó¢   • U R                   n[        [        U 5      5      n[        [	        X2SS95      nU(       d  [        [        U5      5      $ U$ )NT©rc  r(  )Ú__getitem__rÌ   rR   rb  rÚ  rÑ  )Úseqr(  ÚgetterÚa_rÚsort_idxs        rW   Úargsortr0  ‡  sC   € Ø�_‰_€FÜ
”�C“‹/€Cô ”F˜3°DÑ9Ó:€HÞÜ”H˜XÓ&Ó'Ð'Ø€Or{   c          	     óF  ^ • SU 4S jjn[        U5       VVs/ s H>  u  pEU[        U[        R                  5      (       a  UR                  R
                  OU4PM@     nnn[        U[        R                  " U5      US9nU VVs/ s H  u  pGUPM	     nnnU$ s  snnf s  snnf )Nc                ó~   >• U u  p#Uu  pESU4S jjnU" X5:  5      (       a  gU" X5:„  5      (       a  gX$:  a  gX$:”  a  gg)Nc                óR   >• [        U [        5      (       a  U $ TR                  U SS9$ )NT)Úsize_oblivious)r}   r:  Úevaluate_expr)rm  rx  s    €rW   ÚevaluateÚ*argsort_sym.<locals>.cmp.<locals>.evaluate¡  s+   ø€ Ü˜$¤×%Ñ%Ø�Ø×*Ñ*¨4ÀÐ*ÐEÐEr{   r¸   r7   r   )rm  z%Union[bool, torch.SymInt, sympy.Expr]r•   r:  r“   )r(  r)  Úa_idxÚa_valÚb_idxÚb_valr6  rx  s          €rW   rÎ  Úargsort_sym.<locals>.cmp�  sN   ø€ Ø‰ˆØ‰ˆ÷	Fñ
 �E‘M×"Ñ"ØÙ�E‘M×"Ñ"Øð
 ‹=ØØ‹=ØØr{   r*  )r(  útuple[int, sympy.Expr]r)  r=  r•   r�   )	r  r}   rP   r2   rl  rm  rÚ  r  Ú
cmp_to_key)	rx  r,  r(  rÎ  rb  rï   Úexprsré   r·  s	   `        rW   Úargsort_symr@  —  s�   ø€ ÷ô4   ”nôâ$‰FˆCð 
œZ¨¬5¯<©<×8Ñ8ˆa�f‰f�kŠk¸aÓ@Ù$ð 
ñ ô �5œi×2Ò2°3Ó7ÀÑI€EÙ %Ô&¢‘f�c‹c¡€FÑ&Ø€Mùóùó
 's   ˜ABÂBc                ór   • U [         R                  :X  a  g[         R                  " SU S9R                  5       $ )Nrv   r“   ©r®   )rP   r^  rÈ   Úelement_sizerB  s    rW   Úget_dtype_sizerD  ¾  s-   € ð ”—‘ÓØÜ�;Š;�r Ñ'×4Ñ4Ó6Ð6r{   c                  ó    • \ rS rSr% S\S'   Srg)ÚLineContextiÇ  r   Úcontextr“   N©r–   r—   r˜   r™   r©   rž   r“   r{   rW   rF  rF  Ç  s   ‡ Ø†Lr{   rF  c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚValueWithLineMapiË  r  r�   zlist[tuple[int, LineContext]]Úline_mapr“   NrH  r“   r{   rW   rJ  rJ  Ë  s   ‡ àƒJØ+Ö+r{   rJ  c                  ó  • \ rS rSrSrSSS jjr\R                  SS j5       rSS jr	SS jr
SS jrSS jrSS	 jrSS
 jrSS jrSS jr    S S jrS!S"S jjrS!S#S jjrS!S#S jjr S$     S%S jjrS&S jrSS jrS'S jrS(S jrSrg))ÚIndentedBufferiÑ  é   c                ó   • / U l         Xl        g rŒ   )Ú_linesÚ_indent)ræ  Úinitial_indents     rW   Ú__init__ÚIndentedBuffer.__init__Ô  s   € ØGIˆŒØ%�r{   c              #  ó\   #   • U R                   n Xl         S v •  X l         g ! X l         f = f7frŒ   )Útabwidth)ræ  rV  Úprevs      rW   Úset_tabwidthÚIndentedBuffer.set_tabwidthØ  s%   é € à�}‰}ˆð	!Ø$ŒMÛà �Mø˜D�Müs   ‚,�
! š,¡)©,c                óÆ  • [        5       nSn/ nU R                   Hª  n[        U[        5      (       a  U" 5       nUc  M$  O5[        U[        5      (       a  UR                  X$R                  45        MX  Un[        U[        5      (       d   eUR                  U5        UR                  S5        USUR                  S5      -   -  nM¬     [        UR                  5       U5      $ )Nr7   rR  )r   rP  r}   ÚDeferredLineBaserF  rŸ  rG  r  ÚwriteÚcountrJ  Úgetvalue)ræ  Úbufrí   ÚlinemapÚliÚlines         rW   ÚgetvaluewithlinemapÚ"IndentedBuffer.getvaluewithlinemapá  sÀ   € Ü‹jˆØˆØ13ˆØ—+”+ˆBÜ˜"Ô.×/Ñ/Ù“t�Ø‘<Ùð  ä˜B¤×,Ñ,Ø—‘ §:¡:˜Ô/Ùà�Ü˜d¤C×(Ñ(Ð(Ð(Ø�I‰I�dŒOØ�I‰I�dŒOØ��T—Z‘Z Ó%Ñ%Ñ%ŠAñ ô   §¡£°Ó8Ð8r{   c                ó6   • U R                  5       R                  $ rŒ   )rc  r�   ©ræ  s    rW   r^  ÚIndentedBuffer.getvalueõ  s   € Ø×'Ñ'Ó)×/Ñ/Ð/r{   c                óœ  • [        5       nU R                   H£  n[        U[        5      (       a  U" 5       nUc  M$  O[        U[        5      (       a  M<  Un[        U[
        5      (       d   eUR                  S5      (       a  UR                  US S 5        M�  UR                  U5        UR                  S5        M¥     UR                  5       $ )NÚ\r¸   rR  )	r   rP  r}   r[  rF  r  Úendswithr\  r^  )ræ  r_  ra  rb  s       rW   ÚgetrawvalueÚIndentedBuffer.getrawvalueø  s¦   € Ü‹jˆØ—+”+ˆBÜ˜"Ô.×/Ñ/Ù“t�Ø‘<Ùð  ä˜B¤×,Ñ,Ùà�Ü˜d¤C×(Ñ(Ð(Ð(à�}‰}˜T×"Ñ"Ø—	‘	˜$˜s ˜)Ö$à—	‘	˜$”Ø—	‘	˜$–ñ ð  �|‰|‹~Ðr{   c                ó8   • U R                   R                  5         g rŒ   )rP  Úclearrf  s    rW   rn  ÚIndentedBuffer.clear  s   € Ø�‰×ÑÕr{   c                ó,   • [        U R                  5      $ rŒ   )r:  rP  rf  s    rW   Ú__bool__ÚIndentedBuffer.__bool__  s   € Ü�D—K‘KÓ Ð r{   c                ó:   • SU R                   U R                  -  -  $ )Nr2  )rQ  rV  rf  s    rW   r£  ÚIndentedBuffer.prefix  s   € Ø�d—l‘l T§]¡]Ñ2Ñ3Ð3r{   c                ó&   • U R                  S5        g )NrR  ©Ú	writelinerf  s    rW   ÚnewlineÚIndentedBuffer.newline  s   € Ø�‰�tÕr{   c                ó¾  • [        U[        5      (       a  U R                  R                  U5        g [        U[        5      (       a9  U R                  R                  UR                  U R                  5       5      5        g UR                  5       (       a.  U R                  R                  U R                  5        U 35        g U R                  R                  S5        g ©Nr  )r}   rF  rP  rŸ  r[  Úwith_prefixr£  Ústrip©ræ  rb  s     rW   rw  ÚIndentedBuffer.writeline  s�   € Ü�dœK×(Ñ(Ø�K‰K×Ñ˜tÕ$Ü˜Ô.×/Ñ/Ø�K‰K×Ñ˜t×/Ñ/°·±³Ó>Õ?Ø�Z‰Z�\‰\Ø�K‰K×Ñ $§+¡+£- °°Ð7Õ8à�K‰K×Ñ˜rÕ"r{   c                ó8   • U H  nU R                  U5        M     g rŒ   rv  )ræ  Úlinesrb  s      rW   Ú
writelinesÚIndentedBuffer.writelines"  s   € ó ˆDØ�N‰N˜4Ö ò r{   c                óL   ^ ^• [         R                  SUU 4S jj5       nU" 5       $ )Nc               3  ó    >#   • T=R                   T -  sl          S v •  T=R                   T -  sl         g ! T=R                   T -  sl         f = f7frŒ   ©rQ  )Úoffsetræ  s   €€rW   rû  Ú"IndentedBuffer.indent.<locals>.ctx)  s8   øé € à�LŠL˜FÑ"�Lð'Ûà—’ Ñ&–ø�—’ Ñ&–üs   ƒAš4 žA´AÁA©r•   úIterator[None])Ú
contextlibÚcontextmanager)ræ  r‡  rû  s   `` rW   ÚindentÚIndentedBuffer.indent(  s$   ù€ Ü	×	"Ñ	"÷	'ó 
#ð	'ñ ‹uˆr{   c                ó.   • U =R                   U-  sl         g rŒ   r†  ©ræ  r‡  s     rW   Ú	do_indentÚIndentedBuffer.do_indent3  ó   € Ø�Š˜ÑŽr{   c                ó.   • U =R                   U-  sl         g rŒ   r†  r�  s     rW   Údo_unindentÚIndentedBuffer.do_unindent6  r“  r{   c           	     óì  • [        U[        5      (       añ  [        S5      nUR                   HR  n[        U[        5      (       a  M  U(       d  M#  [        U[        U5      [        UR                  5       5      -
  5      nMT     [        R                  " U5      (       a  SnUR                   HV  n[        U[        5      (       a  U R                  R                  U5        M5  [        R                  X[        U5      S  5        MX     g [        R                  " U5      nU(       a  UR                  5       nU(       d  g UR                  5       nUR!                  S5       H  nU R                  U5        M     g )NÚinfr   rR  )r}   rM  ÚfloatrP  rF  ÚminrR   rù  ÚmathÚisinfrŸ  rw  r�   ÚtextwrapÚdedentÚrstripr`  )ræ  Ú
other_coder}  rž  rb  rï   s         rW   ÚspliceÚIndentedBuffer.splice9  s  € ô �j¤.×1Ñ1Ü˜5“\ˆFà"×)Ô)�Ü! $¬×4Ó4¿¸Ü  ¬¨T«´S¸¿¹»Ó5GÑ)GÓH’Fñ *ô �zŠz˜&×!Ñ!Ø�Ø"×)Ô)�Ü˜d¤K×0Ñ0Ø—K‘K×&Ñ& tÖ,ä"×,Ñ,¨T¼¸F»¸Ð3FÖGò	 *ô "Ÿš¨Ó4ˆJÞØ'×.Ñ.Ó0�
ÞØØ#×*Ñ*Ó,ˆJØ×%Ñ% dÖ+�Ø—‘˜qÖ!ò ,r{   c                ó„   • [        U R                  S9nU R                   Vs/ s H
  o1" U5      PM     snUl        U$ s  snf ©N)rR  )rM  rQ  rP  )ræ  r–  rò   rb  s       rW   r‚   ÚIndentedBuffer.mapS  s8   € Ü¨D¯L©LÑ9ˆØ-1¯[ª[Ó9ª[ T�d˜4–j©[Ñ9ˆŒ
Øˆ
ùò :s   ¢=c                ó@   • [        U 5       SU R                  5        S3$ )Nr“  r”  )r  r^  rf  s    rW   Ú__repr__ÚIndentedBuffer.__repr__X  s    € Ü�t“*�˜Q˜tŸ}™}›Ð/¨qÐ1Ð1r{   c                óÐ   • U R                   UR                   :X  d   e[        U R                   S9nUR                  U R                  5        UR                  UR                  5        U$ r¤  )rQ  rM  r‚  rP  )ræ  Úotherrò   s      rW   Ú__add__ÚIndentedBuffer.__add__[  sK   € Ø�|‰|˜uŸ}™}Ó,Ð,Ð,Ü¨D¯L©LÑ9ˆà�‰�t—{‘{Ô#Ø�‰�u—|‘|Ô$Øˆ
r{   c                ó   • XR                   ;   $ rŒ   )rP  )ræ  Únew_lines     rW   ÚcontainsÚIndentedBuffer.containsc  s   € ØŸ;™;Ñ&Ð&r{   )rQ  rP  rV  N©r   )rR  r�   r•   ré  )rV  r�   r•   rŠ  )r•   rJ  ©r•   r  ©r•   ré  ©r•   r:  )rb  z)Union[LineContext, DeferredLineBase, str]r•   ré  )r�  z3Sequence[Union[LineContext, DeferredLineBase, str]]r•   ré  rŠ   )r‡  r�   r•   ú'contextlib.AbstractContextManager[None])r‡  r�   r•   ré  ©F)r   zUnion[IndentedBuffer, str]r}  r:  r•   ré  )r–  zCallable[[Any], Any]r•   rM  )rª  r   r•   rM  )r®  z)Union[DeferredLineBase, LineContext, str]r•   r:  )r–   r—   r˜   r™   rV  rS  r‹  rŒ  rX  rc  r^  rk  rn  rq  r£  rx  rw  r‚  r�  r‘  r•  r¡  r‚   r§  r«  r¯  rž   r“   r{   rW   rM  rM  Ñ  sª   † Ø€Hö&ð ×Ñó!ó ð!ô9ô(0ôô(ô!ô4ôô#ð!ØHð!à	ô!ö	ööð EJð"Ø4ð"Ø=Að"à	õ"ô4ô
2ô÷'r{   rM  c                  ó6   ^ • \ rS rSrSU 4S jjrSS jrSrU =r$ )ÚFakeIndentedBufferig  c                ó"   >• [         TU ]  5         g rŒ   )ÚsuperrS  )ræ  Ú	__class__s    €rW   rS  ÚFakeIndentedBuffer.__init__h  s   ø€ Ü‰ÑÕr{   c                óV   • US:X  a  [         R                  X5      $ [        SU S35      e)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     rW   r¿  Ú#FakeIndentedBuffer.__getattribute__k  s9   € Ø�;ÓÜ×*Ñ*¨4Ó6Ð6ÜØ! $ ð (=ð =ó
ð 	
r{   r“   r³  )rá   r  r•   r   )r–   r—   r˜   r™   rS  r¿  rž   Ú__classcell__©r»  s   @rW   r¸  r¸  g  s   ø† ÷÷
ò 
r{   r¸  c               #  ó¶   #   • [         R                  [         R                  p S v •  Xs[         l        [         l        g ! Xs[         l        [         l        f = f7frŒ   )rã  ÚstdoutÚstderr)Úinitial_stdoutÚinitial_stderrs     rW   Úrestore_stdout_stderrrÈ  v  s9   é € ä%(§Z¡Z´·±�Nð@Ûà!/ÐŒŒ
”C•Jø ÐŒŒ
”C•Jüs   ‚ A£> §A¾AÁAc                  óh   • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSrg)r[  i  z.A line that can be 'unwritten' at a later timec                ó>   • UR                  5       (       d  SnXl        g r{  )r}  rb  r~  s     rW   rS  ÚDeferredLineBase.__init__‚  s   € Ø�z‰z�|‰|ØˆDØ�	r{   c                ó   • [         e)zJReturns either self.line or None to indicate the line has been 'unwritten'©r  rf  s    rW   rç  ÚDeferredLineBase.__call__‡  ó   € ä!Ð!r{   c                ó   • [         e)z3Returns a new deferred line with the same conditionrÍ  r~  s     rW   Ú	_new_lineÚDeferredLineBase._new_line‹  rÏ  r{   c                ó@   • U R                  U U R                   35      $ rŒ   ©rÑ  rb  )ræ  r£  s     rW   r|  ÚDeferredLineBase.with_prefix�  s   € Ø�~‰~  ¨¯©¨Ð4Ó5Ð5r{   c                óT   • U R                  U R                  R                  5       5      $ rŒ   )rÑ  rb  rù  rf  s    rW   rù  ÚDeferredLineBase.lstrip’  s   € Ø�~‰~˜dŸi™i×.Ñ.Ó0Ó1Ð1r{   c                ó>   • U R                  U R                  U   5      $ rŒ   rÔ  )ræ  r  s     rW   r+  ÚDeferredLineBase.__getitem__•  s   € Ø�~‰~˜dŸi™i¨Ñ.Ó/Ð/r{   c                ó,   • [        U R                  5      $ rŒ   )r:  rb  rf  s    rW   rq  ÚDeferredLineBase.__bool__˜  s   € Ü�D—I‘I‹Ðr{   c                ó,   • [        U R                  5      $ rŒ   )rR   rb  rf  s    rW   Ú__len__ÚDeferredLineBase.__len__›  s   € Ü�4—9‘9‹~Ðr{   )rb  N)rb  r  )r•   zUnion[str, None])rb  r  r•   r   )r£  r  r•   r   )r•   r   )r  zUnion[int, slice]r•   r   r´  ©r•   r�   )r–   r—   r˜   r™   rš   rS  rç  rÑ  r|  rù  r+  rq  rÝ  rž   r“   r{   rW   r[  r[    s-   † Ù8ôô
"ô"ô6ô2ô0ô÷r{   r[  c                  óD   ^ • \ rS rSrSrSU 4S jjrSS jrS	S jrSrU =r	$ )
ÚDelayReplaceLineiŸ  z6At end of codegen call `line.replace(key, value_fn())`c                ó<   >• [         TU ]  U5        Xl        X l        g rŒ   )rº  rS  rc  Úvalue_fn)ræ  rc  rã  rb  r»  s       €rW   rS  ÚDelayReplaceLine.__init__¢  s   ø€ Ü‰Ñ˜ÔØŒØ �r{   c                ój   • U R                   R                  U R                  U R                  5       5      $ rŒ   )rb  Úreplacerc  rã  rf  s    rW   rç  ÚDelayReplaceLine.__call__§  s#   € Ø�y‰y× Ñ  §¡¨4¯=©=«?Ó;Ð;r{   c                óD   • [        U R                  U R                  U5      $ rŒ   )rá  rc  rã  r~  s     rW   rÑ  ÚDelayReplaceLine._new_lineª  s   € Ü §¡¨$¯-©-¸Ó>Ð>r{   )rc  rã  )rc  r  rã  zCallable[[], str]rb  r  r²  )rb  r  r•   rá  )
r–   r—   r˜   r™   rš   rS  rç  rÑ  rž   rÁ  rÂ  s   @rW   rá  rá  Ÿ  s   ø† Ù@÷!ô
<÷?ò ?r{   rá  c                óô  • [        U [        R                  5      (       a  U nO[        R                  " [        5       U 5      n[        R
                  " U5      n[        R                  R                  (       aF  UR                  c   eUR                  S:  d  UR                  S:X  a  [        R                  S5        ggUR                  S:X  a  SOSnUR                  nXC:  a  [        R                  S	X4S
.S9  gg)Né	   é
   z6GPU arch does not support max_autotune_gemm mode usageFTrJ   rr   éD   z,Not enough SMs to use max_autotune_gemm mode)Úmin_smsÚ	avail_sms)Úextra)r}   rP   r¯   rX   r    ÚcreateÚversionrq   ÚmajorrÙ   r  r  Úmulti_processor_count)Úindex_or_devicer¯   Úproprî  rï  s        rW   Ú
is_big_gpur÷  ®  sÇ   € ä�/¤5§<¡<×0Ñ0Ø ‰ä—’œl›n¨oÓ>ˆä×"Ò" 6Ó*€Dô ‡}�}××Ø�z‰zÑ%Ð%Ð%Ø�:‰:˜‹>˜TŸZ™Z¨2Ó-Ü�K‰KÐPÔQØØà—K‘K 5Ó(‰b¨b€GØ×*Ñ*€IØÓÜ�‰Ø:Ø%Ñ>ð 	ñ 	
ð Ør{   c                 óê   • [         R                  R                  5       (       a(  [         R                  R                  5       R                  $ [         R
                  R                  S5      R                  $ )NrH   )rP   rJ   rQ   Úget_device_propertiesÚgpu_subslice_countrH   rô  r“   r{   rW   Úget_max_num_smsrû  Ë  sI   € ä‡y�y×Ñ×ÑÜ�y‰y×.Ñ.Ó0×CÑCÐCÜ�:‰:×+Ñ+¨FÓ3×IÑIÐIr{   c                 óÞ   • [         R                  R                  5       (       d  g[         R                  R                  [         R                  R	                  5       5      n U R
                  S:H  $ )zEReturns true if the device is a NVIDIA B200, otherwise returns false.Frì  )rP   rH   rQ   rù  r  ró  )Údevice_propertiess    rW   Ú
using_b200rþ  Ò  sM   € ô �:‰:×"Ñ"×$Ñ$ØäŸ
™
×8Ñ8¼¿¹×9RÑ9RÓ9TÓUÐØ×"Ñ" bÑ(Ð(r{   c                 óÀ   • [         R                  R                  5       (       a
  [        5       $ [         R                  R                  5       n [        5       U b  U -
  $ S-
  $ )zFHandle experimental carveout if set otherwise return hardware SM countr   )rP   rJ   rQ   rû  r  Ú_get_sm_carveout_experimental)Úcarveouts    rW   Úget_num_smsr  Ü  sM   € ô ‡y�y×Ñ×ÑÜÓ Ð Ü�x‰x×5Ñ5Ó7€HÜÓ¨HÑ,@ ÑHÐHÀaÑHÐHr{   c                ó”   • SSK JnJn  Uc
  [        5       nUR	                  S5      nX -  [
        -  nU" UUUUR                  " 5       S9$ )zKBuilds and returns a WorkspaceArg for the device side TMA workspace buffer.r7   )r8   ÚWorkspaceZeroModeF)r]  Ú	zero_moder¯   Ú
outer_name)Úcodegen.commonr8   r  r  Ú	from_boolÚTMA_DESCRIPTOR_SIZEÚunique_name)Únum_tma_descriptorsr¯   Únum_programsr8   r  r  rÐ  s          rW   Úget_tma_workspace_argr  å  sU   € ÷ @àÑÜ"“}ˆØ!×+Ñ+¨EÓ2€IØÑ-Ô0CÑC€DÙØØØØ×+Ò+Ó-ñ	ð r{   c                ó  • U R                   U;  a!  [        R                  SU R                   U5        [        U R                  R
                  5      =(       a+    U R                   U;   =(       a    [        U R                  5      $ )NzDNot using template since dtype %s is not in allowed layout dtypes %s)r®   rÙ   rÚ   Úis_gpur¯   r  r÷  )r<  Úallowed_layout_dtypess     rW   Ú_use_template_for_gpur  ù  sf   € ð ‡|�|Ð0Ó0Ü�	‰	ØRØ�L‰LØ!ô	
ô 	ˆv�}‰}×!Ñ!Ó"÷ 	&Ø�L‰LÐ1Ñ1÷	&ä�v—}‘}Ó%ðr{   c                óÄ   • U R                  5       [        R                  R                  5       R                  S5       Vs/ s H  oR	                  5       PM     sn;   $ s  snf ©NrQ  )rÿ   ri   Úmax_autotune_gemm_backendsr`  r}  ©ÚbackendrT   s     rW   Ú_use_autotune_backendr  	  óP   € Ø�=‰=‹?Ü!×<Ñ<×BÑBÓD×JÑJÈ3ÔOóÚO�a�‰Ž	ÑOññ ð ùò ó   ¿Ac                óÄ   • U R                  5       [        R                  R                  5       R                  S5       Vs/ s H  oR	                  5       PM     sn;   $ s  snf r  )rÿ   ri   Úmax_autotune_conv_backendsr`  r}  r  s     rW   Ú_use_conv_autotune_backendr    r  r  )Úenable_int32Úenable_float8Úcheck_max_autotunec               ó  • SSK JnJn  [        R                  [        R
                  [        R                  /nU(       a>  [        R                  [        R
                  [        R                  [        R                  /nU(       a/  UR                  [        R                  [        R                  /5        [        U R                  R                  5      =(       a    [        X5      =(       d/    U R                  R                  S:H  =(       a    U R                  U;   =(       ak    [         R"                  =(       d    [         R$                  =(       d    U(       + =(       a/    ['        S5      =(       a    U" U R                  UR(                  5      $ )Nr7   )ÚBackendFeatureÚhas_backend_featurer  ÚTRITON)r  r!  r"  rP   rÉ   rJ  rL  rT  ÚextendrD  rE  r  r¯   r  r  r®   ri   Úmax_autotuneÚmax_autotune_gemmr  ÚTRITON_TEMPLATES)r<  r  r  r  r!  r"  Úlayout_dtypess          rW   Úuse_triton_templater)    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ô × Ñ ×V¤F×$<Ñ$<×VÐDVÔ@V÷
	Pô " (Ó+÷
	Pñ   §¡¨~×/NÑ/NÓOðr{   ©Úoutput_layoutÚ
add_guardsc                ó  ^^^^^^	• SSK Jn  SSKJm  SU4S jjmSUU4S jjnSUUU	4S jjm        SUUU4S jjm        SU4S	 jjm	U" 5       =(       a$    [	        U4S
 jU 5       5      =(       a    U" U 5      $ )u.  
Return True iff *all* supplied tensors satisfy the CUDA TMA constraints
that Triton relies on today.
* https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__TENSOR__MEMORY.html

A tensor is accepted when:
  * 1 â‰¤ rank â‰¤ 5 (cuTensorMapEncodeTiled)
  * dtype in _TMA_SUPPORTED_DTYPES (CUtensorMapDataType enum)
  * Base pointer 16-byte aligned
  * Exactly one contiguous ("inner") dim with stride 1
  * All "outer" dims have 16-byte aligned strides
  * Inner dim size Ã— itemsize is a multiple of 16
  * For 1-byte dtypes (e.g. FP8), inner dim â‰¥ 32
r   )Úhas_triton_tma_devicer7   rr  c                óX   >• TR                   R                  R                  U [        5      $ rŒ   )rv  rw  Ústatically_known_multiple_ofÚTMA_ALIGNMENT)Ú
expr_bytesrs  s    €rW   Ú_alignedÚcan_use_tma.<locals>._alignedG  s    ø€ Ø�w‰w×Ñ×<Ñ<¸ZÌÓWÐWr{   c                ó–   >• U c  gU R                   nU R                  nU R                  nT" U R                  5      (       d  gT" XU5      $ )NTF)rÐ  rF  r®   r‡  )r<  ÚsizesÚstridesr®   r3  Ú_is_tma_compatibles       €€rW   Ú_is_tma_compatible_layoutÚ.can_use_tma.<locals>._is_tma_compatible_layoutJ  sG   ø€ Ø‰>ØØ—‘ˆØ—-‘-ˆØ—‘ˆñ ˜Ÿ™×&Ñ&Øá! %°%Ó8Ð8r{   c                ó   >• U R                  5       nU R                  5       nU R                  5       nU R                  5       TR                  R
                  ;   a  gU R                  5       =nb  UR                  S:X  a	  T" XU5      $ T" XU5      $ )NFrJ   )Úget_sizeÚ
get_strideÚ	get_dtyperÕ  rv  Úunaligned_buffersÚ
get_devicer  )rø  r6  r7  r®   Úm_devicers  r8  Ú_is_tma_compatible_xpus        €€€rW   Ú_is_tma_compatible_matrixÚ.can_use_tma.<locals>._is_tma_compatible_matrixW  sw   ø€ Ø—
‘
“ˆØ—,‘,“.ˆØ—‘“ˆð �:‰:‹<˜1Ÿ7™7×4Ñ4Ó4ØàŸ™›Ð&ˆHÑ3¸¿¹ÈÓ8NÙ)¨%¸%Ó@Ð@á! %°%Ó8Ð8r{   c                ó¢  >• [        U 5      nUR                  nUS:  d  US:”  a  gU[        ;  a  gT(       aK  TR                  R                  R                  U 5      nTR                  R                  R                  U5      nOjU  Vs/ s H(  nTR                  R                  R                  U5      PM*     nnU Vs/ s H(  nTR                  R                  R                  U5      PM*     nn[        U5       V	Vs/ s H4  u  p˜TR                  R                  R                  US5      (       d  M2  U	PM6     n
n	n[        U
5      S:w  a  gU
S   n[        U5       H  u  p˜X›:X  a  M  T" X„-  5      (       a  M    g   X[   nT" XÄ-  5      (       d  gUS:X  a,  TR                  R                  R                  US5      (       d  ggs  snf s  snf s  snn	f )Nr7   r²   Fr   é    T)
rR   Úitemsizert   rv  rw  Úguard_int_seqÚsymbolic_hintr  Ústatically_known_equalsÚstatically_known_geq)r6  r7  r®   ÚrankrG  Úsizes_iÚ	strides_irï   Ústrî   r  Ú	inner_idxÚ	inner_dimrs  r3  r,  s                €€€rW   r8  Ú'can_use_tma.<locals>._is_tma_compatiblee  s˜  ø€ ô
 �5‹zˆØ—>‘>ˆà�!‹8�t˜a“xØàÔ-Ó-ØæØ—g‘g×&Ñ&×4Ñ4°UÓ;ˆGØŸ™×(Ñ(×6Ñ6°wÓ?‰IáBGÓHÂ%¸Q�q—w‘w×'Ñ'×5Ñ5°aÖ8Á%ˆGÐHÙFMÓNÂgÀ˜Ÿ™×)Ñ)×7Ñ7¸Ö;ÁgˆIÐNô
 # 9Ô-ô
â-‘�Ø�w‰w×Ñ×7Ñ7¸¸A×>÷ Ù-ð 	ñ 
ô
 ˆu‹:˜‹?ØØ˜!‘Hˆ	ô ˜yÖ)‰EˆAØ‹~ÙÙ˜B™M×*Ó*Ùñ	 *ð Ñ&ˆ	Ù˜	Ñ,×-Ñ-Øð �q‹= §¡×!1Ñ!1×!FÑ!FÀyÐRT×!UÑ!UØàùò; IùÚNùó
s   Â/GÂ</GÃ;1GÄ0Gc                ój  >• US   nTR                   R                  R                  U5      nTR                   R                  R                  US5      (       d  gSnU  HT  nTR                   R                  R                  U5      nTR                   R                  R	                  Xu5      (       d  MT    g   g)Nr¸   r7   Fl   ÿÿ T)rv  rw  rI  rJ  Ústatically_known_gt)	r6  r7  r®   Úlast_strideÚlast_stride_hintÚ
MAX_UINT32rÐ  Ú	size_hintrs  s	           €rW   rB  Ú+can_use_tma.<locals>._is_tma_compatible_xpu–  s˜   ø€ ð ˜b‘kˆØŸ7™7×+Ñ+×9Ñ9¸+ÓFÐØ�w‰w×Ñ×7Ñ7Ð8HÈ!×LÑLØð ˆ
ÛˆDØŸ™×(Ñ(×6Ñ6°tÓ<ˆIØ�w‰w×Ñ×3Ñ3°I×JÓJÙñ ð
 r{   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7frŒ   r“   )rÀ   rø  rC  s     €rW   rÂ   Úcan_use_tma.<locals>.<genexpr>¬  s   øé € Ð?²h°Ñ)¨!×,Ð,²hùó   ƒ)r2  úUnion[int, sympy.Expr]r•   r:  )r<  úOptional[Layout]r•   r:  )rø  r@   r•   r:  )r6  úSequence[sympy.Expr]r7  zSequence[_IntLike]r®   útorch.dtyper•   r:  )Útorch.utils._tritonr.  ru  rs  r�   )
r+  r,  Úmatricesr.  r9  rs  r3  r8  rC  rB  s
    `   @@@@@rW   Úcan_use_tmarc  2  sª   ý€ õ" :å÷X÷9ð 9÷9ñ 9ð/Ø#ð/à#ð/ð ð/ð 
÷	/ñ /ðbØ#ðà#ðð ðð 
÷	ñ* 	Ó÷ 	5ÜÔ?±hÓ?Ó?÷	5á% mÓ4ðr{   )r,  c                óÒ   • [         R                  R                  (       a  U OS n[        S U 5       5      =(       a,    [	        X#US.6=(       a    [         R                  R
                  $ )Nc              3  óZ   #   • U  H!  n[        UR                  5       5      S :H  v •  M#     g7f)r†  N)rR   r<  )rÀ   rø  s     rW   rÂ   Ú*use_triton_tma_template.<locals>.<genexpr>¶  s    é € Ð5ªH qŒC�—
‘
“Ó Ö"ªHùs   ‚)+r*  )ri   r  Úenable_template_tma_storer�   rc  Úenable_persistent_tma_matmul)r+  r,  rb  r<  s       rW   Úuse_triton_tma_templateri  ±  sK   € ô %Ÿm™m×E×E‰]È4€FäÑ5©HÓ5Ó5÷ 	7Ü˜ÀJÒO÷	7ä�M‰M×6Ñ6ðr{   c                óf   • [        X US.6(       d  gSSKJn  SSKJn  U" 5       =(       a    U" 5       $ )Nr*  Fr   )Ú%has_triton_tensor_descriptor_host_tmar7   ©Úis_datacenter_blackwell_arch)ri  ra  rk  Úcodegen.cuda.cuda_envrm  )r+  r,  rb  rk  rm  s        rW   Ú!use_triton_blackwell_tma_templatero  ¼  s5   € ô #Ø	¸:÷ð ð åIåCñ 1Ó2×UÑ7SÓ7UÐUr{   c                ó    • X;   =(       a    X;   $ rŒ   r“   )Úscale_option_aÚscale_option_bÚscaling_typess      rW   Úuse_triton_scaling_templatert  Ì  s   € ð
 Ñ*×N¨~Ñ/NÐNr{   )Úmaxsizec                 óf   •  [         R                  R                  S5      SL$ ! [         a     gf = f)z¬Check if CuTeDSL is importable; cache the result for reuse.

Call ensure_cute_available.cache_clear() after installing CuTeDSL
in the same interpreter to retry the import.
ÚcutlassNF©Ú	importlibÚutilÚ	find_specr  r“   r{   rW   Úensure_cute_availabler|  Ô  s3   € ðÜ�~‰~×'Ñ'¨	Ó2¸$Ð>Ð>øÜó Ùðúó   ‚ # £
0¯0c                 óf   •  [         R                  R                  S5      SL$ ! [         a     gf = f)zÙCheck if NVIDIA Universal GEMM (cutlass_api) is importable; cache the result for reuse.

Call ensure_nv_universal_gemm_available.cache_clear() after installing cutlass_api
in the same interpreter to retry the import.
Úcutlass_apiNFrx  r“   r{   rW   Ú"ensure_nv_universal_gemm_availabler€  á  s3   € ðÜ�~‰~×'Ñ'¨Ó6¸dÐBÐBøÜó Ùðúr}  c                 óf   •  [         R                  R                  S5      SL$ ! [         a     gf = f)a3  Check if nvMatmulHeuristics is importable; cache the result for reuse.

nvMatmulHeuristics provides performance model-based kernel selection
for NVIDIA GEMM operations.

Call ensure_nvmatmul_heuristics_available.cache_clear() after installing
nvMatmulHeuristics in the same interpreter to retry the import.
ÚnvMatmulHeuristicsNFrx  r“   r{   rW   Ú$ensure_nvmatmul_heuristics_availablerƒ  î  s4   € ðÜ�~‰~×'Ñ'Ð(<Ó=ÀTÐIÐIøÜó Ùðúr}  c                óÖ  • [        5       (       d  g[        S5      (       d  gSSKJn  [	        UR
                  R                  5      (       d  gU" 5       (       d  g[        R                  /n	[        X)5      (       d  g[        R                  (       d  [        R                  (       d  g[        XUS9(       d  g[        S X4 5       5      (       a  gU(       a  U(       a  gUc  gUc  Ub  gg)a¹  
Returns True if we can use the blackwell kernel for grouped mm.
Required conditions:
    1. CuTeDSL backend is enabled
    2. CuTeDSL is available
    3. We are on a blackwell arch
    4. The dtype is bf16
    5. Max autotune or max autotune gemm is enabled
    6. A, B, and the output are 16B aligned
    7. We are not using dynamic shapes
    8. A is 2d
    9. B is 3d
    10. Offsets are provided
    11. Bias and Scale are not provided
FÚCUTEDSLr7   rl  )r+  c              3  ó8   #   • U  H  n[        U5      v •  M     g 7frŒ   )Ú
is_dynamic©rÀ   rT   s     rW   rÂ   Ú3use_blackwell_cutedsl_grouped_mm.<locals>.<genexpr>0  s   é € Ð
1¢.˜QŒ:�a�=ˆ=¢.ùrÄ   T)r|  r  rn  rm  r  r¯   r  rP   rJ  r  ri   r%  r&  rc  r‚  )
Úmat_aÚmat_br<  Úa_is_2dÚb_is_2dÚoffsÚbiasÚscale_resultrm  r(  s
             rW   Ú use_blackwell_cutedsl_grouped_mmr‘  þ  s¹   € ô2 !×"Ñ"Øä  ×+Ñ+ØåCä�&—-‘-×$Ñ$×%Ñ%Øá'×)Ñ)Øä—^‘^Ð$€MÜ  ×7Ñ7Øä××¤6×#;×#;Øô �u°6×:Øä
Ñ
1 5¡.Ó
1×1Ñ1Øæ–gØà�|ØàÑ˜<Ñ3Øàr{   c                ór  • SSK Jn  UR                  R                  R	                  X-  U-  SS9nUS::  d  U[
        R                  R                  :  a  gSSKJ	n  [        R                  R                  (       a  g[        R                  [        R                  [        R                  /n[!        X5      =(       a9    [
        R"                  =(       d    [
        R$                  =(       a    ['        S5      nU(       a;  U" 5       (       d/  [(        R+                  S	[
        R                  R,                  5        gU$ )
Nr7   rr  r¸   ©Úfallbackr   F)Útry_import_cutlassÚCUTLASSzŽFailed to import CUTLASS lib. Please check whether _inductor.config.cutlass.cutlass_dir %s is set correctly. Skipping CUTLASS backend for now.)ru  rs  rv  rw  Úoptimization_hintri   rw  Úcutlass_backend_min_gemm_sizeÚcodegen.cutlass.utilsr•  rP   rò  rq   rÉ   rJ  rT  r  r%  r&  r  rÙ   r  Úcutlass_dir)	r<  rø  r(  r¾  rs  Ú	gemm_sizer•  r(  rò   s	            rW   Úuse_cutlass_templaterœ  ?  sß   € Ýà—‘× Ñ ×2Ñ2°1±5¸1±9ÀrÐ2ÐJ€IØ�Aƒ~˜¤V§^¡^×%QÑ%QÓQØÝ9ô ‡}�}××Øô —]‘]¤E§N¡N´E·K±KÐ@€Mä˜fÓ4÷ 	-Ü× Ñ ×<¤F×$<Ñ$<÷	-ä! )Ó,ð ö Ù!×#Ñ#Ü�K‰Kð4ô —‘×*Ñ*ô	ð Ø€Jr{   Ú_IntLikec                ó:  ^
^• SSK Jm  [        5       (       d  g[        5       (       d  g[	        S5      (       d  gSSKJm
  T
R                  (       a  gU R                  R                  S:w  d  [        R                  R                  (       a  g[        R                  (       d  [        R                  (       d  gXU/nUb  UR!                  U5        [#        U4S jU 5       5      (       a  gXE/n	Ub  U	R!                  U5        [#        U
4S	 jU	 5       5      (       a  gg
)aï  
Return True if we can use the NVIDIA Universal GEMM Template.

Required conditions:
    1. NVGEMM backend is enabled
    2. cutlass_api is available
    3. We are on a NVIDIA GPU
    4. Max autotune or max autotune gemm is enabled
    5. Not in AOT Inductor mode (requires runtime JIT compilation)
    6. Base pointers are 16-byte aligned
    7. Shape dimensions are not unbacked symbols

Note:
    - Shape and stride constraints are handled internally by
      cutlass_api.get_kernels() which filters incompatible kernels.
    - GroupedGemm currently only supports TN layout (column-major B).
      Any other layout will act as a noop and fall back to ATen.
    - Dynamic shapes are supported as long as they have hints
      (from example inputs).
r   )Úhas_free_unbacked_symbolsFÚNVGEMMr7   rr  rH   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7frŒ   r“   )rÀ   ÚdimrŸ  s     €rW   rÂ   Ú1use_nv_universal_gemm_template.<locals>.<genexpr>š  s   øé € Ð
C²]¨cÑ$ S×)Ð)²]ùr\  c              3  óp   >#   • U  H+  oR                  5       TR                  R                  ;   v •  M-     g 7frŒ   )rÕ  rv  r?  )rÀ   Útrs  s     €rW   rÂ   r£  ¢  s&   øé € Ð
OÒ>N¸�:‰:‹<˜1Ÿ7™7×4Ñ4Ö4Ò>Nùs   ƒ36T)rË  rŸ  r|  r€  r  ru  rs  Úaot_compilationr¯   r  rP   rò  rq   ri   r%  r&  rŸ  r‚  )r<  rø  r(  r¾  rŠ  r‹  rŽ  r¡  Údims_to_checkÚtensors_to_checkrs  rŸ  s             @@rW   Úuse_nv_universal_gemm_templater©  `  sÛ   ù€ õ< Pä ×"Ñ"Øä-×/Ñ/Øä  ×*Ñ*Øåà××Øà‡}�}×Ñ˜VÓ#¤u§}¡}×'8×'8Øä××¤6×#;×#;Øð
 ˜1�I€MØ�}Ø×Ñ˜QÔÜ
Ô
C±]Ó
C×CÑCØð �~ÐØÑØ×Ñ Ô%Ü
Ô
OÑ>NÓ
O×OÑOØàr{   c                óê   • [         R                  R                  R                  5       nUS:X  a  gU R                  5       UR	                  S5       Vs/ s H  o"R                  5       PM     sn;   $ s  snf )z8Check if CUTLASS should be used for the given operation.ÚALLTrQ  )ri   rw  Úcutlass_enabled_opsrÿ   r`  r}  )Úop_nameÚenabled_opsrT   s      rW   Ú_use_cutlass_for_opr¯  ¨  sY   € ä—.‘.×4Ñ4×:Ñ:Ó<€KØ�eÓØØ�=‰=‹?°+×2CÑ2CÀCÔ2HÓIÒ2H¨QŸw™wžyÑ2HÑIÑIÐIùÒIs   ÁA0r   c           
     óè  • SSK Jn  [        R                  R                  U-  nUR
                  R                  R                  [        R                  " [        R                  " X%U -  5      [        R                  " X%U-  5      5      5      =(       aa    UR
                  R                  (       + =(       a?    UR
                  R                  (       + =(       a    [        R                  R                  S:„  $ )Nr   rr  )Útorch._inductor.virtualizedrs  ri   r  Údecompose_k_thresholdrv  rw  Ústatically_known_truer~   ÚAndÚGeÚaot_modeÚcpp_wrapperÚnum_decompose_k_splits)rø  r(  r¾  Úthreshold_multiplers  r²  s         rW   Úuse_decompose_k_choicerº  ³  s±   € õ .ä"ŸM™M×?Ñ?ÐBTÑTÐð 	
�‰×Ñ×.Ñ.Ü�IŠIÜ—’˜°AÑ5Ó6Ü—’˜°AÑ5Ó6óó	
÷ 	5ð —‘× Ñ Ô ÷	5ð —‘×#Ñ#Ô#÷	5ô �M‰M×0Ñ0°1Ñ4ð
r{   c           
     óî  • [         R                  R                  nSSKJn  [        [        R                  R                  5      =(       a¬    UR                  R                  R                  [        R                  " [        R                  " X#U -  5      [        R                  " X#U-  5      5      5      =(       a=    UR                  R                  (       + =(       a    UR                  R                   (       + $ )z€
Check if we should use the contiguous subgraph transform.
This transform makes the second matrix contiguous before the matmul.
r   rr  )ri   ÚrocmÚcontiguous_thresholdr±  rs  r:  rP   rò  rq   rv  rw  r³  r~   r´  rµ  r¶  r·  )rø  r(  r¾  r½  rs  s        rW   Úuse_contiguousr¾  È  s«   € ô "Ÿ;™;×;Ñ;Ðõ .ô 	ŒU�]‰]×ÑÓ÷ 	$Ø�G‰G×Ñ×2Ñ2Ü�IŠIÜ—’˜°1Ñ4Ó5Ü—’˜°1Ñ4Ó5óó
÷	$ð —‘× Ñ Ô ÷	$ð —‘×#Ñ#Ô#ð
r{   c                ó6  • [         R                  R                  n/ SQn[        U[        R
                  5      (       a  UR                  (       d  U$ US:X  a  / $ [        U [        R
                  5      (       a  U R                  (       a0  [        U[        R
                  5      (       a  UR                  (       d  SnO[        X -  X!-  5      nSn[        R                  " U5      nU Vs/ s H  nX…::  d  M
  X†:¼  d  M  UPM     nn/ / / pºn	U H`  nX,-  nUS:  a  M  XÝS-
  -  S:X  a  US:¼  a  U	R                  U5        M3  US-  S:X  a  U
R                  U5        MO  UR                  U5        Mb     [         R                  S:X  a  Xš-   U-   $ Xš-   U-   nUS U $ s  snf )	N)rr   rF  ru   rs   é   r   rÀ  r†  rs   r7   rF  Ú
EXHAUSTIVE)ri   r  r¸  r}   r~   r4  Ú	is_numberrš  ÚdivisorsrŸ  Úmax_autotune_gemm_search_space)rø  r(  r¾  Úk_splits_limitÚdefault_k_splitsÚmax_k_splitÚmin_k_splitrÃ  ÚdivisorÚpow_of_2_divisorsÚmul_of_32_divisorsÚrest_of_splitsÚdÚkPartÚbest_splitss                  rW   Úget_k_splitsrÐ  à  s„  € ô —]‘]×9Ñ9€Nò .Ðä�!”U—Z‘Z× Ñ ¨¯¯ØÐØ	˜1Ó	Øˆ	ä�1”e—j‘j×!Ñ!¨!¯+¯+Ü�1”e—j‘j×!Ñ!¨!¯+¯+à‰ä˜!™& !¡&Ó)ˆà€Kä�~Š~˜aÓ €Hñ  óâˆGØÑ!ó 	à&-Ñ&<÷ 	Ùð ð ð =?ÀÀB¨>ÐãˆØ‘ˆð �3‹;Ùð ˜A‘IÑ !Ó#¨°«Ø×$Ñ$ QÖ'à�R‰Z˜1‹_Ø×%Ñ% aÖ(ð ×!Ñ! !Ö$ñ ô" ×,Ñ,°Ó<Ø Ñ5¸ÑFÐFà#Ñ8¸>ÑI€Kà�˜Ð'Ð'ùò=s   Ã(	FÃ5FÃ<Fc                óT   • [         R                  R                  U 5      R                  $ rŒ   )rP   rH   rù  ÚgcnArchName©r¯   s    rW   Ú_rocm_native_device_arch_namerÔ  	  s   € ä�:‰:×+Ñ+¨FÓ3×?Ñ?Ð?r{   c                 óÎ   •  SS K n SSKJnJn  SSKJn  [        R                  R                  U R                  5      nXAX#4$ ! [         a    SS jnSS jn " S S5      nS n N&f = f)	Nr   )Úgen_ops_libraryÚgen_ops_preselected)ÚCKGemmOperationc                 ó   • / $ rŒ   r“   r“   r{   rW   rÖ  Ú*try_import_ck_lib.<locals>.gen_ops_library/	  ó   € ØˆIr{   c                 ó   • / $ rŒ   r“   r“   r{   rW   r×  Ú.try_import_ck_lib.<locals>.gen_ops_preselected2	  rÛ  r{   c                  ó   • \ rS rSrSrg)Ú*try_import_ck_lib.<locals>.CKGemmOperationi5	  r“   N)r–   r—   r˜   r™   rž   r“   r{   rW   rØ  rß  5	  s   † Úr{   rØ  )r•   r›  )Úck4inductorÚ(ck4inductor.universal_gemm.gen_instancesrÖ  r×  Úck4inductor.universal_gemm.oprØ  r  r  ÚdirnameÚ__file__r  )rà  rÖ  r×  rØ  Úpackage_dirnames        rW   Útry_import_ck_libræ  	  sh   € ðÛ÷	
õ	
ô Ÿ'™'Ÿ/™/¨+×*>Ñ*>Ó?ˆð Ð-@ÐQÐQøô ó ô	ô	÷	ñ 	ð Šðús   ‚;A Á A$Á#A$c                óJ  • [         R                  (       d  [         R                  (       d  g[        R                  R
                  (       d  gU R                  R                  S:w  a  g[        U R                  5      n[         R                  R                   Vs0 s H  o"R                  S5      S   U_M     sn=(       d    UR                  S5      S   U0nUR                  5       [         R                  R                  -   Vs/ s H  nX2   PM	     nnU(       d  gU R                  [        R                  [        R                   [        R"                  4;  a  g[%        5       u  n    nU(       d  [&        R)                  S5        gU[         R                  l        gs  snf s  snf )NFrH   Ú:r   z,Please pip install Composable Kernel packageT)ri   r%  r&  rP   rò  rq   r¯   r  rÔ  r¼  Úarchr`  rY  Úck_supported_archr®   rÉ   rJ  rL  ræ  rÙ   r  Úck_dir)r<  Únative_archr¾  Úrequested_archsÚrequested_supported_archsÚck_package_dirnameré   s          rW   Úuse_ck_templaterð  <	  s@  € ä××¤6×#;×#;Øä�=‰=××Øà‡}�}×Ñ˜VÓ#Øô 0°·±Ó>€KÜ39·;±;×3CÒ3CÓDÒ3C¨a—w‘w˜s“| A‘¨Ò)Ñ3CÑD÷ Ø×Ñ˜#Ó˜qÑ! ;ðI€Oð
 !×%Ñ%Ó'¬&¯+©+×*GÑ*GÒGó!âGˆAð 	ÔÙGð ð !ö %Øà‡|�|œEŸM™M¬5¯>©>¼5¿=¹=ÐIÓIØä"3Ó"5ÑÐ˜˜1˜aæÜ�‰ÐBÔCØà+„F‡K�KÔàùò+ Eùò!s   ÂFÄF c                ó®   • SSK Jn  [        S5      =(       a>    [        U 5      =(       a,    UR                  R
                  R                  X-  U-  SS9S:„  $ )Nr7   rr  ÚCKr¸   r“  r   ©ru  rs  r  rð  rv  rw  r—  ©r<  rø  r(  r¾  rs  s        rW   Úuse_ck_gemm_templaterõ  a	  sP   € Ýô 	˜dÓ#÷ 	KÜ˜FÓ#÷	Kà�G‰G×Ñ×.Ñ.¨q©u°q©yÀ2Ð.ÐFÈÑJðr{   c                ó®   • SSK Jn  [        S5      =(       a>    [        U 5      =(       a,    UR                  R
                  R                  X-  U-  SS9S:„  $ )Nr7   rr  ÚCKTILEr¸   r“  r   ró  rô  s        rW   Úuse_ck_tile_gemm_templaterø  k	  sP   € Ýô 	˜hÓ'÷ 	KÜ˜FÓ#÷	Kà�G‰G×Ñ×.Ñ.¨q©u°q©yÀ2Ð.ÐFÈÑJðr{   c                ó<   • [        S5      =(       a    [        U 5      $ )Nrò  )r  rð  ©r<  s    rW   Úuse_ck_conv_templaterû  u	  s   € Ü% dÓ+×G´ÀÓ0GÐGr{   c                ó�   • [         R                  =(       d    [         R                  =(       a    U R                  R                  S:H  $ r¯  )ri   r%  r&  r¯   r  rú  s    rW   Ú_use_template_for_cpurý  y	  s2   € ä×Ñ×7œv×7Ñ7÷&à
�-‰-×
Ñ
 Ñ
%ð&r{   c                ó  • SSK Jn  [        UR                  U5      (       d   eUR                  R                  nUR                  R
                  n[        U 5      =(       al    UR                  5       [        R                  :H  =(       aD    [        U5      S:H  =(       a/    [        U5      S:H  =(       a    US   US   :H  =(       a    US   S:H  n[        XUSS9=(       a#    UR                  R                  5       =(       d    U$ )Nr7   )rA   é   r†  F)Úrequire_constant_mat2)r  rA   r}   r<  rÐ  rF  rý  r>  rP   rL  rR   Úuse_cpp_gemm_templateÚis_contiguous)r<  Úmat1Úmat2rA   Ú	mat1_sizeÚmat1_strideÚmat1_each_batch_is_contiguouss          rW   Úuse_cpp_bmm_templater  	  sà   € õ ä�d—k‘k 6×*Ñ*Ð*Ð*ð
 —‘× Ñ €IØ—+‘+×$Ñ$€Kä˜fÓ%÷ 	"Ø�N‰NÓ¤§¡Ñ-÷	"ä�‹^˜qÑ ÷	"ô �Ó Ñ"÷	"ð ˜‰^˜y¨™|Ñ+÷		"ð
 ˜‰^˜qÑ ð "ô ! ¨tÈ5ÑQ÷ Ø�‰×!Ñ!Ó#×DÐ'Dðr{   c                óê  • SSK Jn  SSKJn  SSKJn	  SSKJn
  [        U 5      (       a  [        S5      (       d  g[        R                  R                  (       d  gUR                  5       [        R                  [        R                   4;   n[        R"                  [        R$                  [        R&                  [        R                  [        R                   /nU
" UUU(       a  U R(                  OS UUS9u  pÞpðp[+        Xï45      (       a  g[-        X'R.                  5      (       a  UR1                  5       nU	" UR                  5       5      u  nnU" S	UUUUR                  5       UR                  5       U[3        5       U(       + US
9
nSS jnU R(                  U;   =(       aT    US L=(       aI    U" U5      =(       a:    [-        X'R4                  5      =(       a    UR7                  5       =(       d    U(       + $ )Nr7   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   • U R                  5         U R                  5       S   S:H  $ )Nr¸   r7   )Úfreeze_layoutr=  ©rT   s    rW   Úis_last_dim_stride1Ú2use_cpp_gemm_template.<locals>.is_last_dim_stride1Ë	  s"   € Ø	�‰ÔØ�|‰|‹~˜bÑ! QÑ&Ð&r{   )rT   r@   r•   r:  )r  r  Úcodegen.cpp_micro_gemmr
  Úcodegen.cpp_utilsr  Úkernel.mm_commonr  rý  r  ri   ÚcppÚweight_prepackr>  rP   r[  rP  rL  rJ  Úhalfr®   Úhas_free_symbolsr}   ÚBaseViewÚunwrap_viewÚparallel_num_threadsr7  Úis_module_buffer)r<  r  r  r  r   Úis_woq_int4r  r  r
  r  r  Ú	int8_gemmr(  rø  r(  r¾  r  ré   r  r  s                       rW   r  r  ˜	  s‡  € õ Ý9ÝMÝ)ä  ×(Ñ(Ô0EÀe×0LÑ0LØä�:‰:×$×$Øà—‘Ó ¤U§[¡[´%·*±*Ð$=Ñ=€IÜ—]‘]¤E§N¡N´E·J±JÄÇÁÌUÏZÉZÐX€MÙ")ØØÞ"+�&—,’,°Ø'Øñ#Ñ€Aˆ!�Tô ˜˜×ÑØä�$Ÿ™×$Ñ$Ø×ÑÓ!ˆá@ÀÇÁÓAQÓR�O€L�!Ù"ØØ	Ø	Ø	Ø—N‘NÓ$Ø—^‘^Ó%Ø!Ü(Ó*Ø”Ø!ñ€Jô'ð
 	�‰˜Ñ%÷ 	CØ˜dÐ"÷	Cá Ó%÷	Cô �tŸ]™]Ó+÷	Cð ×"Ñ"Ó$×AÐ,AÔ(Aðr{   c                 ó~   • [         R                  =(       d    [         R                  (       + =(       d    [        S5      $ )NÚATEN)ri   r%  r&  r  r“   r{   rW   Úuse_aten_gemm_kernelsr,  Ø	  s-   € ä×Ñ×7œv×7Ñ7ô÷ 'ä	˜vÓ	&ð'r{   c                  ób   • \ rS rSr% \R
                  " S5      rS\S'   S
S jrS
S jr	SS jr
Srg	)ÚDebugDirManageriÞ	  r   r  Úprev_debug_namec                ó@   • [        [        R                  5      U l        g rŒ   )rÏ  r.  Úcounterr£   rf  s    rW   rS  ÚDebugDirManager.__init__â	  s   € Ü”×.Ñ.Ó/ˆ�r{   c                óè   • [         R                  R                  R                  U l        U R                   SU R
                   3U l        U R                  [         R                  R                  l        g )NÚ_tmp_)rP   Ú_dynamori   Údebug_dir_rootr/  r£   Únew_namerf  s    rW   Ú	__enter__ÚDebugDirManager.__enter__å	  sM   € Ü$Ÿ}™}×3Ñ3×BÑBˆÔØ×/Ñ/Ð0°°d·g±g°YÐ?ˆŒØ.2¯m©mŒ�‰×ÑÕ+r{   c                ó–   • [         R                  " U R                  5        U R                  [        R
                  R                  l        g rŒ   )r  r   r7  r/  rP   r5  ri   r6  )ræ  r„   s     rW   Ú__exit__ÚDebugDirManager.__exit__ê	  s*   € Ü�Š�d—m‘mÔ$Ø.2×.BÑ.BŒ�‰×ÑÕ+r{   )r£   r7  r/  Nr³  )r„   r   r•   ré  )r–   r—   r˜   r™   r}  r]  r1  r©   rS  r8  r;  rž   r“   r{   rW   r.  r.  Þ	  s&   ‡ Ø�oŠo˜aÓ €GØÓô0ô<÷
Cr{   r.  c                ó  ^• SSK Jn  [        5       mSU4S jjn[        R                  R                  USU5         [        R                  R                  5         U " U0 UD6nS S S 5        W[        T5      4$ ! , (       d  f       N= f)Nr7   r<   c                ó(   >• TR                  U 5        g rŒ   )r[  ©ÚcodeÚsource_codess    €rW   Úsave_output_codeÚ*run_and_get_code.<locals>.save_output_codeø	  s   ø€ Ø×Ñ˜Õr{   rB  ©r@  r  r•   ré  )
rv  r=   r#   r   Úpatchr¾  rP   r5  Úresetrb  )rã   r„   r«  r=   rB  r·  rA  s         @rW   Úrun_and_get_coderG  ï	  so   ø€ õ
 %ä$.£L€L÷ô 
�‰×	Ñ	˜=Ð*<Ð>NÕ	OÜ�‰×ÑÔÙ�TÐ$˜VÑ$ˆ÷ 
Pð ”4˜Ó%Ð%Ð%÷ 
PÕ	Oús   »'A7Á7
Bc                ó  • UR                  SS5      n[        U /UQ70 UD6u  pE/ nU HU  nUR                  [        R                  " SU[        R
                  5      5        U(       d  MA  U Vs/ s H  oˆSS PM	     nnMW     XF4$ s  snf )NÚremove_quoteFz	'''.*?'''rÿ  éýÿÿÿ)rS   rG  r$  rß   ÚfindallÚDOTALL)	rã   r„   r«  rI  r·  rA  Úkernelsr@  rí  s	            rW   Úrun_and_get_kernelsrN  
  s…   € ð —:‘:˜n¨eÓ4€Lä+¨BÐ@°Ò@¸Ñ@Ñ€FØ€GÛˆØ�‰”r—z’z ,°´b·i±iÓ@ÔAßˆ<Ù29Ó:²'¨˜a “|±'ˆGÐ:‰Gñ ð ˆ?Ðùò ;s   Á-Bc                ó*   ^ • SU 4S jjn[        U5      $ )Nc                 óR   >• T" 5       n U R                  5       R                  5         U $ rŒ   )r  r  )r·  rã   s    €rW   Úrun_with_backwardÚ1run_fw_bw_and_get_code.<locals>.run_with_backward
  s!   ø€ Ù“ˆØ�
‰
‹×ÑÔØˆr{   )r•   r   )rG  )rã   rQ  s   ` rW   Úrun_fw_bw_and_get_coderS  
  s   ø€ ÷ô
 Ð-Ó.Ð.r{   c                ót  ^^• SSK Jn  / mSU4S jjmS	U4S jjn[        R                  R	                  USU5         [        R                  R	                  UST5         [
        R                  R                  5         U " U0 UD6nSSS5        SSS5        T$ ! , (       d  f       N= f! , (       d  f       T$ = f)
zLGet the inductor-generated code, but skip any actual compilation or running.r7   r<   c                ó(   >• TR                  U 5        g rŒ   ©rŸ  r?  s    €rW   rB  Ú"get_code.<locals>.save_output_code
  s   ø€ Ø×Ñ˜DÕ!r{   c                óâ   >•  " S S5      nU R                   (       a  U R                  5       OU R                  5       u  p#T" UR                  5        U(       a  T" UR                  5        U" 5       $ )Nc                  ó,   • \ rS rSrSrSS jrSS jrSrg)	Ú@get_code.<locals>.patched_compile_to_module.<locals>.DummyModulei"
  z4This is empty to replace the generated triton modulec                ó   • g rŒ   r“   rf  s    rW   rS  ÚIget_code.<locals>.patched_compile_to_module.<locals>.DummyModule.__init__%
  s   € Ør{   c                ó   • g rŒ   r“   rå  s      rW   ÚcallÚEget_code.<locals>.patched_compile_to_module.<locals>.DummyModule.call(
  s   € àr{   r“   Nr³  ©r„   r   r«  r   r•   ré  )r–   r—   r˜   r™   rš   rS  r^  rž   r“   r{   rW   ÚDummyModulerZ  "
  s   † ÙFô÷r{   ra  )r·  Úcodegen_with_cpp_wrapperÚcodegenr�   )ræ  ra  Úwrapper_codeÚkernel_coderB  s       €rW   Úpatched_compile_to_moduleÚ+get_code.<locals>.patched_compile_to_module!
  s[   ø€ ÷	ñ 	ð 04×/?×/?ˆD×)Ñ)Ô+ÀTÇ\Á\Ã^ñ 	"ˆñ 	˜×+Ñ+Ô,ÞÙ˜[×.Ñ.Ô/á‹}Ðr{   Úcompile_to_modulerB  NrD  )ræ  r=   r•   r   )rv  r=   r   rE  r¾  rP   r5  rF  )rã   r„   r«  r=   rf  ré   rB  rA  s         @@rW   Úget_coderi  
  s›   ù€ å$à €L÷"÷ô, 	�
‰
×ÑØÐ.Ð0Iõ	
ô 	�
‰
×Ñ˜-Ð);Ð=MÕNä�‰×ÑÔá�Ð˜Ñˆ÷	 	O÷	
ð Ð÷ 	OÕNú÷	
ô 	
ð Ðús#   ¼"B(Á'BÂB(Â
B%	Â!B(Â(
B7c                ó€   • [        U /UQ70 UD6nS[        U5      s=::  a  S::  d  O   S[        U5       35       eUS   $ ©Nr7   r†  z%expected one or two code outputs got r   )ri  rR   )rã   r„   r«  rA  s       rW   Úget_triton_coderl  C
  sQ   € ä˜BÐ0 Ò0¨Ñ0€Là”�LÓ!Õ& QÕ&ð Ø
/´°LÓ0AÐ/BÐCóÐ&ð ˜‰?Ðr{   c                ó„   • [        U /UQ70 UD6u  p4S[        U5      s=::  a  S::  d  O   S[        U5       35       eUS   $ rk  )rG  rR   )rã   r„   r«  ré   rA  s        rW   Úrun_and_get_triton_codern  M
  sU   € ô ' rÐ;¨DÒ;°FÑ;�O€Aà”�LÓ!Õ& QÕ&ð Ø
/´°LÓ0AÐ/BÐCóÐ&ð ˜‰?Ðr{   c                óä   ^^^• SSK Jm  SSKJn  UR                  m/ mSUUU4S jjn[
        R                  R                  USU5         U " U0 UD6nS S S 5        UT4$ ! , (       d  f       WT4$ = f)Nr   r<   rD   c                 óh   >• T" U 0 UD6  U S   n[        UT5      (       d   eTR                  U5        g )Nr†  )r}   rŸ  )r„   r«  rv  r=   Úgraph_loweringsÚ	real_inits      €€€rW   Ú	fake_initÚ-run_and_get_graph_lowering.<locals>.fake_initb
  s:   ø€ Ù�4Ð"˜6Ò"Ø�Q‘ˆÜ˜% ×/Ñ/Ð/Ð/Ø×Ñ˜uÕ%r{   rS  r`  )Útorch._inductor.graphr=   Útorch._inductor.output_coderE   rS  r   rE  r¾  )	rã   r„   r«  rE   rs  r·  r=   rq  rr  s	         @@@rW   Úrun_and_get_graph_loweringrw  Y
  sv   ú€ õ 4Ý;à×(Ñ(€IØ€O÷&ñ &ô 
�‰×	Ñ	˜?¨J¸	Õ	BÙ�TÐ$˜VÑ$ˆ÷ 
Cð �?Ð"Ð"÷ 
CÔ	Bð �?Ð"Ð"ús   Á		AÁ
A/c              #  óÈ   #   • SSK Jn  UR                  U    n [        R                  " X5      UR                  U '   Sv •  X2R                  U '   g! X2R                  U '   f = f7f)zs
Override the lowering of aten_op with override_fn.
The first argument of override_fn is the original lowering fn.
r   )ÚloweringN)Útorch._inductorry  Ú	loweringsr  Úpartial)Úaten_opÚoverride_fnry  Úorig_fns       rW   Úoverride_loweringr€  n
  sY   é € õ )à× Ñ  Ñ)€Gð.Ü&/×&7Ò&7¸Ó&Mˆ×Ñ˜7Ñ#Ûà&-×Ñ˜7Ò#ø g×Ñ˜7Ò#üs   ‚A"™'A Á A"ÁAÁA"c                ó–   ^ ^^• SSK Jn  UR                  mSUUU 4S jjn[        R                  R
                  R                  USU5      $ )zf
Add hook functions to be called at the beginning and end of Scheduler.__init__.
Used for unit tests.
r   )Ú	Schedulerc                óF   >• T" X5        T" X5      nT(       a  T" X5        U$ rŒ   r“   )rÔ  rU  Úoutr  Úpost_fnÚpre_fns      €€€rW   rü  Ú(add_scheduler_init_hook.<locals>.wrapper‹
  s%   ø€ ÙˆyÔ Ù�iÓ'ˆÞÙ�IÔ%Øˆ
r{   rS  )rÔ  r   rU  r   r•   r   )Útorch._inductor.schedulerr‚  rS  Úunittestr   rE  r¾  )r†  r…  r‚  rü  r  s   ``  @rW   Úadd_scheduler_init_hookrŠ  €
  s>   ú€ õ 4à× Ñ €G÷ñ ô �=‰=×Ñ×%Ñ% i°¸WÓEÐEr{   c                ó„   • [         R                  (       a  [        R                  U 5        g[        R	                  U 5        g)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)ri   Údeveloper_warningsrÙ   r  Úinfo)Úmsgs    rW   Údeveloper_warningr�  •
  s$   € ô × × Ü�‰�CÕä�‰��r{   c                 óÊ  •  [         R                  R                  S5      n U S-   [        [         R                  5      :  aV  [        [         R                  U S-      5      S:”  a3  [         R                  U S-      S   S:w  a  [         R                  U S-      $ [         R                   H)  nUR                  S5      (       d  M  U[        S5      S s  $    g! [         a     NJf = f)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--onlyr7   r   r�  z--only=N)rã  Úargvr  rR   Ú
ValueErrorrå  )rb  rž  s     rW   Ú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                ó&   • [        S U  5       5      $ )Nc              3  ó*   #   • U  H	  oS :H  v •  M     g7f©r7   Nr“   rˆ  s     rW   rÂ   Úis_ones.<locals>.<genexpr>Ã
  ó   é € Ð%šu˜!�AŽvšuùó   ‚©r�   ©rZ  s    rW   Úis_onesrœ  Â
  ó   € ÜÑ%™uÓ%Ó%Ð%r{   c                ó&   • [        S U  5       5      $ )Nc              3  ó*   #   • U  H	  oS :H  v •  M     g7f)r   Nr“   rˆ  s     rW   rÂ   Úis_zeros.<locals>.<genexpr>Ç
  r˜  r™  rš  r›  s    rW   Úis_zerosr¡  Æ
  r�  r{   c                ó&   • [        S U  5       5      $ )Nc              3  óª   #   • U  HI  n[        U[        R                  5      (       d  M$  UR                  [        R                  " S 5      :H  v •  MK     g7f)r  N)r}   rP   r¥  r¯   )rÀ   rØ   s     rW   rÂ   Ú is_cpu_device.<locals>.<genexpr>Ë
  s9   é € ð âˆDÜ�dœEŸL™L×)ó 	+ˆ�‰”u—|’| EÓ*Ö*Úùs
   ‚#A©*Arš  )Úinputss    rW   Úis_cpu_devicer¦  Ê
  s   € Üñ áóó ð r{   c                ó°   • [        U [        R                  5      (       d   S5       eU R                  (       a  [        R
                  $ [        R                  $ )Nz8only support sympy.Expr as input to get_sympy_Expr_dtype)r}   r~   r4  rœ   rP   rV  rN  rn  s    rW   Úget_sympy_Expr_dtyper¨  Ò
  s@   € Ü�cœ5Ÿ:™:×&Ñ&ð ØBóÐ&ð ‡~‡~Ü�{‰{Ðä�}‰}Ðr{   c              /  ó    #   • U (       a.  [         R                  R                  " U0 UD6 nUv •  S S S 5        g S v •  g ! , (       d  f       g = f7frŒ   )rP   rÐ   rÑ   )Úshould_profiler„   r«  rí   s       rW   Úmaybe_profiler«  Ü
  s;   é € æÜ�^‰^×#Ò# TÐ4¨VÒ4¸ØŠG÷ 5Ð4ô 	÷ 5Õ4üs   ‚(Aª=¯A½
AÁAc                 óp   • [         R                  R                  n U S:  a  [        R                  " 5       n U $ ©Nr7   )ri   r   ÚthreadsrP   Úget_num_threads)r®  s    rW   r&  r&  å
  s+   € Ü�j‰j× Ñ €GØ�ƒ{Ü×'Ò'Ó)ˆØ€Nr{   c                 óŠ   • SSK Jn   U " 5       nUR                  S[        R                  R
                  (       a  S5      $ S5      $ )Nr7   )Úget_backend_optionsÚ
num_stagesr†  rÿ  )Úruntime.triton_helpersr±  rW  rP   rò  rq   )r±  Úoptionss     rW   Úget_backend_num_stagesrµ  ì
  s2   € å;á!Ó#€GØ�;‰;�|¬%¯-©-×*;×*; QÓCÐCÀÓCÐCr{   c                óN  • [        U [        R                  R                  R                  R
                  S:H  S9nUb  U$ SSKJnJn  [        R                  R                  5       =(       a!    [        R                  R                  5       S:¬  nU [        R                  [        R                  [        R                  4;   d   e[        R                  " U5      R                   R#                  S5      (       a   SSKJn  U" 5       nU [        R                  [        R                  4;   a  U(       a  U" X5      $ [        R                  R                  R                  R
                  S:X  a  U" [        R                  U5      $ U" [        R                  U5      $ U [        R                  [        R                  4;   a  U(       a  U" U 5      $ [        R                  R                  R                  R
                  S:X  a  U" [        R                  5      $ U" [        R                  5      $ )zœ
We don't want to throw errors in this function. First check to see if the device is in device_info.py,
then fall back to the inaccurate triton estimation.
Útf32)Úis_tf32r   )Úget_max_simd_tflopsÚget_max_tensorcore_tflops)rv   r   Ú
clock_rate)Úmax_clock_rate)r   rP   ÚbackendsrH   ÚmatmulÚfp32_precisionÚtriton.testingr¹  rº  rQ   Úget_device_capabilityrÉ   rJ  rL  ÚinspectÚ	signatureÚ
parametersrW  Útorch._utils_internalr¼  )r®   Úds_topsr¹  rº  ÚSM80OrLaterr¼  Úsm_clocks          rW   Úget_device_tflopsrÉ  ô
  s€  € ô Ø”u—~‘~×*Ñ*×1Ñ1×@Ñ@ÀFÑJñ€Gð ÑØˆçMä—*‘*×)Ñ)Ó+÷ ´·
±
×0PÑ0PÓ0Rð Wñ 1€Kð
 ”U—]‘]¤E§N¡N´E·M±MÐBÓBÐBÐBä×ÒÐ,Ó-×8Ñ8×<Ñ<¸\×JÑJå8á!Ó#ˆØ”U—]‘]¤E§N¡NÐ3Ó3¾Ù,¨UÓ=Ð=ä�>‰>×Ñ×%Ñ%×4Ñ4¸Ó>Ù,¬U¯]©]¸HÓEÐEá&¤u§}¡}°hÓ?Ð?à”U—]‘]¤E§N¡NÐ3Ó3¾Ù,¨UÓ3Ð3ä�>‰>×Ñ×%Ñ%×4Ñ4¸Ó>Ù,¬U¯]©]Ó;Ð;á&¤u§}¡}Ó5Ð5r{   c                 ó   • SSK Jn   U " 5       $ )Nr   ©Úget_dram_gbps)rÀ  rÌ  rË  s    rW   Úget_gpu_dram_gbpsrÍ    s   € å,á‹?Ðr{   c                 óx   • SSK Jn   U R                  R                  R	                  S5      R                  SS5      $ )Nr   ©rñ  Úmax_shared_mem)Útriton.runtimerñ  rò  ró  rù  rW  rÏ  s    rW   Úget_gpu_shared_memoryrÒ  &  s.   € Ý%à�=‰=×Ñ×4Ñ4°QÓ7×;Ñ;Ð<LÈaÓPÐPr{   c                 ó   • [         R                  R                  5       (       aT  [         R                  R                  5       R                  n [         R                  R                  5       R
                  nX-  $ Sn SnX-  $ )NrF  i   )rP   rH   rQ   rù  Ú	warp_sizeÚmax_threads_per_block)rÔ  rÕ  s     rW   Úget_max_numwarpsrÖ  ,  sg   € Ü‡z�z×Ñ× Ñ Ü—J‘J×4Ñ4Ó6×@Ñ@ˆ	ä %§
¡
× @Ñ @Ó B× XÑ XÐð
 !Ñ-Ð-ð ˆ	Ø $ÐØ Ñ-Ð-r{   c                ó$   • U R                  S5      $ )NÚwelford)rå  ©Úreduction_types    rW   Úis_welford_reductionrÛ  8  s   € Ø×$Ñ$ YÓ/Ð/r{   c                ó4   • [        U 5      (       a  gU S:X  a  gg)Nrÿ  Úonline_softmax_reducer†  r7   )rÛ  rÙ  s    rW   Úreduction_num_outputsrÞ  <  s   € Ü˜N×+Ñ+ØØ	Ð2Ó	2Øàr{   c                 ó2   • [         R                  " 5       S:H  $ )NÚLinux)ÚplatformÚsystemr“   r{   rW   Úis_linuxrã  E  s   € Ü�?Š?Ó Ñ'Ð'r{   c                 ó(   • [         R                  S:H  $ )Nrk   )rã  rá  r“   r{   rW   r  r  I  s   € Ü�<‰<˜7Ñ"Ð"r{   c                ó&   • [        S U  5       5      $ )Nc              3  ó†   #   • U  H7  n[        U[        R                  5      =(       a    UR                  (       + v •  M9     g 7frŒ   )r}   r~   r4  rÂ  rˆ  s     rW   rÂ   Ú#has_free_symbols.<locals>.<genexpr>N  s)   é € ÐJÂcÀŒz˜!œUŸZ™ZÓ(×<°·±¬_Ô<Âcùs   ‚?ArÆ  )Úitrs    rW   r#  r#  M  s   € ÜÑJÁcÓJÓJÐJr{   c            	     ó¶  • SSK Jn  U  HÍ  n[        X!R                  UR                  UR
                  UR                  UR                  45      (       aR  [        UR                  5       =(       d    S5      (       d'  [        UR                  5       =(       d    S5      (       a    gMœ  [        X!R                  5      (       d  M¸  [        S[        U5       35      e   g)Nr7   r
  r“   Tzunexpected type for is_dynamic F)r  r  r}   r5  r7  r$  rw  r>   r#  Úmaybe_get_sizeÚmaybe_get_strider@   Ú	TypeErrorr  )r„   r  r¥  s      rW   r‡  r‡  Q  s³   € ÝãˆÜØ—‘˜bŸm™m¨R¯[©[¸"×:KÑ:KÈRÏYÉYÐW÷
ñ 
ô   × 0Ñ 0Ó 2× 8°b×9Ñ9Ô=MØ×"Ñ"Ó$×*¨÷>ñ >ñ ñ>ô ˜AŸy™y×)Ñ)ÙäÐ=¼dÀ1»g¸YÐGÓHÐHñ ð r{   c                  ó   • \ rS rSrSrSrSrg)ÚPlaceholderie  ÚKERNEL_NAMEÚDESCRIPTIVE_NAMEr“   N)r–   r—   r˜   r™   rï  rð  rž   r“   r{   rW   rî  rî  e  s   † ð  €Kð *Ór{   rî  c                óv  • SSK Jn  [        R                  " SSS9 n[        R
                  " 5       n[        R
                  " 5       n[        U[        U5      S9R                  " U6   [        SUR                   3US9  [        UR                  US9  [        R                  " 5       n[        X5         U " UR                  5        S S S 5        [        R                  " 5       U-
  n	U" UR                  5        UR                  R                  5         UR                  5         [        S	UR                   3US9  [        UR                  US9  UR!                  5       UR!                  5       :H  n
["        R%                  S
UUR&                  U
U	5        S S S 5        g ! , (       d  f       NÚ= f! , (       d  f       g = f)Nr7   )Ústable_topological_sortrl  zutf-8)ÚmodeÚencoding)r¬  Ú	fake_modezBefore:
)ÚfilezAfter:
zZ%s, save before/after graph to %s, graph before/after are the same = %s, time elapsed = %s)Úpattern_matcherrò  r  ÚNamedTemporaryFileÚior   r^   rZ   Ú	propagater¼  rv  r   Únowr]   ÚlintÚ	recompiler^  rÙ   r�  rá   )r–  r¬  ÚinprŽ  rò  r&  Ú	before_ioÚafter_ioÚ
start_timeÚtime_elapsedr¥  s              rW   Úpass_execution_and_saver  o  sE  € õ 9ä	×	$Ò	$ØØò
ð 
Ü—K’K“Mˆ	Ü—;’;“=ˆÜ�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F*Â2FÃCF*Æ
F'	Æ#F*Æ*
F8c                ó†   • SSK Jn  [        XR                  5      =(       a     [        U R                  UR
                  5      $ )z:
Check if input buffer is a multi-outputs template buffer
r7   r
  )r  r  r}   ÚCppTemplateBufferr<  ÚMultiOutputLayout©Ú	input_bufr  s     rW   Úis_multi_outputs_templater	  ’  s7   € õ ä�i×!5Ñ!5Ó6÷ ¼:Ø×Ñ˜"×.Ñ.ó<ð r{   c                ó´   • SSK Jn  [        XR                  5      =(       a7    [	        U R
                  5      S:H  =(       a    [        U R
                  S   5      $ )zD
Check if input buffer is a output of multi-outputs template buffer
r7   r
  r   )r  r  r}   ÚMultiOutputrR   r¥  r	  r  s     rW   Ú#is_output_of_multi_outputs_templater  �  sJ   € õ ô 	�9Ÿn™nÓ-÷ 	;Ü�	× Ñ Ó! QÑ&÷	;ä% i×&6Ñ&6°qÑ&9Ó:ðr{   c                ó�  • U c  gSSK Jn  [        XR                  5      =(       a:    [        XR                  5      (       + =(       a    US L =(       d    U R
                  UL =(       Gd_    [        U 5      UR                  L =(       Ga@    [        [        R                  R                  S5      =(       a;    U R
                  [        R                  R                  R                  R                  :H  =(       dÓ    [        [        R                  R                  S5      =(       a;    U R
                  [        R                  R                  R                  R                  :H  =(       df    [        [        R                  R                  S5      =(       a;    U R
                  [        R                  R                  R                  R                  :H  $ )NFr7   r
  Úall_to_all_singleÚall_gather_into_tensorÚreduce_scatter_tensor)r  r  r}   Ú_CollectiveKernelÚ_WaitKernelÚop_overloadr  ÚFallbackKernelr  rP   r  Útorchrecr  Údefaultr  r  ©rl  r†  r  s      rW   Úis_collectiver  ¬  sM  € ð �|Øåô 	�4×-Ñ-Ó.÷ 	3Ü˜4§¡Ó0Ô0÷	3à�4ˆZ×1˜4×+Ñ+¨rÐ1÷ð ô 	ˆT‹
�b×'Ñ'Ð'÷ 	
ð 	
ô
 œŸ	™	×*Ñ*Ð,?Ó@÷ UØ×$Ñ$¬¯	©	×(:Ñ(:×(LÑ(L×(TÑ(TÑT÷ô
 œŸ	™	×*Ñ*Ð,DÓE÷ EØ×$Ñ$Ü—9‘9×%Ñ%×<Ñ<×DÑDñE÷ô œŸ	™	×*Ñ*Ð,CÓD÷ YØ×$Ñ$¬¯	©	×(:Ñ(:×(PÑ(P×(XÑ(XÑXð/r{   c                ó<   • SSK Jn  [        U 5      UR                  L $ ©Nr7   r
  )r  r  r  r  )rl  r  s     rW   Úis_waitr  Ò  s   € Ýä�‹:˜Ÿ™Ð'Ð'r{   c                óÄ   • SSK Jn  [        X5      (       a  [        S U R                   5       5      $ [        U R                  5      =(       a    US L =(       d    U" U 5      $ )Nr   ©ÚGroupedSchedulerNodec              3  ó8   #   • U  H  n[        U5      v •  M     g 7frŒ   )Úcontains_collectiverˆ  s     rW   rÂ   Ú&contains_collective.<locals>.<genexpr>ß  s   é € Ð@²<¨aÔ& q×)Ð)²<ùrÄ   )rˆ  r  r}   r‚  Úsnodesr  rl  )ÚsnodeÚ	filter_fnr  s      rW   r   r   Ø  sJ   € õ ?ä�%×.Ñ.ÜÑ@°5·<²<Ó@Ó@Ð@ä˜Ÿ™Ó$×P¨)°tÐ*;×*O¹yÈÓ?OÐPr{   c                ó�   • SSK Jn  [        X5      (       a  [        S U R                   5       5      $ [        U R                  5      $ )Nr   r  c              3  ó8   #   • U  H  n[        U5      v •  M     g 7frŒ   )Úcontains_waitrˆ  s     rW   rÂ   Ú contains_wait.<locals>.<genexpr>è  s   é € Ð:ª\¨”= ×#Ð#ª\ùrÄ   )rˆ  r  r}   r‚  r"  r  rl  )r#  r  s     rW   r'  r'  ä  s4   € Ý>ä�%×.Ñ.ÜÑ:¨U¯\ª\Ó:Ó:Ð:ä�u—z‘zÓ"Ð"r{   c                ó¼   • SSK Jn  [        U[        R                  R
                  5      (       a  U/n[        XR                  5      =(       a    U R                  U;   $ r  )r  r  r}   rP   r“  r”  r  r  r  s      rW   Úis_fallback_opr*  í  sF   € õ ä�"”e—j‘j×+Ñ+×,Ñ,ØˆTˆÜ�d×-Ñ-Ó.×I°4×3CÑ3CÀrÑ3IÐIr{   c                ó@   • X!U    R                   R                  5          $ rŒ   )Údefining_oprÕ  )Úbuf_nameÚname_to_bufÚname_to_fused_nodes      rW   Úbuf_name_to_fused_snoder0  ø  s!   € ð ¨(Ñ3×?Ñ?×HÑHÓJÑKÐKr{   c                ó   • gr‰  r“   ©r#  s    rW   rŠ  rŠ    ó   € °ur{   c           	     ó¼   • U" U 5      (       a  g UR                  U 5        U R                   H-  n[        UR                  X#5      nXa;   a  M   [	        UUUUUS9  M/     g )N©Úcriteria_cb)r[  Úunmet_dependenciesr0  rá   Úfind_recursive_deps_of_node)r#  Úcollected_node_setr.  r/  r6  ÚdepÚdefining_op_for_deps          rW   r8  r8  þ  sf   € ñ �5×ÑØØ×Ñ˜5Ô!Ø×'Ô'ˆÜ5Ø�H‰H�kó
Ðð Ó4ÙÜ#ØØØØØ#ô	
ò (r{   c                ó   • gr‰  r“   r2  s    rW   rŠ  rŠ    r3  r{   c           
     ó”  • U" U 5      (       a  g UR                  U 5        U R                  5        H•  nUR                   H‚  nUR                  c   eUR                  R	                  5       S:X  a  M2  UR                  R	                  5       U;  a  MR  X6R                  R	                  5          nXq;   a  Mu  [        UUUUUS9  M„     M—     g )NÚOUTPUTr5  )r[  Úget_outputsr–  rl  rÕ  Úfind_recursive_users_of_node)r#  r9  r.  r/  r6  Úors  Úuser_ops           rW   r@  r@    s·   € ñ �5×ÑØØ×Ñ˜5Ô!Ø×ÑÖ ˆØ—G”GˆDØ—9‘9Ñ(Ð(Ð(Ø�y‰y×!Ñ!Ó# xÓ/ÙØ�y‰y×!Ñ!Ó#Ð+=Ó=ÙØ(¯©×);Ñ);Ó)=Ñ>ˆGØÓ,ÙÜ(ØØ"ØØ"Ø'ôó ò !r{   c                ój   • [         R                  R                  R                  (       a  SOSnX-
  U-
  $ )zaComputes the number of inputs to the aot fw graph which have fixed addresses (params and buffers)r†  r   )rP   Ú
_functorchri   Úfunctionalize_rng_ops)Údynamo_gm_num_inputsÚaot_fw_gm_num_inputsÚnum_rng_seed_offset_inputss      rW   Únum_fw_fixed_argumentsrI  4  s3   € ô ×Ñ×$Ñ$×:×:‰Àð ð  Ñ6Ð9SÑSÐSr{   c                ó  • SS jnSn/ nU R                   R                   H8  nUR                  S:X  d  M  U" U5      (       a  UR                  U5        US-  nM:     U[	        [        [        U5      5      5      :X  d   e[        U5      $ )z6
Infers which inputs are static for a backwards graph
c                ó¤   • SU R                   ;  =(       a;    SU R                   ;  =(       a%    SU R                   ;  =(       a    SU R                   ;  $ )NÚtangentsÚbwd_seedÚbwd_base_offsetÚbwd_rng_stater²  r  s    rW   Úis_saved_tensorÚ'count_tangents.<locals>.is_saved_tensorD  sH   € à˜aŸf™fÑ$÷ .Ø !§&¡&Ñ(÷.à!¨¯©Ñ/÷.ð   q§v¡vÑ-ð		
r{   r   r   r7   )rT   r5   r•   r:  )rv  rU  r†  rŸ  rb  rÌ   rR   )Úfx_grP  Ú	arg_countÚstatic_arg_idxsr(  s        rW   Úcount_tangentsrU  ?  s   € ô

ð €IØ€OØ�Z‰Z×ÔˆØ�4‰4�=Õ Ù˜q×!Ñ!Ø×&Ñ& yÔ1Ø˜‰NŠIñ	 ð œd¤5¬¨_Ó)=Ó#>Ó?Ó?Ð?Ð?ÜˆÓÐr{   c                  ó>   • \ rS rSr% S\S'   SS jr\S	S j5       rSrg)
Ú	BoxedBooliX  r:  r�   c                ó   • U R                   $ rŒ   )r�   rf  s    rW   rq  ÚBoxedBool.__bool__\  s   € Ø�z‰zÐr{   c                ó@   • [        U [        5      (       a	  SU l        U $ gr‰  )r}   rW  r�   r   s    rW   ÚdisableÚBoxedBool.disable_  s   € ä�cœ9×%Ñ%ØˆCŒIØˆJØr{   r“   Nr´  )rÆ  r   r•   zUnion[BoxedBool, bool])	r–   r—   r˜   r™   r©   rq  rì  r[  rž   r“   r{   rW   rW  rW  X  s    ‡ àƒKôð óó ór{   rW  c              #  óè   ^ ^#   • SSK Jn  UR                  m   S             SU U4S jjjn[        R                  R                  USU5         S v •  S S S 5        g ! , (       d  f       g = f7f)Nr7   r9   c                ó:   >• TR                  U5        T" XX#XE5      $ rŒ   rV  )ræ  Úkernel_namere  re  ÚgpuÚcpp_definitionÚkernel_listÚorig_define_kernels         €€rW   Údefine_kernelÚ.collect_defined_kernels.<locals>.define_kernelm  s'   ø€ ð 	×Ñ˜;Ô'Ù!Ø˜{°có
ð 	
r{   rd  )NTN)ræ  r:   r_  r  re  r  re  úOptional[str]r`  r:  ra  rf  r•   r   )Úcodegen.wrapperr:   rd  r   rE  r¾  )rb  r:   rd  rc  s   `  @rW   Úcollect_defined_kernelsrh  g  s”   ùé € å5à-×;Ñ;Ðð #'ØØ(,ð
Ø"ð
àð
ð ð
ð  ð	
ð
 ð
ð &ð
ð 
÷
ñ 
ô 
�‰×	Ñ	Ð/°À-Õ	PÛ÷ 
Q×	PÖ	Püs   „AA2ÁA!Á	A2Á!
A/Á+A2c                ó   • U S-   $ )NÚ__original__r“   r²  s    rW   Ú get_cloned_parameter_buffer_namerk  ~  s   € Ø�.Ñ Ð r{   c                ó   • U [         ;   $ rŒ   )rN   rÓ  s    rW   r  r  ‚  s   € Ø”YÑÐr{   c                 ó:   • [         R                  R                  SL$ )z,Check if we're running on ROCm/HIP platform.N)rP   rò  rq   r“   r{   rW   Úis_rocmrn  †  s   € ä�=‰=×Ñ DÐ(Ð(r{   c                ó0   • U S:g  =(       a    [        U 5      $ )NrI   )r  rÓ  s    rW   Údevice_need_guardrp  ‹  s   € Ø�U‰?×-œv f›~Ð-r{   c                óh  • U [         R                  :X  aD  [         R                  R                  5       (       a!  [         R                  R	                  5       S:  $ U [         R                  :X  a$  [         R
                  R                  5       (       a  gU [         R                  [         R                  4;   $ )N)rë  r   T)rP   rJ  rH   rQ   rÁ  rJ   rV  r:  rB  s    rW   Ú,needs_fallback_due_to_atomic_add_limitationsrr  �  sq   € Ø”—‘Ó¤5§:¡:×#:Ñ#:×#<Ñ#<Ü�z‰z×/Ñ/Ó1°FÑ:Ð:Ø	”%—.‘.Ó	 ¤U§Y¡Y×%;Ñ%;×%=Ñ%=ØàœŸ™¤e§j¡jÐ1Ñ1Ð1r{   c                óŒ  • U R                   [        R                  R                  R                  [        R                  R                  R
                  4;   a  Uc  gU R                   [        R                  R                  R                  :X  a  SOSnUS U4;  =(       Gd&    U=(       a    [        U5      =(       a    [        U5      =(       dù    U R                   [        R                  R                  R                  :H  =(       ap    US:H  =(       ad    U=(       a[    US:H  =(       aO    [        R                  R                  =(       a.    [        R                  R                  =(       d    [        5       S:g  =(       dJ    X:H  =(       a#    U[        R                  [        R                  4;   =(       d    [        R                   " 5       $ )NFr[  r  r  r7   )ÚoverloadpacketrP   r  ÚatenÚscatter_reduce_Úscatter_reduceÚscatter_r  rr  ri   r   Úfallback_scatter_reduce_sumÚdynamic_threadsr&  r:  rV  Ú$are_deterministic_algorithms_enabled)r  rÚ  Ú
self_dtypeÚ	src_dtypeÚsrc_device_typeÚsrc_is_tensorÚ	reduce_tys          rW   Úuse_scatter_fallbackr�  ˜  s]  € ð 	×"Ñ"Ü�I‰I�N‰N×*Ñ*¬E¯I©I¯N©N×,IÑ,IÐJó	KàÑ"àð ×+Ñ+¬u¯y©y¯~©~×/FÑ/FÓF‰ÈEð ð
 	˜t YÐ/Ñ/÷ 	8ð 	8à÷ HÜ�Ó'÷Hä<¸YÓG÷		8ð ×&Ñ&¬%¯)©)¯.©.×*HÑ*HÑH÷ LØ %Ñ'÷Là÷Lð   5Ñ(÷Lô —
‘
×6Ñ6÷	Lô
 —‘×+Ñ+×JÔ/CÓ/EÈÑ/J÷	8ð Ñ'×S¨J¼5¿:¹:ÄuÇ{Á{Ð:SÑ,S÷	8ô ×5Ò5Ó7ð!r{   c                óÌ  • SSK JnJn  SSKJn  [        S[        U 5       S35        [        U 5       GH.  u  pE[        SUS S35        XRL a  [        S	5        M'  XQL a  [        S
5        M8  [        XS5      (       aÒ  UR                  5       n[        U(       a  SOS S35        U(       a;  UR                  c   e[        SUR                  R                  R                   35        [        S5        UR                  R                   H  n[        U5        M     [        S5        UR                  R                   H  n[        U5        M     GM  [!        S[#        U5       35      e   g)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 nodesr2  Ú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…  r¼  rR   r  r}   Úis_reductionrl  r6  Úreduction_hintrL  rM  rN  r   r  )r  rƒ  r„  r…  rb  rl  Úis_redr:  s           rW   Údump_node_scheduler�  ¿  s&  € ÷
 OÝ7ä	Ð¤ MÓ 2Ð3°6Ð
:Ô;Ü˜}×-‰	ˆÜ��#�a�˜ˆlÔàÒ"ÜÐ$Ö%àÒ%ÜÐ%Ö&Ü˜×,Ñ,Ø×&Ñ&Ó(ˆFÜžf‘U¨$Ð/¨Ð?Ô@ÞØ—y‘yÑ,Ð,Ð,ÜÐ0°·±·±×1NÑ1NÐ0OÐPÔQÜ�*ÔØ×'Ñ'×-Ô-�Ü�c–
ñ .ä�+ÔØ×'Ñ'×.Ô.�Ü�c–
ô /ô Ð!9¼$¸t»*¸ÐFÓGÐGò+ .r{   c                óz   • SSK Jn  U" U R                  5       [        U R                  5      -  [
        -  S:H  5      $ )Nr   )r³  )rË  r³  Ústorage_offsetrD  r®   ÚGPU_ALIGN_BYTES)rÕ   r³  s     rW   Útensor_is_alignedr‘  à  s:   € õ Lá Ø	×	Ñ	Ó	 ¤>°&·,±,Ó#?Ñ	?Ä?ÑRÐVWÑWóð r{   c                ó�   • [        U R                  R                  5      (       d  g[        R                  =(       d    [        U 5      $ r‰  )r  r¯   r  ri   Úassume_aligned_inputsr‘  )Úexample_inputs    rW   Úshould_assume_input_alignedr•  î  s5   € ô �-×&Ñ&×+Ñ+×,Ñ,ØÜ×'Ñ'×KÔ+<¸]Ó+KÐKr{   c                 óX  • [         R                  R                  R                  5       n U (       d  [        R
                  " 5       $ U R                  (       a  U R                  R                  (       d  [        R
                  " 5       $ U R                  R                  nUR                  5       $ rŒ   )	rP   Ú_guardsÚTracingContextÚtry_getr‹  Únullcontextrõ  rx  Úsuppress_guards)Útracing_contextrx  s     rW   Ú#maybe_get_suppress_shape_guards_ctxr�  ÷  sv   € ô
 —m‘m×2Ñ2×:Ñ:Ó<€OÞÜ×%Ò%Ó'Ð'ð ×$×$¨O×,EÑ,E×,O×,OÜ×%Ò%Ó'Ð'Ø×)Ñ)×3Ñ3€IØ×$Ñ$Ó&Ð&r{   c                ó"  • [         R                  R                  R                  [        SS5         [
        R                  R                  5         SS KnSS K	nUR                  " 5       nUR                  " U5      nSSKJn  UR                  U5        UR                  nUR!                  UR"                  5        U " U0 UD6n	UR%                  5       n
UR!                  U5        UR'                  U5        S S S 5        Xš4$ ! , (       d  f       W	W
4$ = f)NrÚ   Tr   )Úoutput_code_log)r‰  r   rE  r¾  ri   rP   r5  rF  rù  Úloggingr   ÚStreamHandlerÚtorch._inductor.codecacherŸ  Ú
addHandlerÚlevelÚsetLevelÚDEBUGr^  ÚremoveHandler)rã   r„   r«  rù  r   Úlog_capture_stringÚchrŸ  Ú
prev_levelr·  rï   s              rW   Úrun_and_get_cpp_coder«    sÞ   € ô 
�‰×	Ñ	×	#Ñ	#¤F¨G°TÕ	:Ü�‰×ÑÔÛÛàŸ[š[›]ÐØ×"Ò"Ð#5Ó6ˆÝ=à×"Ñ" 2Ô&Ø$×*Ñ*ˆ
Ø× Ñ  §¡Ô/Ù�TÐ$˜VÑ$ˆØ×'Ñ'Ó)ˆØ× Ñ  Ô,Ø×%Ñ% bÔ)÷ 
;ð  ˆ9Ð÷! 
;Ô	:ð  �1ˆ9Ðús   °CC=Ã=
Dc                ó:  • [        U 5      nUb  UR                  $ U  Hû  n[        U[        R                  5      (       a  UR
                  R                  s  $ [        U[        R                  5      (       d  M[  UR                  5        H<  n[        U[        R                  5      (       d  M$  UR
                  R                  s  s  $    UR                  5        H<  n[        U[        R                  5      (       d  M$  UR
                  R                  s  s  $    Mý     g rŒ   )	rZ   rx  r}   rP   r2   rl  r¥  rÐ  rF  )r¥  rõ  ÚinputrÐ  rF  s        rW   Úshape_env_from_inputsr®     sÉ   € Ü  Ó(€Ið ÑØ×"Ñ"Ð"ó ˆÜ�eœUŸ\™\×*Ñ*Ø—:‘:×'Ñ'Ò'ô �eœUŸ\™\×*Ó*ØŸ
™
ž�Ü˜d¤E§L¡L×1Ó1ØŸ9™9×.Ñ.Ô.ñ %ð  Ÿ,™,ž.�Ü˜f¤e§l¡l×3Ó3Ø!Ÿ;™;×0Ñ0Ô0ó )ñ ð r{   c                óB   ^ ^^• [        T5      S:X  a  T $ SUU U4S jjnU$ )Nr   c                ó‚   >• [        U TT5      u  pT" U 5      n[        U5      (       a  [        R                  " X5        U$ rŒ   )Úcopy_misaligned_inputsrR   rP   Ú_foreach_copy_)Ú
new_inputsÚold_tensorsÚnew_tensorsr„  Úinputs_to_checkr´  Úmutated_input_idxss       €€€rW   rî  Ú)align_inputs_from_check_idxs.<locals>.runE  sD   ø€ Ü#9Ø˜Ð);ó$
Ñ ˆñ �JÓˆô ˆ{×ÑÜ× Ò  Ô:àˆ
r{   )r³  úlist[InputType]r•   r   )rR   )r´  r¶  r·  rî  s   ``` rW   Úalign_inputs_from_check_idxsrº  =  s(   ú€ ô
 ˆ?Ó˜qÓ Øˆ÷ñ ð €Jr{   c                óX  • SU R                  5       ;   a  SnO;[        S [        U R                  5       U R                  5       5       5       5      S-   n[        R
                  " X4S5      R                  5       n[        R
                  " X R                  5       U R                  5       5      $ )Nr   c              3  ó6   #   • U  H  u  pUS -
  U-  v •  M     g7fr–  r“   )rÀ   rA  rF  s      rW   rÂ   Ú)clone_preserve_strides.<locals>.<genexpr>[  s   é € ÐTÒ:S©¨�˜‘˜fÖ$Ò:Sùs   ‚r7   rŠ   )rÐ  r  rÖ   rF  rP   Ú
as_stridedÚclone)rT   Úneeded_sizer:  s      rW   Úclone_preserve_stridesrÁ  U  s€   € ØˆA�F‰F‹Hƒ}à‰ô ÑT¼#¸a¿f¹f»hÈÏÉË
Ô:SÓTÓTÐWXÑXð 	ô ×Ò˜a °Ó6×<Ñ<Ó>€FÜ×Ò˜F§F¡F£H¨a¯h©h«jÓ9Ð9r{   c                óT  • / n/ nUSLnU H˜  nX   n[        U[        R                  5      (       d   S[        U5       35       eUR	                  5       [
        -  (       d  MW  [        U5      X'   U(       d  Mm  Xb;   d  Mt  UR                  U5        UR                  X   5        Mš     X44$ )z£
Clones misaligned tensors which we inferred were aligned. Returns a tuple of [old_tensors], [new_tensors] for every
cloned tensor which is in `return_pair_idxs`.
Nz Expected tensors only, but got: )r}   rP   r¥  r  Údata_ptrÚ	ALIGNMENTrÁ  rŸ  )r³  Úcheck_inputs_idxsÚreturn_pair_idxsr´  rµ  Úret_pair_definedrî   Ú_inps           rW   r±  r±  a  s«   € ð ')€KØ&(€Kð (¨tÐ3ÐÛˆØ‰}ˆÜ˜$¤§¡×-Ñ-ð 	
Ø.¬t°D«z¨lÐ;ó	
Ð-ð �=‰=‹?œY×&Ñ&Ü2°4Ó8ˆJ‰MçÐ AÕ$9Ø×"Ñ" 4Ô(Ø×"Ñ" :¡=Ö1ñ ð Ð#Ð#r{   c                óö   • / nU HV  nX   n[        U[        R                  5      (       d  M(  UR                  5       [        -  S:X  d  ME  UR                  U5        MX     [        U5      [        U5      :w  a  U$ U$ )zO
We require all inputs to be aligned, so introduce a copy for any
that aren't.
r   )r}   rP   r¥  rÃ  rÄ  rŸ  rR   )r¥  Ústatic_input_idxsÚaligned_static_input_idxsrb  r­  s        rW   Úremove_unaligned_input_idxsrÌ    sp   € ð !#ÐÛ ˆØ‘ˆÜ�eœUŸ\™\×*Ó*°·±Ó0@Ä9Ñ0LÐQRÕ/RØ%×,Ñ,¨SÖ1ñ !ô Ð$Ó%¬Ð->Ó)?Ó?Ø(Ð(ØÐr{   c                ó€  • SSK Jn  [        R                  " [        R                  5      R
                  nUR                  R                  R                  nUR                  R                  R                  R                  n[        R                  (       a&  UR                  R                  R                  X5        gUR                  R                  R                  X:*  5      (       a  gUR                  (       a.  UR                  R                  R                  U S:  5      (       a  gU" U 5      =(       a    U" U 5      U:*  $ )Nr7   rr  Tg@Œµx¯DF)ru  rs  rP   ÚiinforT  rÏ   rv  rw  rX  rx  Úhas_hintri   Úassume_32bit_indexingÚ	check_leqr³  r¦  )rð   rs  Úint_maxrX  rÏ  s        rW   Úexpr_fits_within_32bitrÓ  ‘  sÞ   € Ýä�kŠkœ%Ÿ+™+Ó&×*Ñ*€GØ—‘× Ñ ×*Ñ*€IØ�w‰w×Ñ×)Ñ)×2Ñ2€Hä×#×#Ø	�‰×Ñ×"Ñ" 1Ô.Øð 	‡w�w×Ñ×-Ñ-¨a©l×;Ñ;Øð 	××ð �7‰7×Ñ×1Ñ1°!°d±(×;Ñ;ð ñ �A‹;×2™9 Q›<¨7Ñ2Ð2r{   c                ó6  ^^^• [         R                  R                  R                  5       nUbë  UR                  bÝ  [        UR                  5      S:X  d   e[        U 5      mUR                  c   eUR                   H—  nUc  UR                  R                  S 5        M#  Sm[         R                  R                  R                  5       =n(       a  UR                  mSUU4S jjmUR                  R                  [        U4S jU 5       5      5        M™     g g g )Nr   Fc                ór   >• Tc  [        U 5      $ T(       a  TR                  U 5      $ TR                  U 5      $ rŒ   )r�   Údeserialize_symexprÚevaluate_symexpr)rð   Úfakify_first_callrx  s    €€rW   Úmap_exprÚ4set_tracing_context_output_strides.<locals>.map_exprÉ  s7   ø€ Ø Ñ(Ü" 1›v˜Þ(Ø(×<Ñ<¸QÓ?Ð?Ø$×5Ñ5°aÓ8Ð8r{   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7frŒ   r“   )rÀ   rð   rÙ  s     €rW   rÂ   Ú5set_tracing_context_output_strides.<locals>.<genexpr>Ñ  s   øé € Ð5ªu¨!™( 1Ÿ+˜+ªuùr\  )rð   r   r•   z,Union[float, int, SymInt, SymFloat, SymBool])
rP   r—  r˜  r™  Úoutput_stridesrR   r®  rŸ  rØ  rÚ  )rµ  Úcompiled_graphrG  r?  rû  rØ  rÙ  rx  s        @@@rW   Ú"set_tracing_context_output_stridesrß  ¸  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ð 9ð ×&Ñ&×-Ñ-ÜÔ5©uÓ5Ó5öò 3ð	  BÐr{   c                 ó4  • [         R                  b  [         R                  $ [         R                  " 5       (       d  g[        R                  R                  5       (       a  g SSKJn   U [        R                  R                  S5      :¬  $ ! [         a     gf = f)NFr   ©ÚREMOTE_CACHE_VERSIONz.pytorch/remote_cache:fx_graph_memcache_version)
ri   Úfx_graph_remote_cacheÚ	is_fbcoderP   Ú_utils_internalÚis_fb_unit_testÚtorch._inductor.fb.remote_cacherâ  ÚModuleNotFoundErrorÚjustknobs_getval_intrá  s    rW   Ú should_use_remote_fx_graph_cacherê  Õ  s…   € Ü×#Ñ#Ñ/Ü×+Ñ+Ð+Ü×Ò×ÑØä×Ñ×,Ñ,×.Ñ.ØðÝHð  ¤5×#8Ñ#8×#MÑ#MØ8ó$ñ ð øô ó Ùðús   Á"B
 Â

BÂBc                ó2   • [         R                  " SSU 5      $ )Nz[^a-zA-Z0-9_]ré   )rß   Úsubr²  s    rW   Únormalize_namerí  è  s   € Ü�6Š6Ð" C¨Ó.Ð.r{   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tl.float4_e2m1fn_x2z^.*[.]c                ój   • [         R                  S[        U 5      5      n[        R	                  X5      $ )z"Convert torch.dtype to triton typeútl.)Ú_triton_type_rerì  r  Ú_triton_type_mappingrW  )r®   Útriton_type_names     rW   Útriton_typeró  þ  s+   € ä&×*Ñ*¨5´#°e³*Ó=ÐÜ×#Ñ#Ð$4ÓGÐGr{   c                ó¶   • [         R                  X 5      nUR                  SS5      n[        [        U5      n[        U[        R                  5      (       d   eU$ )Nrï  r  )Ú_torch_triton_mappingrW  ræ  rO   rP   r}   r®   )r®   Úadjusted_typeÚ	type_namer  s       rW   Útriton_type_to_torchrø    sM   € Ü)×-Ñ-¨eÓ;€MØ×%Ñ% e¨RÓ0€IÜœ˜yÓ)€IÜ�i¤§¡×-Ñ-Ð-Ð-ØÐr{   c                ó  • U R                   (       + =(       aõ    U R                  5       UR                  5       :H  =(       aÍ    U R                  5       UR                  5       :H  =(       a¥    U R                  UR                  :H  =(       a…    U R                  UR                  :H  =(       ae    U R                  5       R                  5       UR                  5       R                  5       :H  =(       a!    U R                  5       UR                  5       :H  $ rŒ   )Ú	is_mkldnnrÐ  rF  r®   r¯   Úuntyped_storagerÃ  r�  ©r6  r�   s     rW   Úis_same_tensorrý    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Ó%;Ñ;ðr{   c                óž  • U R                   =(       a»    U R                  5       UR                  5       :H  =(       a“    U R                  UR                  :H  =(       as    U R                  UR                  :H  =(       aS    [        R
                  R                  R                  U 5      [        R
                  R                  R                  U5      :H  $ rŒ   )rú  rÐ  r®   r¯   rP   r  ÚmkldnnrÃ  rü  s     rW   Úis_same_mkldnn_tensorr     s�   € à�‰÷ 	PØ�I‰I‹K˜5Ÿ:™:›<Ñ'÷	Pà�J‰J˜%Ÿ+™+Ñ%÷	Pð �K‰K˜5Ÿ<™<Ñ'÷	Pô �I‰I×Ñ×%Ñ% dÓ+¬u¯y©y×/?Ñ/?×/HÑ/HÈÓ/OÑOðr{   c                 ó   • g)N)rœ  ÚisnanÚlogical_notÚlogical_andÚsignbitÚand_ÚleÚltÚgeÚgtÚeqÚner  Úxorr“   r“   r{   rW   Úboolean_opsr  "  s   € ðr{   c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚOpDtypeRulei6  r3   Útype_promotion_kindúOptional[torch.dtype]Úoverride_return_dtyper“   NrH  r“   r{   rW   r  r  6  s   ‡ à8Ó8Ø0Ö0r{   r  zdict[str, OpDtypeRule]Úop_dtype_propagation_rulesc                ó(   • [        X5      [        U '   g rŒ   )r  r  )rá   r  r  s      rW   Ú#register_op_dtype_propagation_rulesr  ?  s   € ô
 (3Øó(Ô˜tÒ$r{   zOrderedSet[str]Úop_requires_libdevice_fp64c                ó.   • [         R                  U 5        g rŒ   )r  r[  r²  s    rW   Ú#register_op_requires_libdevice_fp64r  L  s   € Ü×"Ñ" 4Õ(r{   c                óê   • SSK Jn  U (       d$  UR                  R                  5       R                  n U S:X  a  [
        R                  $ U S:X  a  gU S:X  a  [
        R                  $ [
        R                  $ )Nr   rr  r  rI   rJ   )	r±  rs  rv  Úget_current_device_or_throwr  ri   Úcpu_backendÚxpu_backendÚcuda_backend)rÞ   rs  s     rW   Úget_current_backendr  P  s_   € Ý-æØ—g‘g×9Ñ9Ó;×@Ñ@ˆØ�eÓÜ×!Ñ!Ð!Ø	˜Ó	ØØ	˜Ó	Ü×!Ñ!Ð!ä×"Ñ"Ð"r{   c                óÈ   • U [         R                  [         R                  4;   a=  [        R                  R
                  (       a  [        5       S:X  a  [         R                  $ U $ )z"Maybe upcast [b]float16 to float32r  )rP   rÉ   rJ  ri   r  Úcodegen_upcast_to_fp32r  rL  rB  s    rW   Úupcast_compute_typer"  _  s@   € ð 	”%—-‘-¤§¡Ð0Ó0Ü�M‰M×0×0ÜÓ! XÓ-ä�}‰}ÐØ€Lr{   ÚKeyTypeÚValTypec                  óv   • \ rS rSrSrSS jrSS jrSS jrSS jrSSS jjr	SS	 jr
SS
 jrSS jrSS jrSrg)Ú
ScopedDictin  zÔ
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                ó   • Xl         0 U l        g rŒ   ©Úoriginal_dictÚ	new_items)ræ  r)  s     rW   rS  ÚScopedDict.__init__v  s   € Ø*ÔØ13ˆ�r{   c                ó\   • XR                   ;   a  U R                   U   $ U R                  U   $ rŒ   ©r*  r)  rô  s     rW   r+  ÚScopedDict.__getitem__z  s,   € Ø—.‘.Ó Ø—>‘> #Ñ&Ð&Ø×!Ñ! #Ñ&Ð&r{   c                ó    • X R                   U'   g rŒ   )r*  )ræ  rc  r�   s      rW   Ú__setitem__ÚScopedDict.__setitem__  s   € Ø#�‰�sÒr{   c                óH   • XR                   ;   =(       d    XR                  ;   $ rŒ   r-  rô  s     rW   Ú__contains__ÚScopedDict.__contains__‚  s   € Ø—n‘nÑ$×A¨×/AÑ/AÑ(AÐAr{   Nc                ót   • XR                   ;   a  U R                   U   $ U R                  R                  X5      $ rŒ   )r*  r)  rW  )ræ  rc  r  s      rW   rW  ÚScopedDict.get…  s2   € Ø—.‘.Ó Ø—>‘> #Ñ&Ð&Ø×!Ñ!×%Ñ% cÓ3Ð3r{   c                ó‚   • [        U R                  5      nU R                   H  nX R                  ;  d  M  US-  nM     U$ r­  )rR   r)  r*  )ræ  r(  r¾  s      rW   rÝ  ÚScopedDict.__len__Š  s<   € Ü�×"Ñ"Ó#ˆØ—”ˆAØ×*Ñ*Õ*Ø�Q‘’ñ  ð ˆr{   c              #  óˆ   #   • U R                    S h  v•N   U R                   H  nXR                   ;  d  M  Uv •  M     g  N-7frŒ   r(  )ræ  r¾  s     rW   Ú__iter__ÚScopedDict.__iter__‘  s8   é € Ø×%Ñ%×%Ð%Ø—”ˆAØ×*Ñ*Õ*Ø”ò  ñ 	&ùs   ‚A’A “ A·
Ac                óR   • [        U R                  =(       d    U R                  5      $ rŒ   )r:  r)  r*  rf  s    rW   rq  ÚScopedDict.__bool__—  s   € Ü�D×&Ñ&×8¨$¯.©.Ó9Ð9r{   c                ó   • [         erŒ   rÍ  rô  s     rW   Ú__delitem__ÚScopedDict.__delitem__š  s   € Ü!Ð!r{   r-  )r)  úMapping[KeyType, ValType])rc  r#  r•   r$  )rc  r#  r�   r$  r•   ré  )rc  r¾  r•   r:  rŒ   )rc  r#  r  úOptional[ValType]r•   rB  rß  )r•   zIterator[KeyType]r´  )rc  r#  r•   ré  )r–   r—   r˜   r™   rš   rS  r+  r0  r3  rW  rÝ  r:  rq  r?  rž   r“   r{   rW   r&  r&  n  s5   † ñô4ô'ô
$ôBö4ô
ôô:÷"r{   r&  )Úfrozen_defaultc              ó.   ^• SU4S jjnU c  U$ U" U 5      $ )Nc                ó0   >• [         R                  " U STS9$ )NT)Úkw_onlyrŸ   )ÚdataclassesÚ	dataclass)r�   rŸ   s    €rW   ÚwrapÚir_dataclass.<locals>.wrap   s   ø€ Ü×$Ò$ S°$¸vÑFÐFr{   )r�   rl   r•   rl   r“   )r�   rŸ   rI  s    ` rW   Úir_dataclassrK  ž  s   ø€ ÷Gð �{ØˆÙ�‹9Ðr{   c                 ó¨   • [         R                  R                  R                  5       n U b'  U R                  (       a  U R                  R
                  $ g rŒ   )rP   r—  r˜  r™  Úfw_metadataÚbw_donated_idxs)rœ  s    rW   Úget_donated_idxsrO  ¨  s=   € Ü—m‘m×2Ñ2×:Ñ:Ó<€OØÑ" ×'B×'BØ×*Ñ*×:Ñ:Ð:Ør{   c                  ó(   • \ rS rSrSrSrSrSrSrSr	g)	ÚTritonAttrsDescriptorVersioni¯  r   r7   r†  rÿ  rN  r“   N)
r–   r—   r˜   r™   ÚV0_NO_TRITONÚV1_COMPILERÚV2_BACKENDSÚV3_BACKENDS_TUPLEÚV4_DICTrž   r“   r{   rW   rQ  rQ  ¯  s    † Ø€LØ€KØ€Kà	ð ð ƒGr{   rQ  c                 óf  • [         R                  R                  S5      c  [        R                  $ SS Kn SS Kn [        U R                  R                  S5      (       a  [        R                  $ [        U R                  R                  S5      (       a  [        R                  $ [        R                  $ )Nr  r   ÚAttrsDescriptor)ry  rz  r{  rQ  rR  Útriton.backends.compilerÚtriton.compiler.compilerr  r½  ÚcompilerrT  rS  rV  )r  s    rW   Ú#get_triton_attrs_descriptor_versionr\  ¹  s�   € ä‡~�~×Ñ Ó)Ñ1Ü+×8Ñ8Ð8ã#Û#äˆv�‰×'Ñ'Ð):×;Ñ;ô ,×7Ñ7Ð7Ü	�—‘×)Ñ)Ð+<×	=Ñ	=ä+×7Ñ7Ð7ô ,×3Ñ3Ð3r{   c                 ó8   • [        5       [        R                  :H  $ rŒ   )r\  rQ  rV  r“   r{   rW   Útriton_version_uses_attrs_dictr^  Ó  s   € Ü.Ó0Ô4P×4XÑ4XÑXÐXr{   c                ó    • U R                  5       n[        U [        R                  R                  5      (       a  U SU R
                   3OUnX4$ )Nrp   )rá   r}   rP   r“  r”  Ú_overloadname)r†  Úop_overload_packet_nameÚop_overload_names      rW   Úget_op_namesrc  ×  sR   € Ø#%§7¡7£9Ðô �bœ%Ÿ*™*×/Ñ/×0Ñ0ð #Ð
# 1 R×%5Ñ%5Ð$6Ñ7à$ð ð
 #Ð4Ð4r{   c                ó|  • SSK Jn  U R                  n[        U[        R
                  R                  5      (       d  gU[        R                  R                  R                  R                  [        R                  R                  R                  R                  [        R                  R                  R                  R                  4;   as  U" X R                  U R                  SS9nUbT  Uu  pEUS   nU HE  nUc  M  UR                  S   R                   [        R"                  [        R$                  4;   d  ME    g   g)zî
Check if an FX node is cudagraph-unsafe based on its input arguments.

Some ops are only cudagraph-unsafe depending on their inputs (e.g., index_put
with boolean indices triggers .nonzero() during capture, but integer indices
are safe).
r   )Únormalize_functionFT)Únormalize_to_only_use_kwargsÚindicesro  )Útorch.fx.operator_schemasre  r’  r}   rP   r“  r”  r  ru  Ú	index_putr  Ú
index_put_Ú_unsafe_index_putr„   r«  r  r®   r:  r[  )r   re  r’  Ú
normalizedré   r«  rg  rb  s           rW   Ú,_fx_node_is_input_dependent_cudagraph_unsaferm  á  sô   € õ =à�^‰^€FÜ�fœeŸj™j×3Ñ3×4Ñ4Øð Ü�	‰	�‰× Ñ ×(Ñ(Ü�	‰	�‰×!Ñ!×)Ñ)Ü�	‰	�‰×(Ñ(×0Ñ0ðó ñ
 (Ø—L‘L '§.¡.Ètñ
ˆ
ð Ñ!Ø"‰IˆAØ˜YÑ'ˆGÛ�Ø“? s§x¡x°¡×'<Ñ'<Ü—J‘JÜ—K‘KðAõ (ñ  ñ ð r{   c                ó  • U R                   n[        U5      [        ;   a  g[        U[        R
                  R                  5      (       a3  [        R                  R                  R                  UR                  ;   a  g[        U 5      (       a  gU R                  R                  S5      =nb]  [        U[        [        45      (       d  U/OUnU H7  n[        U[        R                   5      (       d  M$  UR"                  (       d  M7    g   g)a  
Check if an FX node is cudagraph-unsafe.

This includes:
- Ops in FORBIDDEN_CUDAGRAPH_OPS (CPU sync, dynamic alloc, etc.)
- Ops with the cudagraph_unsafe tag
- Input-dependent unsafe ops (e.g., index_put with boolean indices)
- Ops with sparse tensor outputs
Tro  F)r’  r  ÚFORBIDDEN_CUDAGRAPH_OPSr}   rP   r“  r”  r  r—  Úcudagraph_unsafer™  rm  r  rW  rb  rÚ  r¥  Ú	is_sparse)r   r’  ro  Úvalsr‡   s        rW   rÌ  rÌ    sÅ   € ð �^‰^€Fô ˆ6ƒ{Ô-Ó-Øô 	�6œ5Ÿ:™:×0Ñ0×1Ñ1Ü�H‰H�L‰L×)Ñ)¨V¯[©[Ó8àô 4°G×<Ñ<Øð �|‰|×Ñ Ó&Ð&ˆÑ3Ü& s¬T´5¨M×:Ñ:�‰uÀˆÛˆAÜ˜!œUŸ\™\×*Ó*¨q¯{¯{©{Ùñ ð r{   c                óî   • SSK Jn  [        XR                  UR                  45      (       a  g[        XR
                  UR                  45      (       d  g[        U SS5      nUb  [        U5      (       a  gg)aH  
Returns True if the node is an op that is not cudagraphable.
This includes:
- Ops in FORBIDDEN_CUDAGRAPH_OPS (CPU sync, dynamic alloc, etc.)
- Ops with the cudagraph_unsafe tag
- index_put_ with boolean indices (triggers .nonzero() during capture)
- Control flow nodes (Conditional, WhileLoop)
- Ops with sparse tensor outputs
r7   r
  TFr   N)	r  r  r}   ÚConditionalÚ	WhileLoopr  r?   rO   rÌ  )rl  r  r   s      rW   Úis_cudagraph_unsafe_oprv  *  sf   € õ ô �$Ÿ™¨¯©Ð6×7Ñ7Øä�d×.Ñ.°·±Ð@×AÑAØä�d˜I tÓ,€GØÑÔ:¸7×CÑCØàr{   c                 ó6  • [         R                  R                  SS5      n [        R                  " 5       (       a^  SSKJn  U" 5       nU(       aJ  [         R                  R                  USS5      nU (       a   [         R                  R                  X0/5      OUn U $ )NÚLD_LIBRARY_PATHr  r   )Úget_runtime_pathrè  Úlib)
r  r  rW  ri   rä  Úlibfb.py.parutilry  r  r  Úpathsep)r  ry  Úruntime_pathÚlib_paths       rW   Úget_ld_library_pathr  D  sh   € Ü�:‰:�>‰>Ð+¨RÓ0€DÜ×Ò×ÑÝ5á'Ó)ˆÞÜ—w‘w—|‘| L°)¸UÓCˆHÞ8<”2—:‘:—?‘? HÐ#3Ô4À(ˆDà€Kr{   c                óN   • SSK Jn  [        X5      =(       a    U R                  S L$ )Nr   )ÚSubgraphPythonWrapperCodegen)Útorch._inductor.codegen.wrapperr�  r}   Úpartition_signatures)rü  r�  s     rW   Ú#is_codegen_graph_partition_subgraphr„  Q  s'   € ÝLô 	�7Ó9÷ 	5Ø×(Ñ(°Ð4ðr{   c                 óæ   • [         R                  R                  R                  R                  =(       d    [
        R                  S L=(       a$    [         R                  R                  R                  $ rŒ   )rP   rç  ri   r  Ú
cudagraphsÚ&_unstable_customized_partition_wrapperrü  Úgraph_partitionr“   r{   rW   Úis_using_cudagraph_partitionr‰  Z  sN   € ä�‰×Ñ×%Ñ%×0Ñ0÷ 	FÜ1×9Ñ9ÀÐE÷1ô �/‰/×
 Ñ
 ×
0Ñ
0ð1r{   c                óú   • SSK Jn  UR                  R                  R	                  U S5      (       a;  UR                  R                  R                  U S5      (       a  [        R                  $ [        R                  $ )Nr7   rr  l        i   €)	ru  rs  rv  rw  Ústatically_known_ltrK  rP   rT  rV  )rÐ  rs  s     rW   Údtype_from_sizerŒ  a  sX   € Ýà‡w�w×Ñ×+Ñ+Øˆe÷ñ à
�'‰'×
Ñ
×
/Ñ
/°°h×
?Ñ
?Ü�{‰{Ðä�{‰{Ðr{   )r  rJ   c                ón   • U S:X  a(  [         R                  R                  R                  5       $ SU ;   a  gg)z3
Returns True if the device supports MKL-DNN BF16.
r  rJ   TF)rP   r  rÿ  Ú_is_mkldnn_bf16_supported©rÞ   s    rW   Úis_mkldnn_bf16_supportedr�  o  ó3   € ð �eÓÜ�y‰y×Ñ×9Ñ9Ó;Ð;Ø	�+Ó	àØr{   c                ón   • U S:X  a(  [         R                  R                  R                  5       $ SU ;   a  gg)z3
Returns True if the device supports MKL-DNN FP16.
r  rJ   TF)rP   r  rÿ  Ú_is_mkldnn_fp16_supportedr�  s    rW   Úis_mkldnn_fp16_supportedr”  {  r‘  r{   c           
     óx  • U Vs/ s H  n[        [        U5      5      PM     nnU  HS  n[        U5      [        U5      :X  d   e[        U5       H'  u  pR[        X5   [        [        U5      5      5      X5'   M)     MU     / nUR	                  SR                  S [        X5       5       5      5        [        U5      [        U5      S-  -   [        U5      S-
  -   nUR	                  SU-  5        U  H3  nUR	                  SR                  S [        XC5       5       5      5        M5     SR                  U5      $ s  snf )NÚ|c              3  ó4   #   • U  H  u  pS X  S 3v •  M     g7f©r2  Nr“   )rÀ   Úhrl  s      rW   rÂ   Útabulate_2d.<locals>.<genexpr>Ž  s   é € ÐHÒ3G©4¨1˜A˜a ˜W A�,Ò3Gùó   ‚r†  r7   r�  c              3  ó4   #   • U  H  u  pS X  S 3v •  M     g7fr˜  r“   )rÀ   rð   rl  s      rW   rÂ   rš  “  s   é € ÐHÒ7G©t¨q  ! C ¨�lÒ7Gùr›  rR  )rR   r  r  rÏ   rŸ  r  rÖ   r  )ÚelementsÚheadersrð   ÚwidthsÚrowrî   r�  Útotal_widths           rW   Útabulate_2dr¢  ‡  sÿ   € Ù#*Ó+¢7˜aŒc”#�a“&Žk¡7€FÐ+ÛˆÜ�3‹xœ3˜w›<Ó'Ð'Ð'Ü˜c–N‰DˆAÜ˜F™I¤s¬3¨q«6£{Ó3ˆF‹Ió #ñ ð €EØ	‡L�L�—‘ÑH´3°wÔ3GÓHÓHÔIä�f“+¤ V£¨q¡Ñ1´S¸³[À1±_ÑE€KØ	‡L�L��{Ñ"Ô#ÛˆØ�‰�S—X‘XÑH´s¸3Ô7GÓHÓHÖIñ à�9‰9�UÓÐùò ,s   …D7c              #  óê   #   • [        U R                  5       5      [        UR                  5       5      -  nU H6  nU R                  U5      nUR                  U5      nUUb  UOUUb  UOU4v •  M8     g7f)aÈ  
Zip two dictionaries together, replacing missing keys with default values.

Args:
    dict1 (dict): The first dictionary.
    dict2 (dict): The second dictionary.
    d1_default (Any): the default value for the first dictionary
    d2_default (Any): the default value for the second dictionary

Yields:
    tuple: A tuple containing the key, the value from dict1 (or d1_default if missing),
           and the value from dict2 (or d2_default if missing).
N)r#   rY  rW  )Údict1Údict2Ú
d1_defaultÚ
d2_defaultÚall_keysrc  Úvalue1Úvalue2s           rW   Ú	zip_dictsr«  —  sp   é € ô( ˜%Ÿ*™*›,Ó'¬*°U·Z±Z³\Ó*BÑB€Hó ˆà—‘˜3“ˆØ—‘˜3“ˆð ØÑ(‰F¨jØÑ(‰F¨jð
ô 	
ò ùs   ‚A1A3c                óv  •         SS jn        SS jnU R                  S[        R                  R                  5      nU R	                  5       n U(       aq  U" U SS5        U" U SS5        U" U S[
        R                  R                  (       + 5        U" U SS	5        U" U S
[        R                  R                  5        U" U SS5        U R                  S[        R                  R                  5      nU R                  S[        R                  R                  5      nUS:X  a  U(       a  [        S5      eU $ )a
  
Ensures the configuration is internally consistent for standalone AOTInductor.

If `aot_inductor_mode.compile_standalone` is set to True in the provided
`config_patches` (or falls back to the global config), this function ensures
that the following configs are also enabled:
    - `aot_inductor.package_cpp_only`

Args:
    config_patches (dict[str, Any]): A dictionary of user-provided config
        overrides for AOTInductor compilation.

Returns:
    dict[str, Any]: The possibly-updated `config_patches` dictionary.
c                ó’   • U R                  U[        [        U5      5      nUc  X U'   g U(       d  X2:w  a  [        SU SU S35      eg g )NzInvalid config: Ú=z3 when aot_inductor_mode.compile_standalone is True.)rW  rO   ri   r   ©Úconfig_patchesÚconfig_nameÚconfig_valuer�   s       rW   Úpatch_configÚ2maybe_aoti_standalone_config.<locals>.patch_configË  sY   € ð ×"Ñ" ;´¼ÀÓ0LÓMˆØ‰=Ø*6˜;Ò'Þ˜5Ó0ÜØ" ; -¨q°°Ð>qÐróð ð 1�r{   c                ó„   • U R                  U[        [        U5      5      nX2:w  a  [        R	                  SUU5        X U'   g )NzDOverriding: %s=%s when aot_inductor_mode.compile_standalone is True.)rW  rO   ri   rÙ   r  r¯  s       rW   Úforce_patch_configÚ8maybe_aoti_standalone_config.<locals>.force_patch_configÖ  sB   € ð ×"Ñ" ;´¼ÀÓ0LÓMˆØÓ Ü�K‰KØVØØôð
 '3�{Ò#r{   z$aot_inductor_mode.compile_standalonezaot_inductor.package_cpp_onlyTz aot_inductor.embed_kernel_binaryz#aot_inductor.emit_multi_arch_kernelz+aot_inductor.model_name_for_generated_filesÚ
aoti_modelzaot_inductor.link_libtorchzaot_inductor.dynamic_linkageFz"aot_inductor.cross_target_platformz$aot_inductor.package_constants_in_soÚwindowszªconfig.aot_inductor.package_constants_in_so is not supported for windows cross-compilation. Please use config.aot_inductor.package_constants_on_disk_format = binary_blob.)r°  údict[str, Any]r±  r  r²  r   r•   ré  )rW  ri   Úaot_inductor_modeÚcompile_standaloneÚcopyrP   rò  rq   Útest_configsÚuse_libtorchÚaot_inductorÚcross_target_platformÚpackage_constants_in_sor   )r°  r³  r¶  r¼  rÁ  rÂ  s         rW   Úmaybe_aoti_standalone_configrÃ  º  sk  € ð"	Ø&ð	Ø58ð	ØHKð	à	ô	ð
3Ø&ð
3Ø58ð
3ØHKð
3à	ô
3ð (×+Ñ+Ø.Ü× Ñ ×3Ñ3óÐð
 $×(Ñ(Ó*€NÞá�^Ð%DÀdÔKá�^Ð%GÈÔNáØÐAÄuÇ}Á}×GXÑGXÔCXô	
ñ 	ØÐIÈ<ô	
ñ 	ØØ(Ü×Ñ×,Ñ,ô	
ñ
 	˜>Ð+IÈ5ÔQà*×.Ñ.Ø,Ü×Ñ×1Ñ1óÐð
 -×0Ñ0Ø.Ü×Ñ×3Ñ3óÐð
  	Ó)Ö.EÜð]ó
ð 	
ð
 Ðr{   c                óÆ  • [         R                  R                  (       a)  [         R                  R                  S:X  a  [	        S5      e[         R                  R                  (       a0  [         R                  R
                  S:X  a  [	        S5      eSnSnX!4$ [         R                  R                  S:X  a  SnSnX!4$ U S::  a  gSn[         R                  " 5       (       + nX!4$ )	zý
Decide whether we should mmap weights, and whether to store the weights with .so.

If force_mmap_weights or package_constants_on_disk_format == "binary_blob" configs are set, respect the config.

Returns tuple (use_external_weights, use_mmap_weights).
Úbinary_blobz‚config.aot_inductor.package_constants_on_disk_format = binary_blob and config.aot_inductor.force_mmap_weights cannot both be True.r¹  zKwhen cross_target_platform is windows, use_mmap_weights should not be true.TFi ”5w)FF)ri   rÀ  Úforce_mmap_weightsÚ package_constants_on_disk_formatr   rÁ  rä  )Úconsts_sizeÚuse_mmap_weightsÚuse_external_weightss      rW   Údetermine_aoti_mmap_flagsrË    sÛ   € ô 	×Ñ×.×.Ü×Ñ×@Ñ@ÀMÓQäðJó
ð 	
ô
 ×Ñ×-×-Ü×Ñ×4Ñ4¸	ÓAÜØ]óð ð  ÐØ$ÐØ#Ð5Ð5ä×Ñ×;Ñ;¸}ÓLØ#ÐØ ÐØ#Ð5Ð5à�mÓ#Øà ÐÜ!×+Ò+Ó-Ô-ÐàÐ1Ð1r{   c                 óà   • SSK Jn   U R                  R                  nUc  g[	        U[
        5      (       d  [        S5      eUS:X  a  g[        R                  " SU5      (       d  [        S5      eg)zD
Validates if a model name is suitable for use in code generation.

r   rh   Tz4Invalid AOTI model name: Model name must be a stringr  z^[a-zA-Z_][a-zA-Z0-9_]*$zVInvalid AOTI model name: Model name can only contain letters, numbers, and underscores)	rz  ri   rÀ  Úmodel_name_for_generated_filesr}   r  r’  rß   rà   )ri   Ú
model_names     rW   Úis_valid_aoti_model_namerÏ  8  sn   € õ
 'à×$Ñ$×CÑC€JàÑØä�j¤#×&Ñ&ÜÐOÓPÐPà�RÓØô �8Š8Ð/°×<Ñ<ÜØdó
ð 	
ð r{   c                ó<   • U(       a  [        U 5      $ [        U 5      $ rŒ   )r)   r(   )rT   Úunbacked_onlys     rW   Úget_free_symbolsrÒ  S  s   € ÞÜ$ QÓ'Ð'ä˜A‹Ðr{   c                 ó*  • 0 [         R                  ES[         R                  R                  S[         R                  R	                  [
        R                  5      5      0En [        R                  " 5       (       a  [        R                  " S5      U S'   U $ )z9
Get a base environment for running Python subprocesses.
Ú
PYTHONPATHÚTORCH_CUSTOM_PYTHONPATHr6  Ú
PYTHONHOME)r  r  rW  r|  r  rã  r  ri   rä  Ú	sysconfigÚget_path)Úenvs    rW   Úpython_subprocess_envrÚ  Z  so   € ð
ä
�*‰*ðð 	”b—j‘j—n‘nØ%¤r§z¡z§¡´s·x±xÓ'@ó
ñ	€Cô  ×Ò×ÑÜ%×.Ò.¨vÓ6ˆˆLÑà€Jr{   c                  ó.   • \ rS rSr% SrS\S'   S\S'   Srg)ÚCUDAGraphWrapperMetadataiu  zˆ
Metadata for Customized CUDAGraphWrapper.

Currently assumes there is 1 dynamo graph and will extend to
multiple graphs in the future.
r�   Únum_partitionsÚpartition_indexr“   Nr¨   r“   r{   rW   rÜ  rÜ  u  s   ‡ ñð Óð Ör{   rÜ  .c                  ó$   • \ rS rSr% SrS\S'   Srg)ÚCUDAGraphWrapperiŒ  NzOptional[CUDAGraphWrapperType]rü  r“   )r–   r—   r˜   r™   rü  r©   rž   r“   r{   rW   rà  rà  Œ  s   ‡ Ø.2€GÐ+Ö2r{   rà  c                ó   • U [         l        g rŒ   )r‡  rü  )rü  s    rW   Ú!set_customized_partition_wrappersrâ  ž  s   € Ø5<Ô*Õ2r{   c                óH  ^• U R                   R                  nU R                   R                  / UQU R                   R                  QU R                   R                  5      nU R                   R                  n[
        R                  " X45      u  p4SS jnU Vs/ s H:  nU" U5      (       a(  [        R                  R                  R                  USS9OUPM<     nnSS jmSU4S jjnU Vs/ s H
  og" U5      PM     nn[
        R                  " X45      u  pX4$ s  snf s  snf )	Nc                óÒ   • [        U [        R                  R                  R                  5      =(       a3    [        U [        R                  R                  R
                  5      (       + $ rŒ   )r}   rP   rç  r  r@   ÚGeneratorStater  s    rW   Ú_is_tensor_irÚ(snode_args_kwargs.<locals>._is_tensor_ir«  sH   € Ü˜!œUŸ_™_×/Ñ/×6Ñ6Ó7÷ 
Ä
ØŒu�‰×!Ñ!×0Ñ0óA
ô =
ð 	
r{   F)Úguard_shapec                ó,   • [         R                  " XUS9$ )Nr­   )rP   rÈ   )rÐ  r®   r¯   s      rW   Ú_tensorÚ"snode_args_kwargs.<locals>._tensor·  s   € Ü�{Š{˜4°VÑ<Ð<r{   c                ó¢   >• [        U [        R                  5      (       d  U $ T" U R                  5       U R                  U R
                  5      nU$ rŒ   )r}   rP   r¥  rÐ  r®   r¯   )rð   r„  rê  s     €rW   Úto_real_tensorÚ)snode_args_kwargs.<locals>.to_real_tensorº  s:   ø€ Ü˜!œUŸ\™\×*Ñ*ØˆHÙ�a—f‘f“h §¡¨¯©Ó2ˆØˆ
r{   r´  )r•   r¦  )rð   r   r•   r   )rl  r¥  Úfill_non_provided_argsÚconstant_argsr«  Úpytreer$   rP   rç  r  Úir_node_to_tensorÚtree_unflatten)	r#  r„   r«  Ú	flat_argsÚflat_args_pytree_specræ  r(  rí  rê  s	           @rW   Úsnode_args_kwargsrö  ¢  s  ø€ Ø�:‰:×Ñ€DØ�:‰:×,Ñ,Ø*ˆ$Ð*�—‘×)Ñ)Ð*Ø�
‰
×Ñó€Dð �Z‰Z×Ñ€FÜ'-×':Ò':¸D¸>Ó'JÑ$€Iô
ñ ó	ò ˆAñ ˜×Ñô 	�‰×Ñ×,Ñ,¨Q¸EÐ,ÑBàò	ñ ð	 ð ô=÷ñ -6Ó6ªI q� Ö"©I€IÐ6Ü×(Ò(¨ÓJ�L€DØˆ<Ðùò%ùò  7s   ÂADÃ,Dc                óÎ   • SSK Jn  U R                  nUR                  R                  (       a(  UR	                  UR                  R                  S-   5      nUR                  S5      $ )Nr7   rr  ré   )Úprimals_rž  Úfwd_rng_staterO  rL  )ru  rs  rá   rv  Úremoveprefixrå  )r:  rs  Údep_names      rW   Úis_nonfreeable_buffersrü  Å  sN   € Ýà�x‰x€Hð 	‡w�w‡|‡|Ø×(Ñ(¨¯©¯©¸Ñ);Ó<ˆØ×ÑØIóð r{   c                óx   • [        X S3-  5       nUR                  5       sSSS5        $ ! , (       d  f       g= f)z,Load a template file and return its content.z	.py.jinjaN)ÚopenÚread)rá   Útemplate_dirr&  s      rW   Úload_templater  Ó  s+   € ä	ˆl˜v YÐ/Ñ/Ô	0°AØ�v‰v‹x÷ 
1×	0×	0ús   ‘+«
9c                óž  • U R                   n[        U[        R                  R                  [        R                  R
                  45      (       d   S[        U5       35       e[        R                  (       d  g[        [        R                  R                  R                  R                  [        R                  R                  R                  R                  /5      nX;   a  g[        [        R                  R                  R                   /5      n[        U[        R                  R
                  5      (       a  X;   $ [#        U 5      (       + $ )zLDecide whether fallback for a node. This is only used in inductor lite mode.z6Expected OpOverload or HigherOrderOperator, but found F)r’  r}   rP   r“  r”  r  r  ri   Úfallback_by_defaultr#   r  ru  Ú_assert_scalarr  Úlift_fresh_copyÚhigher_orderÚ triton_kernel_wrapper_functionalr!   )rl  r’  Ú"skip_fallback_due_to_dynamic_shapeÚfallback_hopss       rW   Úshould_fallback_by_defaultr
  Ù  s   € à�[‰[€FäØ”—‘×&Ñ&¬¯
©
×(FÑ(FÐG÷ñ ð Oà	?ÄÀVÃ¸~ÐNóOð ô ×%×%Øô *4ä�I‰I�N‰N×)Ñ)×1Ñ1Ü�I‰I�N‰N×*Ñ*×2Ñ2ð	
ó*Ð&ð Ó3Øô Ü	�‰×	Ñ	×	@Ñ	@ÐAó€Mô �&œ%Ÿ*™*×8Ñ8×9Ñ9ØÑ&Ð&ä& tÓ,Ô,Ð,r{   )	z-torch.ops._c10d_functional.all_reduce.defaultz.torch.ops._c10d_functional.all_reduce_.defaultz9torch.ops._c10d_functional.all_gather_into_tensor.defaultz8torch.ops._c10d_functional.reduce_scatter_tensor.defaultz4torch.ops._c10d_functional.all_to_all_single.defaultz6torch.ops._c10d_functional_autograd.all_reduce.defaultzBtorch.ops._c10d_functional_autograd.all_gather_into_tensor.defaultzAtorch.ops._c10d_functional_autograd.reduce_scatter_tensor.defaultz=torch.ops._c10d_functional_autograd.all_to_all_single.defaultc                ó   • U [         ;   $ )z0Check if an operation is a collective operation.)ÚCOLLECTIVE_OPS)r­  s    rW   Úis_collective_opr    s   € à”nÑ$Ð$r{   c                 óp   • [         R                  " 5       (       a	   SSKJn   U $ / $ ! [         a    / s $ f = f)Nr   ©Útlx_only_cuda_options)ri   rä  Ú)torch._inductor.fb.tlx_templates.registryr  r  r  s    rW   r  r    s<   € ä×Ò×Ñð	ÝWà(Ð(ð ˆ	øô	 ó 	ØŠIð	ús   œ& ¦5´5c                ó   • X-   S-
  U-  U-  $ )z(Round x up to the nearest multiple of y.r7   r“   )rT   Úys     rW   Ú	_round_upr  "  s   € à‰U�Q‰Y˜1Ñ Ñ!Ð!r{   c                ó²  • SSK JnJn  U" US5      (       a  UR                  UR                  4$ [        U5      S:¼  Ga2  U" US   U S   5      (       a  U" US   S5      (       d%  U" US   S5      (       a,  U" US   U S   5      (       a  UR                  UR                  4$ U" US   U S   5      (       a  U" US   [        U S   S5      5      (       d2  U" US   U S   5      (       a6  U" US   [        U S   S5      5      (       a  UR                  UR                  4$ U" US   [        U S   S5      5      (       a6  U" US   [        U S   S5      5      (       a  UR                  UR                  4$ U[        R                  :X  a  SOSnU[        R                  :X  aœ  U[        R                  :X  aˆ  [        U S   S5      [        [        X€S   -  S5      S5      -  n	[        U S   S5      [        [        X€S   -  S5      S5      -  n
U" X)5      (       d  U" X*5      (       a  UR                  UR                  4$ U[        R                   :X  Ga
  [        R"                  R$                  (       dŠ  [        U S   S5      [        [        X€S   -  S5      S5      -  n	[        U S   S5      [        [        X€S   -  S5      S5      -  n
U" X)5      (       d  U" X*5      (       a  UR&                  UR                  4$  g	[        U S   S5      U-  U S   -  n	[        X€S   -  S5      U S   -  n
U" X)5      (       d  U" X*5      (       a  UR&                  UR                  4$ g	)
z2
Core implementation for scale/swizzle inference.
r   )r6   ÚSwizzleTyper7   r†  rs   rr   rN  rF  ©NN)Útorch.nn.functionalr6   r  Ú
TensorWiseÚ
NO_SWIZZLErR   ÚRowWiserj   ÚBlockWise1x128ÚBlockWise128x128rP   rH  rD  r  ÚBlockWise1x16ÚSWIZZLE_32_4_4rF  rò  rq   ÚBlockWise1x32)Úmat_sizeÚ
scale_sizeÚscale_numelÚ	mat_dtypeÚscale_dtypeÚeq_fnr6   r  ÚK_multiplierÚexpected_numel_aÚexpected_numel_bs              rW   Ú_infer_scale_swizzle_implr*  '  sg  € ÷ =ñ ˆ[˜!×ÑØ×%Ñ% {×'=Ñ'=Ð=Ð=ô ˆ:ƒ˜!ÔÙ�*˜Q‘- ¨!¡×-Ñ-±%¸
À1¹Àq×2IÑ2IÙ�*˜Q‘- ×#Ñ#©¨j¸©m¸XÀa¹[×(IÑ(Ià×&Ñ&¨×(>Ñ(>Ð>Ð>ñ �*˜Q‘- ¨!¡×-Ñ-Ù�j ‘m¤W¨X°a©[¸#Ó%>×?Ñ?á�*˜Q‘- ¨!¡×-Ñ-Ù�j ‘m¤W¨X°a©[¸#Ó%>×?Ñ?à×-Ñ-¨{×/EÑ/EÐEÐEñ �˜A‘¤¨°©°SÓ 9×:Ñ:¹uØ�q‰Mœ7 8¨A¡;°Ó4÷@
ñ @
ð ×/Ñ/°×1GÑ1GÐGÐGð "¤U×%;Ñ%;Ó;‘1À€Lð ”E×*Ñ*Ó*¨{¼e×>QÑ>QÓ/QÜ$ X¨a¡[°#Ó6¼Ü�L¨A¡;Ñ.°Ó3°Qó:
ñ 
Ðô % X¨a¡[°#Ó6¼Ü�L¨A¡;Ñ.°Ó3°Qó:
ñ 
Ðñ �×/Ñ/±5¸×3WÑ3WØ×,Ñ,¨k×.HÑ.HÐHÐHð ”e×*Ñ*Ô*Ü�}‰}× × ä(¨°!©°cÓ:¼YÜ˜°¡{Ñ2°BÓ7¸ó>ñ  Ðô  )¨°!©°cÓ:¼YÜ˜°¡{Ñ2°BÓ7¸ó>ñ  Ðñ �[×3Ñ3±uØ÷8ñ 8ð #×0Ñ0°+×2LÑ2LÐLÐLð8ð ô  ' x°¡{°BÓ7¸,ÑFÈÐRSÉÑTÐÜ& |¸q±kÑ'AÀ2ÓFÈÐRSÉÑTÐÙ�[×3Ñ3±uØ÷8ñ 8ð #×0Ñ0°+×2HÑ2HÐHÐHàr{   c           	     óÂ   • [        U R                  S   U R                  S   4[        UR                  5      UR                  5       U R                  UR                  S S9$ )aR  
Infer the scaling type and swizzle mode from matrix and scale tensor shapes/dtypes.

This function determines how scale factors are laid out relative to the matrix:
- TensorWise: Single scale for entire tensor
- RowWise: One scale per row
- BlockWise1x128/128x128: Block-scaled with float32 scales
- BlockWise1x32: MXFP8 with float8_e8m0fnu scales (swizzled on NVIDIA)
- BlockWise1x16: NVFP4 with float8_e4m3fn scales (swizzled)

Args:
    mat: The matrix tensor (FP8 or FP4)
    scale: The scale factor tensor

Returns:
    Tuple of (ScalingType, SwizzleType) or (None, None) if unrecognized
r   r7   c                ó
   • X:H  $ rŒ   r“   rÍ  s     rW   rŠ  Ú%infer_scale_swizzle.<locals>.<lambda>‘  s   € ˜1š6r{   ©r!  r"  r#  r$  r%  r&  )r*  rA  rÚ  Únumelr®   )ÚmatÚscales     rW   Úinfer_scale_swizzler2  w  sO   € ô( %Ø—)‘)˜A‘, §	¡	¨!¡Ð-Ü˜Ÿ™Ó%Ø—K‘K“MØ—)‘)Ø—K‘KÙ!ñð r{   c           	     ór  ^• SSK Jm  U R                  5       nUR                  5       nU(       a
  US   US   4nU(       a&  [        R                  " [
        R                  US5      OSnSU4S jjn[        [        U5      S:¼  a
  US   US   4OUS   S4[        U5      UU R                  UR                  US9$ )zÝ
Infer the scaling type and swizzle mode for IR nodes (used during graph lowering).

This is the IR-compatible version of infer_scale_swizzle, using symbolic
size comparisons via V.graph.sizevars.statically_known_equals.
r   rr  r7   c                óN   >• TR                   R                  R                  X5      $ )z5Compare values using symbolic equality when possible.)rv  rw  rJ  )r(  r)  rs  s     €rW   Úsymbolic_eqÚ+infer_scale_swizzle_ir.<locals>.symbolic_eq¬  s   ø€ à�w‰w×Ñ×7Ñ7¸Ó=Ð=r{   r†  r.  )r(  r   r)  r   r•   r:  )r±  rs  r<  r  r  r   r!  r*  rR   rÚ  r®   )r0  r1  Ú	transposer!  r"  r#  r5  rs  s          @rW   Úinfer_scale_swizzle_irr8  •  s¯   ø€ õ .à�|‰|‹~€HØ—‘Ó!€Jö Ø˜Q‘K ¨!¡Ð-ˆö DN”)×"Ò"¤8§<¡<°¸QÔ?ÐST€K÷>ô %Ü/2°8«}ÀÓ/A�(˜1‘+˜x¨™{Ñ+ÈÐQRÉÐUVÐGWÜ˜Ó$ØØ—)‘)Ø—K‘KØñð r{   r²  )ry   r�   r•   r�   )r‡   r”   r•   r:  )é   éd   )rã   úCallable[[], Any]rä   r�   rå   r�   r•   r™  )r9  r:  F)
rã   r;  rä   r�   rå   r�   rù   r:  r•   r™  r´  )r¯   z"Union[Optional[torch.device], str]r•   útorch.device)r$  zIterable[sympy.Expr]r•   r”   )r,  r_  r-  r_  r•   r”   )r$  zIterable[_T]r•   zValuesView[_T])r7  r]  r8  r]  r•   r]  )rc  r  r•   r  )ri  z"Iterable[Union[int, torch.SymInt]]r•   zlist[sympy.Expr])ro  úUnion[int, torch.SymInt]r•   r]  )rî   r]  r•   r=  )ri  z Iterable[Union[int, sympy.Expr]]r•   zlist[Union[int, torch.SymInt]])r†  útorch._ops.OpOverloadr•   r:  )rš  r5   r�  z'Callable[[torch._ops.OpOverload], bool]r•   r:  )r’  r   r„   r›  r«  rº  r•   z&tuple[GraphModule, list[torch.Tensor]])rH   )r¯   r  r•   ré  )r7   rH   )
r´  úCallable[..., Any]rµ  úSequence[Any]rñ   r�   r¯   r  r•   r™  )r“   rì  rì  g      ð?rH   )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�   )rT   zUnion[int, Sequence[int]]rÐ  r�   r•   úSequence[int])rT   ztuple[_T, ...]r•   zlist[_T])rã   z!Callable[Concatenate[Any, P], RV]r•   zCachedMethod[P, RV])r  r  r•   z*Callable[[FN_TYPE[P, RV]], FN_TYPE[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  rB  rü  r:   r•   útuple[str, str]rŒ   )rp  zIterable[torch.fx.Node]rq  zOptional[Callable[[Any], bool]]r•   úOrderedSet[torch.fx.Node])r„   zSequence[IRNode]r«  zdict[str, IRNode]r•   rE  r™  )r  r”   r•   zValueRanges[Any])r£  r  r•   r:  )r£  re   rb  r�   r•   r»  )r¯  r:  r•   r:  )rá   r  r•   r»  )rm  r”   r½  zdict[sympy.Expr, Any]r•   r”   )r(  r   r•   z,TypeGuard[Union[torch.SymInt, torch.Tensor]])r„   r   r•   r:  )r¬  útorch.fx.GraphModuler•   zOptional[torch.fx.Node])r¬  rF  r•   r5   )r¬  rF  r•   zOrderedSet[torch.device]r³  )rÆ  r   r•   r   )rc  r  r�   r  r•   rŠ  )NNT)r"  zOptional[dict[str, Any]]r  rf  r#  r:  r•   rŠ  )r,  r@  r(  r:  r•   ú	list[int])rx  r+   r,  z.Sequence[Union[int, torch.SymInt, sympy.Expr]]r(  r:  r•   rG  )r®   r`  r•   r�   r‰  r±  )rõ  zUnion[int, torch.device]r•   r:  rß  )r  r�   r¯   r<  r  úOptional[int]r•   r8   )r<  rA   r  zlist[torch.dtype]r•   r:  )r  r  r•   r:  )
r<  rA   r  r:  r  r:  r  r:  r•   r:  )rb  r@   r+  r^  r,  r:  r•   r:  )rb  r@   r+  rA   r,  r:  r•   r:  )rq  r6   rr  r6   rs  zlist[ScalingType]r•   r:  )rŠ  r   r‹  r   r<  rA   rŒ  r:  r�  r:  rŽ  úOptional[Any]r�  rI  r�  rI  r•   r:  )
r<  rA   rø  r�   r(  r�   r¾  r�   r•   r:  r  )r<  rA   rø  r�  r(  r�  r¾  r�  rŠ  r@   r‹  r@   rŽ  zOptional[IRNode]r¡  zOptional[_IntLike]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•   rG  )r¯   r  r•   r  )r•   zQtuple[Optional[str], Callable[[], list[Any]], Callable[[], list[Any]], type[Any]])r<  rA   r•   r:  )r<  rA   r  zUnion[ReinterpretView, Buffer]r  r@   r•   r:  )FTFN)r<  rA   r  r@   r  r@   r  r:  r   r:  r(  r:  r  rH  r•   r:  )rã   úCallable[P, _T]r„   rê  r«  rë  r•   ztuple[_T, list[str]])rã   r?  r•   ztuple[Any, list[str]])rã   rJ  r„   rê  r«  rë  r•   r¦   )rã   rJ  r„   rê  r«  rë  r•   r  )rã   rJ  r„   rê  r«  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•   rf  )rZ  r@  r•   r:  )r¥  zSequence[torch.Tensor]r•   r:  )ro  r”   r•   r`  )rª  r:  r„   r   r«  r   r•   zIterator[Any])r®   r`  r•   r™  )rÚ  r  r•   r:  )rÚ  r  r•   r�   )rè  zIterable[Any]r•   r:  )
r–  r?  r¬  r4   rþ  r@  rŽ  r  r•   ré  )r  z"Optional[Union[Buffer, Operation]]r•   r:  )rl  z Optional[Union[Node, Operation]]r†  z!Optional[torch._ops.OperatorBase]r•   r:  )rl  z"Optional[Union[IRNode, Operation]]r•   r:  )r#  rF   r$  z-Optional[Callable[[BaseSchedulerNode], bool]]r•   r:  )r#  rF   r•   r:  )rl  zOptional[Operation]r†  z?Union[torch._ops.OpOverload, Collection[torch._ops.OpOverload]]r•   r:  )r-  r  r.  rº  r/  rº  r•   r   )r#  rF   r9  zMutableSet[BaseSchedulerNode]r.  zdict[str, SchedulerBuffer]r/  zdict[str, BaseSchedulerNode]r6  zCallable[[Any], bool]r•   ré  )rF  r�   rG  r�   r•   r�   )rR  rF  r•   r�   )rb  r¦   r•   rŠ  )rá   r  r•   r  )r¯   rf  r•   r:  )r¯   r  r•   r:  )r®   r`  r•   r:  )r  r>  rÚ  rf  r|  r`  r}  r`  r~  r  r  r:  r•   r:  )r  rC  r•   ré  )rÕ   r¦  r•   r:  )r”  r¦  r•   r:  )r•   rµ  )rã   rJ  r„   rê  r«  rë  r•   ztuple[_T, str])r¥  úSequence[InputType]r•   zOptional[ShapeEnv])r´  úCallable[[list[InputType]], _T]r¶  rA  r·  zOrderedSet[int]r•   rL  )rT   r¦  r•   r¦  )r³  r¹  rÅ  rA  rÆ  zOptional[OrderedSet[int]]r•   z-tuple[list[torch.Tensor], list[torch.Tensor]])r¥  rK  rÊ  rA  r•   rA  )rð   r”   r•   r:  )rµ  r@  rÞ  rE   r•   ré  )r®   r`  r•   r  )r®   r  r•   r`  )r6  r¦  r�   r¦  r•   r:  )r•   ztuple[str, ...])rá   r  r  r3   r  r  r•   ré  )rá   r  r•   ré  )rÞ   rf  r•   r  )r®   r`  r•   r`  )r�   zOptional[type[Any]]rŸ   r:  r•   r   )r•   zOptional[list[int]])r•   rQ  )r†  ztorch._ops.OperatorBaser•   rD  )r   útorch.fx.Noder•   r:  )rl  rB   r•   r:  )rü  r:   r•   r:  )rÐ  r�   r•   r`  )rÞ   r  r•   r:  )r�  zSequence[Sequence[T]]rž  zSequence[T]r•   r  )
r¤  rA  r¥  rA  r¦  úValType | Noner§  rN  r•   zEGenerator[tuple[KeyType, ValType | None, ValType | None], None, None])r°  rº  r•   rº  )rÈ  r�   r•   ztuple[bool, bool])rT   r*   rÑ  r:  r•   zOrderedSet[sympy.Symbol])r•   zdict[str, str])rü  ÚCUDAGraphWrapperTyper•   ré  )r#  rF   r•   z tuple[list[Any], dict[str, Any]])r:  r;   r•   r:  )rá   r  r   r/   r•   r  )rl  rM  r•   r:  )r•   r¦   )rT   r�   r  r�   r•   r�   )r!  ztuple[Any, Any]r"  ztuple[Any, ...]r#  r   r$  r`  r%  r`  r&  zCallable[[Any, Any], bool]r•   ú#tuple[Optional[Any], Optional[Any]])r0  r¦  r1  r¦  r•   rP  r¶  )r0  r>   r1  r>   r7  r:  r•   rP  (¥  Ú
__future__r   rS  r‹  rG  Úenumr  ry  rÂ  rù  r}  r   r›  r   r  rá  rß   r  râ   rã  r×  r  r�  r²  r‰  Úcollections.abcr   r   r   r   r   r	   r
   r   r   r   Útypingr   r   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   r   r~   rP   Útorch.utils._pytreeró  Ú_pytreerñ  Ú$torch._inductor.analysis.device_infor   Útorch._inductor.runtime.hintsr    Ú!torch.fx.passes.regional_inductorr!   Útorch.utils._dtype_abbrsr"   Útorch.utils._ordered_setr#   r$   r%   ÚOPTIMUS_EXCLUDE_POST_GRADrË  r(   r)   r*   r+   r,   r-   r.   Úpathlibr/   r0   r1   r2   Útorch._prims_commonr3   Útorch.fxr4   Útorch.fx.noder5   r  r6   r  r8   rg  r:   Údependenciesr;   rv  r=   r  r>   r?   r@   rA   rB   rC   Úoutput_coderE   rÔ  rF   rG   rN   rL   ræ   rX   Útorch._dynamo.device_interfacerY   Útorch._dynamo.utilsrZ   Útorch.autogradr[   Útorch.autograd.profiler_utilr\   Ú(torch.fx.passes.graph_transform_observerr]   Útorch.fx.passes.shape_propr^   Útorch.utils._sympy.functionsr_   r`   ra   rb   rc   Útorch.utils._sympy.symbolrd   re   Útorch.utils._sympy.value_rangesrf   rg   r  ri   Úruntime.runtime_utilsrj   r6  Ú_IS_WINDOWSÚ	getLoggerr–   rÙ   rl   r  r4  Ú	VarRangesr¥  r�   Ú	InputTypeÚgetenvÚXPU_KERNEL_FORMATÚGPU_KERNEL_BIN_EXTSr�  rÄ  r1  r	  r[  rP  r\  rR  r]  rT  rV  rÉ   rJ  rL  rN  rD  rE  Úfloat8_e4m3fnuzÚfloat8_e5m2fnuzrt   r©   rx   rz   rƒ   ÚFunctionr…   rH  r¡   rô   rú   rø   r  r  r%  r.  r1  rf  rj  rp  rz  r|  r‡  rŽ  r­  rÇ   r¹  rÁ  rÈ  rË  rÎ  rÑ  rÛ  rÜ  rÝ  ÚFN_TYPErà  rý  rÿ  r  r  r%  rn  rt  rƒ  r—  r¡  r¤  r«  r°  r³  r¿  rÂ  rÇ  Ú	frozensetro  rÍ  rÓ  rà  rõ  rú  rû  r  r  rŒ  r  r'  Úclear_on_fresh_inductor_cacheÚclear_inductor_cachesÚfresh_inductor_cacher0  r@  rD  rF  rJ  rM  r¸  rÈ  r[  rá  r÷  rû  rþ  r  r  r  r  r  r)  rc  ri  ro  rt  r|  r€  rƒ  r‘  rœ  r©  r¯  r�  rº  r¾  rÐ  rÔ  ræ  rð  rõ  rø  rû  rý  r  r  r,  r.  rG  rN  rS  ri  rl  rn  rw  r€  rŠ  r�  r“  rœ  r¡  r¦  r¨  r«  r&  rµ  rÉ  rÍ  rÒ  rÖ  rÛ  rÞ  rã  r  r#  r‡  ÚEnumrî  r  r	  r  r  r  r   r'  r*  r0  r8  r@  rI  rU  rW  rh  rk  r  rn  rp  rr  r�  r�  r‘  r•  r�  r«  r®  rº  rÁ  r±  rÌ  rÓ  rß  rê  rí  rñ  rZ  rõ  Úcompilerð  ró  rø  rý  r   r  r  r  r  r  r  r  r"  r#  r$  r&  rK  rO  rQ  r\  r^  rc  rm  rÌ  rv  r  r„  r‰  rŒ  ÚSUPPORTED_MKLDNN_DEVICESr�  r”  r¢  r«  rÃ  rË  rÏ  rÒ  rÚ  rÜ  ÚPartitionFnTyperO  rà  r‡  râ  rö  rü  r  r
  r  r  r  r  r*  r2  r8  )r¾  r‡   s   00rW   Ú<module>r�     sv  ðÞ "ã Û Û Û Û Û Û Û 	Û Û Û Û Û 	Û Û 	Û Û Û 
Û Û Û Û Û ÷÷ ñ õ Ý Ý ÷÷ ÷ õ ÷ CÑ BÝ ã ã ß $Ð $Ý ?Ý :Ý EÝ 0Ý /ß ;ð (Ø$ðÐ ÷
ó ö ß>Ñ>Ýç/Ñ/ÝCÝ$Ý"Ý/å,Ý5Ý!Ý$ßT×TÝ,ß=ò +€	ÙˆCƒL€ð
 ‡�ôó ðõ DÝ 0Ý %Ý 2Ý KÝ 0÷õ ÷ 8ß Då Ý =ð �l‰l˜gÑ%€à×Ó˜Ó!€ñ ˆTƒ]€Ø�—’˜UŸZšZÐ'Ñ(€	Ø�U˜5Ÿ<š<¨¨e¯l©lÐ:Ñ;Ñ<€	ö �E˜bŸi›iÐ(IÈ7ÓSð ð
 ØØÐ Ð!Ð"ñÐ ð €Ø€	à€ØÐ ñ
 2<à�ŠØ�
Š
Ø�ŠØ�ŠØ�ŠØ�ŠØ�ŠØ�ŠØ�ŠØ�ŠØ�ŠØ×ÒØ×ÒØ×ÒØ×Òðó2Ð Ð.ó ð( €Ø�{ Q‘Ñ'¨AÓ-°+ÀÓ2BÐ XÐDXÓ XÐBõ5õ
LôˆE�NŠNô ð ×Ó˜dÑ#÷ð ó $ð÷"Gð GðX ØØ#(ñ	Øðàðð 
ðð !ð	ð
 öð4 ØØ#(ñ	_Øð_àð_ð 
ð_ð !ð	_ð
 ö_ðD ‡�ôó ðõõ;õ@õ
+ð*Ø"ð*Ø+Að*àõ*õ#AðL+Ø	+ð+àõ+õ	õð"/Ø	)ð/à#õ/õGñ @OðIØ	ðIà<ðIð 
öIð0ØðØ ðØ*8ðà+õ÷0'ð 'ð Øñ	Øðà!ðð ðð ð	ð
 öð( %'ØØØØñØðà!ðð ðð ð	ð
 ðð ðð öõ )õ'õ#õõ$ñ  ˆcƒN€ÙˆT˜TÑ"€Ø
�;˜s A˜vÑ&¨Ð*Ñ
+€ôE�8˜W Q¨ U™^ô Eõð:Ø)ðàõð+Øð+à/õ+ð\ØCðàõð,4)Ø.ð4)àOð4)ð 	õ4)ðnW2ØCðW2à!ðW2ð õW2ðx 48ñØ*ðà0ðð öð(GØ
ðGØ$5ðGàõGõ:,õ^%õõ	DõUõ	>õõ2õ-ñ $òóÐ ð$Øðàõõõ'ó& 
õð< !#Ð �IÓ "õ	õð ×Òô"ó ð"ð( ×Òà.2ØØñ7Ø+ð7à	ð7ð ð7ð õ	7ó ð7ðv !5Ð Ø$Ð Ø"Ð ð 49÷ ð ð( ñ	$Øð$à	7ð$ð ð	$ð
 ö$ðN ×Ò�QÓô7ó ð7ô�*ô ð ×Ò÷,ð ,ó ð,÷
S'ò S'ôl
™õ 
ð ×Òô@ó ñ@÷ò ô@?Ñ'õ ?ð ‡�÷ó ñð8 ×ÑôJó ñJð ×Ñô)ó ñ)öIð #'ñØðàðð  ðð ÷	ð(ØðØ+<ðà	öö öð ØØ#ñØðð ðð ð	ð
 ðð 
÷ð< :>ÐRWñ|Øð|Ø&6ð|ØKOð|à	÷|ð@ BGñØðØ&,ðØ:>ðà	÷ð BGñVØðVØ&,ðVØ:>ðVà	÷Vð OØðOàðOð %ðOð 
ö	Oð ×Ò˜QÑô	ó  ñ	ð ×Ò˜QÑô	ó  ñ	ð ×Ò˜QÑôó  ñð>Øð>àð>ð ð>ð ð	>ð
 ð>ð ð>ð ð>ð  ð>ð 
ö>öBðP "Ø ñEØðEàðEð ðEð ð	Eð
 ðEð ðEð ðEð ðEð 
÷EöPJð ˜C §¢˜OÑ,�ˆ)Ó ,ð ‡�àEFñØðØðØ!)ðØ?Bðà	õó ñð( ‡�ôó ñð. ‡�ô5(ó ñ5(ðp ‡�ô@ó ñ@ð ‡�ôRó ñRö:"öJööHö&ðØðØ8ðØ@Fðà	öð: "Ø"&ØØ"&ñ=Øð=à
ð=ð ð=ð ð	=ð
  ð=ð ð=ð  ð=ð 
÷=ö@'÷Cò Cð"&Øð&àð&ð ð&ð ö	&ð$ØðØ &ðØ2:ðàöö/ö(öVð	Øð	Ø &ð	Ø2:ð	àö	ð#Øð#Ø &ð#Ø2:ð#à$ö#ð* ×Òð.Øð.Ø.@ð.àô.ó ñ.ð$ IMñFØðFØ)EðFà÷Fö*	ööB&ö&ööð ×Òôó ñöð ‡�ôDó ñDð ‡�ô'6ó ñ'6ðT ‡�ôó ñöQö	.ö0öö(ö#öKöô(*�$—)’)õ *ð 
Ø
ð 
Ø"-ð 
Ø4Að 
ØHKð 
à	ö 
öFðØ1ðà	öð" -1ñ#Ø
*ð#à)ð#ð 
÷#öL(ð @Dñ	QØð	Qà<ð	Qð 
÷	Qö#ðJØ
ðJàGðJð 
öJðLØðLØ .ðLØDRðLàöLñ *=ð
Øð
à5ð
ð ,ð
ð 5ð	
ð
 'ð
ð 
÷
ñ< *=ðØðà5ðð ,ðð 5ð	ð
 'ðð 
÷ö:Tö ð2 ×Ò÷ð ó ñð ×Òôó ñö,!öö)ö
.ö2ð$Ø&ð$à!ð$ð ð$ð ð	$ð
 ð$ð ð$ð 
ö$öNHöBöLö'ð ØðØ &ðØ2:ðàöö2ð:Ø*ðà"ðð (ðð %ö	ö0	:ð 37ñ$Øð$à$ð$ð 0ð$ð 3÷	$ð<Øðà$ðð öö$$3ðNØ!ðØ3Bðà	ö÷:÷&/ñ Ù'Ù#Ù)Ù*ñ $Ù%ò
Ñ ñ +?×*DÒ*DÔ*FÔGÒ*F¡$ !˜šÑ*FÒGÑ ð —*“*™YÓ'�÷H÷÷	÷ð ‡�õó ñð& ×Ò÷1ò 1ó ñ1ð
 68Ñ Ñ2Ô 7ðØ
ðà8ðð 1ðð 
÷	ñ /9«lÑ ™OÔ :÷)÷#ò #÷ñ ‘)Ó
�Ù
‘)Ó
�ö-"�¡©Ð 0Ñ1õ -"ñ`  DÒ)ñÀt÷ ñ ó *ñ÷ö 4§9¢9õ ð ‡�õ4ó ñ4÷2Y÷5÷!÷H"÷J÷4
÷÷1÷ñ *Ñ ÷	÷	÷ð& "&Ø!%ñ	 
Ø$ð 
à$ð 
ð ð 
ð ð	 
ð
 K÷ 
ð  
÷FR÷j&2÷R÷6÷ð6 ×Ó˜dÑ#÷ò ó $ñð ™3 ˜8Ñ$�ØÙÑ.Ð/±Ð@ñÑ ÷3ô 3ò *:Ó);Ñ &÷=÷ ÷F
÷÷"-ñL ó
ó�÷%ð
 õó ñ÷"ð
MØðMàðMð ðMð ð	Mð
 ðMð &ðMð )÷Mð`Ø	ðØ*ðà(÷ðB ñ"Ø	ð"àð"ð ð"ð )÷	"ñ "ùó{ Hs   ï$z