+
    –°³jY ã                  óN
  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RIHt ^ RIHtHtHtHt ^ RIt^ RIHt ^ RIt^ RIt^ RIH u H!t" ^ RI#H$t$ ^ R	I%H&t&H't' ^ R
I(H)t)H*t* ^ RI+H,t, ^ RI-H.t.H/t/H0t0H1t1H2t2H3t3 ^ RI4H5t5H6t6H7t7H8t8 ^RI9H:t:H;t;H<t<H=t= ^RI>H?t? ^RI@HAtAHBtBHCtCH t  ^RIDHEtE ^RIFHGtGHHtHHItIHJtJ ^RIKHLtL ^RIMHNtN ^RIOHPtP ^RIQHRtR ^RISHTtTHUtUHVtVHWtWHXtXHYtYHZtZH[t[ ^RI\H]t]H^t^ ^RI_H`t`HataHbtbHctcHdtd ^RIeHftf ^RIgHhthHitiHjtj ^RI HktkHltlHmtmHntnHotoHptpHqtqHrtrHstsHtttHutuHvtvHwtwHxtxHytyHztzH{t{H|t| ^RI}H~tH€t€H�t�H‚t‚ ^RIƒH„t„ ^RI…H†t† ^R I‡HˆtˆH‰t‰HŠtŠH‹t‹HŒtŒH�t�HŽtŽH�t�H�t�H‘t‘H’t’H“t“H”t”H•t•H–t–H—t— ^R!I˜H™t™HštšH›t›HœtœH�t�HžtžHŸtŸH t  ^R"I¡H¢t¢ ^R#I£H¤t¤H¥t¥H¦t¦H§t§H¨t¨H©t©Hªtª ^R$I«H¬t¬ ]'       d-   ^ R%I­H®t® ^ R&I¯H°t° ^ R'I±H²t² ^R(IBH³t³ ^R)I‡H´t´ ^R*I¡Hµtµ ]! R+4      t¶]	EPn                  ! ]¸4      t¹]EPt                  EPw                  ]¸R,4      t¼]EPt                  EPw                  ]¸R-4      t½]EPt                  EPw                  ]¸R.4      t¾]E! 4       tDR/ t¿R0 R1 ltÀR2 R3 ltÁ ! R4 R54      tÂ]! R4      R6 R7 l4       tÃ ! R8 R94      tÄ]EPŠ                   ! R: R;4      4       tÆ]EPŠ                   ! R< R=4      4       tÇ]EPŠ                   ! R> R?]Ç4      4       tÈ]EPŠ                   ! R@ RA]Ç4      4       tÉRB RC ltÊRD RE ltËRF RG ltÌ ! RH RI]’4      tÍ]Í! 4       EPœ                  tÏRJ RK ltÐRL RM ltÑRN RO ltÒRP RQ ltÓRR RS ltÔRT RU ltÕRV RW ltÖRX RY lt× ! RZ R[]Œ4      tØ]EPŠ                  ! R\R]7       ! R^ R_4      4       tÙR` Ra ltÚR‚Rb Rc lltÛ ! Rd Re]‘4      tÜ]ÂEP»                  ]ÜEP¼                  R\4       ]ÂEP»                  ]ÜEP¾                  R\4       ]ÜEPÁ                  Rf4        ! Rg Rh]Ü4      tá ! Ri Rj4      tâ]EPŠ                   ! Rk Rl4      4       tã ! Rm Rn4      tä]EPŠ                   ! Ro Rp4      4       tå]æ]ç]æ]æ3,          ,          tè]ç]œRq3,          té]ç]éR,          Rq3,          tê]EPŠ                  ! R\R]7       ! Rr Rs4      4       të]EPŠ                  ! R\R]7       ! Rt Ru4      4       tì]ë]ì,          tí ! Rv Rw]‹]Ø]è3,          4      tî]EPŠ                   ! Rx Ry4      4       tï ! Rz R{]Ÿ]Ø,          4      tð ! R| R}]ð4      tñ ! R~ R] 4      tòR€ R� ltóR# )ƒé    )ÚannotationsN)Úabstractmethod)ÚCallableÚIterableÚSequence)Ú	lru_cache)ÚAnyÚcastÚTYPE_CHECKINGÚTypeVar)Ú
PRECEDENCE)Úget_interface_for_device)ÚidentityÚpreserve_rng_state)Úis_integer_dtypeÚtype_to_dtype)Ú
OrderedSet)ÚCeilDivÚFloorDivÚMinÚModularIndexingÚTruncToFloatÚ
TruncToInt)Úget_triton_versionÚhas_triton_cpu_backendÚhas_triton_packageÚhas_triton_stable_tma_api)Úfree_symbol_is_typeÚ
prefix_strÚsymbol_is_typeÚSymT)ÚValueRanges)ÚconfigÚirÚmetricsÚutils)ÚAsyncCompile)Ú	code_hashÚget_pathÚPyCodeCacheÚwrite_atomic)Ú'set_kernel_post_grad_provenance_tracing)ÚDefaultHandler)Útriton_heuristics)Úbenchmarker)ÚAutotuneHintÚDevicePropertiesÚget_warp_sizeÚnative_matmul_persistent_rblockÚReductionHintÚTRITON_MAX_BLOCKÚTRITON_MAX_RSPLITÚ
TritonMeta)Úget_max_y_gridÚnext_power_of_2)ÚBaseSchedulerNodeÚ$FusedExternTritonKernelSchedulerNodeÚFusedSchedulerNodeÚ	SchedulerÚSchedulerNode)Úget_broadcasted_shape)Úcoor_benchmark_device_idxÚcoor_device_strÚget_raw_stream_name)Ú_TMA_SUPPORTED_DTYPESÚcache_on_selfÚDelayReplaceLineÚdevice_supports_fp64Úget_bounds_index_exprÚget_fused_kernel_nameÚget_kernel_metadataÚis_welford_reductionÚPlaceholderÚprefix_is_pointwiseÚprefix_is_reductionÚ	sympy_dotÚsympy_productÚ
sympy_subsÚTMA_ALIGNMENTÚtriton_typeÚtriton_version_uses_attrs_dictÚupcast_compute_type)Ú_opsÚReductionTypeÚ	StoreModeÚV)Ú"get_kernel_category_by_source_code)ÚBlockPatternMatcher)ÚArgNameÚBackendFeatureÚConstexprArgÚCSEÚCSEVariableÚDeferredLineÚIndentedBufferÚInplacedBufferÚis_buffer_removedÚOpOverridesÚPythonPrinterÚ
RemovedArgÚSizeArgÚ	TensorArgÚWorkspaceArgÚWorkspaceZeroMode)Úconstant_reprÚDerivedIterationRangesRootÚIterationRangesÚIterationRangesEntryÚIterationRangesRootÚPartialAccumulateÚ
SIMDKernelÚSIMDScheduling)Ú%tiling_scores_suggest_inner_reduction)Ú	config_ofÚequal_1_arg_indicesÚis_unaligned_buffer_nameÚselect_tile_hintÚshould_unwrap_unspec_argÚsignature_to_metaÚ/use_uint8_triton_storage_for_cuda_float8_e4m3fn)ÚSymbolicCallArg)Ú
ModuleType©ÚDtypePropagationOpsHandler)ÚShapeEnv)ÚIRNode)ÚBlockShapeType)ÚSIMDKernelFeaturesÚ_TÚ
perf_hintsÚscheduleÚfusionc                ó–   € V R9   pV'       d   RMRpV R9   d,   \         P                  '       d
   V R	9   d   RMRpV RV  RV 2# V RV  2# )
ÚanyÚtriton_helpersÚtlÚ_strictÚ Ú.Ú2)rˆ   ÚmaxÚminÚprodÚfmax)r�   r�   r’   )r�   r�   )r#   Ústrict_signed_zero)Úreduction_typeÚ
use_helperÚmoduleÚstricts   &   Ú_/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/codegen/triton.pyÚget_triton_reduction_functionr™   ¢   sn   € ØÐ#HÑH€Jß!+Ñ°€FØÐ/Ô/ô ×(×(Ð(¨^¸~Ô-Mñ àð 	ð
 �˜˜>Ð*¨!¨F¨8Ð4Ð4à�˜˜>Ð*Ð+Ð+ó    c               ó   € V ^8„  d   QhRR/# )é   ÚexprÚobject© )Úformats   "r˜   Ú__annotate__r¡   °   s   € ÷ 	ñ 	 ñ 	rš   c                óâ   € \        V \        P                  4      '       g   R# \        V \        P                  4      ;'       g-    V P                  ;'       d    \        V P                  4      ^ 8H  # )zŽ
Is this expression a Sympy Integer or is it an integer sympy Expr
containing no free symbols. The latter case can happen with Identity expr.
F)Ú
isinstanceÚsympyÚExprÚIntegerÚ
is_integerÚlenÚfree_symbols©r�   s   &r˜   Úis_sympy_integer_liker«   °   sT   € ô
 �dœEŸJ™J×'Ò'ÙÜ�dœEŸM™MÓ*÷ ð Ø�‰×7Ð7œC × 1Ñ 1Ó2°aÑ7ðrš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r�   ú
sympy.ExprÚdtypeútorch.dtypeÚreturnrŸ   )r    s   "r˜   r¡   r¡   ¼   s$   € ÷ &'ñ &'Ø
ð&'Ø(ð&'àñ&'rš   c                óâ   aa€ VP                   '       d   V P                  \        4      '       g   V # V P                  \        J d   \	        V P
                  !  # R  R loR VV3R lloS! V 4      # )c               ó    € V ^8„  d   QhRRRR/# )rœ   Únodezsympy.Basicr°   ÚboolrŸ   )r    s   "r˜   r¡   Ú6_materialize_trunc_to_float_expr.<locals>.__annotate__Ë   s   € ÷ 
ñ 
 ð 
°ñ 
rš   c                óX   € \        \        V R R4      ;'       g    \        V RR4      4      # )Ú
is_BooleanFÚis_Relational)r´   Úgetattr)r³   s   &r˜   Úis_predicate_exprÚ;_materialize_trunc_to_float_expr.<locals>.is_predicate_exprË   s-   € ÜÜ�D˜,¨Ó.×WÐW´'¸$ÀÐQVÓ2Wó
ð 	
rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r³   r­   r°   rŸ   )r    s   "r˜   r¡   rµ   Ð   s   € ÷ $ñ $ Jð $°:ñ $rš   c                ó¤  <€ V P                  \        4      '       g   V # V P                  \        J d   \        V P                  !  # S! V 4      '       g   V P
                  '       d   V # \        ;QJ d"    . VV3R  lV P                   4       F  NK  	  5M! VV3R  lV P                   4       4      pWP                  8X  d   V # V P                  ! V!  # )c              3  ó”   <"  € T F=  p\        V\        P                  4      '       d   S! V4      '       g	   S! V4      MTx € K?  	  R # 5i©N)r£   r¤   r¥   )Ú.0Úargrº   Úrewrite_float_subexprs   & €€r˜   Ú	<genexpr>ÚR_materialize_trunc_to_float_expr.<locals>.rewrite_float_subexpr.<locals>.<genexpr>Ø   sG   øé € ð 
ñ !�ô ˜#œuŸz™z×*Ò*Ñ3DÀS×3IÒ3Iñ " #Ô&àôó !ùs
   ƒ2A¶A)Úhasr   Úfuncr   Úargsr§   Útuple)r³   Únew_argsrº   rÂ   s   & €€r˜   rÂ   Ú?_materialize_trunc_to_float_expr.<locals>.rewrite_float_subexprÐ   s    ø€ Ø�x‰xœ
×#Ò#ØˆKØ�9‰9œ
Ó"Ü §¡Ñ+Ð+Ù˜T×"Ò" d§o§o oØˆKç”5õ 
ð —y’yó	
—5‘5õ 
ð —y’yó	
ó 
ˆð —y‘yÔ ØˆKØ�yŠy˜(Ñ#Ð#rš   )Úis_floating_pointrÅ   r   rÆ   r   rÇ   )r�   r®   rº   rÂ   s   &&@@r˜   Ú _materialize_trunc_to_float_exprrÌ   ¼   s]   ù€ ð ×"×"Ð"¨$¯(©(´:×*>Ò*>Øˆð ‡y�y”JÓÜ˜TŸY™YÑ'Ð'õ
÷
$ñ $ñ$ ! Ó&Ð&rš   c                  óN   € ] tR t^åt$ Rt/ tR]R&   / tR]R&   ]R R l4       t	Rt
R	# )
ÚOpDtypeSupportz“
Some Triton ops such as libdevice and tl.math only support float32 and float64.
This class records which dtypes are supported by specific IR ops.
z"dict[str, OrderedSet[torch.dtype]]Úsupported_dtypeszdict[str, bool]Úconvert_outputsc               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rÆ   zCallable[..., str]Úconvert_outputr´   r°   ÚNonerŸ   )r    s   "r˜   r¡   ÚOpDtypeSupport.__annotate__ï   s#   € ÷ 6ñ 6Ð#5ð 6Àtð 6ÐPTñ 6rš   c                	ó¦   € VP                   p\        \        P                  \        P                  .4      V P
                  V&   W P                  V&   R # r¿   )Ú__name__r   ÚtorchÚfloat32Úfloat64rÏ   rÐ   )ÚclsrÆ   rÒ   Úop_names   &&& r˜   Úregister_upcastÚOpDtypeSupport.register_upcastî   s;   € à—-‘-ˆÜ(2´E·M±MÄ5Ç=Á=Ð3QÓ(Rˆ×Ñ˜WÑ%Ø'5×Ñ˜GÓ$rš   rŸ   N)rÖ   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÏ   Ú__annotations__rÐ   ÚclassmethodrÜ   Ú__static_attributes__rŸ   rš   r˜   rÎ   rÎ   å   s1   ‡ ñð
 <>ÐÐ8Ó=Ø')€O�_Ó)àô6ó ô6rš   rÎ   c               ó   € V ^8„  d   QhRR/# ©rœ   r°   ÚstrrŸ   )r    s   "r˜   r¡   r¡   ö   s   € ÷ ñ  Cñ rš   c                 ó‚   € \        4       '       g   R# ^ RIp \        V P                  P                  R4      '       d   R# R# )zX
import AttrsDescriptor if the triton version is new enough to have this
class defined.
rŒ   NÚAttrsDescriptorz4from triton.compiler.compiler import AttrsDescriptor)r   Útriton.compiler.compilerÚhasattrÚcompiler)Útritons    r˜   Úgen_attr_descriptor_importrî   õ   s3   € ô ×ÒÙã#ô ˆv�‰×'Ñ'Ð):×;Ò;ÙEárš   c            
      ó@  € ] tR tRtRt]! ]P                  ]P                  .4      t	]! ]P                  ]P                  ]P                  .]	O4      t] U u/ uF+  p V \        P                  ! \         V ,           R2RRR7      bK-  	  up t] U u/ uF9  p V \        P                  ! \         V ,          P%                  4        R2RRR7      bK;  	  up t]R R	 l4       t]R
 R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       tRtR# u up i u up i )ÚTritonSymbolsi  zM
Stores sympy.Symbol instances and constants associated with triton codegen.
ÚoffsetT©ÚintegerÚnonnegativeÚBLOCK©ró   Úpositivec               ó    € V ^8„  d   QhRRRR/# )rœ   r�   r­   r°   r�   rŸ   )r    s   "r˜   r¡   ÚTritonSymbols.__annotate__  s   € ÷ 0ñ 0 :ð 0°.ñ 0rš   c           
     	ó˜  € RpVP                   pV EF¥  p\        V\        P                  4      '       dM   \        P
                  P                  P                  VP                  ,          p\        VP                  4      pEM*\        V\        P                  \        P                  \        P                  \        P                  \        P                  \        P                   34      '       d   RpM»\        P
                  P"                  P%                  V4      pVf   \'        RVP                   24      hVP(                  p\        P
                  P+                  4       p	R.V	,          p
VP,                  f   RpM1\/        V P1                  V4      4      W¨P,                  &   \        V
4      p\3        W&4      pEK¨  	  Vf   \'        R4      hV# )NzUnregistered range symbol: Ú1zexpr_shape must not be NonerŸ   )r©   r    r!   ÚTMPrX   ÚkernelÚcseÚvarname_mapÚnamerÈ   ÚshapeÚUNBACKED_INTÚSIZEÚPRECOMPUTED_SIZEÚINDEXÚFLOATÚUNBACKED_FLOATÚrange_tree_nodesÚgetÚAssertionErrorÚrootÚtriton_tensor_ndimÚ
tensor_dimrç   Úget_block_sizer?   )rÚ   r�   Ú
expr_shapeÚ	expr_varsÚvarÚcse_varÚ	var_shaper³   ÚtreeÚndimr  s   &&         r˜   Úget_block_shapeÚTritonSymbols.get_block_shape  s_  € ð &(ˆ
Ø×%Ñ%ˆ	ÜˆCÜ˜c¤4§8¡8×,Ò,ÜŸ(™(Ÿ,™,×2Ñ2°3·8±8Õ<�Ü! '§-¡-Ó0’	ÜØä×%Ñ%Ü—I‘IÜ×)Ñ)Ü—J‘JÜ—J‘JÜ×'Ñ'ð÷
ò 
ð ‘	ä—x‘x×0Ñ0×4Ñ4°SÓ9�Ø’<Ü(Ð+FÀsÇxÁxÀjÐ)QÓRÐRØ—y‘y�Ü—x‘x×2Ñ2Ó4�Ø˜ ��Ø—?‘?Ò*ð !#‘Iä-0°×1CÑ1CÀDÓ1IÓ-J�EŸ/™/Ñ*Ü % e£�Iô /¨zÓE‹JñA ðD ÒÜ Ð!>Ó?Ð?àÐrš   c               ó    € V ^8„  d   QhRRRR/# ©rœ   r  rm   r°   r­   rŸ   )r    s   "r˜   r¡   rù   P  s   € ÷ &ñ & /ð &°jñ &rš   c                	ó6   € VP                   P                  4       # r¿   )r  Ú
block_size©rÚ   r  s   &&r˜   r  ÚTritonSymbols.get_block_sizeO  s   € à�y‰y×#Ñ#Ó%Ð%rš   c               ó    € V ^8„  d   QhRRRR/# r  rŸ   )r    s   "r˜   r¡   rù   T  s   € ÷ (ñ ( Oð (¸
ñ (rš   c                	ó6   € VP                   P                  4       # r¿   )r  Úblock_offsetr  s   &&r˜   Úget_block_offsetÚTritonSymbols.get_block_offsetS  s   € à�y‰y×%Ñ%Ó'Ð'rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rý   ÚTritonKernelÚsymbolúsympy.Symbolr°   ú
str | NonerŸ   )r    s   "r˜   r¡   rù   X  s$   € ÷ 
ñ 
Ø!ð
Ø+7ð
à	ñ
rš   c                	óä   € VP                   P                  V4      ;pe   VP                  P                  4       # V P                   F&  p\        W$4      '       g   K  \        V,           R2u # 	  R # )NÚmask)r  r	  r  Ú	mask_nameÚblock_typesr    r   )rÚ   rý   r%  r³   Úsymts   &&&  r˜   Úmask_name_for_symbolÚ"TritonSymbols.mask_name_for_symbolW  sd   € ð ×+Ñ+×/Ñ/°Ó7Ð7ˆDÒDØ—9‘9×&Ñ&Ó(Ð(Ø—O”OˆDÜ˜f×+Ô+Ü$ TÕ*Ð+¨4Ð0Ò0ñ $ñ rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rý   r$  r%  r&  r°   r´   rŸ   )r    s   "r˜   r¡   rù   e  s$   € ÷ ;ñ ;Ø!ð;Ø+7ð;à	ñ;rš   c                	ó–   € VP                   P                  V4      ;pe   VP                  P                  # \	        W P
                  4      # r¿   )r  r	  r  Úis_reductionr    Úreduction_types)rÚ   rý   r%  r³   s   &&& r˜   Úis_reduction_index_symbolÚ'TritonSymbols.is_reduction_index_symbold  sA   € ð ×+Ñ+×/Ñ/°Ó7Ð7ˆDÒDØ—9‘9×)Ñ)Ð)Ü˜f×&9Ñ&9Ó:Ð:rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rý   r$  r�   r­   r°   r´   rŸ   )r    s   "r˜   r¡   rù   m  s"   € ÷ 
ñ 
°ð 
ÀJð 
ÐSWñ 
rš   c                ó¦   a a€ \         ;QJ d*    V V3R lVP                   4       F  '       g   K   R# 	  R# ! V V3R lVP                   4       4      # )zHReturn whether any symbol in a composite block shape is reduction-owned.c              3  óH   <"  € T F  pSP                  SV4      x € K  	  R # 5ir¿   )r3  )rÀ   r%  rÚ   rý   s   & €€r˜   rÃ   Ú;TritonSymbols.has_reduction_index_symbol.<locals>.<genexpr>o  s(   øé € ð 
á+�ð ×)Ñ)¨&°&×9Ð9Û+ùs   ƒ"TF)rˆ   r©   )rÚ   rý   r�   s   ff&r˜   Úhas_reduction_index_symbolÚ(TritonSymbols.has_reduction_index_symboll  sL   ù€ ÷ ‹sõ 
à×+Ò+ó
�sŒsð 	
Šsð 	
ˆsõ 
à×+Ò+ó
ó 
ð 	
rš   rŸ   N)rÖ   rÞ   rß   rà   rá   r   r!   ÚR0_INDEXÚR1_INDEXr2  ÚXBLOCKÚYBLOCKÚZBLOCKr+  r¤   ÚSymbolr   Úblock_offsetsÚupperÚblock_sizesrã   r  r  r!  r-  r3  r9  rä   )r,  s   0r˜   rð   rð     sU  † ññ ! $§-¡-°·±Ð!?Ó@€OÙ˜dŸk™k¨4¯;©;¸¿¹ÐVÀoÐVÓW€Kñ  óáˆDð 	Œe�lŠlœj¨Õ.Ð/¨vÐ6ÀÐRVÔWÒWÙñ€Mñ  ó	ñ  ˆDð 	Œe�lŠlÜ˜$Õ×%Ñ%Ó'Ð(¨Ð.¸Àtô
ò 	
ñ  ñ	€Kð ô0ó ð0ðd ô&ó ð&ð ô(ó ð(ð ô
ó ð
ð ô;ó ð;ð ô
ó ô
ùò{ùò
s   Á1DÂ?Drð   c                  ó¦   € ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R
]R&   R]R&   R R ltR R ltR R ltR R ltR R lt	]
R R l4       tRtR# )ÚIndexingOptionsiu  rç   Ú	index_strúOrderedSet[str]Ú	mask_varsr'  Ú
expand_strr´   Ú_has_rindexr­   ÚindexzSequence[int | str] | NoneÚexpand_shapec               ó   € V ^8„  d   QhRR/# ©rœ   r°   r´   rŸ   )r    s   "r˜   r¡   ÚIndexingOptions.__annotate__~  s   € ÷ $ñ $˜$ñ $rš   c                	ó,   € \        V P                  4      # r¿   )r´   rH  ©Úselfs   &r˜   Úhas_maskÚIndexingOptions.has_mask~  s   € Ü�D—N‘NÓ#Ð#rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rO  �  s   € ÷ 9ñ 9˜dñ 9rš   c                	óJ   € \        V P                  \        P                  4      # r¿   )r   rK  r!   rü   rQ  s   &r˜   Úhas_indirectÚIndexingOptions.has_indirect�  s   € Ü" 4§:¡:¬t¯x©xÓ8Ð8rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rO  „  s   € ÷  ñ  ˜Dñ  rš   c                	ó   € V P                   # r¿   )rJ  rQ  s   &r˜   Ú
has_rindexÚIndexingOptions.has_rindex„  s   € Ø×ÑÐrš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rO  ‡  s   € ÷ Kñ K˜Tñ Krš   c                	ó’   € \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3  óV   "  € T F  p\        V4      P                  R 4      x € K!  	  R# 5i)ÚtmpN)rç   Ú
startswith)rÀ   r)  s   & r˜   rÃ   Ú.IndexingOptions.has_tmpmask.<locals>.<genexpr>ˆ  s"   é € ÐJ¹>°4”3�t“9×'Ñ'¨×.Ð.»>ùó   ‚')TF)rˆ   rH  rQ  s   &r˜   Úhas_tmpmaskÚIndexingOptions.has_tmpmask‡  s3   € ß‹sÑJ¸4¿>º>ÓJ�sŒsÐJŠsÐJˆsÑJ¸4¿>º>ÓJÓJÐJrš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rO  Š  s   € ÷ 
ñ 
˜4ñ 
rš   c                	óè   a € \         ;QJ d;    V 3R  l\        P                  P                  4        4       F  '       g   K   R# 	  R# ! V 3R  l\        P                  P                  4        4       4      # )c              3  óÄ   <"  € T FU  pSP                    FB  p\        V\        4      ;'       d&    VP                  ;'       d    VP	                  V4      x € KD  	  KW  	  R # 5ir¿   )rH  r£   rç   r1  Ú	owns_mask)rÀ   r  r)  rR  s   &  €r˜   rÃ   Ú,IndexingOptions.has_rmask.<locals>.<genexpr>�  sS   øé € ð 
á5�ØŸœ�ô �tœSÓ!×PÐP d×&7Ñ&7×PÐP¸D¿N¹NÈ4Ó<PÔPá&ñ QÛ5ùs   ƒ*A ®A ÁA TF)rˆ   rX   rý   Úactive_range_treesrQ  s   fr˜   Ú	has_rmaskÚIndexingOptions.has_rmaskŠ  sZ   ø€ ÷ ‹sô 
äŸ™×3Ñ3Ô5ó
�sŒsð 	
Šsð 	
ˆsô 
äŸ™×3Ñ3Ô5ó
ó 
ð 	
rš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   rO  ”  s   € ÷ 
ñ 
˜#ñ 
rš   c                	óŽ   € V P                   '       d3   R P                  \        \        \        V P                   4      4      4      # R# )ú & rÓ   )rH  ÚjoinÚsortedÚmaprç   rQ  s   &r˜   Úmask_strÚIndexingOptions.mask_str“  s6   € ð =A¿N¿N¸NˆE�J‰J”vœc¤# t§~¡~Ó6Ó7Ó8ð	
ØPVð	
rš   rŸ   N)rÖ   rÞ   rß   rà   râ   rS  rW  r[  rd  rl  Úpropertyrt  rä   rŸ   rš   r˜   rE  rE  u  sS   ‡ àƒNØÓØÓØÓØÓØ,Ó,õ$õ9õ õKõ
ð ô
ó ô
rš   rE  c                  óv  € ] tR tRt$ RtR]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   R]R&   R]R&   RtR]R&   RtR]R&   ]R R l4       t	]R R l4       t
]R R l4       t]R R l4       t]RR/R  R! ll4       tR" R# ltR$ R% ltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4 R5 ltR6tR# )7ÚBlockDescriptorOptionsi�  zÎ
This is a base class that describes a block descriptor used in Triton kernels.
It can be used to create either a tensor descriptor (with TensorDescriptorOptions)
or a block pointer (with BlockPtrOptions).
ÚBlockParametersÚparamsr­   Úconstant_offsetú	list[int]ÚorderrG  rH  úSequence[sympy.Expr]Úbroadcast_shapeú
list[bool]Úbroadcasting_dimsÚfinal_shapeúBlockParameters.StrideSorterÚstride_sorterNzlist[int] | NoneÚ_boundary_checkFr´   Úcan_liftc               ó   € V ^8„  d   QhRR/# ©rœ   r°   úlist[sympy.Expr]rŸ   )r    s   "r˜   r¡   Ú#BlockDescriptorOptions.__annotate__¶  s   € ÷ !ñ !Ð'ñ !rš   c                	ó.   € V P                   P                  # r¿   )rz  r  rQ  s   &r˜   r  ÚBlockDescriptorOptions.shapeµ  s   € à�{‰{× Ñ Ð rš   c               ó   € V ^8„  d   QhRR/# rˆ  rŸ   )r    s   "r˜   r¡   rŠ  º  s   € ÷ 'ñ 'Ð-ñ 'rš   c                	ó.   € V P                   P                  # r¿   )rz  Úblock_shaperQ  s   &r˜   r�  Ú"BlockDescriptorOptions.block_shape¹  s   € à�{‰{×&Ñ&Ð&rš   c               ó   € V ^8„  d   QhRR/# rˆ  rŸ   )r    s   "r˜   r¡   rŠ  ¾  ó   € ÷ #ñ #Ð)ñ #rš   c                	ó.   € V P                   P                  # r¿   )rz  ÚstridesrQ  s   &r˜   r”  ÚBlockDescriptorOptions.strides½  ó   € à�{‰{×"Ñ"Ð"rš   c               ó   € V ^8„  d   QhRR/# rˆ  rŸ   )r    s   "r˜   r¡   rŠ  Â  r’  rš   c                	ó.   € V P                   P                  # r¿   )rz  ÚoffsetsrQ  s   &r˜   r™  ÚBlockDescriptorOptions.offsetsÁ  r–  rš   c               ó8   € V ^8„  d   QhRRRRRRRRR	R
RRRRRR/# )rœ   rz  ry  r{  r­   Úrange_treesúlist[IterationRangesRoot]rH  rG  Úget_max_blockúCallable[[str], int]Ústride_sorter_clsz"type[BlockParameters.StrideSorter]r†  r´   r°   rx  rŸ   )r    s   "r˜   r¡   rŠ  Æ  sf   € ÷ mñ mð  ðmð $ð	mð
 /ðmð #ðmð ,ðmð >ðmð ðmð 
 ñmrš   c               óÌ  a€ \         P                  P                  oR V3R llpV! VP                  4      Vn        V! VP                  4      Vn        VP
                   U	u. uF  p	SP                  V	^4      NK  	  p
p	\        V
4      '       d   RV
R&   VP                  V
4      pV Uu. uF  p\        P                  V4      NK  	  pp\         P                  P                  '       dJ   V^ ,          P                  R8w  d!   \        RV^ ,          P                  : 24      hVP                  ^ 4       \!        4       pVP
                   F†  p\#        V\$        P&                  4      '       g   K%  VP(                   FQ  p\+        V4      P-                  4       p\/        V4      '       g   \1        V4      '       g   K@  VP3                  V4       KS  	  Kˆ  	  \         P                  P4                  p\         P                  P6                  '       g�   \9        V4      \9        \         P                  P:                  4      V,
          8X  dX   \         P                  P<                  P?                  4       '       d*   V\$        P@                  PB                  .V,          ,          pVPE                  V\         P                  PF                  R7      w  ppVP                   Uu. uF  pSP                  V^ 4      NK  	  ppVP
                  pVP                  V4      p \H        PJ                  ! \         P                  PF                  VP                  4      pV ! V\         P                  P                  PS                  V4      VVVVVVVR7	      pVPU                  WS4       V# u up	i u upi u upi   \         d4    \M        \O        \Q        \9        TP                  4      4      4      4      p L—i ; i)	z2Helper to create a BlockDescriptorOptions instancec               ó    € V ^8„  d   QhRRRR/# )rœ   ÚexprszIterable[sympy.Expr]r°   r‰  rŸ   )r    s   "r˜   r¡   Ú3BlockDescriptorOptions.create.<locals>.__annotate__Õ  s    € ÷ 	Nñ 	NÐ3ð 	NÐ8Hñ 	Nrš   c                óP   <€ V  Uu. uF  pSP                  V4      NK  	  up# u upi r¿   )Úlookup_precomputed_size)r£  r�   Úsizevarss   & €r˜   Úlookup_sizeÚ2BlockDescriptorOptions.create.<locals>.lookup_sizeÕ  s&   ø€ ÙGLÓMÁu¸t�H×4Ñ4°TÖ:ÁuÑMÐMùÒMs   †#FÚxz0expected first range tree prefix to be 'x', got )r   Ú	shape_env)	rz  r{  r}  rH  r‚  r  r�  r„  r†  éÿÿÿÿ)+rX   Úgraphr§  r  r”  r�  Ústatically_known_equalsÚallÚremove_dimsrð   r  rý   Úno_x_dimÚprefixr
  Úpopr   r£   r¤   r¥   r©   rç   ÚlowerrM   rL   ÚaddÚnum_reduction_dimsÚinside_reductionr¨   ÚnumelsÚfeaturesr1  ÚSÚOneÚmaybe_sort_with_stride_orderÚ
_shape_envr&   Úargsort_symÚlistÚreversedÚranger¦  Úcompute_boundary_check)rÚ   rz  r{  rœ  rH  rž  r   r†  r¨  ÚdimÚsingleton_dimsr  r‚  Úincluded_final_shape_dimsr�   ÚsymÚsym_strÚreduction_ndimr„  Ústrider�  r  r}  Úresultr§  s   &$$$$$$$                @r˜   ÚcreateÚBlockDescriptorOptions.createÅ  s0  ø€ ô —7‘7×#Ñ#ˆ÷	Nð 	Nñ # 6§<¡<Ó0ˆŒÙ$ V§^¡^Ó4ˆŒð AG×@RÒ@Ró
Ù@R¸ˆH×,Ñ,¨S°!Ö4Ñ@Rð 	ð 
ô ˆ~×Òà!&ˆN˜2Ñð ×#Ñ# NÓ3ˆñ GRÓRÁk¸d”}×3Ñ3°DÖ9ÁkˆÐRÜ�8‰8××ÐØ˜1�~×$Ñ$¨Ô+Ü$ØFØ" 1•~×,Ñ,Ñ/ð1óð ð �O‰O˜AÔô %/£LÐ!Ø×&Ô&ˆDÜ˜$¤§
¡
×+Ô+Ø×,Ô,�CÜ! #›hŸn™nÓ.�GÜ*¨7×3Ò3Ô7JÈ7×7SÔ7SØ1×5Ñ5°cÖ:ó -ñ 'ô Ÿ™×4Ñ4ˆä—‘×)×)Ð)ÜÐ-Ó.´#´a·h±h·o±oÓ2FÈÕ2WÔWÜ—‘×!Ñ!×.Ñ.×0Ò0ð œEŸG™GŸK™K˜=¨>Õ9Õ9ˆKð !'× CÑ CØ/¼1¿7¹7×;MÑ;Mð !Dó !
Ñˆ�ð GMÇnÂnó
ÙFT¸FˆH×,Ñ,¨V°QÖ7Ánð 	ð 
ð !×,Ñ,ˆð ×#Ñ#Ð$5Ó6ˆð	?ô ×%Ò%¤a§g¡g×&8Ñ&8¸&¿.¹.ÓIˆEñ
 ØÜŸG™G×,Ñ,×DÑDÀ_ÓUØØØ#Ø+Ø/Ø'Øô

ˆð 	×%Ñ% mÔAØˆùòg
ùò SùòP
øô  ô 	?äœ¤%¬¨F¯N©NÓ(;Ó"<Ó=Ó>ŠEð	?ús$   Á!NÂ)NËN Ì9N% Î%;O#Ï"O#c               ó(   € V ^8„  d   QhRRRRRRRR/# ©rœ   r�   r­   Úreplacementr,  r!   r°   rŸ   )r    s   "r˜   r¡   rŠ  5  ó,   € ÷ 8ñ 8Øð8Ø-7ð8Ø?Cð8à	ñ8rš   c                óJ   € \         P                  V,          p\        WV/4      # ©z>
Replaces instances of {symt}_offset with the new expression.
©rð   rA  rP   ©rR  r�   rÏ  r,  Úroffsets   &&&& r˜   Úreplace_offsetÚ%BlockDescriptorOptions.replace_offset5  ó$   € ô  ×-Ñ-¨dÕ3ˆÜ˜$¨+Ð 6Ó7Ð7rš   c               ó    € V ^8„  d   QhRRRR/# ©rœ   r�   r­   r°   rŸ   )r    s   "r˜   r¡   rŠ  >  ó   € ÷ ñ  Jð °:ñ rš   c                	ó‚   € \         P                   F*  pV P                  V\        P                  ! ^ 4      V4      pK,  	  V# ©r   ©rð   r2  rÖ  r¤   r¦   ©rR  r�   r,  s   && r˜   Úremove_roffsetsÚ&BlockDescriptorOptions.remove_roffsets>  ó4   € Ü!×1Ô1ˆDØ×&Ñ& t¬U¯]ª]¸1Ó-=¸tÓDŠDñ 2àˆrš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rž  rŸ  rœ  r�  r°   rÓ   rŸ   )r    s   "r˜   r¡   rŠ  C  s(   € ÷ 2
ñ 2
à+ð2
ð /ð2
ð 
ñ	2
rš   c           
     óŒ  € \         P                  P                  pV Uu/ uF@  p\        P                  VP
                  ,          V! \        VP
                  ,          4      bKB  	  pp\        \        \         P                  P                  V4      4      p\        \        V P                  4      4       Uu. uEFw  pVP                  V P                  V,          \         P"                  P$                  4      '       d   KG  V'       dF   \        P                  \&        P(                  ,          V P*                  V,          P,                  9   g„   VP/                  V P                  V,          V P*                  V,          4      '       d   KÐ  VP/                  V P                  V,          \1        V P*                  V,          V4      4      '       d   EK  \         P                  P2                  '       d?   V P*                  V,          \        P                  \&        P4                  ,          8X  d   EKu  VNEKz  	  upV n        R# u upi u upi )z6List of indices to pass to tl.load(boundary_check=...)N)rX   r­  r§  rð   rC  r,  r   rˆ   rs  rý   Úneeds_yz_grid_overflowrÁ  r¨   r  r®  r”  r¤   rº  ÚZeror!   r>  r�  r©   Ústatically_known_multiple_ofrP   r±  r=  r…  )rR  rž  rœ  r§  ÚtÚblock_to_maxÚneeds_overflow_gridÚidxs   &&&     r˜   rÂ  Ú-BlockDescriptorOptions.compute_boundary_checkC  sœ  € ô —7‘7×#Ñ#ˆñ !ó/
á �ô ×%Ñ% a§f¡fÕ-©}¼ZÈÏÉÕ=OÓ/PÒPÙ ð 	ð /
ô "¤#¤a§h¡h×&EÑ&EÀ{Ó"SÓTÐô œS §¡›_Ô-ó 
â-�à×4Ñ4°T·\±\À#Õ5FÌÏÉÏÉ×Uô ÷ ,Ü)×5Ñ5´d·k±kÕBØ×+Ñ+¨CÕ0×=Ñ=ô>ð %×AÑAØ ŸJ™J s�O¨T×-=Ñ-=¸cÕ-B÷ô ð !)× EÑ EØ ŸJ™J s�OÜ& t×'7Ñ'7¸Õ'<¸lÓK÷!õ ô* —H‘H×%×%Ð%Ø×(Ñ(¨Õ-´×1JÑ1JÌ4Ï;É;Õ1WÑW÷- ŠCÙ-ñ 
ˆÖùò/
ùò 
s3   ŸAH<Â4AIÃ=IÄA<IÆAIÇIÇ-8IÈ+Ic               ó   € V ^8„  d   QhRR/# )rœ   r°   r|  rŸ   )r    s   "r˜   r¡   rŠ  w  s   € ÷ $ñ $ 	ñ $rš   c                	óL   € V P                   f   \        R4      hV P                   # )Nz_boundary_check must be set)r…  r
  rQ  s   &r˜   Úboundary_checkÚ%BlockDescriptorOptions.boundary_checkw  s&   € Ø×ÑÒ'Ü Ð!>Ó?Ð?Ø×#Ñ#Ð#rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rŠ  |  s   € ÷ ñ ˜dñ rš   c                	ó   € R # ©FrŸ   rQ  s   &r˜   rW  Ú#BlockDescriptorOptions.has_indirect|  ó   € Ùrš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rŠ    s   € ÷ 
ñ 
˜Dñ 
rš   c                	ó’   € \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3  ó~   "  € T F3  p\         P                  \        R \        P                  4      V4      x € K5  	  R# 5i©r$  N)rð   r9  r
   rX   rý   )rÀ   r�   s   & r˜   rÃ   Ú4BlockDescriptorOptions.has_rindex.<locals>.<genexpr>€  s;   é € ð 
ñ )�ô ×4Ñ4Ü�^¤Q§X¡XÓ.°÷ð ó )ùs   ‚;=TF)rˆ   r�  rQ  s   &r˜   r[  Ú!BlockDescriptorOptions.has_rindex  sM   € ß‹sñ 
ð ×(Ò(ó	
�sŒsð 	
Šsð 	
ˆsñ 
ð ×(Ò(ó	
ó 
ð 	
rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rŠ  ‡  s   € ÷ !ñ !˜4ñ !rš   c                	ó"   € V P                  4       # r¿   )r[  rQ  s   &r˜   rl  Ú BlockDescriptorOptions.has_rmask‡  s   € Ø�‰Ó Ð rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rŠ  Š  s   € ÷ ñ ˜Tñ rš   c                	ó   € R # ró  rŸ   rQ  s   &r˜   rd  Ú"BlockDescriptorOptions.has_tmpmaskŠ  rõ  rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rŠ  �  s   € ÷ +ñ +˜$ñ +rš   c                	ó4   € \        V P                  4       4      # r¿   )r´   rï  rQ  s   &r˜   rS  ÚBlockDescriptorOptions.has_mask�  s   € Ü�D×'Ñ'Ó)Ó*Ð*rš   c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )rœ   Úvaluerç   Úinitial_shaper~  r‚  Úallow_implicitr´   Ú	for_storer°   z,tuple[str, Sequence[sympy.Expr | int | str]]rŸ   )r    s   "r˜   r¡   rŠ  �  sN   € ÷ p$ñ p$àðp$ð ,ðp$ð *ð	p$ð
 ðp$ð ðp$ð 
6ñp$rš   c                óˆ  aa€ VoR V3R llpV P                   pV P                  pV'       dK   V P                  P                  V P                   4      pV P                  P                  V P                  4      p\	        Wx4       U	U
u. uF)  w  ršV
'       d   \
        P                  P                  MT	NK+  	  pp	p
V! WV4      pTpV P                  P                  '       g=   V'       g5   \        V4      \        V4      8X  d   V P                  P                  V4      p\        P                  P                  oT;'       dl    \        V4      \        V4      8H  ;'       dM    \        ;QJ d(    V3R l\	        WÃ4       4       F  '       d   K   RM	  RM! V3R l\	        WÃ4       4       4      p\        V P                  4      '       d1   V'       g)   RV R\        P                  P!                  V4       R2pVoV P                   pV P                  P                  '       g�   V'       d   V P                  P"                  MV P                  P$                  pR	V RV R2pV Uu. uF  pSV,          NK  	  upoV'       d   V P                   M$V P                  P                  V P                   4      pV! WV4      pVS3# u up
p	i u upi )
a>  
Generate a broadcast and a reshape for the block descriptor.
This restores stride-0 dimensions which were removed from the block descriptor.

Transposes are also applied to the input using self.stride_sorter:
if for_store is True:
    - First Broadcast the value. Since self.broadcast_shape is stored in
    descending stride order, it must be reverted to the original order
    since the input value does not have dims with descending strides
    - After, transpose the broadcasted value so that dimensions are in
    descending stride order
    - Finally reshape to the block shape
else (for load):
    - First broadcast the value to self.broadcast_shape (strides are descending)
    - Then transpose the value so that dimensions no longer have descending strides
    - Finally reshape the block to the final kernel tile shape
c               ó(   € V ^8„  d   QhRRRRRRRR/# ©rœ   r  rç   Ú	old_shapeú Sequence[sympy.Expr | int | str]Ú	new_shaper°   rŸ   )r    s   "r˜   r¡   ÚJBlockDescriptorOptions.codegen_broadcast_and_reshape.<locals>.__annotate__«  s0   € ÷ 		ñ 		Øð		à7ð		ð 8ð		ð ñ			rš   c                óV   <€ \        WV4      p\        V4      \        V4      8w  d   VoV# r¿   )Útriton_reshapeÚtriton_shape_dims)r  r  r  rÊ  Úcurrent_shapes   &&& €r˜   Úapply_reshapeÚKBlockDescriptorOptions.codegen_broadcast_and_reshape.<locals>.apply_reshape«  s.   ø€ ô $ E°iÓ@ˆFÜ  Ó+Ô/@ÀÓ/KÔKØ )�ØˆMrš   c              3  ó~   <"  € T F2  w  rSP                  V^4      ;'       g    SP                  W4      x € K4  	  R# 5i©é   N)r®  )rÀ   Úpre_dimÚpost_dimr§  s   &  €r˜   rÃ   ÚGBlockDescriptorOptions.codegen_broadcast_and_reshape.<locals>.<genexpr>Ü  sK   øé € ð ñ *TÑ%�Gð ×0Ñ0°¸!Ó<÷ Gð GØ×3Ñ3°GÓFôGã)Sùs   ƒ=£=FTútl.broadcast_to(ú, Ú)ú	tl.trans()r  r�  r„  ÚrevertÚzipr¤   rº  r»  Úis_identityr¨   rX   r­  r§  r¯  rˆ   rý   Úindex_to_strÚsort_idxÚrevert_sort_idx)rR  r  r  r‚  r  r	  r  r  r�  rÃ  Úis_broadcastingÚpre_broadcast_shapeÚimplicit_broadcast_shapeÚsupports_implicit_broadcastr  Úpermute_dimsÚir  r§  s   &&&&&&           @@r˜   Úcodegen_broadcast_and_reshapeÚ4BlockDescriptorOptions.codegen_broadcast_and_reshape�  s‰  ù€ ð2 ;Hˆ÷		ð 		ð ×.Ñ.ˆØ ×2Ñ2Ð÷ Ø"×0Ñ0×7Ñ7¸×8LÑ8LÓMˆOØ $× 2Ñ 2× 9Ñ 9¸$×:PÑ:PÓ QÐô
 ),¨OÔ(Oô
á(OÑ$�÷ +ŒE�G‰G�KŠK°Ò3Ù(Oð 	ñ 
ñ ˜eÐ4GÓHˆà#6Ð à×"Ñ"×.×.Ð.ßÜÐ'Ó(¬C°Ó,<Ô<ð (,×'9Ñ'9×'@Ñ'@ÐATÓ'UÐ$ô —7‘7×#Ñ#ˆØ&4÷ '
ð '
ÜÐ(Ó)¬S°Ó-=Ñ=÷ ð ß“ô ô *-Ð-EÔ)Só——’ô ô *-Ð-EÔ)Sóó ð 	$ô ˆt×%Ñ%×&Ò&×/Jà" 5 '¨¬A¯H©H×,AÑ,AÀ/Ó,RÐ+SÐSTÐUð ð ,ˆMà×(Ñ(ˆ	Ø×!Ñ!×-×-Ð-÷ ð ×"Ñ"×+Ò+à×'Ñ'×7Ñ7ð ð
   ˜w b¨¨°aÐ8ˆEÙ7CÓD±|°!˜]¨1×-Ð-±|ÑDˆM÷ ð ×$Ò$à×'Ñ'×.Ñ.¨t×/CÑ/CÓDð ñ ˜e°Ó<ˆØ�mÐ#Ð#ùó{
ùòh Es   Â/J9ÉJ?)r…  )rÖ   rÞ   rß   rà   rá   râ   r…  r†  rv  r  r�  r”  r™  rã   rË  rÖ  rà  rÂ  rï  rW  r[  rl  rd  rS  r-  rä   rŸ   rš   r˜   rx  rx  �  sü   ‡ ñð ÓØÓØÓØÓØ)Ó)Ø!Ó!Ø%Ó%ð 0Ó/Ø(,€OÐ%Ó,ð €HˆdÓàô!ó ð!ð ô'ó ð'ð ô#ó ð#ð ô#ó ð#ð ðmð ömó ðmõ^8õõ
2
õh$õ
õ
õ!õõ+÷p$ñ p$rš   rx  c                  ó&   € ] tR tRtRR R lltRtR# )ÚTensorDescriptorOptionsi  c               ó    € V ^8„  d   QhRRRR/# ©rœ   r   rç   r°   rŸ   )r    s   "r˜   r¡   Ú$TensorDescriptorOptions.__annotate__  s   € ÷ ?ñ ?˜3ð ?°ñ ?rš   c                ó0  € \         P                  P                  pV P                  ^ 8w  d   V RV! V P                  4       R2MTRV! V P                  4       2RV! V P
                  4       2RV! V P                  4       2.pRRP                  V4       R2# )z×
Codegen a call to tl.make_tensor_descriptor()

Args:
    name: variable name for pointer
    roffset: unused, but kept for compatibility with BlockPtrOptions.format()

Returns:
    "tl.make_tensor_descriptor(...)"
ú + (r  úshape=ústrides=úblock_shape=ztl.make_tensor_descriptor(r  )rX   rý   r$  r{  r  r”  r�  rq  )rR  r   rÕ  ÚfrÇ   s   &&&  r˜   r    ÚTensorDescriptorOptions.format  s    € ô �H‰H×!Ñ!ˆð ×'Ñ'¨1Ô,ð �&˜™Q˜t×3Ñ3Ó4Ð5°QÑ7àà‘Q�t—z‘z“]�OÐ$Ø‘q˜Ÿ™“Ð'Ð(Ø™1˜T×-Ñ-Ó.Ð/Ð0ð	
ˆð ,¨D¯I©I°d«OÐ+<¸AÐ>Ð>rš   rŸ   N©T)rÖ   rÞ   rß   rà   r    rä   rŸ   rš   r˜   r0  r0    s   † ÷?ó ?rš   r0  c                  óJ   € ] tR tRtR R ltR R ltRR R lltR R	 ltR
tR# )ÚBlockPtrOptionsi   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÎ  rŸ   )r    s   "r˜   r¡   ÚBlockPtrOptions.__annotate__"  rÐ  rš   c                óJ   € \         P                  V,          p\        WV/4      # rÒ  rÓ  rÔ  s   &&&& r˜   rÖ  ÚBlockPtrOptions.replace_offset"  rØ  rš   c               ó    € V ^8„  d   QhRRRR/# rÚ  rŸ   )r    s   "r˜   r¡   r?  +  rÛ  rš   c                	ó‚   € \         P                   F*  pV P                  V\        P                  ! ^ 4      V4      pK,  	  V# rÝ  rÞ  rß  s   && r˜   rà  ÚBlockPtrOptions.remove_roffsets+  râ  rš   c               ó    € V ^8„  d   QhRRRR/# r2  rŸ   )r    s   "r˜   r¡   r?  0  s   € ÷ 7ñ 7˜3ð 7°ñ 7rš   c           	     óà  € \         P                  P                  p. V P                  OpV'       g    V Uu. uF  qPP	                  V4      NK  	  ppV P
                  ^ 8w  d   V RV! V P
                  4       R2MTRV! V P                  4       2RV! V P                  4       2RV! V P                  4       2RV! V P                  4       2RV! V4       2.pRR	P                  V4       R2# u upi )
zÍ
Codegen a call to tl.make_block_ptr()

Args:
    name: variable name for pointer
    roffset: should rn_offset be included in offsets=..., for use with tl.advance()

Returns:
    "tl.make_block_ptr(...)"
r5  r  r6  r7  r8  zorder=zoffsets=ztl.make_block_ptr(r  )rX   rý   r$  r™  rà  r{  r  r”  r�  r}  rq  )rR  r   rÕ  r9  r™  rñ   rÇ   s   &&&    r˜   r    ÚBlockPtrOptions.format0  só   € ô �H‰H×!Ñ!ˆØ!�D—L‘L�/ˆßÙBIÓJÁ'¸×+Ñ+¨FÖ3Á'ˆGÐJð ×'Ñ'¨1Ô,ð �&˜™Q˜t×3Ñ3Ó4Ð5°QÑ7àà‘Q�t—z‘z“]�OÐ$Ø‘q˜Ÿ™“Ð'Ð(Ø™1˜T×-Ñ-Ó.Ð/Ð0Ø‘Q�t—z‘z“]�OÐ$Ø‘q˜“z�lÐ#ð
ˆð $ D§I¡I¨d£OÐ#4°AÐ6Ð6ùò Ks   µC+c               ó    € V ^8„  d   QhRRRR/# )rœ   r,  r!   r°   r­   rŸ   )r    s   "r˜   r¡   r?  M  s   € ÷ ñ  Dð ¨Zñ rš   c           	     óô   € \         P                  V,          pV P                   Uu. uFE  pV P                  W2V4      V P                  V\        P
                  P                  V4      ,
          NKG  	  ppV# u upi )aF  
Codegen string to pass to tl.advance(name, ...).

Advance is the difference between offsets in each loop iteration.
To compute it, we replace rN_offset with multiples of RN_BLOCK.
Since we expect rN_offset to vary in range(0, rN_numel, RN_BLOCK), the first
iteration has rN_offset=0, while the second has rN_offset=RN_BLOCK.
)rð   rC  r™  rÖ  r¤   rº  ræ  )rR  r,  Úrblockrñ   Úadvances   &&   r˜   Úadvance_roffsetÚBlockPtrOptions.advance_roffsetM  s}   € ô ×*Ñ*¨4Õ0ˆð Ÿ,š,ó
ñ
 '�ð ×#Ñ# F°DÓ9Ø×%Ñ% f¬e¯g©g¯l©l¸DÓA÷Bð Bñ 'ð 	ð 
ð ˆùò
s   ¦AA5rŸ   Nr;  )	rÖ   rÞ   rß   rà   rÖ  rà  r    rL  rä   rŸ   rš   r˜   r=  r=     s   † õ8õ÷
7÷:ñ rš   r=  c               ó    € V ^8„  d   QhRRRR/# )rœ   r  r  r°   ú	list[str]rŸ   )r    s   "r˜   r¡   r¡   a  s   € ÷ ñ Ð=ð À)ñ rš   c                óš   € V  Uu. uF:  p\        V\        4      '       d   TM\        P                  P	                  V4      NK<  	  up# u upi )z¿Format mixed symbolic and pre-rendered Triton shape dimensions.

Nested-reduction codegen builds reshape/broadcast shapes from both sympy
expressions and already-rendered block-size strings.
)r£   rç   rX   rý   r$  ©r  rÃ  s   & r˜   r  r  a  sG   € ñ PUóÙOTÈŒz˜#œs×#Ò#‰¬¯©×)>Ñ)>¸sÓ)CÒCÉuñð ùò s   …A Ac               ó    € V ^8„  d   QhRRRR/# )rœ   r  r  r°   rç   rŸ   )r    s   "r˜   r¡   r¡   l  s   € ÷ 6ñ 6Ð<ð 6Àñ 6rš   c                ó>   € R RP                  \        V 4      4       R2# ©Ú[r  Ú])rq  r  ©r  s   &r˜   Útriton_shape_strrX  l  s!   € Øˆt�y‰yÔ*¨5Ó1Ó2Ð3°1Ð5Ð5rš   c               ó(   € V ^8„  d   QhRRRRRRRR/# r  rŸ   )r    s   "r˜   r¡   r¡   p  s0   € ÷ +ñ +Øð+à/ð+ð 0ð+ð 	ñ	+rš   c                ó€  € \        V\        4      '       d   \        V\        4      '       g   \        R4      h\        V4      p\        V4      pW48X  d   V # V Uu. uF  qUR8w  g   K  VNK  	  upV8w  d   RV  RRP	                  V4       R2# ^ p. pV Fc  pV\        V4      8  d*   WƒV,          8X  d   VP                  R4       V^,          pK<  VR8w  d   \        RV: 24      hVP                  R	4       Ke  	  V\        V4      8w  d   \        R
V R\        V4       24      hV  RRP	                  V4       R2# u upi )z<Workaround https://github.com/triton-lang/triton/issues/2836z*old_shape and new_shape must both be listsrû   útl.reshape(ú, [r  z])Ú:zexpected size '1', got rÓ   z(expected idx == len(old_shape_str), got ú != rU  rV  )r£   r¿  r
  r  rq  r¨   Úappend)	r  r  r  Úold_shape_strÚnew_shape_strÚsrë  ÚexpandÚsizes	   &&&      r˜   r  r  p  s@  € ô �y¤$×'Ò'¬J°yÄ$×,GÒ,GÜÐIÓJÐJä% iÓ0€MÜ% iÓ0€MàÔ%ØˆÙ Ó-‘=ˆa¨¡H�ˆ‘=Ñ-°Ô>Ø˜U˜G 3 t§y¡y°Ó'?Ð&@ÀÐCÐCà
€CØ€FÛˆØ”�]Ó#Ô#¨¸cÕ0BÔ(BØ�M‰M˜#ÔØ�1�HŠCà�sŒ{Ü$Ð'>¸t¹hÐ%GÓHÐHØ�M‰M˜&Ö!ñ ð Œc�-Ó Ô ÜØ6°s°e¸4ÄÀMÓ@RÐ?SÐTó
ð 	
ð ˆW�A�d—i‘i Ó'Ð(¨Ð*Ð*ùò# .s   ÁD;Á'D;c                  ó   € ] tR tRtR R ltR R lt]R R l4       tR R	 ltR
 R lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR  R! ltR" R# ltR$ R% ltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 ltR4 R5 ltR6 R7 ltR8 R9 lt R: R; lt!R< R= lt"R> R? lt#R@ RA lt$RBt%RC# )DÚTritonPrinteri–  c               ó    € V ^8„  d   QhRRRR/# ©rœ   r�   r­   r°   rç   rŸ   )r    s   "r˜   r¡   ÚTritonPrinter.__annotate__—  ó   € ÷ 
ñ 
 jð 
°Sñ 
rš   c                	óú   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R\        P
                  P                   R2# )r  úexpected 1 arg, got úlibdevice.trunc(ú).to(r  ©r¨   rÇ   r
  Ú_printrX   rý   Úindex_dtype©rR  r�   s   &&r˜   Ú_print_TruncToIntÚTritonPrinter._print_TruncToInt—  óe   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIð ˜tŸ{™{¨4¯9©9°Q­<Ó8Ð9¸¼q¿x¹x×?SÑ?SÐ>TÐTUÐVð	
rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  Ÿ  s   € ÷ Fñ F¨
ð F°sñ Frš   c                	óÎ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hV P                  VP                  ^ ,          4      pRV RV R2# )r  rl  z(libdevice.trunc(z) + tl.zeros_like(ú))©r¨   rÇ   r
  rp  )rR  r�   r  s   && r˜   Ú_print_TruncToFloatÚ!TritonPrinter._print_TruncToFloatŸ  s\   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIà—‘˜DŸI™I a�LÓ)ˆð # 5 'Ð);¸E¸7À"ÐEÐErš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   ri  ª  s   € ÷ ñ  Cñ rš   c                 ó\   € \        \        P                  P                  4      '       g   R# R# )z¯Return the Triton float type for scalar shape math.

Uses tl.float64 by default but falls back to tl.float32 on devices
that lack fp64 support (e.g. Intel Arc consumer GPUs).
ú
tl.float32ú
tl.float64)rF   rX   r­  Úcurrent_devicerŸ   rš   r˜   Ú_get_scalar_float_typeÚ$TritonPrinter._get_scalar_float_type©  s   € ô $¤A§G¡G×$:Ñ$:×;Ò;ÙÙrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  ´  s   € ÷ ñ  ð °ñ rš   c                	ó  € VP                   '       d   \        \        V4      4      pV# \        P                  ! 4       '       d&   \
        P                  P                  '       d   T pV# V P                  4       pR V RV R2pV# )útl.full([], r  r  )	r§   rç   Úintr#   Ú	is_fbcoder×   ÚversionÚhipr�  )rR  r�   ÚretÚ
float_types   &&  r˜   Ú_print_FloatÚTritonPrinter._print_Float´  sx   € Ø�?�?ˆ?ô ”c˜$“i“.ˆCð ˆ
ô ×Ò×Ò¤E§M¡M×$5×$5Ð$5Ø�FˆCð ˆ
ð ×4Ñ4Ó6ˆJØ    b¨¨°AÐ6ˆCØˆ
rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  Á  s   € ÷ 'ñ ' :ð '°#ñ 'rš   c                	ó  € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hV P                  VP                  ^ ,          \        R,          R,
          4      pV P                  4       pV RV R2# )r  rl  ÚAtomç      à?ú.to(r  )r¨   rÇ   r
  Úparenthesizer   r�  )rR  r�   rb  r‹  s   &&  r˜   Ú_print_ToFloatÚTritonPrinter._print_ToFloatÁ  ss   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIà×Ñ˜dŸi™i¨�l¬J°vÕ,>ÀÕ,DÓEˆØ×0Ñ0Ó2ˆ
Ø��D˜˜ AÐ&Ð&rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  É  s   € ÷ Fñ F Zð F°Cñ Frš   c                	ó  € VP                   w  r#VP                  '       dB   VP                  '       d0   V P                  VP                   R \        R,          R,
          4      # V P	                  V4      pV P	                  V4      pRV RV R2# )ú % r�  r‘  z!triton_helpers.remainder_integer(r  r  )rÇ   Úis_nonnegativeÚ	stringifyr   rp  ©rR  r�   ÚquotÚdivÚquot_sÚdiv_ss   &&    r˜   Ú_print_PythonModÚTritonPrinter._print_PythonModÉ  sv   € Ø—I‘I‰	ˆØ××Ð 3×#5×#5Ð#5Ø—>‘> $§)¡)¨U´J¸vÕ4FÈÕ4LÓMÐMà—‘˜TÓ"ˆà—‘˜CÓ ˆØ2°6°(¸"¸U¸GÀ1ÐEÐErš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  Ó  s   € ÷ 
Gñ 
G Jð 
G°3ñ 
Grš   c                	óT  € VP                   '       g   \        R 4      hVP                  w  r#VP                  '       dB   VP                  '       d0   V P	                  VP                  R\
        R,          R,
          4      # V P                  V4      pV P                  V4      pRV RV R2# )zexpr must be integerú // r�  r‘  z!triton_helpers.div_floor_integer(z,  r  )r§   r
  rÇ   r™  rš  r   rp  r›  s   &&    r˜   Ú_print_FloorDivÚTritonPrinter._print_FloorDivÓ  s‹   € Ø��ˆÜ Ð!7Ó8Ð8Ø—I‘I‰	ˆØ××Ð 3×#5×#5Ð#5Ø—>‘> $§)¡)¨V´ZÀÕ5GÈ#Õ5MÓNÐNà—‘˜TÓ"ˆà—‘˜CÓ ˆØ2°6°(¸#¸e¸WÀAÐFÐFrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  á  s   € ÷ Jñ J jð J°Sñ Jrš   c                	ó`   € V P                  VP                  R \        R,          R,
          4      # )ú / r�  r‘  )rš  rÇ   r   rr  s   &&r˜   Ú_print_IntTrueDivÚTritonPrinter._print_IntTrueDivá  s#   € Ø�~‰~˜dŸi™i¨´
¸6Õ0BÀSÕ0HÓIÐIrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  æ  s   € ÷ 
ñ 
 ð 
°ñ 
rš   c                	óú   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R\        P
                  P                   R2# ©r  rl  úlibdevice.floor(rn  r  ro  rr  s   &&r˜   Ú_print_floorÚTritonPrinter._print_flooræ  ru  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  î  rj  rš   c                	óú   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R\        P
                  P                   R2# r®  ro  rr  s   &&r˜   Ú_print_FloorToIntÚTritonPrinter._print_FloorToIntî  ru  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  ö  s   € ÷ Yñ Y :ð Y°#ñ Yrš   c                	óú   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R\        P
                  P                   R2# ©r  rl  úlibdevice.ceil(rn  r  ro  rr  s   &&r˜   Ú_print_ceilingÚTritonPrinter._print_ceilingö  óa   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIà  §¡¨T¯Y©Y°q­\Ó!:Ð ;¸5ÄÇÁ×AUÑAUÐ@VÐVWÐXÐXrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  ü  s   € ÷ Yñ Y Zð Y°Cñ Yrš   c                	óú   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R\        P
                  P                   R2# r¸  ro  rr  s   &&r˜   Ú_print_CeilToIntÚTritonPrinter._print_CeilToIntü  r¼  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri    s   € ÷ Cñ C ð C°ñ Crš   c                	ó,   € R V P                  V4       R2# )ztl.sqrt_rn((ú).to(tl.float32)))rp  rr  s   &&r˜   Ú_helper_sqrtÚTritonPrinter._helper_sqrt  s   € à˜dŸk™k¨$Ó/Ð0Ð0AÐBÐBrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri    s   € ÷ 	Uñ 	U Jð 	U°3ñ 	Urš   c           	     	óÈ   € V P                  VP                  ^ ,          4      pV P                  VP                  ^,          4      pV P                  4       pRV RV RV RV R2	# )r   zlibdevice.pow((rn  z), (rx  )rp  rÇ   r�  )rR  r�   ÚbaseÚexpr‹  s   &&   r˜   Ú_print_FloatPowÚTritonPrinter._print_FloatPow  s`   € à�{‰{˜4Ÿ9™9 Q�<Ó(ˆà�k‰k˜$Ÿ)™) A�,Ó'ˆð ×0Ñ0Ó2ˆ
Ø    e¨J¨<°t¸C¸5ÀÀjÀ\ÐQSÐTÐTrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri    s   € ÷ /ñ /¨
ð /°sñ /rš   c                	ó´  € V P                  4       pVP                  ^ ,          P                  '       d%   R\        VP                  ^ ,          4       RV R2pM)RV P	                  VP                  ^ ,          4       RV R2pVP                  ^,          pVP                  '       d   R\        V4       RV R2pMRV P	                  V4       RV R2pRV RV R2# )r   r…  r  r  Ú(rn  úlibdevice.pow()r�  rÇ   Ú
is_IntegerÚfloatrp  )rR  r�   r‹  rÈ  Úexp_valrÉ  s   &&    r˜   Ú_print_PowByNaturalÚ!TritonPrinter._print_PowByNatural  s×   € Ø×0Ñ0Ó2ˆ
Ø�9‰9�Q�<×"×"Ð"Ø!¤%¨¯	©	°!­Ó"5Ð!6°b¸¸ÀAÐF‰Dð �t—{‘{ 4§9¡9¨Q¥<Ó0Ð1°°z°lÀ!ÐDˆDØ—)‘)˜A•,ˆØ××ÐØ ¤ w£Ð 0°°:°,¸aÐ@‰Cð �d—k‘k 'Ó*Ð+¨5°°¸AÐ>ˆCð   ˜v R¨ u¨AÐ.Ð.rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  #  s   € ÷ *ñ * ð *°ñ *rš   c                	óæ   € V P                  VP                  ^ ,          4      pV P                  VP                  ^,          4      pV P                  VP                  ^,          4      pRV RV RV R2# )r   ú	tl.where(r  r  )ÚdoprintrÇ   )rR  r�   ÚcÚpÚqs   &&   r˜   Ú_print_WhereÚTritonPrinter._print_Where#  s_   € Ø�L‰L˜Ÿ™ 1�Ó&ˆØ�L‰L˜Ÿ™ 1�Ó&ˆØ�L‰L˜Ÿ™ 1�Ó&ˆØ˜1˜#˜R ˜s " Q C qÐ)Ð)rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r�   r­   Úcmprç   r°   rŸ   )r    s   "r˜   r¡   ri  )  s&   € ÷ Cñ C¨*ð C¸3ð CÀ3ñ Crš   c                ó  € \        VP                  4      ^8X  d#   V P                  VP                  ^ ,          4      # \        VP                  4      ^,          p\        V4      pV P                  V! VP                  RV !  4      pV P                  V! VP                  VR !  4      p\        ;QJ d    . R WV3 4       F  NK  	  5M! R WV3 4       4      w  rVVR9  d   \        RV R24      hRV RV RV RV R	V RV RV RV R
2# )z1
Helper for max/min code generation.
cmp: > or <
Nc              3  ó.   "  € T F  pR V R2x € K  	  R# 5i)rÎ  r  NrŸ   ©rÀ   rª  s   & r˜   rÃ   Ú6TritonPrinter._print_min_max_helper.<locals>.<genexpr>;  s   é € Ð.¡v !�q˜˜˜1•X£vùs   ‚zUnexpected comparator: 'Ú'rÎ  z * (Ú z= z) + rx  )Ú>Ú<)r¨   rÇ   rp  ÚtyperÈ   r
  )rR  r�   rß  ÚmidrÚ   ÚaÚbs   &&&    r˜   Ú_print_min_max_helperÚ#TritonPrinter._print_min_max_helper)  sü   € ô
 ˆt�y‰y‹>˜QÔà—;‘;˜tŸy™y¨�|Ó,Ð,ä�$—)‘)‹n Õ!ˆÜ�4‹jˆà�K‰K™˜TŸY™Y t¨˜_Ñ-Ó.ˆà�K‰K™˜TŸY™Y s t˜_Ñ-Ó.ˆ÷ ŒuÑ.¨¡vÓ.�u‰uÑ.¨¡vÓ.Ó.‰ˆØ�jÔ Ü Ð#;¸C¸5ÀÐ!BÓCÐCØ�1�#�T˜!˜˜A˜c˜U " Q C t¨A¨3¨d°1°#°Q°s°e¸1¸Q¸C¸rÐBÐBrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  @  ó   € ÷ 5ñ 5˜zð 5¨cñ 5rš   c                	ó&   € V P                  VR 4      # )rç  ©rì  rr  s   &&r˜   Ú
_print_MinÚTritonPrinter._print_Min@  ó   € Ø×)Ñ)¨$°Ó4Ð4rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  C  rï  rš   c                	ó&   € V P                  VR 4      # )ræ  rñ  rr  s   &&r˜   Ú
_print_MaxÚTritonPrinter._print_MaxC  rô  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  F  s   € ÷ ;ñ ;˜zð ;¨cñ ;rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  útl_math.abs(r  ry  rr  s   &&r˜   Ú
_print_AbsÚTritonPrinter._print_AbsF  sO   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIà˜dŸk™k¨$¯)©)°A­,Ó7Ð8¸Ð:Ð:rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  L  ó   € ÷ Nñ N¨Zð N¸Cñ Nrš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.cos((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_cosÚ&TritonPrinter._print_OpaqueUnaryFn_cosL  óP   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIà  §¡¨T¯Y©Y°q­\Ó!:Ð ;Ð;LÐMÐMrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  R  ó   € ÷ Oñ O¨jð O¸Sñ Orš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.cosh((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_coshÚ'TritonPrinter._print_OpaqueUnaryFn_coshR  óP   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIà! $§+¡+¨d¯i©i¸­lÓ";Ð!<Ð<MÐNÐNrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  X  r  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.acos((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_acosÚ'TritonPrinter._print_OpaqueUnaryFn_acosX  r	  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  ^  rÿ  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.sin((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_sinÚ&TritonPrinter._print_OpaqueUnaryFn_sin^  r  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  d  r  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.sinh((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_sinhÚ'TritonPrinter._print_OpaqueUnaryFn_sinhd  r	  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  j  r  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.asin((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_asinÚ'TritonPrinter._print_OpaqueUnaryFn_asinj  r	  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  p  rÿ  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.tan((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_tanÚ&TritonPrinter._print_OpaqueUnaryFn_tanp  r  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  v  r  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.tanh((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_tanhÚ'TritonPrinter._print_OpaqueUnaryFn_tanhv  r	  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  |  r  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.atan((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_atanÚ'TritonPrinter._print_OpaqueUnaryFn_atan|  r	  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  ‚  r  rš   c                	óÄ   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R2# )r  rl  zlibdevice.log2((rÃ  ry  rr  s   &&r˜   Ú_print_OpaqueUnaryFn_log2Ú'TritonPrinter._print_OpaqueUnaryFn_log2‚  r	  rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  ˆ  rj  rš   c                	óú   € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hRV P                  VP                  ^ ,          4       R\        P
                  P                   R2# )r  rl  zlibdevice.llrint(rn  r  ro  rr  s   &&r˜   Ú_print_RoundToIntÚTritonPrinter._print_RoundToIntˆ  se   € Üˆt�y‰y‹>˜QÔÜ Ð#7¼¸D¿I¹I»Ð7GÐ!HÓIÐIð   §¡¨D¯I©I°a­LÓ 9Ð:¸%ÄÇÁ×@TÑ@TÐ?UÐUVÐWð	
rš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   ri  �  s   € ÷ Qñ Q¨
ð Q°sñ Qrš   c                	óR  € \        VP                  4      ^8w  d"   \        R\        VP                  4       24      hVP                  w  r#VP                  '       d%   V^ 8¼  d   \        RV 24      h\	        RV R24      hV P                  V\        R,          4      pRV RV RV)  2# )	rœ   zexpected 2 args, got zexpected ndigits < 0, got zOFor integer inputs, only non-negative ndigits are currently supported, but got r�   ÚMulzlibdevice.nearbyint(1eú * z) * 1e)r¨   rÇ   r
  r§   Ú
ValueErrorr“  r   )rR  r�   ÚnumberÚndigitsÚ
number_strs   &&   r˜   Ú_print_RoundDecimalÚ!TritonPrinter._print_RoundDecimal�  s¯   € Üˆt�y‰y‹>˜QÔÜ Ð#8¼¸T¿Y¹Y»Ð8HÐ!IÓJÐJØŸ)™)‰ˆØ××Ðà˜!Œ|Ü$Ð'AÀ'ÀÐ%KÓLÐLÜØaÐbiÐajÐjkÐlóð ð ×&Ñ& v¬z¸%Õ/@ÓAˆ
Ø'¨ y°°J°<¸vÀwÀhÀZÐPÐPrš   rŸ   N)&rÖ   rÞ   rß   rà   rs  rz  Ústaticmethodr�  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,  r6  rä   rŸ   rš   r˜   rf  rf  –  sË   † õ
õFð ôó ðõõ'õFõ
GõJõ

õ
õYõYõCõ	Uõ/õ$*õCõ.5õ5õ;õNõOõOõNõOõOõNõOõOõOõ
÷Qñ Qrš   rf  c               ó    € V ^8„  d   QhRRRR/# ©rœ   r®   r¯   r°   rç   rŸ   )r    s   "r˜   r¡   r¡   £  s   € ÷ 3ñ 3˜{ð 3¨sñ 3rš   c                ó*   € \        \        V 4      4      # )zCConvert torch.dtype to triton type and upcast [b]float16 to float32)rR   rT   ©r®   s   &r˜   Útriton_compute_typer=  £  s   € äÔ*¨5Ó1Ó2Ð2rš   c               ó    € V ^8„  d   QhRRRR/# r:  rŸ   )r    s   "r˜   r¡   r¡   ¨  s   € ÷ ñ ˜[ð ¨Sñ rš   c                ób   € V \         P                  8X  d   \         P                  p \        V 4      # )z@Convert torch.dtype to triton type, with fix for storing tl.bool)r×   r´   Úint8rR   r<  s   &r˜   Útriton_store_typerA  ¨  s"   € à”—
‘
ÔÜ—
‘
ˆÜ�uÓÐrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r®   r¯   r°   rŸ   )r    s   "r˜   r¡   r¡   ¯  s   € ÷ &ñ &˜Kð &¨Kñ &rš   c                ó    € \        V 4      '       d4   V P                  '       d"   V P                  ^8:  d   \        P                  # \        V 4      # )z0Implicit upcasts used for Triton reduction types)r   Ú	is_signedÚitemsizer×   Úint32rT   r<  s   &r˜   Úupcast_acc_dtyperG  ¯  s5   € ä˜×Ò 5§?§? ?°u·~±~ÈÔ7JÜ�{‰{ÐÜ˜uÓ%Ð%rš   c               ó    € V ^8„  d   QhRRRR/# r:  rŸ   )r    s   "r˜   r¡   r¡   ¶  s   € ÷ 8ñ 8˜;ð 8¨3ñ 8rš   c                ó*   € \        \        V 4      4      # )z:Convert torch.dtype to triton type, with reduction upcasts)r=  rG  r<  s   &r˜   Útriton_acc_typerJ  ¶  s   € äÔ/°Ó6Ó7Ð7rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r®   r¯   r°   r´   rŸ   )r    s   "r˜   r¡   r¡   »  s   € ÷ ;ñ ;˜Kð ;¨Dñ ;rš   c                óH   € V P                   ^8*  ;'       d    V P                  # )rœ   )rE  rË   r<  s   &r˜   Úlow_precision_fprM  »  s   € Ø�>‰>˜QÑ×:Ð: 5×#:Ñ#:Ð:rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r  zCSEVariable | Anyr°   r´   rŸ   )r    s   "r˜   r¡   r¡   ¿  s   € ÷ Pñ PÐ/ð P°Dñ Prš   c                ó¤   € \        V \        4      '       g   R # V P                  p\        V\        P                  4      '       d   \	        V4      # R # ró  )r£   r_   r®   r×   rM  )r  r®   s   & r˜   Úlow_precision_fp_varrP  ¿  s<   € Ü�cœ;×'Ò'Ùà�I‰I€EÜ&0°¼¿¹×&DÒ&DÔ˜EÓ"ÐOÈ%ÐOrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   rÁ   r	   r°   útorch.dtype | NonerŸ   )r    s   "r˜   r¡   r¡   Ç  s   € ÷ ñ ˜#ð Ð"4ñ rš   c                óÆ   € \        V \        4      '       d   V P                  # \        V \        P                  P
                  4      '       d   \        \        V 4      4      # R # r¿   )r£   r_   r®   r×   Ú_prims_commonÚNumberr   rè  ©rÁ   s   &r˜   Útriton_arg_dtyperW  Ç  sD   € Ü�#”{×#Ò#Ø�y‰yÐÜ�#”u×*Ñ*×1Ñ1×2Ò2ÜœT #›YÓ'Ð'Ùrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   rÁ   r	   r°   r´   rŸ   )r    s   "r˜   r¡   r¡   Ï  s   € ÷ ñ  ð ¨ñ rš   c                óÚ   € \         P                  P                  '       * ;'       dF    \        V \        4      ;'       d.    V P
                  \        P                  \        P                  39   # r¿   )	r#   rí   Úcodegen_upcast_to_fp32r£   r_   r®   r×   Úfloat16Úbfloat16rV  s   &r˜   Úneeds_upcast_to_float32r]  Ï  sN   € ä�M‰M×0Ñ0Ô0÷ 	9ð 	9Ü�sœKÓ(÷	9ð 	9à�I‰Iœ%Ÿ-™-¬¯©Ð8Ñ8ðrš   c                  ó8   a € ] tR tRtRR V 3R llltR tRtV ;t# )ÚTritonCSEVariablei×  c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )rœ   r   rç   ÚboundszValueRanges[Any]r®   r¯   r  r�   r°   rÓ   rŸ   )r    s   "r˜   r¡   ÚTritonCSEVariable.__annotate__Ø  sC   € ÷ Fñ FàðFð !ðFð ð	Fð
 ðFð 
ñFrš   c                	ó„   <€ \         SV `  WW4R 7       \        4       V n        Vf   \	        R4      hVf   \	        R4      hR# )rW  Nz!TritonCSEVariable must have dtypez!TritonCSEVariable must have shape)ÚsuperÚ__init__r   rH  r
  )rR  r   ra  r®   r  Ú	__class__s   &&&&&€r˜   re  ÚTritonCSEVariable.__init__Ø  sG   ø€ ô 	‰Ñ˜ uÐÔ:ä*4«,ˆŒØŠ=Ü Ð!DÓEÐEØŠ=Ü Ð!DÓEÐEñ rš   c                	óv  € V F²  p\        V\        4      '       d(   V P                  P                  VP                  4       K@  \        V\        P
                  4      '       g   Kb  \        P                  \        R \        P                  4      V4      ;p f   K—  V P                  P                  V4       K´  	  R# rù  )r£   r_  rH  Úupdater¤   r@  rð   r-  r
   rX   rý   rµ  )rR  r   rÇ   ÚkwargsrÁ   r*  s   &&&&  r˜   Úupdate_on_argsÚ TritonCSEVariable.update_on_argsç  s†   € ÛˆCÜ˜#Ô0×1Ò1Ø—‘×%Ñ% c§m¡mÖ4Ü˜C¤§¡×.Ô.ô
 "/×!CÑ!CÜ˜^¬Q¯X©XÓ6¸ó"ð �Ið ô	ð
 —N‘N×&Ñ& yÖ1ó rš   )rH  r¿   )rÖ   rÞ   rß   rà   re  rk  rä   Ú__classcell__©rf  s   @r˜   r_  r_  ×  s   ø† ÷Fò F÷2ð 2rš   r_  T)Úfrozenc                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R
tR# )ÚTritonOpTraceEntryi÷  rç   r   útuple[Any, ...]rÇ   ztuple[tuple[str, Any], ...]rj  r	   rÊ  rŸ   N)rÖ   rÞ   rß   rà   râ   rä   rŸ   rš   r˜   rq  rq  ÷  s   ‡ à
ƒIØ
ÓØ'Ó'Ø‡Krš   rq  c               ó   € V ^8„  d   QhRR/# )rœ   r°   r~   rŸ   )r    s   "r˜   r¡   r¡   ÿ  s   € ÷ (ñ (Ð5ñ (rš   c                 ó   € ^ RI Hp  V ! 4       # )r   r}   )Ú!torch._inductor.dtype_propagationr~   r}   s    r˜   Úget_dtype_handlerrv  ÿ  s   € ÝLá%Ó'Ð'rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   rÒ   r´   r°   zCallable[[_T], _T]rŸ   )r    s   "r˜   r¡   r¡     s   € ÷ (ñ (¨ð (Ð9Kñ (rš   c                ó*   a a€ R R loR V V3R llpV# )z‡
Codegen helper to upcast arguments to float32, depending on the config and dtype.
This decorates tl.math/libdevice codegen functions.
c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   Ú*maybe_upcast_float32.<locals>.__annotate__  s   € ÷ 'ñ ' ñ 'rš   c                ó8   € \        V 4      '       d   R MRpV  V 2# )ú.to(tl.float32)rŒ   ©r]  )r  Úupcast_strings   & r˜   Úmaybe_upcast_argÚ.maybe_upcast_float32.<locals>.maybe_upcast_arg  s#   € Ü-DÀS×-IÒ-IÑ)ÈrˆØ��}�oÐ&Ð&rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   rÆ   zCallable[..., Any]r°   rŸ   )r    s   "r˜   r¡   rz    s   € ÷ ñ Ð*ð Ð/Añ rš   c                óL   <a € \         P                  S S4       R  VV V3R llpV# )c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   Ú=maybe_upcast_float32.<locals>.decorator.<locals>.__annotate__  s   € ÷ 	0ñ 	0¨ñ 	0rš   c                 ó|  <€ V  Uu. uF  pS! V4      NK  	  ppVP                  4        UUu/ uF  w  rEVS! V4      bK  	  pppS! V/ VB pS;'       dy    \        ;QJ d>    R  \        P                  ! WP	                  4       4       4       F  '       g   K   RM3	  RM/! R  \        P                  ! WP	                  4       4       4       4      pV'       g   RM#\        \        4       SP                  4      ! V / VB p	V	\        P                  R39  p
V
'       d   V	e   R\        V	4       R2MRpV V 2# u upi u uppi )c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   r}  ©rÀ   r  s   & r˜   rÃ   ÚKmaybe_upcast_float32.<locals>.decorator.<locals>.wrapped.<locals>.<genexpr>  s   é € ð 6áA�Cô (¨×,Ð,ÛAùó   ‚TFNr’  r  rŒ   )Úitemsrˆ   Ú	itertoolsÚchainÚvaluesr¹   rv  rÖ   r×   rØ   rR   )rÇ   rj  rÁ   Úupcast_argsÚkeyÚvalÚupcast_kwargsrÊ  Úany_needs_upcastÚresult_dtypeÚneeds_downcastÚdowncast_stringrÒ   rÆ   r  s   *,          €€€r˜   ÚwrappedÚ8maybe_upcast_float32.<locals>.decorator.<locals>.wrapped  s-  ø€ á<@ÓA¹D°SÑ+¨CÖ0¹DˆKÐAØHNÏÉÌÔWÉ¹H¸C˜SÑ"2°3Ó"7Ò7ÉˆMÑWñ ˜;Ð8¨-Ñ8ˆFØ-÷  ð  ·#³#ñ 6ä$Ÿ?š?¨4·±³ÔAó6·#·#²#ñ 6ä$Ÿ?š?¨4·±³ÔAó6ó 3Ð÷ (ñ äÔ.Ó0°$·-±-Ô@À$ÐQÈ&ÑQð ð
 *´%·-±-ÀÐ1FÑFˆN÷ " lÒ&>ð ”{ <Ó0Ð1°Ñ3àð ð
 �X˜oÐ.Ð/Ð/ùò) BùÛWs
   †D3¬D8)rÎ   rÜ   )rÆ   r–  rÒ   r  s   f €€r˜   Ú	decoratorÚ'maybe_upcast_float32.<locals>.decorator  s$   ù€ ä×&Ñ& t¨^Ô<÷	0ò 	0ð0 ˆrš   rŸ   )rÒ   r˜  r  s   f @r˜   Úmaybe_upcast_float32rš    s   ù€ õ'÷ñ ð< Ðrš   c                  ó²  € ] tR tRtRt]P                  ! ]P                  4      t]	ReR R ll4       t
]	R R l4       t]	R	 4       t]R
 4       t]	R 4       t]R R l4       t]	]! 4       R 4       4       t]	R 4       t]	R 4       t]	R 4       t]	]! 4       R 4       4       t]	]! 4       R 4       4       t]	]! 4       R 4       4       t]	]! 4       R 4       4       t]	R 4       t]	R 4       t]	R 4       t]	R 4       t]	R 4       t]	R 4       t]	RRR] PB                  RRR^R R/R! l4       t"]	]! 4       R" 4       4       t#]	]! 4       R# 4       4       t$]R$ 4       t%]R% 4       t&]	R& 4       t']	]! 4       R' 4       4       t(]	]! 4       R( 4       4       t)]	]! 4       R) 4       4       t*]	]! 4       R* 4       4       t+]	]! 4       R+ 4       4       t,]	]! 4       R, 4       4       t-]	]! 4       R- 4       4       t.]	]! 4       R. 4       4       t/]	]! 4       R/ 4       4       t0]	R0 R1 l4       t1]	R2 R3 l4       t2]	R4 R5 l4       t3]	R6 4       t4]	]! 4       R7 4       4       t5]	]! 4       R8 4       4       t6]	]! 4       R9 4       4       t7]	]! 4       R: 4       4       t8]	]! 4       R; 4       4       t9]	]! 4       R< 4       4       t:]	]! 4       R= 4       4       t]	R> 4       t;]	]! 4       R? 4       4       t<]	R@ 4       t=]	RA 4       t>]	RB 4       t?]	RC 4       t@]	RD 4       tA]	RE 4       tB]	RF 4       tC]	RG 4       tD]	RH 4       tE]	RI 4       tF]	RJ 4       tG]	RK 4       tH]	RL 4       tI]	RM 4       tJ]	RN 4       tK]	RO 4       tL]	]! 4       RP 4       4       tM]	]! 4       RQ 4       4       tN]	]! 4       RR 4       4       tO]	]! 4       RS 4       4       tP]	]! 4       RT 4       4       tQ]	RU 4       tR]	]! 4       RV 4       4       tS]RW 4       tT]	]! 4       RX 4       4       tU]	]! RYRZ7      R[ 4       4       tV]	]! RYRZ7      R\ 4       4       tW]	]! 4       R] 4       4       tX]	]! 4       R^ 4       4       tY]	R_ 4       tZ]	R` 4       t[]	]! 4       Ra 4       4       t\]	Rb 4       t]]	]! 4       Rc 4       4       t^Rdt_R# )fÚTritonOverridesi0  zEMap element-wise ops to Triton e.g., ops.to_dtype(x,...) -> x.to(...)NTc               ó    € V ^8„  d   QhRRRR/# )rœ   r®   r¯   Ú	src_dtyperR  rŸ   )r    s   "r˜   r¡   ÚTritonOverrides.__annotate__6  s"   € ÷ K&ñ K&àðK&ð &ñK&rš   c                	óŒ  a€ \         P                  \         P                  3oR  V3R llpVe>   \        V! W!4      \        P
                  P                  4      \        P
                  n        Ve(   \        V4      '       d   RV  R2p \         P                  pV\         P                  8X  d   RV  R2# V\         P                  8X  d    Ve   VP                  '       g   Vf   V  R2# V'       d   \        V4      pM\        V4      pVe6   VS9   d/   V\         P                  8X  g   \        V4      '       d	   V  RV R2# V  RV R2# )	c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rž  r¯   Ú	dst_dtyper°   r†  rŸ   )r    s   "r˜   r¡   Ú.TritonOverrides.to_dtype.<locals>.__annotate__A  s$   € ÷ 	ñ 	Ø"ð	Ø/:ð	àñ	rš   c                ó  <€ W8X  d   ^ # V S9   d   VS9   d   W8w  d   \        R4      hV \        P                  8X  g   V\        P                  8X  d   ^# V \        P                  8X  g   V\        P                  8X  d   ^# ^ # )r   zCConversions between float8_e5m2 and float8_e4m3fn is not supported!)r
  r×   Úfloat8_e5m2Úfloat8_e4m3fn)rž  r¢  Ú
fp8_dtypess   &&€r˜   Ú_get_min_elements_per_threadÚ>TritonOverrides.to_dtype.<locals>._get_min_elements_per_threadA  sw   ø€ ð Ô%áð ˜ZÔ'Ø Ô+ØÔ*ä$ØYóð ð œE×-Ñ-Ô-°¼e×>OÑ>OÔ1OÙØœE×/Ñ/Ô/°9Ä×@SÑ@SÔ3SÙárš   z$triton_helpers.fp8e4m3fn_to_float32(r  rÎ  z != 0)z.to(tl.int16).to(tl.uint8)z.to(tl.float32).to(r’  )r×   r¦  r¥  r�   rX   rý   Úmin_elem_per_threadrz   rØ   r´   Úuint8rË   r=  rA  r   )rª  r®   rž  Úuse_compute_typesr¨  Ú	out_dtyper§  s   &&&&  @r˜   Úto_dtypeÚTritonOverrides.to_dtype5  s:  ø€ ô ×ÑÜ×Ñð
ˆ
÷
	ð 	ð4 Ò ô ,/Ù,¨YÓ>Ü—‘×,Ñ,ó,ŒA�H‰HÔ(ð
 Ò Ô%TØ÷&
ò &
ð 7°q°c¸Ð;ˆAÜŸ™ˆIà”E—J‘JÔØ�q�c˜�=Ð Ø”e—k‘kÔ!ØÒ! i×&A×&AÐ&AÀYÒEVð �SÐ2Ð3Ð3çÜ+¨EÓ2‰Iä)¨%Ó0ˆIð Ò!Ø˜Ô#ØœeŸj™jÔ(Ô,<¸Y×,GÒ,Gà�SÐ+¨I¨;°aÐ8Ð8à��D˜˜ 1Ð%Ð%rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r®   r¯   rž  rŸ   )r    s   "r˜   r¡   rŸ  „  s   € ÷ ñ  ;ð ¸;ñ rš   c                	ó@  € VP                   VP                   8w  d&   \        R VP                    RVP                    24      hV P                  V8w  d   V  R\        V4       R2p V  R\        V4       R2p\	        V4      V8w  d   V R\        \	        V4      4       R2pV# )zitemsize mismatch: r^  r’  r  ú, bitcast=True))rE  r
  r®   rR   rT   )rª  r®   rž  Úouts   &&& r˜   Úto_dtype_bitcastÚ TritonOverrides.to_dtype_bitcastƒ  s«   € à×Ñ §¡Ô/Ü Ø% i×&8Ñ&8Ð%9¸¸e¿n¹nÐ=MÐNóð ð �7‰7�iÔØ�#�Tœ+ iÓ0Ð1°Ð3ˆAà��4œ EÓ*Ð+¨?Ð;ˆÜ˜uÓ%¨Ô.Ø�E˜œkÔ*=¸eÓ*DÓEÐFÀaÐHˆCàˆ
rš   c           	     	ó~  € \         P                  P                  V4      p\        V! V 4      4      p\	        V4      pV ^ 8X  d=   \
        P                  ! RV 4      ^ 8  d!   VR8X  d
   RV RV R2# VR8X  d
   RV RV R2# V ^ 8  d.   VP                  '       g   RVR	,           2pRV R
V R
V RV R2	# RV R
V R
V R2# )r   g      ð?r~  útl.full(z, 0x80000000, tl.uint32).to(r²  r  z$, 0x8000000000000000, tl.uint64).to(ztl.:é   NNr  rn  r  )r×   rT  Údtype_to_typerk   r=  ÚmathÚcopysignrD  )r  r®   r  Útype_Ú
triton_valrR   Útriton_signed_types   &&&    r˜   Ú_shaped_constantÚ TritonOverrides._shaped_constant—  së   € ä×#Ñ#×1Ñ1°%Ó8ˆÜ"¡5¨£<Ó0ˆ
Ü)¨%Ó0ˆð �AŒ:œ$Ÿ-š-¨¨UÓ3°aÔ7Ø˜lÔ*Ø! % Ð(DÀ[ÀMÐQ`ÐaÐaØ Ô,Ø! % Ð(LÈ[ÈMÐYhÐiÐið
 �1Œ9˜UŸ_Ÿ_˜_Ø#& {°2¥Ð&7Ð!8ÐØ˜e˜W B z l°"Ð5GÐ4HÈÈkÈ]ÐZ[Ð\Ð\à˜e˜W B z l°"°[°MÀÐCÐCrš   c                	ó(   € V P                  W. R 7      # )rW  )r¿  )rÚ   r  r®   s   &&&r˜   ÚconstantÚTritonOverrides.constant®  s   € à×#Ñ# E¸Ð#Ó;Ð;rš   c                	ó  € \        V \        4      '       di   W8X  dc   V P                  eU   V P                  P                  '       d9   R\        P                  V 4       R\        P                  V 4       R2pRV RV  R2# V  RV 2# )NrÎ  ú | r  r×  r  z * 0.0, 0.0)z - )r£   r_   r®   rË   rœ  ÚisnanÚisinf)rª  ÚyÚ
non_finites   && r˜   ÚsubÚTritonOverrides.sub²  s…   € ô �qœ+×&Ò&Ø”Ø—‘Ò#Ø—‘×)×)Ð)ð
 œ_×2Ñ2°1Ó5Ð6°c¼/×:OÑ:OÐPQÓ:RÐ9SÐSTÐUˆJØ˜z˜l¨"¨Q¨C¨|Ð<Ð<Ø��C˜�sˆ|Ðrš   c               ó    € V ^8„  d   QhRRRR/# r:  rŸ   )r    s   "r˜   r¡   rŸ  Â  s   € ÷ 3ñ 3¨[ð 3¸Sñ 3rš   c                	óÂ   € \        V\        P                  P                  4      '       d   V P	                  W4      # \        V4      V8X  d   V # R V R\        V4       R2# )rÎ  rn  r  )r£   r×   rT  rU  rÂ  rW  rR   )rÚ   rÁ   r®   s   &&&r˜   Ú_cast_libdevice_argÚ#TritonOverrides._cast_libdevice_argÁ  sY   € ä�cœ5×.Ñ.×5Ñ5×6Ò6Ø—<‘< Ó+Ð+Ü˜CÓ  EÔ)Ø�UˆOØ�3�%�uœ[¨Ó/Ð0°Ð2Ð2rš   c                	ó   € R V  R2# )rû  r  rŸ   ©rª  s   &r˜   ÚabsÚTritonOverrides.absÉ  ó   € ð ˜a˜S Ð"Ð"rš   c                	óÖ  € \        V R R4      p\        VR R4      pV\        P                  8X  d@   V\        P                  8X  d+   \        P                  P
                  '       d   RV  RV R2pM	RV  RV R2p\        V 4      '       g   \        V4      '       dP   \        4       P                  W4      pV\        P                  \        P                  39   d   V R\        V4       R2pV# )r®   Nútriton.language.div_rn(r  r  rÎ  r©  r’  )r¹   r×   rØ   r#   Úeager_numericsÚdivision_roundingrP  rv  Útruedivr[  rR   ©rª  rÈ  Úx_dtypeÚy_dtyper³  r­  s   &&    r˜   rÙ  ÚTritonOverrides.truedivÒ  sÎ   € ä˜!˜W dÓ+ˆÜ˜!˜W dÓ+ˆð ”u—}‘}Ô$Øœ5Ÿ=™=Ô(Ü×%Ñ%×7×7Ð7ð ,¨A¨3¨b°°°1Ð5‰Cà�a�S˜˜A˜3˜a�.ˆCä ×"Ò"Ô&:¸1×&=Ò&=Ü)Ó+×3Ñ3°AÓ9ˆIØœUŸ]™]¬E¯M©MÐ:Ô:Ø˜˜T¤+¨iÓ"8Ð!9¸Ð;�àˆ
rš   c                ó–  € \        V RR4      p\        VRR4      pV\        P                  8X  d    V\        P                  8X  d   RV  RV R2pM	RV  RV R2p\        V 4      '       g   \        V4      '       dP   \	        4       P                  W4      pV\        P                  \        P                  39   d   V R\        V4       R2pV# )	zƒ
Division with round-to-nearest rounding mode.
Always uses triton.language.div_rn for float32 inputs to match eager CUDA behavior.
r®   NrÖ  r  r  rÎ  r©  r’  )r¹   r×   rØ   rP  rv  rÙ  r[  rR   rÚ  s   &&    r˜   Údiv_rnÚTritonOverrides.div_rné  s»   € ô ˜!˜W dÓ+ˆÜ˜!˜W dÓ+ˆà”e—m‘mÔ#¨´5·=±=Ô(@Ø+¨A¨3¨b°°°1Ð5‰Cð �a�S˜˜A˜3˜a�.ˆCä ×"Ò"Ô&:¸1×&=Ò&=Ü)Ó+×3Ñ3°AÓ9ˆIØœUŸ]™]¬E¯M©MÐ:Ô:Ø˜˜T¤+¨iÓ"8Ð!9¸Ð;�àˆ
rš   c                	óú   € R V  RV R2p\        V 4      '       g   \        V4      '       dP   \        4       P                  W4      pV\        P                  \        P
                  39   d   V R\        V4       R2pV# )rÎ  r˜  r  r’  )rP  rv  Úmodr×   r[  rØ   rR   )rª  rÈ  r³  r­  s   &&  r˜   râ  ÚTritonOverrides.modÿ  sp   € à�!��C˜�s˜!ˆnˆÜ ×"Ò"Ô&:¸1×&=Ò&=Ü)Ó+×/Ñ/°Ó5ˆIØœUŸ]™]¬E¯M©MÐ:Ô:Ø˜˜T¤+¨iÓ"8Ð!9¸Ð;�Øˆ
rš   c                óF   € \         P                  '       d   RV  R2# RV  R2# )z 
When use_fast_math, use the ftz (flushing to zero) variant
of exponent computation.

Check https://github.com/triton-lang/triton/issues/5735 for
more details.
ztl_math.exp(r  zlibdevice.exp()r#   Úuse_fast_mathrÑ  s   &r˜   rÉ  ÚTritonOverrides.exp  s.   € ô ××ÐØ! !  AÐ&Ð&à# A 3 aÐ(Ð(rš   c                	ó   € R V  R2# )zlibdevice.exp2(r  rŸ   rÑ  s   &r˜   Úexp2ÚTritonOverrides.exp2  ó   € ð !   1Ð%Ð%rš   c                	ó   € R V  R2# )zlibdevice.expm1(r  rŸ   rÑ  s   &r˜   Úexpm1ÚTritonOverrides.expm1  ó   € ð " !  AÐ&Ð&rš   c                	ó   € R V  R2# )ztl.sqrt_rn(r  rŸ   rÑ  s   &r˜   ÚsqrtÚTritonOverrides.sqrt"  s   € ð ˜Q˜C˜qÐ!Ð!rš   c                	ó  € \         P                  P                  pVR 8X  d   R# VR8X  d
   RV  RV  R2# VR8X  d   V  R2# Vf;   \        P                  ! \        P
                  ! ^ \        P                  4      V 4      # \        RV: 24      h)	Úcompile_errorzcompile error!Úruntime_errorz"triton_helpers.device_assert_then(z == 0, "injected assert fail", r  Úaccuracyz + 1z:unrecognized config triton.inject_relu_bug_TESTING_ONLY = )	r#   rí   Úinject_relu_bug_TESTING_ONLYÚopsÚmaximumrÂ  r×   rF  r
  )rª  Úbugs   & r˜   ÚreluÚTritonOverrides.relu(  s�   € ä�m‰m×8Ñ8ˆØ�/Ô!Ù#Ø�OÔ#ð 8¸°sÐ:YÐZ[ÐY\Ð\]Ð^Ð^Ø�JÔØ�S˜�:ÐØŠ[Ü—;’;œsŸ|š|¨A¬u¯{©{Ó;¸QÓ?Ð?ä ØLÈSÉGÐTóð rš   c                	ó   € R V  RV R2# )ztl.minimum(r  ú, tl.PropagateNan.ALL)rŸ   ©rê  rë  s   &&r˜   ÚminimumÚTritonOverrides.minimum:  ó   € ð ˜Q˜C˜r ! Ð$:Ð;Ð;rš   c                	ó   € R V  RV R2# )útl.maximum(r  rý  rŸ   rþ  s   &&r˜   rø  ÚTritonOverrides.maximum?  r  rš   c                	ó   € R V  RV R2# )r  r  r  rŸ   rþ  s   &&r˜   ÚfmaximumÚTritonOverrides.fmaximumD  s   € ð ˜Q˜C˜r !  AÐ&Ð&rš   c                	ó   € R V  RV RV R2# )r×  r  r  rŸ   )rê  rë  rÙ  s   &&&r˜   ÚwhereÚTritonOverrides.whereI  s   € ð ˜1˜#˜R ˜s " Q C qÐ)Ð)rš   c           	     óþ  aa	a
a€ \         P                  P                  '       g   \        R4      hYr2R pR pV! V4      '       d	   V! V 4      p V! V4      '       d	   V! V4      pR VV	V
V3R llp\	        \         P                  P                  4       4      ^8  d   \        R4      h\        \        P                  \        P                  ,          4      o	\        \        P                  \        P                  ,          4      o
\        \        P                  \        P                  ,          4      o\        \        P                  \        P                  ,          4      o\         P                  P                  P                  \         P                  P                   V! V \#        V P$                  4      S
S.4      V P&                  S
S3R7      p \         P                  P                  P                  \         P                  P                   V! V\#        VP$                  4      SS	.4      VP&                  SS	3R7      p\(        P*                  P,                  P.                  P0                  R8X  d   RpMR	pR
V  RV RV R2# )at  
Triton code generation for lowering ops.dot to tl.dot.

The logic is as follows:

1. Downcasting for performance
   If the data was previously upcasted to fp32, we downcast back to the
   original dtype (e.g., fp16 or bf16) for better performance. While
   surrounding operations may run in fp32, matmul itself is executed at the
   original precision to optimize throughput.

2. Handling non-constant reduction masks
   If the reduction mask is not constant and there was any operation between
   tl.load and tl.dot, we zero out regions outside the mask using
   tl.where(r0_mask, val, 0).
   This ensures that values outside the mask do not contribute to the dot
   product, preventing incorrect results.

3. Shape alignment for tl.dot
   We massage shapes to match the tl.dot requirement of (Y, R) x (R, X).
   Current codegen eagerly broadcasts tl.arange to create unique axes. We
   reshape, transpose, or broadcast to align with the (Y, R) x (R, X) shape.
   We avoid using 3D dot ((Z, Y, R) x (Z, R, X)) because 3D tl.dot has
   poor performance. During batched matmul (bmm), we keep ZBLOCK=1 and call
   the 2D dot kernel instead.
zexpected native matmul kernelc                óÒ  € \        \        \        V P                  4      4      '       g   R # \        P
                  P                  R,          pVP                  '       g   \        R4      h\        P
                  P                  V4      '       d   R # \        P
                  P                  P                  P                  4        F   w  r#W08X  g   K  RV9   g   K  RV9   g   K   R # 	  R# )Fz#reduction_range must be a reductionztl.loadz	other=0.0Tr¬  )rˆ   rs  rM   rH  rX   rý   rœ  r1  r
  Ú_has_constant_maskrþ   Ú_cacherŠ  )r  Úreduction_rangeÚkÚvs   &   r˜   Úis_where_neededÚ,TritonOverrides.dot.<locals>.is_where_neededo  s¡   € ä”sÔ.°·±Ó>×?Ò?ÙäŸh™h×2Ñ2°2Õ6ˆOØ"×/×/Ð/Ü$Ð%JÓKÐKô �x‰x×*Ñ*¨?×;Ò;Ùô
 Ÿ™Ÿ™×+Ñ+×1Ñ1Ö3‘�Ø–8 	¨Q¦°;À!Ö3CÚ ñ 4ñ rš   c                ó  € \         P                  P                  R V P                  4      p\        P
                  P                   Uu. uF&  q"P                  '       g   K  VP                  4       NK(  	  pp\        V4      ^8w  d   \        R4      h\        P                  V^ ,          W4      p\        P
                  P                  P                  \        P
                  P                  W@P                  V P                   R7      # u upi )Údotz'don't tile reduction when native matmul©r®   r  )r$   Ú	ReductionÚdefault_valuer®   rX   rý   rœ  r1  r*  r¨   r
  ÚTritonKernelOverridesr	  rþ   ÚgenerateÚcomputer  )r  Údefaultr  Úreduction_maskÚ	where_vars   &    r˜   Ú
where_condÚ'TritonOverrides.dot.<locals>.where_cond…  sÃ   € Ü—l‘l×0Ñ0°¸¿	¹	ÓBˆGä-.¯X©X×-AÒ-AóÙ-A T×EVÕEVÔ �—‘Ö Ñ-Að ð ô �>Ó" aÔ'Ü$Ð%NÓOÐOä-×3Ñ3°NÀ1Õ4EÀsÓTˆIÜ—8‘8—<‘<×(Ñ(Ü—‘× Ñ  )·9±9ÀCÇIÁIð )ó ð ùòs   ÁDÁDc               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r  r~  r‚  r°   rç   rŸ   )r    s   "r˜   r¡   Ú)TritonOverrides.dot.<locals>.__annotate__¤  s-   € ÷ G	ñ G	à/ðG	ð .ðG	ð ñ	G	rš   c                óæ  <€ S	V9   d   V Uu. uF  q3S	8X  d   RMTNK  	  ppVSS.8X  dX   SV9   d   \        R4      hRR.pSV9   d   SV^ &   SV9   d   SV^&   \        WV4      p VSS.8g  pV'       d   RV  RS RS R2p V # VSS.8X  d^   SV9   d   \        R4      hRR.pSV9   d   SV^ &   SV9   d   SV^&   \        WV4      p RV  R	2p VSS.8g  pV'       d   RV  RS RS R2p V # \        hu upi )
aX  
Generate a reshape, transpose, and broadcast for the tl.dot.
tl.dot requires specific shape requirement : (Y,R) x (R,X)
but the current triton codegen eagerly broadcast the tl.arange so
it needs to be reshaped to meet the requirement.

This is done by three steps.
1. remove the empty dimension (dim with size 1) and make it 2d with tl.reshape
2. permute the dimension if needed (e.g., (X,R) -> (R,X)) with tl.trans
3. broadcast if needed with broadcast_to.
    - This shows up when matmul operand is broadcasted with torch.expand/repeat.
    - e.g., torch.rand((16,)).expand(16,16) @ B

e.g., (Y,1,R), (Y,R) -> tl.reshape(var, (Y,R))
e.g., (1,X,R), (R,X) -> tl.trans(tl.reshape(var, (X,R)))
e.g., (1,X,1), (R,X) -> tl.broadcast_to(tl.trans(tl.reshape(var, (X,1))), (R,X))

TODO : eventually we want to remove this function when lazy broadcasting arrives
rû   z&left tl.dot operand cannot depend on xr  z, (r  rx  z'right tl.dot operand cannot depend on yr   r  )r
  r  ÚNotImplementedError)
r  r  r‚  rÃ  Úshape_2dÚbroadcast_neededÚRBLOCKr=  r>  r?  s
   &&&   €€€€r˜   Ú#reshape_transpose_broadcast_for_dotÚ@TritonOverrides.dot.<locals>.reshape_transpose_broadcast_for_dot¤  sk  ø€ ð6 ˜Ô&ÙJWÓ XÉ-À3¨v¬¡¸3Ò!>É-�Ð Xà˜v vÐ.Ô.Ø˜]Ô*Ü(Ð)QÓRÐRà ˜:�Ø˜]Ô*Ø"(�H˜Q‘KØ˜]Ô*Ø"(�H˜Q‘Kô ' u¸XÓF�ð $,°¸Ð/?Ñ#?Ð ß#Ø.¨u¨g°S¸¸ÀÀ6À(È"ÐM�Eð2 ˆLð/  ¨Ð 0Ô0Ø˜]Ô*Ü(Ð)RÓSÐSà ˜:�Ø˜]Ô*Ø"(�H˜Q‘KØ˜]Ô*Ø"(�H˜Q‘Kô ' u¸XÓF�ð $ E 7¨!Ð,�ð $,°¸Ð/?Ñ#?Ð ß#Ø.¨u¨g°S¸¸ÀÀ6À(È"ÐM�Eð ˆLô *Ð)ùòS !Ys   �C.ztl.dot can only do mm and bmmr  Útf32Úieeeztl.dot(r  z, input_precision="ú"))rX   rý   Úis_native_matmulr
  r¨   Údense_size_listrç   rð   rC  r!   r=  r>  r?  r;  rþ   r  r  r¿  r  r®   r×   ÚbackendsÚcudaÚmatmulÚfp32_precision)rê  rë  Úorig_aÚorig_br  r  r(  Úinput_precisionr'  r=  r>  r?  s   &&      @@@@r˜   r  ÚTritonOverrides.dotN  sà  û€ ô: �x‰x×(×(Ð(Ü Ð!@ÓAÐAØ�ò	ò,	ñ4 ˜6×"Ò"Ù˜1“ˆAÙ˜6×"Ò"Ù˜1“ˆA÷G	ó G	ôR Œq�x‰x×'Ñ'Ó)Ó*¨QÔ.Ü Ð!@ÓAÐAä”]×.Ñ.¬t¯{©{Õ;Ó<ˆÜ”]×.Ñ.¬t¯{©{Õ;Ó<ˆÜ”]×.Ñ.¬t¯{©{Õ;Ó<ˆÜ”]×.Ñ.¬t¯}©}Õ=Ó>ˆä�H‰H�L‰L×!Ñ!Ü�H‰H×ÑÙ/°´4¸¿¹³=À6È6ÐBRÓSØ—'‘'Ø˜6Ð"ð	 "ó 
ˆô �H‰H�L‰L×!Ñ!Ü�H‰H×ÑÙ/°´4¸¿¹³=À6È6ÐBRÓSØ—'‘'Ø˜6Ð"ð	 "ó 
ˆô �>‰>×Ñ×%Ñ%×4Ñ4¸Ô>Ø$‰Oà$ˆOà˜˜˜2˜a˜SÐ 3°OÐ3DÀBÐGÐGrš   Úconstraintsr®   Úis_pureÚpackÚinput_dtypesc           
     	ó  aaaaa€ \        V4      oVf*   RP                  R.V Uu. uF  pRNK  	  up,           4      pVP                  R4       Uu. uF  qˆP                  4       NK  	  p	pV	 Uu. uF  qˆP	                  R4      '       d   K  VNK  	  p
p. p\        \        WjR \        V4       4      4       F‚  w  pw  rÞVR8X  dZ   VeV   \        V\        4      '       d@   VP                  W\,          8w  d)   VP                  V R\        W\,          4       R24       Kh  VP                  \        V4      4       K„  	  \        P                  P                  '       d8   \!        V 4      P#                  R	R
4      o\!        V4      P#                  R	R
4      oMRV  R2oRV R2oVVVVV3R lpS^8:  d   V! RP                  V4      4      # V^ ,          p\$        P&                  P(                  p\$        P&                  P*                  pVP-                  VVP.                  R7      pRP                  V3R lV 4       4      pVP1                  V RV! V4       24       VP1                  V RV RV RS R24       V# u upi u upi u upi )Nr  z=rÚrÚ,Ú=Úhr’  r  Ú\z\\rä  c                ó.   <€ R S RS RV  RS RS RS R2# )ztl.inline_asm_elementwise(r  r\  z	], dtype=z
, is_pure=z, pack=r  rŸ   )rÇ   Úasm_literalÚasm_triton_typeÚconstraints_literalr8  r9  s   &€€€€€r˜   Úasm_callÚ8TritonOverrides.inline_asm_elementwise.<locals>.asm_call:  s>   ø€ à,¨[¨M¸Ð<OÐ;Pð QØ�6˜ ?Ð"3°:¸g¸YÀgÈdÈVÐSTðVðrš   r  c              3  ó6   <"  € T F  pR V RS R2x € K  	  R# 5i)ztriton_helpers.inline_asm_pack(r  r  NrŸ   )rÀ   Úinpr9  s   & €r˜   rÃ   Ú9TritonOverrides.inline_asm_elementwise.<locals>.<genexpr>G  s$   øé € ð  
ÙHSÀÐ-¨c¨U°"°T°F¸!Õ<Ëùs   ƒú = z$ = triton_helpers.inline_asm_unpack()rR   rq  ÚsplitÚstripra  Ú	enumerater"  r¨   r£   r_   r®   r_  rç   r×   rˆ  r‰  ÚreprÚreplacerX   rý   r  rþ   Únewvarr  Ú	writeline)Úasmr7  r®   r8  r9  r:  ÚinputsÚ_rÚ  Úconstraint_partsÚinput_constraintsÚcast_inputsr,  rH  rÙ  rE  Úfirst_inputr  rþ   rÊ  Úpacked_argsrB  rC  rD  s   $$$dd$*              @@@r˜   Úinline_asm_elementwiseÚ&TritonOverrides.inline_asm_elementwise
  sO  ü€ ô & eÓ,ˆØÒØŸ)™) T F¹6Ó-B¹6°a«c¹6Ñ-BÕ$BÓCˆKð
 0;×/@Ñ/@ÀÔ/EÓFÑ/E¨!ŸG™GžIÑ/EÐÐFÙ(8ÓRÑ(8 1ÇÁÈS×@QŸQ˜QÑ(8ÐÐRØˆÜ$¤S¨À=ÄSÈÃ[Ð1QÓ%RÖS‰KˆA‰x�à�S”Ø Ò,Ü˜s¤K×0Ò0Ø—I‘I ¥Ô0à×"Ñ" c U¨$¬{¸<½?Ó/KÐ.LÈAÐ#NÖOà×"Ñ"¤3 s£8Ö,ñ Tô �=‰=××Ðô ˜s›)×+Ñ+¨D°&Ó9ˆKÜ"& {Ó"3×";Ñ";¸DÀ&Ó"IÑà˜c˜U !˜*ˆKØ$% k ]°!Ð"4Ð÷	ñ 	ð �1Œ9Ù˜DŸI™I kÓ2Ó3Ð3à˜Q•iˆÜ—(‘(×"Ñ"ˆÜ�h‰h�l‰lˆØ—‘ %¨{×/@Ñ/@�ÓAˆØ—i‘iô  
ÙHSó 
ó 
ˆð 	×Ñ˜V˜H C©°Ó(=Ð'>Ð?Ô@Ø×ÑØˆhÐ:¸6¸(À"À[ÀMÐQSÐTXÐSYÐYZÐ[ô	
ð ˆùòm .Cùò
 GùÚRs   ¦I7
ÁI<Á/JÂJc                	ó   € R V  R2# )ztl_math.cos(r  rŸ   rÑ  s   &r˜   ÚcosÚTritonOverrides.cosP  rÔ  rš   c                	ó   € R V  R2# )ztl_math.sin(r  rŸ   rÑ  s   &r˜   ÚsinÚTritonOverrides.sinV  rÔ  rš   c                	ó   € \        R 4      h)z/ops.index_expr not implemented outside a kernel©r$  ©rÚ   r�   r®   s   &&&r˜   Ú
index_exprÚTritonOverrides.index_expr\  ó   € ä!Ð"SÓTÐTrš   c                	ó   € \        R 4      h)z/ops.value_expr not implemented outside a kernelrc  rd  s   &&&r˜   Ú
value_exprÚTritonOverrides.value_expr`  rg  rš   c                	ó   € \        R 4      h)z+ops.masked not implemented outside a kernelrc  )r)  ÚbodyÚothers   &&&r˜   ÚmaskedÚTritonOverrides.maskedd  s   € ä!Ð"OÓPÐPrš   c                	ó   € R V  R2# )zlibdevice.lgamma(r  rŸ   rÑ  s   &r˜   ÚlgammaÚTritonOverrides.lgammah  ó   € ð # 1 # QÐ'Ð'rš   c                	ó   € R V  R2# )zlibdevice.erf(r  rŸ   rÑ  s   &r˜   ÚerfÚTritonOverrides.erfn  ó   € ð   ˜s !Ð$Ð$rš   c                	ó   € R V  R2# )zlibdevice.cosh(r  rŸ   rÑ  s   &r˜   ÚcoshÚTritonOverrides.cosht  ó   € ð !   1Ð%Ð%rš   c                	ó   € R V  R2# )zlibdevice.sinh(r  rŸ   rÑ  s   &r˜   ÚsinhÚTritonOverrides.sinhz  r{  rš   c                	ó   € R V  R2# )zlibdevice.acos(r  rŸ   rÑ  s   &r˜   ÚacosÚTritonOverrides.acos€  r{  rš   c                	ó   € R V  R2# )zlibdevice.acosh(r  rŸ   rÑ  s   &r˜   ÚacoshÚTritonOverrides.acosh†  ó   € ð " !  AÐ&Ð&rš   c                	ó   € R V  R2# )zlibdevice.asin(r  rŸ   rÑ  s   &r˜   ÚasinÚTritonOverrides.asinŒ  r{  rš   c                	ó   € R V  R2# )zlibdevice.asinh(r  rŸ   rÑ  s   &r˜   ÚasinhÚTritonOverrides.asinh’  r…  rš   c                	ó   € R V  RV R2# )zlibdevice.atan2(r  r  rŸ   ©rª  rÈ  s   &&r˜   Úatan2ÚTritonOverrides.atan2˜  ó   € ð " !  B q c¨Ð+Ð+rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   Úbitsr†  r°   rç   rŸ   )r    s   "r˜   r¡   rŸ  Ÿ  s   € ÷ Tñ T 3ð T¨3ñ Trš   c                	ó   € R V R R2# )ztl.full([], 0xÚ08Xz), tl.uint32).to(tl.float32, bitcast=True)rŸ   )r’  s   &r˜   Ú_f32_const_from_bitsÚ$TritonOverrides._f32_const_from_bitsž  s   € à  S˜zÐ)RÐSÐSrš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rœ   rR  rç   rÇ   úSequence[Any]r  r�   r°   r	   rŸ   )r    s   "r˜   r¡   rŸ  £  s)   € ÷ 	
ñ 	
˜Sð 	
¨ð 	
¸nð 	
ÐQTñ 	
rš   c           
     	óN  € R P                  R.R.\        V4      ,          ,           4      pR P                  \        \        V4      4      p\        P
                  P                  P                  \        P
                  P                  RV  RV RV R2\        P                  VR7      # )r  z=fr9  ztl.inline_asm_elementwise('z', 'z', [z*], dtype=tl.float32, is_pure=True, pack=1)r  )rq  r¨   rs  rç   rX   rý   rþ   r  r  r×   rØ   )rR  rÇ   r  r7  Úargs_strs   &&&  r˜   Ú_inline_asm_f32ÚTritonOverrides._inline_asm_f32¢  sŽ   € à—i‘i  ¨#¨´°T³Õ):Õ :Ó;ˆØ—9‘9œS¤ d›^Ó,ˆÜ�x‰x�|‰|×$Ñ$Ü�H‰H×ÑØ)¨#¨¨d°;°-ð @ØˆzÐCðEä—-‘-Øð %ó 
ð 	
rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   rª  r_   r°   rŸ   )r    s   "r˜   r¡   rŸ  ¯  s   € ÷ 4Fñ 4F�{ð 4F {ñ 4Frš   c           	     	óê  a€ V P                   o\        P                  3R  V3R lllpR V3R llp\        P                  pV! R4      pV! R4      pV! RV  R24      pV! V RV 2\        P
                  4      p\        P                  R	V.S4      pV! R
V RV RV R24      p	V! V	 RV	 24      p
V! V! R4      W£! R4      4      pV! WºV! R4      4      pV! WºV! R4      4      pV! WºV! R4      4      pV! WºV! R4      4      pV! WºV! R4      4      pV! WºV! R4      4      pV! V
 RV 24      pV! WÉV	4      pV! RV 24      pV! V! R4      V! R4      V4      pV! R
V RV RV R24      pRpV! V  RV 2\        P                  4      pV! V R2\        P                  4      pV! V RV 2\        P                  4      pV! V R24      pV! V RV 2\        P
                  4      pV! R
V RV RV R24      # )c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r�   rç   r®   r¯   r°   r_  rŸ   )r    s   "r˜   r¡   Ú1TritonOverrides._cuda_atanf.<locals>.__annotate__¹  s"   € ÷ 	ñ 	�cð 	 +ð 	ÐBSñ 	rš   c                óŒ   <€ \         P                  P                  P                  \         P                  P                  WSR 7      # ©r  )rX   rý   rþ   r  r  )r�   r®   r  s   &&€r˜   ÚgenÚ(TritonOverrides._cuda_atanf.<locals>.gen¹  s4   ø€ Ü—8‘8—<‘<×(Ñ(Ü—‘× Ñ  $¸5ð )ó ð rš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   rê  r	   rë  rÙ  r°   rŸ   )r    s   "r˜   r¡   r   ¾  s(   € ÷ 	ñ 	�3ð 	˜3ð 	 3ð 	¨3ñ 	rš   c                ó6   <€ \         P                  R WV.S4      # )zfma.rn.f32 $0, $1, $2, $3;)rœ  r›  )rê  rë  rÙ  r  s   &&&€r˜   ÚfmaÚ(TritonOverrides._cuda_atanf.<locals>.fma¾  s!   ø€ Ü"×2Ñ2Ø,¨q°Q¨i¸óð rš   i  €?i  €rû  r  z > zrcp.approx.ftz.f32 $0, $1;r×  r  r1  iª� ;l   Oa×x i~9#=l   z
){ i!k×=l   ˆ"| i`¯L>l   '*U} Ú-i�ån?iët×?z"tl.full([], 0x80000000, tl.uint32)z.to(tl.uint32, bitcast=True) & z.to(tl.uint32, bitcast=True)rÅ  z.to(tl.float32, bitcast=True)z <= )r  r×   rØ   rœ  r•  r´   r›  Úuint32)rª  r£  r§  rÙ  ÚoneÚinfÚabs_xÚlargeÚrcpÚzÚz2ÚpolyÚ
correctionrÊ  Ú
neg_resultÚpi_over_two_minus_resultÚ	sign_maskÚsignÚresult_bitsÚsigned_bitsÚsigned_resultÚnot_nanr  s   &                     @r˜   Ú_cuda_atanfÚTritonOverrides._cuda_atanf®  sD  ø€ ð —‘ˆä05·±÷ 	ò 	÷
	ð 	ô
 ×0Ñ0ˆÙ�
‹mˆÙ�
‹mˆá�l 1 # QÐ'Ó(ˆÙ�u�g˜S  Ð&¬¯
©
Ó3ˆÜ×-Ñ-Ø(¨5¨'°5ó
ˆñ �)˜E˜7 " S E¨¨E¨7°!Ð4Ó5ˆÙ�A�3�c˜!˜�Óˆá‘1�Z“= " a¨
£mÓ4ˆÙ�4™Q˜z›]Ó+ˆÙ�4™Q˜z›]Ó+ˆÙ�4™Q˜z›]Ó+ˆÙ�4™Q˜z›]Ó+ˆÙ�4™Q˜z›]Ó+ˆÙ�4™Q˜z›]Ó+ˆá˜B˜4˜s 4 &Ð)Ó*ˆ
Ù�Z AÓ&ˆÙ˜1˜V˜H˜Ó&ˆ
Ù#&¡q¨£}±a¸
³mÀZÓ#PÐ Ù�y   rÐ*BÐ)CÀ2ÀfÀXÈQÐOÓPˆà8ˆ	Ù�a�SÐ7¸	°{ÐCÄUÇ\Á\ÓRˆÙ˜V˜HÐ$@ÐAÄ5Ç<Á<ÓPˆÙ˜T˜F # k ]Ð3´U·\±\ÓBˆÙ˜{˜mÐ+HÐIÓJˆÙ˜˜˜t C 5Ð)¬5¯:©:Ó6ˆÙ�Y˜w˜i r¨-¨¸¸6¸(À!ÐDÓEÐErš   c                	ó  € \        V 4      p\        V 4      p\        P                  P                  '       Eg   \
        P                  P                  4       P                  R 8X  dá   \        V \        4      '       dË   V\        P                  8X  g	   V'       d®   RpV'       dc   Tp\
        P                  P                  P                  \
        P                  P                  V  R2\        P                  V P                   R7      p \"        P%                  V 4      pVe'   V\        P                  8w  d   V R\'        V4       R2# V# V'       d   RMRpRV  V R2pV'       d+   Ve'   V\        P                  8w  d   V R\'        V4       R2# V# )r0  Nr|  r  r’  r  rŒ   zlibdevice.atan()rW  r]  r×   rˆ  r‰  rX   r­  Úget_current_device_or_throwrè  r£   r_   rØ   rý   rþ   r  r  r  rœ  r¼  rR   )rª  r®   Úneeds_upcastr“  rÊ  Úupcasts   &     r˜   ÚatanÚTritonOverrides.atanå  s;  € ô ! Ó#ˆÜ.¨qÓ1ˆä—‘×!×!Ñ!Ü—‘×3Ñ3Ó5×:Ñ:¸fÔDÜ˜1œk×*Ò*Øœ%Ÿ-™-Ô'¯<àˆLßØ$�Ü—H‘H—L‘L×)Ñ)Ü—H‘H×$Ñ$Ø�c˜Ð)ÜŸ-™-ØŸ'™'ð	 *ó �ô %×0Ñ0°Ó3ˆFØÒ'¨L¼E¿M¹MÔ,IØ ˜ ¤k°,Ó&?Ð%@ÀÐBÐBØˆMç&2Ñ"¸ˆØ" 1 # f X¨QÐ/ˆß˜EÒ-°%¼5¿=¹=Ô2HØ�X˜T¤+¨eÓ"4Ð!5°QÐ7Ð7Øˆrš   c                	ó   € R V  R2# )zlibdevice.atanh(r  rŸ   rÑ  s   &r˜   ÚatanhÚTritonOverrides.atanh  r…  rš   c                	ó   € R V  RV R2# )zlibdevice.copysign(r  r  rŸ   r�  s   &&r˜   r»  ÚTritonOverrides.copysign
  s   € ð % Q C r¨!¨¨AÐ.Ð.rš   c                	ó   € R V  R2# )zlibdevice.erfc(r  rŸ   rÑ  s   &r˜   ÚerfcÚTritonOverrides.erfc  rê  rš   c                	ó   € R V  R2# )zlibdevice.erfinv(r  rŸ   rÑ  s   &r˜   ÚerfinvÚTritonOverrides.erfinv  rs  rš   c                	ó   € R V  RV R2# )zlibdevice.hypot(r  r  rŸ   r�  s   &&r˜   ÚhypotÚTritonOverrides.hypot  r�  rš   c                	ó   € R V  R2# )zlibdevice.log10(r  rŸ   rÑ  s   &r˜   Úlog10ÚTritonOverrides.log10!  rî  rš   c                	ó   € R V  R2# )zlibdevice.log2(r  rŸ   rÑ  s   &r˜   Úlog2ÚTritonOverrides.log2&  rê  rš   c                	ó   € R V  RV R2# )zlibdevice.ldexp(r  z.to(tl.int32))rŸ   )rª  Úns   &&r˜   ÚldexpÚTritonOverrides.ldexp+  s   € ð " !  B q c¨Ð8Ð8rš   c                	ó   € R V  RV R2# )zlibdevice.nextafter(r  r  rŸ   r�  s   &&r˜   Ú	nextafterÚTritonOverrides.nextafter0  s   € ð & a S¨¨1¨#¨QÐ/Ð/rš   c                	ó   € V  R V 2# ©rp  rŸ   rþ  s   &&r˜   Úlogical_andÚTritonOverrides.logical_and6  ó   € ð ��C˜�sˆ|Ðrš   c                	ó   € V  R 2# )z == 0rŸ   ©rê  s   &r˜   Úlogical_notÚTritonOverrides.logical_not;  s   € à��Eˆ{Ðrš   c                	ó   € V  R V 2# ©rÅ  rŸ   rþ  s   &&r˜   Ú
logical_orÚTritonOverrides.logical_or?  rã  rš   c                	ó   € R V  RV R2# )rÎ  ú ^ r  rŸ   rþ  s   &&r˜   Úlogical_xorÚTritonOverrides.logical_xorD  s   € ð �1�#�S˜˜˜1ˆ~Ðrš   c                	ó   € V  R V 2# rà  rŸ   rþ  s   &&r˜   Úbitwise_andÚTritonOverrides.bitwise_andI  ó   € à��C˜�sˆ|Ðrš   c                	ó   € R V  2# )Ú~rŸ   rå  s   &r˜   Úbitwise_notÚTritonOverrides.bitwise_notM  s   € à�1�#ˆwˆrš   c                	ó   € V  R V 2# ré  rŸ   rþ  s   &&r˜   Ú
bitwise_orÚTritonOverrides.bitwise_orQ  ró  rš   c                	ó   € V  R V 2# )rí  rŸ   rþ  s   &&r˜   Úbitwise_xorÚTritonOverrides.bitwise_xorU  ró  rš   c                	ó   € V  R V 2# )z << rŸ   rþ  s   &&r˜   Úbitwise_left_shiftÚ"TritonOverrides.bitwise_left_shiftY  ó   € à��D˜˜ˆ}Ðrš   c                	ó   € V  R V 2# )z >> rŸ   rþ  s   &&r˜   Úbitwise_right_shiftÚ#TritonOverrides.bitwise_right_shift]  r  rš   c                	ó¬   € R V R2p\         P                  4       '       d-   \        P                  P	                  4       w  pRV  RV RV R2# RV  RV R2# )rÎ  ú).to(tl.uint32)ztriton_helpers.rand4x(r  r  ztl.rand(©rœ  Ú_can_use_4x_randomrX   rý   r.  ©Úseedrñ   Úblocks   && r˜   ÚrandÚTritonOverrides.randa  sc   € à�V�H˜OÐ,ˆÜ×-Ñ-×/Ò/Ü—x‘x×/Ñ/Ó1‰HˆUØ+¨D¨6°°F°8¸2¸e¸WÀAÐFÐFØ˜$˜˜r & ¨Ð+Ð+rš   c                 	óÂ  € \        \        P                  \        4      ;'       d»    \        \        P                  \        P
                  P                  P                  4      '       * ;'       dr    \        P                  P                  4       P                  R 8H  ;'       d?    \        P                  P                  4       ^8H  ;'       d    \        P                  '       * # )r0  )r£   rX   rý   r$  r×   Ú	_inductorÚselect_algorithmÚTritonTemplateKernelr­  r¿  rè  r  r#   Úalign_random_eagerrŸ   rš   r˜   r  Ú"TritonOverrides._can_use_4x_randomi  s§   € ô ”q—x‘x¤Ó.÷ .ð .ÜÜ—‘œ%Ÿ/™/×:Ñ:×OÑOóô ÷.ð .ô —‘×3Ñ3Ó5×:Ñ:¸fÑD÷	.ð .ô
 —‘×+Ñ+Ó-°Ñ2÷.ð .ô ×-Ñ-Ô-ð	
rš   c                	ón   € R V R2pRV RV R2pRV RV RV R2pRV RV R2pRV  R	V R
V R	V RV R2# )rÎ  r  z((z)*(rx  z)//(z//4))z)%(z!triton_helpers.rand_eager_kernel(r  Ú+z, VEC=r  rŸ   )	r
  Úbase_offsetÚthreads_per_roundÚtidÚvecÚtid_u32Údenomr<  Ú	tid_truncs	   &&&&&    r˜   Ú
rand_eagerÚTritonOverrides.rand_eageru  s�   € ð �c�U˜/Ð*ˆØ�S�E˜Ð.Ð/¨rÐ2ˆØ��	˜˜e˜W C¨ u¨EÐ2ˆØ˜˜	  U G¨2Ð.ˆ	à2°4°&¸¸;¸-ÀqÈÈÈ2ÈiÈ[ÐX^Ð_bÐ^cÐcdÐeÐerš   c                	ó¬   € R V R2p\         P                  4       '       d-   \        P                  P	                  4       w  pRV  RV RV R2# RV  RV R2# )rÎ  r  ztriton_helpers.randn4x(r  r  z	tl.randn(r  r	  s   && r˜   ÚrandnÚTritonOverrides.randn  sc   € à�V�H˜OÐ,ˆÜ×-Ñ-×/Ò/Ü—x‘x×/Ñ/Ó1‰HˆUØ,¨T¨F°"°V°H¸B¸u¸gÀQÐGÐGØ˜4˜&  6 (¨!Ð,Ð,rš   c           	     	ó,   € R V R2pRV  RV RV RV R2	# )rÎ  r  ztriton_helpers.randint64(r  r  rŸ   )r
  rñ   ÚlowÚhighs   &&&&r˜   Ú	randint64ÚTritonOverrides.randint64‡  s1   € à�V�H˜OÐ,ˆØ*¨4¨&°°6°(¸"¸S¸EÀÀDÀ6ÈÐKÐKrš   c                	ó   € \        R 4      h)z.ops.load_seed not implemented outside a kernelrc  )r   rñ   s   &&r˜   Ú	load_seedÚTritonOverrides.load_seedŒ  s   € ä!Ð"RÓSÐSrš   c                	óZ   € \         P                  P                  '       d   R V  R2# RV  R2# )z	tl.rsqrt(r  zlibdevice.rsqrt()r×   rˆ  r‰  rÑ  s   &r˜   ÚrsqrtÚTritonOverrides.rsqrt�  s2   € ô �=‰=××ÐØ˜q˜c Ð#Ð#à% a S¨Ð*Ð*rš   c                	ó   € R V  R2# )zlibdevice.log1p(r  rŸ   rÑ  s   &r˜   Úlog1pÚTritonOverrides.log1p™  rî  rš   c                	ó   € R V  R2# )zlibdevice.tan(r  rŸ   rÑ  s   &r˜   ÚtanÚTritonOverrides.tanž  rw  rš   c                	óŽ  € \         P                  P                  P                  P	                  V 4      pV'       d    \        VR 4      '       d   VP                  pMRp\        P                  '       dO   \        P                  P                  '       d/   \        4       R8”  d    V\        P                  8w  d   Ve   RV  R2# RV  R2# )r®   Nzlibdevice.fast_tanhf(r  zlibdevice.tanh()é   é   )rX   rý   rþ   rÿ   r	  rë   r®   r#   rå  r×   rˆ  r‰  r   rÙ   )rª  r  r®   s   &  r˜   ÚtanhÚTritonOverrides.tanh¤  s˜   € ô —(‘(—,‘,×*Ñ*×.Ñ.¨qÓ1ˆß”w˜w¨×0Ò0Ø—M‘M‰EàˆEä× × Ð Ü—‘×!×!Ð!Ü"Ó$ vÔ-ØœŸ™Ô&ØÒ!ð +¨1¨#¨QÐ/Ð/à$ Q C qÐ)Ð)rš   c                	ó   € R V  R2# )ztl.sigmoid(r  rŸ   rÑ  s   &r˜   ÚsigmoidÚTritonOverrides.sigmoidº  s   € ð ˜Q˜C˜qÐ!Ð!rš   c                	óž   € \         P                  P                  4       P                  R 8X  d   RV  RV  RV  RV  RV  R2# RV  RV  RV  R	V  R2	# )
ÚxpurÎ  z%).to(tl.int64, bitcast=True) < 0 if (z.).dtype is tl.float64 else (libdevice.signbit(z) != 0) if (z).dtype is tl.float32 else z < 0z(libdevice.signbit(z).dtype is tl.float32 or (z).dtype is tl.float64 else )rX   r­  r¿  rè  rÑ  s   &r˜   ÚsignbitÚTritonOverrides.signbit¿  sŠ   € ô �7‰7×.Ñ.Ó0×5Ñ5¸Ô>à�A�3ð Ø�cð +Ø+,¨#ð .Ø�cð Ø�s˜$ð	 ðð " ! ð %Ø�#Ð/°¨sð 3Ø�3�dðð	
rš   c                	ó   € R V  RV R2# )zlibdevice.fmod(r  r  rŸ   rþ  s   &&r˜   ÚfmodÚTritonOverrides.fmodÔ  s   € ð !   2 a S¨Ð*Ð*rš   c                	óö  € \        4       P                  W4      pVey   \        V4      '       dh   V P                  W4      p\	        V\
        P                  P                  4      '       d!   V P                  V\
        P                  4      MT pRV RV R2# \        V4      ;'       g    \        V4      pTpV\
        P                  \
        P                  39  d:   \        V4      '       g	   V'       d   \
        P                  M\
        P                  pV\
        P                  8X  d_   \        \        P                   P"                  4      '       g6   \
        P                  pV\
        P                  8X  d   \
        P                  pV P                  W4      pV P                  W'4      p	RV RV	 R2p
VeD   W78w  d>   \        V4      '       d   V'       d   V
 R\%        V4       R2p
V
# V
 R\%        V4       R2p
V
# )Nztriton_helpers.pow_integer(r  r  rÏ  r’  )rv  Úpowr   rÎ  r£   r×   rT  rU  rÂ  Úint64r]  rØ   rÙ   rM  rF   rX   r­  r€  rR   )rÚ   rê  rë  r“  rÈ  Úexponentr’  Ú	pow_dtypeÚcast_aÚcast_brÊ  s   &&&        r˜   rC  ÚTritonOverrides.powÚ  s²  € ä(Ó*×.Ñ.¨qÓ4ˆØÒ#Ô(8¸×(FÒ(FØ×*Ñ*¨1Ó;ˆDô ˜a¤×!4Ñ!4×!;Ñ!;×<Ò<ð —‘˜Q¤§¡Ô,à�sð ð
 1°°°b¸¸
À!ÐDÐDä2°1Ó5×SÐSÔ9PÐQRÓ9SÐØ ˆ	ØœUŸ]™]¬E¯M©MÐ:Ô:ô $ L×1Ò1×5Eô —’ä—]‘]ð ð
 œŸ™Ô%Ô.BÜ�G‰G×"Ñ"÷/
ò /
ô Ÿ™ˆIØœuŸ}™}Ô,Ü$Ÿ}™}�à×(Ñ(¨Ó6ˆØ×(Ñ(¨Ó6ˆØ! & ¨¨F¨8°1Ð5ˆØÒ#¨Ô(AÜ ×-Ò-ß#Ø &˜x t¬K¸Ó,EÐ+FÀaÐH�Fð ˆð #˜8 4¬°LÓ(AÐ'BÀ!ÐD�Øˆrš   c                	óZ   € \         P                  P                  '       d   R V  R2# RV  R2# )zlibdevice.log(r  ztl_math.log()r#   r×  Úuse_pytorch_libdevicerÑ  s   &r˜   ÚlogÚTritonOverrides.log	  s6   € ô × Ñ ×6×6Ð6ð $ A 3 aÐ(Ð(Ø˜a˜S Ð"Ð"rš   F)rÒ   c                	ó   € R V  R2# )zlibdevice.isinf(ú).to(tl.int1)rŸ   rÑ  s   &r˜   rÇ  ÚTritonOverrides.isinf	  ó   € ð " !  MÐ2Ð2rš   c                	ó   € R V  R2# )zlibdevice.isnan(rO  rŸ   rÑ  s   &r˜   rÆ  ÚTritonOverrides.isnan	  rQ  rš   c                	ó   € R V  R2# )zlibdevice.nearbyint(r  rŸ   rÑ  s   &r˜   ÚroundÚTritonOverrides.round	  s   € ð & a S¨Ð*Ð*rš   c                	ó   € R V  R2# )r¯  r  rŸ   rÑ  s   &r˜   ÚfloorÚTritonOverrides.floor	  r…  rš   c                	ó  € \         P                  ! ^ \        P                  4      p\         P                  ! ^\        P                  4      p\         P                  ! W4      p\         P
                  ! WCV4      p\         P                  ! W4      p\         P
                  ! V\         P                  ! W 4      V 4      p \         P
                  ! V\         P                  ! W!4      V4      p\         P                  ! W4      p\         P
                  ! V\         P                  ! V 4      V 4      p \         P                  ! W4      p\         P
                  ! V\         P                  ! V4      V4      p\         P
                  ! WBV4      # rÝ  )
r÷  rÂ  r×   rF  Úeqr	  ÚltrÊ  rö  Útruncdiv)rê  rë  Úzeror«  Úb_zeroÚb_negÚa_negrœ  s   &&      r˜   ÚfloordivÚTritonOverrides.floordiv%	  sð   € ô �|Š|˜AœuŸ{™{Ó+ˆÜ�lŠl˜1œeŸk™kÓ*ˆô
 —’˜“ˆÜ�IŠI�f 1Ó%ˆÜ—’�q“ˆÜ�IŠI�eœSŸWšW TÓ-¨qÓ1ˆÜ�IŠI�eœSŸWšW TÓ-¨qÓ1ˆÜ—’�q“ˆÜ�IŠI�eœSŸ_š_¨QÓ/°Ó3ˆÜ�|Š|˜AÓ!ˆÜ�yŠy˜¤§¢°Ó 5°tÓ<ˆÜ�yŠy˜ tÓ,Ð,rš   c                	ól  € \         P                  ! ^ \        P                  4      p\         P                  ! \         P
                  ! W4      \        P                  4      p\         P                  ! \         P
                  ! W4      \        P                  4      p\         P                  ! W#4      pV RV  R2# )r   r’  ú.dtype))r÷  rÂ  r×   rF  r®  r\  r@  rÊ  )rª  r°  ÚleftÚrightrÊ  s   &    r˜   r·  ÚTritonOverrides.signA	  sq   € ô �LŠL˜œEŸK™KÓ(ˆÜ�|Š|œSŸVšV A›\¬E¯J©JÓ7ˆÜ—’œcŸfšf Q›l¬U¯Z©ZÓ8ˆÜ�gŠg�dÓ"ˆØ��d˜1˜#˜WÐ%Ð%rš   c                	ó   € R V  R2# )rm  r  rŸ   rÑ  s   &r˜   ÚtruncÚTritonOverrides.truncJ	  r…  rš   c                	ó   € V  R V 2# )r¤  rŸ   rþ  s   &&r˜   r]  ÚTritonOverrides.truncdivP	  s   € ð
 ��D˜˜ˆ}Ðrš   c                	ó   € R V  R2# )r¹  r  rŸ   rÑ  s   &r˜   ÚceilÚTritonOverrides.ceilW	  r{  rš   rŸ   ©NT)`rÖ   rÞ   rß   rà   rá   rº  rÖ  ÚeÚ_LOG_2_Er8  r®  r´  r¿  rã   rÂ  rÊ  rÎ  rš  rÒ  rÙ  rß  râ  rÉ  rè  rì  rð  rú  rÿ  rø  r  r	  r  r×   rØ   rZ  r]  r`  re  ri  rn  rq  ru  ry  r}  r€  rƒ  r‡  rŠ  rŽ  r•  r›  r¼  rÂ  rÅ  r»  rÊ  rÍ  rÐ  rÓ  rÚ  rÝ  rá  ræ  rê  rî  rñ  rö  rù  rü  rÿ  r  r  r  r  r   r%  r(  r+  r.  r1  r6  r9  r=  r@  rC  rL  rÇ  rÆ  rU  rX  rb  r·  rj  r]  ro  rä   rŸ   rš   r˜   rœ  rœ  0  sr  † ÙOà�yŠy˜Ÿ™Ó €HàöK&ó ðK&ðZ ôó ðð& ñDó ðDð, ñ<ó ð<ð ñó ðð ô3ó ð3ð ÙÓñ#ó ó ð#ð ñó ðð, ñó ðð* ñó ðð ÙÓñ)ó ó ð)ð ÙÓñ&ó ó ð&ð ÙÓñ'ó ó ð'ð ÙÓñ"ó ó ð"ð ñó ðð" ñ<ó ð<ð ñ<ó ð<ð ñ'ó ð'ð ñ*ó ð*ð ñxHó ðxHðt ðCð ðCð �m‰mð	Cð
 ðCð ðCð óCó ðCðJ ÙÓñ#ó ó ð#ð ÙÓñ#ó ó ð#ð ñUó ðUð ñUó ðUð ñQó ðQð ÙÓñ(ó ó ð(ð ÙÓñ%ó ó ð%ð ÙÓñ&ó ó ð&ð ÙÓñ&ó ó ð&ð ÙÓñ&ó ó ð&ð ÙÓñ'ó ó ð'ð ÙÓñ&ó ó ð&ð ÙÓñ'ó ó ð'ð ÙÓñ,ó ó ð,ð ôTó ðTð ô	
ó ð	
ð ô4Fó ð4Fðl ñó ðð: ÙÓñ'ó ó ð'ð ÙÓñ/ó ó ð/ð ÙÓñ&ó ó ð&ð ÙÓñ(ó ó ð(ð ÙÓñ,ó ó ð,ð ÙÓñ'ó ó ð'ð ÙÓñ&ó ó ð&ð ñ9ó ð9ð ÙÓñ0ó ó ð0ð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñó ðð ñ,ó ð,ð ñ	
ó ð	
ð ñfó ðfð ñ-ó ð-ð ñLó ðLð ñTó ðTð ÙÓñ+ó ó ð+ð ÙÓñ'ó ó ð'ð ÙÓñ%ó ó ð%ð ÙÓñ*ó ó ð*ð& ÙÓñ"ó ó ð"ð ñ
ó ð
ð& ÙÓñ+ó ó ð+ð ñ&ó ð&ðP ÙÓñ#ó ó ð#ð Ù¨Ô/ñ3ó 0ó ð3ð Ù¨Ô/ñ3ó 0ó ð3ð ÙÓñ+ó ó ð+ð ÙÓñ'ó ó ð'ð ñ-ó ð-ð6 ñ&ó ð&ð ÙÓñ'ó ó ð'ð ñó ðð
 ÙÓñ&ó ó ô&rš   rœ  rí   c                  óÐ   a € ] tR tRtRtV 3R lt]]P                  R 4       4       t	]R 4       t
]R 4       t]R 4       t]R 4       t]R	 4       t]R
 4       t]R R l4       tRtV ;t# )r  ie	  a  Map element-wise ops to Triton within a TritonKernel

Unlike TritonOverrides, these assume the code is going to be inserted into
the body of the main triton kernel and so it may use indexing and mask
variables which are assumed to already be defined in the current scope.
c                	óH   <€ \         SV `  ! V/ VB  V P                  4        R # r¿   )rd  re  Ú_setup_libdevice_routing©rR  rÇ   rj  rf  s   &*,€r˜   re  ÚTritonKernelOverrides.__init__m	  s#   ø€ Ü‰Ò˜$Ð) &Ò)ð 	×%Ñ%Ö'rš   c                óî  a€ ^ RI Ho \        P                  P                  P
                   FÅ  p\        W4      '       g   \        RV RV  24      h\        W4      pV3R lpVR8X  dS   \        SR4      '       g   \        R4      h\        P                  ! W2VR7      pWn        \        W\        V4      4       K�  R p\        P                  ! WRVR7      pWn        \        W\        V4      4       KÇ  	  R	# )
z<Set up routing to libdevice implementations for fp64 inputs.)ÚOpDecompositionszmissing method z on c                óŠ   <€ V P                   \        P                  8w  d	   V! V 4      # \        SV4      ! V 4      P                  # r¿   )r®   r×   rÙ   r¹   r  )rª  Ú_original_implÚ_fn_namerz  s   &&&€r˜   Údecomposition_routerÚLTritonKernelOverrides._setup_libdevice_routing.<locals>.decomposition_router€	  s7   ø€ Ø—7‘7œeŸm™mÔ+Ù)¨!Ó,Ð,ä"Ð#3°XÔ>¸qÓA×GÑGÐGrš   r9  z$OpDecompositions must define sigmoid)r|  r}  c                ób   € V P                   \        P                  8X  d
   R V RV  R2# V! V 4      # )z
libdevice.rÎ  r  )r®   r×   rÙ   )rª  r|  r}  s   &&&r˜   Údtype_routerÚDTritonKernelOverrides._setup_libdevice_routing.<locals>.dtype_router�	  s2   € Ø—7‘7œeŸm™mÔ+Ø'¨ z°°1°#°QÐ7Ð7á)¨!Ó,Ð,rš   N)Útorch._inductor.codegen.commonrz  r×   r  r&   Úop_requires_libdevice_fp64rë   r
  r¹   Ú	functoolsÚpartialrÖ   Úsetattrr8  )rÚ   Úfn_nameÚoriginal_implr~  Úfnr�  rz  s   &     @r˜   rv  Ú.TritonKernelOverrides._setup_libdevice_routingt	  sÜ   ø€ õ
 	Dä—‘×,Ñ,×GÔGˆGÜ˜3×(Ò(Ü$ °w°i¸tÀCÀ5Ð%IÓJÐJÜ# CÓ1ˆMõHð ˜)Ô#ÜÐ/°×;Ò;Ü(Ð)OÓPÐPÜ×&Ò&Ø(ÐQXô�ð &”Ü˜¤l°2Ó&6Ô7Ùò-ô ×"Ò"ØÀWôˆBð "ŒKÜ�C¤,¨rÓ"2Ö3ó? Hrš   c                	óx   € \         P                  P                  4       p^.V,          pV P                  WVR7      # )r  rW  )rX   rý   r  r¿  )rÚ   r  r®   r  r  s   &&&  r˜   rÂ  ÚTritonKernelOverrides.constantœ	  s7   € ô
 �x‰x×*Ñ*Ó,ˆØ��d•
ˆØ×#Ñ# E¸Ð#Ó>Ð>rš   c                	óØ  € \        W4      p\        P                  P                  VR RR7      p\	        V\
        4      '       g   \        R\        V4       24      hVP                  '       d   VP                  pM\        P                  VP                  4      p\        P                  P                  4       pV\        P                  \        P                  39   d   TpMTp\!        V4      p\        P                  P"                  P%                  \        P                  P&                  V P)                  RVP*                   R2V4      V\-        V4      VR7      pVP.                  Vn        V# )FN©Ú	block_ptrÚtma_compatibility_checkerúexpected IndexingOptions, got rÎ  r  )r®   ra  r  )rÌ   rX   rý   Úindexingr£   rE  r
  rè  rL  rð   r  rK  Úget_index_dtype_as_torch_dtyper×   rF  rD  rT   rþ   r  r  r®  rF  rG   rH  )	rÚ   r�   r®   r“  r  rq  Ú
cast_dtypeÚoutput_dtyper  s	   &&&      r˜   re  Ú TritonKernelOverrides.index_expr¥	  s)  € ä/°Ó<ˆÜ—8‘8×$Ñ$Ø˜E¸Tð %ó 
ˆô ˜(¤O×4Ò4Ü Ð#AÄ$ÀxÃ.ÐAQÐ!RÓSÐSð × × Ð Ø×)Ñ)‰Eä!×1Ñ1°(·.±.ÓAˆEô —h‘h×=Ñ=Ó?ˆØ”U—[‘[¤%§+¡+Ð.Ô.Ø$‰JàˆJô
 +¨:Ó6ˆÜ�h‰h�l‰l×#Ñ#Ü�H‰H×ÑØ�L‰L˜1˜X×/Ñ/Ð0°Ð2°JÓ?ØÜ(¨Ó.Øð $ó 
ˆð !×*Ñ*ˆŒØˆ
rš   c           	     ó<  € \         P                  P                  pV\        P                  \        P
                  39   d   TM\        P
                  \         P                  n         V P                  W4      pV\         P                  n        W28w  g   VP                  V8w  d`   \         P                  P                  P                  \         P                  P                  RV R\        V4       R2VVP                  R7      pV#   T\         P                  n        i ; i)z„
Like :meth:`index_expr`, but honors ``dtype`` by setting the kernel
index dtype before emitting, and casting the result if needed.
rÎ  rn  r  r  )rX   rý   Ú_index_dtyper×   rF  rD  re  r®   rþ   r  r  rR   r  )rÚ   r�   r®   Úreal_index_dtyper  s   &&&  r˜   ri  Ú TritonKernelOverrides.value_exprÍ	  sÐ   € ô Ÿ8™8×0Ñ0ÐàœuŸ{™{¬E¯K©KÐ8Ô8‰E¼e¿k¹kô 	
�‰Ôð	5Ø—.‘. Ó-ˆCà$4ŒA�H‰HÔ!ØÔ$¨¯	©	°UÔ(:Ü—(‘(—,‘,×'Ñ'Ü—‘× Ñ Ø�C�5˜œk¨%Ó0Ð1°Ð3ØØ—i‘ið	 (ó ˆCð ˆ
øð %5ŒA�H‰HÕ!ús   Á&D ÄDc           
     	óü  € V e}   \         P                  P                  ea   \        P                  P
                  P                  \        P                  P                  V  R2\         P                  V P                  R7      p VP                  P                  RR7      pV'       g   \        R4      hRpV Fˆ  pVP                   Fu  pVP                  R8w  g_   \        VP                  ^,          4      '       g=   VP                  ^,          \        P                  P
                  P                   9   g   Kr  Rp K†  	  KŠ  	  V'       d   R MTp\        P                  P#                  WR	7      ;_uu_ 4       pV! 4       p	R R R 4       V'       dÁ   X	P$                  P&                  '       d   \        V4      p\        P                  P
                  P                  \        P                  P                  R
V	 R\)        V4       RV	 R2\*        P,                  ! V4      V	P.                  V	P                  R7      p\0        P2                  ! XW’4      p
MX	p
V
P4                  P7                  X4       V
#   + '       g   i     L÷; i)Nú.to(tl.int1)r  Úoutput)Úopz)graph for body does not contain an outputFÚloadT)r  r·  z.shape, r  re  )ra  r®   r  )r×   rˆ  r‰  rX   rý   rþ   r  r  r´   r  r­  Ú
find_nodesr
  rÇ   Útargetrx   Ústore_cacheÚ
mask_loadsra  Úis_boolrk   r"   Úwrapr®   r÷  r	  rH  Údiscard)r)  rl  rm  ÚnodesÚ
need_wherer³   rÁ   r  Únew_maskrÊ  rŠ  s   &&&        r˜   rn  ÚTritonKernelOverrides.maskedä	  sÑ  € àÒ¤§¡× 1Ñ 1Ò =Ü—8‘8—<‘<×(Ñ(Ü—‘× Ñ Ø�&˜Ð%Ü—j‘jØ—j‘jð	 )ó ˆDð —
‘
×%Ñ%¨Ð%Ó2ˆßÜ Ð!LÓMÐMàˆ
ó ˆDØ—y”y�à—J‘J &Ô(Ü/°·±¸µ×<Ò<ð
 —x‘x •{¤a§h¡h§l¡l×&>Ñ&>Ö>à!%�JÚó !ñ ÷ #‘¨ˆä�X‰X× Ñ  Ð ×3Ô3°xÙ“VˆF÷ 4÷ à�}‰}×$×$Ð$Ü˜U›�ä—H‘H—L‘L×)Ñ)Ü—‘× Ñ Ø˜6˜( (¬=¸Ó+?Ð*@ÀÀ6À(È'ÐRÜ"×'Ò'¨Ó.Ø—l‘lØ—l‘lð *ó ˆEô —)’)˜H fÓ4‰CàˆCà�‰×Ñ˜hÔ'Øˆ
÷) 4×3ús   Å4I+É+I;	c                	ó¶   € \         P                  P                  P                  V 4      pR V R\         P                  P                  P	                  RV4       R2# )útl.load(ú + Úload_seed_offsetr  )rX   rý   rÇ   ÚinputÚseed_offset)r   rñ   r  s   && r˜   r(  ÚTritonKernelOverrides.load_seed
  sI   € ä�h‰h�m‰m×!Ñ! $Ó'ˆà�s�e˜3œqŸx™xŸ}™}×8Ñ8Ð9KÈVÓTÐUÐUVÐWð	
rš   c                	ó8  € R V  R2p\         P                  P                  P                  V4      ;p'       d   V# \         P                  P                  P	                  V P
                  V P                  R7      p\         P                  P                  P	                  \        P                  V P                  R7      p\         P                  P                  P                  V RV RV  R24       \         P                  P                  P                  WV34       W43# )zfrexp(r  r  r  z = triton_helpers.frexp()rX   rý   rþ   Útry_getrP  r®   r  r×   rF  r  rQ  Úput)rª  Ú	cache_keyÚcse_valÚmantissarE  s   &    r˜   ÚfrexpÚTritonKernelOverrides.frexp#
  sÓ   € ð ˜Q˜C˜q�Mˆ	Ü—h‘h—l‘l×*Ñ*¨9Ó5Ð5ˆ7Ö5ØˆNä—8‘8—<‘<×&Ñ&¨Q¯W©W¸A¿G¹GÐ&ÓDˆÜ—8‘8—<‘<×&Ñ&¬U¯[©[ÀÇÁÐ&ÓHˆÜ	�‰×Ñ×"Ñ"Øˆj˜˜8˜*Ð$<¸Q¸C¸qÐAô	
ô 	
�‰�‰×Ñ˜¨xÐ$8Ô9ØÐ#Ð#rš   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
rœ   r   rç   r”   r  r_   Ú
extra_metaúdict[str, Any]r°   rÓ   rŸ   )r    s   "r˜   r¡   Ú"TritonKernelOverrides.__annotate__4
  s:   € ÷ "ñ "Øð"àð"ð ð"ð #ð	"ð
 
ñ"rš   c                	ó   € \         hr¿   rc  )r   r”   r  r¼  s   &&&&r˜   Úpartial_accumulateÚ(TritonKernelOverrides.partial_accumulate2
  s
   € ô "Ð!rš   rŸ   )rÖ   rÞ   rß   rà   rá   re  rã   r…  Úcacherv  rÂ  re  ri  r8  rn  r(  r¹  rÀ  rä   rm  rn  s   @r˜   r  r  e	  s¼   ø† ñõ(ð Ø‡_�_ñ$4ó ó ð$4ðL ñ?ó ð?ð ñ%ó ð%ðN ñó ðð, ñ5ó ð5ðn ñ
ó ð
ð ñ$ó ð$ð ô"ó ö"rš   r  c                  ó\   € ] tR tRt$ RtR]R&   R]R&   R R ltR	R
/R R lltR tR t	Rt
R# )ÚHelperFunctionsi=
  z#An ordered set of helper functions.zdict[str, str]Ú_templates_seenrO  Úfinalized_helpersc               ó   € V ^8„  d   QhRR/# ©rœ   r°   rÓ   rŸ   )r    s   "r˜   r¡   ÚHelperFunctions.__annotate__C
  s   € ÷ $ñ $˜$ñ $rš   c                	ó"   € / V n         . V n        R # r¿   ©rÅ  rÆ  rQ  s   &r˜   re  ÚHelperFunctions.__init__C
  s   € Ø!ˆÔØ!#ˆÖrš   Ú	base_nameÚ_triton_helper_fnc               ó    € V ^8„  d   QhRRRR/# )rœ   Útemplate_coderç   r°   rŸ   )r    s   "r˜   r¡   rÉ  G
  s   € ÷ ñ  ð È3ñ rš   c               óì   € V P                   P                  V4      pVe   V# V \        V P                  4       2pW@P                   V&   V P                  P	                  VP                  VR7      4       V# )a  This accepts a function definition with the function name
left as a format specifier e.g.

    @triton.jit
    def {name}(arg0, arg1):
        return arg0 + arg1

We add the templated code to the function set and return the name
assigned to that function.

)r   )rÅ  r	  r¨   rÆ  r_  r    )rR  rÐ  rÍ  Úexisting_namer   s   &&$  r˜   rµ  ÚHelperFunctions.addG
  su   € ð ×,Ñ,×0Ñ0°Ó?ˆØÒ$à Ð à�œS ×!7Ñ!7Ó8Ð9Ð:ˆØ.2×Ñ˜]Ñ+Ø×Ñ×%Ñ% m×&:Ñ&:ÀÐ&:Ó&EÔFØˆrš   c                	ó,   € \        V P                  4      # r¿   )ÚiterrÆ  rQ  s   &r˜   Ú__iter__ÚHelperFunctions.__iter__]
  s   € Ü�D×*Ñ*Ó+Ð+rš   c                	ó(   € V P                   V,          # r¿   )rÆ  )rR  rë  s   &&r˜   Ú__getitem__ÚHelperFunctions.__getitem__`
  s   € Ø×%Ñ% cÕ*Ð*rš   rË  N)rÖ   rÞ   rß   rà   rá   râ   re  rµ  rÖ  rÙ  rä   rŸ   rš   r˜   rÄ  rÄ  =
  s-   ‡ Ù-à#Ó#Ø Ó õ$ðÐ3F÷ ò,,ö+rš   rÄ  c                  óš  € ] tR tRt$ Rt]P                  ! ]R7      tR]	R&   ]P                  ! ]R7      t
R]	R&   ]P                  ! ]R7      tR]	R&   ]P                  ! ]R7      tR]	R&   ]P                   ! R	 R
4      4       t]P                   ! R R]4      4       t]P                   ! R R]4      4       tR R ltR R ltR R ltRtR# )ry  id
  zE
Class representing ND block dimensions, for block pointer analysis.
)Údefault_factoryr‰  r  r�  r”  r™  c                  óž   € ] tR tRt$ R]R&   R]R&   ]P                  ! RR7      tR]R&   R t]	R	 4       t
]]R
 R l4       4       tR tR tRtR# )rƒ  io
  r|  Úoriginal_stridesr%  F)Úinitr&  c                	óR  € \        V P                  4      ^ 8:  d   \        R4      h\        V P                  4      \        V P                  4      8w  d8   \        R\        V P                  4       R\        V P                  4       24      h\	        \        \        V P                  4      4      4      pV P                  V8H  V n        \        V P                  4       UUu/ uF  w  r#W2bK	  	  ppp\        \        V4      4       Uu. uF  pWB,          NK  	  upV n        R# u uppi u upi )r   z"original_strides must be non-emptyz5expected len(sort_idx) == len(original_strides), got r^  N)	r¨   rÞ  r
  r%  r¿  rÁ  Ú_is_identityrM  r&  )rR  Úidentity_sort_idxr,  r  Úsorted_dims_by_strides_maps   &    r˜   Ú__post_init__Ú*BlockParameters.StrideSorter.__post_init__u
  s  € Ü�4×(Ñ(Ó)¨QÔ.Ü$Ð%IÓJÐJÜ�4—=‘=Ó!¤S¨×)>Ñ)>Ó%?Ô?Ü$ØKÌCÐPT×P]ÑP]ÓL^ÐK_Ð_cÔdgÐhl×h}Ñh}Ód~Ðcð  Aóð ô !%¤U¬3¨t×/DÑ/DÓ+EÓ%FÓ GÐØ $§¡Ð1BÑ BˆDÔô <EÀTÇ]Á]Ô;SÔ)TÑ;S±4°1¨!ª$Ñ;SÐ&Ñ)Tô œsÐ#=Ó>Ô?ó$á?�Að +×-Ð-Ù?ñ$ˆDÖ ùó *Uùò$s   ÃDÄD$c                	ó   € V P                   # r¿   )rá  rQ  s   &r˜   r#  Ú(BlockParameters.StrideSorter.is_identity‡
  s   € à×$Ñ$Ð$rš   c               ó$   € V ^8„  d   QhRRRRRR/# ©rœ   rÞ  zlist[int | sympy.Expr]r«  r   r°   rƒ  rŸ   )r    s   "r˜   r¡   Ú)BlockParameters.StrideSorter.__annotate__�
  s)   € ÷ 	Uñ 	UØ#9ð	UØFNð	Uà)ñ	Urš   c                ó   € R# )zBCreate a `StrideSorter` that can be used to sort block parameters.NrŸ   ©rÚ   rÞ  r«  s   &&&r˜   rË  Ú#BlockParameters.StrideSorter.create‹
  s   ‚ rš   c                	óx   € V P                   '       g#   V P                   Uu. uF  q!V,          NK  	  up# V# u upi r¿   )r#  r%  ©rR  Úattrr,  s   && r˜   ÚsortÚ!BlockParameters.StrideSorter.sort’
  s5   € Ø×#×#Ð#Ø)-¯ªÓ7© A˜QŸ˜©Ñ7Ð7ØˆKùò 8ó   ¡7c                	óx   € V P                   '       g#   V P                   Uu. uF  q!V,          NK  	  up# V# u upi r¿   )r#  r&  rï  s   && r˜   r!  Ú#BlockParameters.StrideSorter.revert—
  s9   € Ø×#×#Ð#Ø)-×)=Ò)=Ó>Ñ)= A˜QŸ˜Ñ)=Ñ>Ð>ØˆKùò ?ró  )rá  r&  N)rÖ   rÞ   rß   rà   râ   ÚdataclassesÚfieldr&  rä  rv  r#  rã   r   rË  rñ  r!  rä   rŸ   rš   r˜   ÚStrideSorterÚBlockParameters.StrideSortero
  sd   ‡ à#Ó#ØÓØ%0×%6Ò%6¸EÔ%Bˆ˜ÓBò	ð$ 
ñ	%ó 
ð	%ð 
Ø	ô	Uó 
ó 
ð	Uò
	ö
	rš   rø  c                  ó>   a € ] tR tRtV 3R lt]R R l4       tRtV ;t# )Ú$BlockParameters.IdentityStrideSorteriœ
  c                	ó$   <€ \         SV `  4        R # r¿   ©rd  rä  ©rR  rf  s   &€r˜   rä  Ú2BlockParameters.IdentityStrideSorter.__post_init__ž
  ó   ø€ Ü‰GÑ!Ö#rš   c               ó$   € V ^8„  d   QhRRRRRR/# ré  rŸ   )r    s   "r˜   r¡   Ú1BlockParameters.IdentityStrideSorter.__annotate__¢
  s$   € ÷ 	ñ 	Ø#9ð	ØFNð	à)ñ	rš   c           
     	óL   € V ! V\        \        \        V4      4      4      R 7      # )©rÞ  r%  )r¿  rÁ  r¨   rì  s   &&&r˜   rË  Ú+BlockParameters.IdentityStrideSorter.create¡
  s'   € ñ Ø!1Üœe¤CÐ(8Ó$9Ó:Ó;ôð rš   rŸ   )	rÖ   rÞ   rß   rà   rä  rã   rË  rä   rm  rn  s   @r˜   ÚIdentityStrideSorterrû  œ
  s   ø† õ	$ð 
ô	ó 
ö	rš   r  c                  óB   a € ] tR tRtRtV 3R lt]R R l4       tRtV ;t	# )Ú+BlockParameters.TensorDecriptorStrideSorteriª
  zD
Sorts BlockParameters dimensions with strides in descending order.
c                	ó$   <€ \         SV `  4        R # r¿   rý  rþ  s   &€r˜   rä  Ú9BlockParameters.TensorDecriptorStrideSorter.__post_init__°
  r   rš   c               ó$   € V ^8„  d   QhRRRRRR/# ré  rŸ   )r    s   "r˜   r¡   Ú8BlockParameters.TensorDecriptorStrideSorter.__annotate__´
  s$   € ÷ 	ñ 	Ø#9ð	ØFNð	à)ñ	rš   c                ó¨   € \        \        \        V4      4      4      p \        P                  ! W!RR7      pV ! VVR7      #   \
         d    Tp Li ; i)aV  
If the strides are not all known constants or if the strides are already
sorted in descending order, return identity sort.

For example if block_shape @ strides is [ZBLOCK, XBLOCK, YBLOCK] @ [8, 1, 16]
The indices to sort the strides in descending order will be [2, 0, 1].
The indices to revert back to the original order will be [1, 2, 0].
T)Úreverser  )r¿  rÁ  r¨   r&   r¾  r
  )rÚ   rÞ  r«  Úidentity_sortr%  s   &&&  r˜   rË  Ú2BlockParameters.TensorDecriptorStrideSorter.create³
  s^   € ô !¤¤sÐ+;Ó'<Ó!=Ó>ˆMð	)ô !×,Ò,¨YÐRVÔW�ñ
 Ø!1Ø!ôð øô	 "ô )à(’ð)ús   ŸA ÁAÁArŸ   )
rÖ   rÞ   rß   rà   rá   rä  rã   rË  rä   rm  rn  s   @r˜   ÚTensorDecriptorStrideSorterr  ª
  s!   ø† ñ	õ	$ð 
ô	ó 
ö	rš   r  c               ó    € V ^8„  d   QhRRRR/# )rœ   rm  ry  r°   rŸ   )r    s   "r˜   r¡   ÚBlockParameters.__annotate__Ð
  s   € ÷ :ñ :˜_ð :°ñ :rš   c                óØ   € \        V 4      p\        ;QJ d    . R W3 4       F  NK  	  5M! R W3 4       4      w  r4T! R/ V Uu/ uF  qUW5,          WE,          ,           bK  	  upB # u upi )z 
Concatenates block parameters.
c              3  óN   "  € T F  p\         P                  ! V4      x € K  	  R # 5ir¿   )rö  Úasdictrâ  s   & r˜   rÃ   Ú*BlockParameters.__add__.<locals>.<genexpr>Õ
  s   é € ÐB±M¨q”[×'Ò'¨×*Ð*³Mùs   ‚#%rŸ   )rè  rÈ   )rR  rm  rÚ   rê  rë  r�  s   &&    r˜   Ú__add__ÚBlockParameters.__add__Ð
  s\   € ô �4‹jˆßŒuÑB°T±MÓB�u‰uÑB°T±MÓBÓB‰ˆÙÑ9±aÓ8±a¨s˜1�6 A¥F�?Ò*±aÑ8Ñ9Ð9ùÒ8s   ÁA'c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r   ztype[StrideSorter]r«  r   r°   z4tuple[BlockParameters, BlockParameters.StrideSorter]rŸ   )r    s   "r˜   r¡   r  Ø
  s$   € ÷ %ñ %Ø!3ð%Ø@Hð%à	=ñ%rš   c                óî   € VP                  V P                  VR7      p\        R/ \        P                  ! V 4      P                  4        UUu/ uF  w  rEWCP                  V4      bK  	  uppB pWc3# u uppi )z 
Sort `BlockParameter` with stride_sorter_cls. Returns block parameters
as well as a `StrideSorter` which contains information on how the sort
can be reverted.
)r«  rŸ   )rË  r”  ry  rö  r  rŠ  rñ  )rR  r   r«  r„  r�  r�  rz  s   &&&    r˜   r¼  Ú,BlockParameters.maybe_sort_with_stride_orderØ
  s}   € ð *×0Ñ0°·±ÈÐ0ÓSˆÜ ñ 
ô !,× 2Ò 2°4Ó 8× >Ñ >Ô @ôá @‘H�Cð ×'Ñ'¨Ó,Ò,Ù @òñ
ˆð Ð$Ð$ùós   ÁA1c               ó    € V ^8„  d   QhRRRR/# )rœ   Úremovable_dimsr€  r°   ry  rŸ   )r    s   "r˜   r¡   r  é
  s   € ÷ 
ñ 
¨*ð 
¸ñ 
rš   c                óª   a€ V3R lp\        R/ \        P                  ! V 4      P                  4        UUu/ uF  w  r4W2! V4      bK  	  uppB # u uppi )z1
Remove dimensions where removable_dims is True.
c                ód   <€ \        V S4       UUu. uF  w  rV'       d   K  VNK  	  upp# u uppi r¿   )r"  )ÚitÚitemÚis_removabler  s   &  €r˜   Úfilter_dimsÚ0BlockParameters.remove_dims.<locals>.filter_dimsî
  s9   ø€ ô +.¨b°.Ô*Aôá*AÑ&�DÜ#÷ �Ù*Aòð ùó s   ‘,¢,rŸ   )ry  rö  r  rŠ  )rR  r  r$  r�  r�  s   &f   r˜   r°  ÚBlockParameters.remove_dimsé
  sS   ø€ õ
	ô ñ 
Ü5@×5GÒ5GÈÓ5M×5SÑ5SÔ5UÔVÑ5U©¨ˆs�K Ó$Ò$Ñ5UÒVñ
ð 	
ùÛVs   ¶ArŸ   N)rÖ   rÞ   rß   rà   rá   rö  r÷  r¿  r  râ   r�  r”  r™  Ú	dataclassrø  r  r  r  r¼  r°  rä   rŸ   rš   r˜   ry  ry  d
  sÖ   ‡ ñð *×/Ò/ÀÔE€EÐÓEØ$/×$5Ò$5ÀdÔ$K€KÐ!ÓKØ +× 1Ò 1À$Ô G€GÐÓGØ +× 1Ò 1À$Ô G€GÐÓGà×Ñ÷*ð *ó ð*ðX ×Ñô˜|ó ó ðð ×Ñô# ló #ó ð#õJ:õ%÷"
ñ 
rš   ry  c                  ó8   € ] tR tRtRtR tR R ltR tR tRt	R	# )
Ú"CooperativeReductionWorkspaceCacheiú
  z…
The scratch space used for cooperative reductions can be reused
after two reduction loops.  This keeps track of what can be reused.
c                	óœ   € Wn         . V n        . V n        \        P                  ! \        P
                  4      V n        ^ V n        ^ V n        R# ©r   N)	rÇ   Úcurrent_loopÚ
prior_loopÚcollectionsÚdefaultdictÚdequeÚready_for_reuseÚ
loop_countÚstore_count)rR  rÇ   s   &&r˜   re  Ú+CooperativeReductionWorkspaceCache.__init__   s>   € ØŒ	ØˆÔØˆŒÜ*×6Ò6´{×7HÑ7HÓIˆÔØˆŒØˆÖrš   c               ó   € V ^8„  d   QhRR/# )rœ   Únbytesr­   rŸ   )r    s   "r˜   r¡   Ú/CooperativeReductionWorkspaceCache.__annotate__  s   € ÷ $ñ $˜zñ $rš   c                	óæ   € V P                   P                  V4      pV'       d   VP                  4       # V P                  P	                  VR 4      w  r4pV P
                  P                  WV34       W53# ró  )r1  r	  ÚpopleftrÇ   Ú	workspacer,  r_  )rR  r6  ÚcachedÚws_namerT  Ú	ws_offsets   &&    r˜   ÚallocateÚ+CooperativeReductionWorkspaceCache.allocate  se   € Ø×%Ñ%×)Ñ)¨&Ó1ˆßØ—>‘>Ó#Ð#Ø $§	¡	× 3Ñ 3°F¸EÓ BÑˆ�IØ×Ñ× Ñ  &°9Ð!=Ô>ØÐ#Ð#rš   c                	óÚ   € V P                    F)  w  rpV P                  V,          P                  W#34       K+  	  V P                  V n         . V n        V ;P                  ^,          un        R# r  )r-  r1  r_  r,  r2  )rR  r6  r<  r=  s   &   r˜   Úon_loop_endÚ.CooperativeReductionWorkspaceCache.on_loop_end  sT   € à*.¯/¬/Ñ&ˆF˜YØ× Ñ  Õ(×/Ñ/°Ð0DÖEñ +:à×+Ñ+ˆŒØˆÔØ�Š˜1Õ�rš   c                	óP   € V P                   pV ;P                   ^,          un         V# )r  )r3  )rR  Úpriors   & r˜   Úincrement_store_countÚ8CooperativeReductionWorkspaceCache.increment_store_count  s#   € Ø× Ñ ˆØ×Ò˜AÕÕØˆrš   )rÇ   r,  r2  r-  r1  r3  N)
rÖ   rÞ   rß   rà   rá   re  r>  rA  rE  rä   rŸ   rš   r˜   r)  r)  ú
  s   † ñò
õ$òörš   r)  c                  ó.   € ] tR tRt$ R]R&   R tR tRtR# )ÚFixedTritonConfigi  zdict[str, int]r#   c                	ó(   € V P                   V,          # r¿   ©r#   ©rR  r"  s   &&r˜   rÙ  ÚFixedTritonConfig.__getitem__"  s   € Ø�{‰{˜4Õ Ð rš   c                	ó   € WP                   9   # r¿   rJ  rK  s   &&r˜   Ú__contains__ÚFixedTritonConfig.__contains__%  s   € Ø—{‘{Ñ"Ð"rš   rŸ   N)rÖ   rÞ   rß   rà   râ   rÙ  rN  rä   rŸ   rš   r˜   rH  rH    s   ‡ àÓò!ö#rš   rH  .c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )Ú_UnresolvedLoadIndexStatei.  z<First live load, recorded without performing range analysis.r­   rK  rÊ  rŸ   N©rÖ   rÞ   rß   rà   rá   râ   rä   rŸ   rš   r˜   rQ  rQ  .  s   ‡ áFàÓØ×rš   rQ  c                  ó:   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR	# )
Ú_ResolvedLoadIndexStatei6  zELast load result plus split bases resolved from an earlier live load.r­   rK  rÊ  ÚLoadIndexBasesÚbasesrŸ   NrR  rŸ   rš   r˜   rT  rT  6  s   ‡ áOàÓØÓØ×rš   rT  c                  óJ   a € ] tR tRtRtV 3R ltR V 3R lltR R ltRtV ;t	# )	Ú	TritonCSEiB  zy
Subclasses CSE to apply the current load mask to the cache key to avoid CSEing
variables across separate masked blocks.
c                	ó6   <€ \         SV `  ! V/ VB  / V n        R # r¿   )rd  re  Ú_load_index_statesrw  s   &*,€r˜   re  ÚTritonCSE.__init__H  s   ø€ Ü‰Ò˜$Ð) &Ò)ØFHˆÖrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   Ú	keep_varszOrderedSet[CSEVariable]r°   rÓ   rŸ   )r    s   "r˜   r¡   ÚTritonCSE.__annotate__L  s   € ÷ (ñ (Ð$;ð (Àñ (rš   c                	óZ   <€ \         SV `  V4       V P                  P                  4        R # r¿   )rd  Ú
invalidaterZ  Úclear)rR  r]  rf  s   &&€r˜   r`  ÚTritonCSE.invalidateL  s"   ø€ Ü‰Ñ˜9Ô%Ø×Ñ×%Ñ%Ö'rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r¶  rç   r°   ÚTritonCSEKeyrŸ   )r    s   "r˜   r¡   r^  P  s   € ÷ ñ  Sð ¨\ñ rš   c                	ód   € \         P                  P                  ;p'       d   WP                  3# V# r¿   )rX   rý   Ú
_load_maskr   )rR  r¶  r)  s   && r˜   Úaugment_keyÚTritonCSE.augment_keyP  s*   € Ü—8‘8×&Ñ&Ð&ˆ4Ö&ØŸy™yÐ)Ð)àÐrš   )rZ  )
rÖ   rÞ   rß   rà   rá   re  r`  rg  rä   rm  rn  s   @r˜   rX  rX  B  s"   ø† ñõ
I÷(ð (÷ó rš   rX  c                  ó€   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R	&   R
tR]R&   R tR R ltRR R llt	R R lt
RtR
# )ÚTMACompatibilityCheckeriW  zG
Checks if the TMA API can be used for load / store triton operations.
r$  rý   r¯   r®   r´   r	  ÚforceNr'  Úbuffer_namec                	ó   € R V n         R# )z2Cannot use TMA descriptor for load / store since: N©Úfailed_debug_prefixrQ  s   &r˜   rä  Ú%TMACompatibilityChecker.__post_init__d  s
   € Ø#WˆÖ rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   Ú$TMACompatibilityChecker.__annotate__h  s   € ÷ ?ñ ?à	ñ?rš   c                	ó  € V P                   '       d   R # \        P                  P                  4       P                  pVR8X  de   \
        P                  P                  '       d!   \        4       '       d   \        4       '       g#   \        P                  RV P                  4       R# R # VR8X  dA   \        P                  P                  4       ^ ,          ^	8¼  d   \
        P                   '       g   VR8X  d1   \
        P                  P                  '       d   \        4       '       g#   \        P                  RV P                  4       R# V P"                  '       di   V P$                  P&                  '       g+   V P$                  P(                  P+                  4       '       d#   \        P                  RV P                  4       R# V P,                  \.        9  d.   \        P                  RV P                  V P,                  4       R# R # )	TÚcpuzI%s Requires Triton CPU backend and `use_tensor_descriptor` option enabledFr0  r<  zq%s Requires triton>=3.4.0, a CUDA device with cc>=9.0, use_tensor_descriptor=True, and assume_aligned_inputs=Truez1%s stores with XBLOCK=1 cannot transfer 16 bytes.z/%s dtype %s has no CUtensorMapDataType mapping.)rk  rX   r­  r¿  rè  r#   rí   Úuse_tensor_descriptorr   r   rL  Údebugro  r×   r0  Úget_device_capabilityÚassume_aligned_inputsr	  rý   r±  r¹  Ú!has_strict_sum_multirow_reductionr®   rC   )rR  Údevice_types   & r˜   Úcan_use_tmaÚ#TMACompatibilityChecker.can_use_tmah  sj  € ð �:�:ˆ:Ùä—g‘g×9Ñ9Ó;×@Ñ@ˆØ˜%Ôä—‘×3×3Ð3Ü*×,Ò,Ü-×/Ò/ä—	‘	Ø_Ø×,Ñ,ôñ ñ ð
   6Ô)ÜŸ
™
×8Ñ8Ó:¸1Õ=ÀÔBÜ×4×4Ð4à %Ô'ä—‘×3×3Ð3Ü)×+Ò+ä�I‰IðNà×(Ñ(ôñ
 ð
 �>�>ˆ>Ø�K‰K× × Ð Ø�{‰{×#Ñ#×EÑE×GÒGä�I‰IØCØ×(Ñ(ôñ à�:‰:Ô2Ô2Ü�I‰IØAØ×(Ñ(Ø—
‘
ôñ
 árš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   Úblock_paramsry  r{  zsympy.Expr | intr°   r´   rŸ   )r    s   "r˜   r¡   rr  ©  s-   € ÷ Rñ Rà%ðRð *ðRð 
ñ	Rrš   c           
     óÄ  € \         P                  P                  4       P                  pV P                  '       d�   VP
                   Uu. uF,  p\         P                  P                  P                  V4      NK.  	  pp\         P                  P                  P                  \        P                  ! V4      4      pM"VP
                  p\        P                  ! V4      p\         P                  P                  P                  VR,          \        P                  ! ^4      4      '       g$   \        P                  RV P                  V4       R# VR8X  d   R# V P                  P                   pVRR  F‘  p\         P                  P                  P                  \#        W‡,          ^\        P                  ! ^4      4      \        P                  ! ^ 4      4      '       d   Kn  \        P                  RV P                  VV4        R# 	  \         P                  P                  P                  \#        Wg,          ^\        P                  ! ^4      4      \        P                  ! ^ 4      4      '       g%   \        P                  RV P                  VV4       R# V P$                  eI   \'        V P$                  4      '       d.   \        P                  RV P                  V P$                  4       R# VP(                  R,          p	\         P                  P                  P                  V	\        P                  ! ^4      4      '       d.   \        P                  R	V P                  VP(                  4       R# Rp
RpV	P*                   F2  p\,        P.                   F  p\1        WÍ4      '       g   K  Tp
Tp K0  	  K4  	  V
'       d	   V'       g   \3        V	 R
\,        P.                   24      hV P4                  P6                  P9                  4       ^8X  d8   V\,        P:                  9   d#   \        P                  RV P                  4       R# V P4                  P<                  '       EdR   V\,        P:                  9   Ed<   \>        V,          pRpV P4                  P@                   F6  pVPB                  '       g   K  VPD                  V8X  g   K*  VPF                  p M	  Vf/   \        P                  RV P                  VVP(                  4       R# V P4                  PI                  V4      pV	PK                  V
V/4      V,          p\         P                  P                  PM                  V\        P                  ! ^4      4      '       g/   \        P                  RV P                  VP(                  V4       R#  R#  RR R llpW—,          ^,
          pVPO                  \P        V4      PO                  \"        V4      p\S        \U        \        PV                  ! VV
^4      4      4      pVV P4                  PY                  \>        V,          4      8”  d%   \        P                  RV P                  VV4       R# V P4                  PZ                  '       d@   V\\        P^                  8X  d+   V^8”  d$   \        P                  RV P                  V4       R# V P4                  P`                  '       d\   V P4                  Pb                  '       g@   V\\        P^                  8X  d+   V^8”  d$   \        P                  RV P                  V4       R# V P4                  Pe                  V
4      pV P4                  Pf                  '       df   VV P4                  Pf                  V,          8”  dA   \        P                  RV P                  VV P4                  Pf                  V,          V4       R#  R# \i        VV P4                  Pj                  Pm                  V^4      4      V P4                  Pj                  V&    R# u upi   \n         d0    \        P                  RT P                  TP(                  4        R# i ; i)z‘
Check if the block parameters are valid for TMA.
If force, we allow relying on symbolic hints equivalent
to what we check for Triton templates.
zG%s tensor descriptors require innermost stride to be 1. Strides are: %sFrt  TNzU%s TMA API requires outer strides to be 16 byte aligned. Dtype bytes: %d, strides: %sz{%s TMA descriptor base must be 16 byte aligned but constant_offset=%s with %d-byte dtype yields a non-16-byte aligned base.z‘%s TMA descriptor base must be 16 byte aligned but buffer %s is recorded as unaligned (e.g. produced by a sub-pointer view / reinterpret_tensor).z>%s innermost block shape cannot load 16 bytes. Block shape: %sz, expr must contain a single block type from zF%s strict sum linear accumulation requires a reduction block size of 1zN%s could not find reduction range tree for innermost prefix %s Block shape: %szn%s persistent reduction innermost block shape cannot transfer 16 bytes. Block shape: %s, persistent RBLOCK: %dc               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   rª  r­   rÈ  r°  zsympy.Expr | Noner°   rŸ   )r    s   "r˜   r¡   ÚMTMACompatibilityChecker.are_block_parameters_compatible.<locals>.__annotate__Y  s0   € ÷ ñ Ø!ðà!ðð )ðð  ñ	rš   c                ó6   € W,          pV'       d	   W2,          pV# r¿   rŸ   )rª  rÈ  r°  r�  s   &&& r˜   Úindexing_div_repÚQTMACompatibilityChecker.are_block_parameters_compatible.<locals>.indexing_div_repY  s   € ð
 �%�CßØ!�g˜Ø�Jrš   zC%s the minimum block size to satisfy expression %s is too large: %dzK%s no_x_dim kernel has XBLOCK fixed at 1 but TMA requires min block size %dzI%s combo kernel with shared XBLOCK cannot guarantee TMA min block size %dzT%s For block %s, fixed config block size %d is smaller than the minimum required: %dz?%s innermost block shape cannot load 16 bytes. Block params: %sr¬  r¿   )8rX   r­  r¿  rè  rk  r”  r§  Ú!replace_backed_symbols_with_hintsr¤   Úsympifyr®  r¦   rL  rv  ro  r®   rE  r   rl  rv   r�  r©   rð   r+  r    r
  rý   r¹  Ústrict_sum_rblockr2  Úpersistent_reductionr   rœ  r1  r²  ÚnumelÚ_get_persistent_reduction_blockÚsubsÚstatically_known_geqrO  r   r9   r†  ÚnsolveÚ	max_blockr±  r!   r=  Úis_combo_kernelÚper_subkernel_blocksr$  Úfixed_configr�   Útma_min_block_sizesr	  r2  )rR  r~  r{  rz  Ústr”  Úconstant_offset_exprÚelement_sizerÉ  Úinnermost_block_shapeÚinnermost_block_typeÚinnermost_block_symtÚblock_type_strÚ
block_symtÚinnermost_tree_prefixÚ
tree_numelrè  Úpersistent_rblockÚinnermost_block_bytesrƒ  Ú
solve_exprÚsolve_expr_simplifiedÚmin_block_sizes   &&&                    r˜   Úare_block_parameters_compatibleÚ7TMACompatibilityChecker.are_block_parameters_compatible©  sã  € ô —g‘g×9Ñ9Ó;×@Ñ@ˆØ�:�:ˆ:ð '×.Ò.óá.�Bô —‘× Ñ ×BÑBÀ2ÖFÙ.ð ð ô $%§7¡7×#3Ñ#3×#UÑ#UÜ—’˜oÓ.ó$Ñ ð #×*Ñ*ˆGÜ#(§=¢=°Ó#AÐ ô �w‰w×Ñ×7Ñ7¸À½ÄUÇ]Â]ÐSTÓEU×VÒVÜ�I‰IØYØ×(Ñ(Øôñ
 ð ˜%ÔÙà—z‘z×*Ñ*ˆØ˜c˜r“lˆFÜ—7‘7×#Ñ#×;Ñ;Ü Õ 5°q¼%¿-º-ÈÓ:KÓLÜ—’˜aÓ ÷ô ô —	‘	ØkØ×,Ñ,Ø Øô	ò ñ #ô$ �w‰w×Ñ×7Ñ7ÜÐ0Õ?ÀÄEÇMÂMÐRTÓDUÓVÜ�MŠM˜!Ó÷
ò 
ô �I‰IðHà×(Ñ(Ø$Øôñ ð
 ×ÑÒ'Ô,DÀT×EUÑEU×,VÒ,VÜ�I‰Ið.ð ×(Ñ(Ø× Ñ ôñ ð !-× 8Ñ 8¸Õ <Ðô �7‰7×Ñ×3Ñ3Ø!¤5§=¢=°Ó#3÷
ò 
ô �I‰IØPØ×(Ñ(Ø×(Ñ(ôñ
 à#ÐØ#ÐØ3×@Ô@ˆNÜ+×7Ô7�
Ü! .×=Ô=Ø+9Ð(Ø+5Ð(Úó	 8ñ A÷ %×)=Ü Ø(Ð)Ð)UÔVc×VoÑVoÐUpÐqóð ð
 �K‰K× Ñ ×2Ñ2Ó4¸Ô9Ø$¬×(EÑ(EÔEä�I‰IØXØ×(Ñ(ôñ ð �K‰K×,×,Ñ,Ø$¬×(EÑ(EÕEô %/Ð/CÕ$DÐ!ØˆJØ—[‘[×,Ô,�Ø—>—>’> a§h¡hÐ2GÖ&GØ!"§¡�JÙñ -ð Ò!ô
 —	‘	ØdØ×,Ñ,Ø)Ø ×,Ñ,ô	ñ Ø $§¡× KÑ KÈJÓ WÐà%×*Ñ*Ð,@ÐBSÐ+TÓUØõð "ô —7‘7×#Ñ#×8Ñ8Ø%¤u§}¢}°RÓ'8÷ò ô —	‘	ð EØ×,Ñ,Ø ×,Ñ,Ø%ô	ñ ðñf ðIb÷ð 3ÕAÀBÕF�
à(2×(:Ñ(:ÜÐ.ó)ç‘'œ/Ð+;Ó<ð &ô "1ÜÜŸšØ1Ø0Øóóó"�ð " D§K¡K×$9Ñ$9ÜÐ3Õ4ó%ô ô —I‘IØ]Ø×0Ñ0Ø-Ø&ô	ñ !ð —K‘K×(×(Ð(Ø,´·±Ô;Ø&¨Ô*ä—I‘IØeØ×0Ñ0Ø&ôñ
 !ð —K‘K×/×/Ð/Ø ŸK™K×<×<Ð<Ø,´·±Ô;Ø&¨Ô*ä—I‘IØcØ×0Ñ0Ø&ôñ
 !à!%§¡×!9Ñ!9Ð:NÓ!O�à—;‘;×+×+Ð+Ø%¨¯©×(@Ñ(@ÀÕ(PÔPÜŸ	™	ð<à ×4Ñ4Ø*Ø ŸK™K×4Ñ4°^ÕDØ*ôñ  %ð Qñ4 ô GJØ&ØŸ™×7Ñ7×;Ñ;¸NÈAÓNóG�D—K‘K×3Ñ3°NÒCñ ùòMøô| ô Ü—	‘	ØUØ×,Ñ,Ø ×,Ñ,ôò
 ðúsK   Á	2` Ö.B8`% Ù(`% Ú=`% Û`% Û`% Û;=`% Ü:6`% Ý1A `% ßA`% à%6aáac               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   rr  ½  s   € ÷ 
ñ 
˜$ñ 
rš   c                ó   € V P                   # )a  
Can you lift the make_tensor_descriptor
call to the top of the kernel? This requires
being certain that all of the shape, stride,
and block_shape information is handled in arguments
or top level definitions.

Right now we assume this is always possible if you force TMA.
)rk  rQ  s   &r˜   r†  Ú TMACompatibilityChecker.can_lift½  s   € ð �z‰zÐrš   rn  rÝ  )rÖ   rÞ   rß   rà   rá   râ   rl  rä  r{  r¢  r†  rä   rŸ   rš   r˜   rj  rj  W  sF   ‡ ñð ÓØÓØƒOØƒKà"€K�Ó"òXõ?÷BR÷h
ñ 
rš   rj  c                  ó|  a € ] tR tRt$ Rt]tR]R&   ]t	R]R&   Rt
]t]tR]R	&   ]tR
]R&   RtR]R&   RçR V 3R lllt]R R l4       t]R R l4       tR R ltR R ltR R ltR R ltR R ltR  R! ltR" R# ltR$ R% lt]R& R' l4       tR( R) lt R* R+ lt!R, R- lt"RèR. R/ llt#]R0 R1 l4       t$]RèR2 R3 ll4       t%R4 R5 lt&R6 R7 lt']R8 R9 l4       t(R: R; lt)R< R= lt*R> t+R? t,R@ t-RA t.RB RC lt/]0RD RE l4       t1RF t2]RG RH l4       t3RIRRJRRKRRLRRMRRNR/RO RP llt4RéRQ RR llt5RéRS lt6RT t7RU t8RV RW lt9RX t:RY RZ lt;R[ R\ lt<R] R^ lt=R_t>R`t?]Ra 4       t@RbR/Rc ltARd tBRe Rf ltCRg Rh ltDRi Rj ltERk Rl ltFRm Rn ltGRo Rp ltHRq Rr ltIRs Rt ltJRèRu Rv lltKRw Rx ltLRy tMRz R{ ltNRêR| R} lltOR~ R ltPR€ R� ltQR‚ Rƒ ltRR„ R… ltSR† R‡ ltTRˆ R‰ ltURŠ tVR‹ tWRŒ tXR� tYRŽ R� ltZR� R‘ lt[R’ R“ lt\R” R• lt]R– R— lt^]R˜ R™ l4       t_Rš R› lt`Rœ R� ltaRž RŸ ltbR  R¡ ltcR¢ tdR£ R¤ lteR¥ R¦ ltfR§ tgR¨ th]i]j! R4      R© Rª l4       4       tk]iR« R¬ l4       tl]iR­ 4       tmR® R¯ ltn]oPà                  R° R± l4       tqRèR² R³ lltr]R´ 4       tsRµ R¶ lttR· R¸ ltu]R¹ 4       tv]Rº R» l4       twR¼ txR½ R¾ ltyR¿ tzRëRÀ RÁ llt{RÂ RÃ lt|RÄ RÅ lt}RÆ RÇ lt~RÈ RÉ ltRÊ RË lt€RÌ RÍ lt�RÎ RÏ lt‚RÐ RÑ ltƒRÒ RÓ lt„RÔ RÕ lt…RÖ R× lt†]0RØ RÙ l4       t‡RÚ RÛ ltˆRÜ RÝ lt‰]0RÞ Rß l4       tŠRà Rá lt‹Râ Rã ltŒRä Rå lt�RætŽV ;t�# )ìr$  iÊ  z\A class to represent a triton kernel and helpers to generate
triton kernel programmatically
rÄ  Úhelper_functionszCallable[[sympy.Expr], str]ÚkexprTztype[BlockPtrOptions]Úblock_ptr_options_clsztype[TensorDescriptorOptions]Útensor_descriptor_options_clsNzbool | NoneÚ3transpose_discontiguous_tensor_descriptors_overrideFc               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )rœ   Útilingúdict[str, sympy.Expr]r‘  zFixedTritonConfig | NoneÚhint_overrideú
int | Noner�  r´   r�  r°   rÓ   rŸ   )r    s   "r˜   r¡   ÚTritonKernel.__annotate__Ú  sF   € ÷ ?9ñ ?9à%ð?9ð
 /ð?9ð "ð?9ð ð?9ð #ð?9ð 
ñ?9rš   c                	óâ  <€ W0n         W@n        W`n        Wpn        \        S	V `  ! V3/ VB  \        V P                  V P                  4      V n	        / V n
        \        4       V n        \        4       V n        \        4       V n        \        \         ,          ! 4       V n        W n        \&        P(                  ! 4       V n        \,        \.        \.        3,          ! 4       V n        \3        4       V n        \6        P8                  ! \,        4      V n        \,        \.        \<        3,          ! 4       V n        / V n         \        4       V n!        R V n"        RV n#        WPn$        \6        PJ                  ! 4       V n&        ^ V n'        RV n(        . V n)        . V n*        / V n+        / V n,        / V n-        \6        PJ                  ! 4       V n.        \        \^        ,          ! 4       V n0        R V n1        V Pd                  '       d   V Pg                  V Ph                  4       V Pj                  '       d   V Pm                  4        V Po                  4        V Pj                  '       d   V Pq                  4        RV n9        . V n:        R # ©NF);Úoptimize_maskr‘  r�  r�  rd  re  rX  Únewvar_prefixÚsuffixrþ   Úprologue_cachera   ÚprologueÚpost_loop_combineÚpost_loop_storer   r	   Úoutside_loop_varsrª  r‹  ÚcountÚblock_ptr_idÚdictrç   Úblock_ptr_to_bufferrÄ  r¨  r.  r/  Úpointer_advancementsr†  r’  Úhost_tma_descriptor_argsÚ_host_tma_non_materializableÚ$_host_tma_non_materializable_buffersÚ_emitted_device_tmar°  ÚCounterÚ_load_countsÚ_pdl_load_indexÚ_pdl_has_waitÚop_traceÚop_trace_buffer_arg_namesÚ_op_trace_buffer_namesÚ_op_trace_cse_namesÚ_op_trace_symbol_namesÚ_op_trace_symbol_countsr0   Úautotune_hintsÚtriton_metar·  Úcodegen_reduction_numelsrl  Úcooperative_reductionÚinit_cooperative_reductionÚcodegen_range_treeÚinit_cooperative_reduction_maskÚhas_load_with_contiguous_rdimÚstores_with_contiguous_rdim)
rR  r®  rª  rµ  r‘  r°  r�  r�  rj  rf  s
   &&&&&&&&,€r˜   re  ÚTritonKernel.__init__Ú  sá  ø€ ð $1ÔØ(ÔØ%4ÔØ*>Ô!Ü‰Ò˜Ñ* 6Ò*Ü˜T×/Ñ/°·±Ó=ˆŒà.0ˆÔÜ(6Ó(8ˆŒÜ1?Ó1AˆÔÜ/=Ó/?ˆÔÜ!+¬C¦Ó!2ˆÔØ#6Ô Ü%ŸOšOÓ-ˆÔÜ#'¬¬S¨¦>Ó#3ˆÔ Ü /Ó 1ˆÔä×#Ò#¤DÓ)ð 	Ô!ô $(¬¬S¨¦>Ó#3ˆÔ ØLNˆÔ%Ü=G»\ˆÔ)ØLPˆÔ1Ø#(ˆÔ Ø*ÔÜ6A×6IÒ6IÓ6KˆÔØ ˆÔØ"ˆÔØ24ˆŒØ46ˆÔ&Ø68ˆÔ#Ø35ˆÔ ØHJˆÔ#ÜAL×ATÒATÓAVˆÔ$ô )¬Ö6Ó8ˆÔØ.2ˆÔà× × Ð Ø×)Ñ)¨$¯)©)Ô4à×%×%Ð%Ø×+Ñ+Ô-à×ÑÔ!à×%×%Ð%Ø×0Ñ0Ô2à-2ˆÔ*à68ˆÖ(rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²    s   € ÷ Oñ O˜$ñ Orš   c                	óT   € \        V P                  ;'       g    V P                  4      # r¿   )r´   rÂ  rÅ  rQ  s   &r˜   Úuses_tmaÚTritonKernel.uses_tma  s!   € ä�D×1Ñ1×MÐM°T×5MÑ5MÓNÐNrš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²     s   € ÷ (ñ ( ñ (rš   c                	ó   € V P                   # r¿   )rÅ  rQ  s   &r˜   Úuses_device_tmaÚTritonKernel.uses_device_tma  s   € à×'Ñ'Ð'rš   c               ó   € V ^8„  d   QhRR/# ©rœ   r°   r†  rŸ   )r    s   "r˜   r¡   r²  #  s   € ÷ Rñ R Cñ Rrš   c                	ó:   € \        R  V P                   4       4      # )c              3  óP   "  € T F  p\        VP                  R J4      x € K  	  R # 5ir¿   )r†  r  ©rÀ   r  s   & r˜   rÃ   Ú2TritonKernel.triton_tensor_ndim.<locals>.<genexpr>$  s#   é € ÐQÑ@P¸”3�t—‘¨dÐ2×3Ð3Ó@Pùs   ‚$&)Úsumrœ  rQ  s   &r˜   r  ÚTritonKernel.triton_tensor_ndim#  s   € ÜÑQÀ×@PÒ@PÓQÓQÐQrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r,  r†  r°   rç   rŸ   )r    s   "r˜   r¡   r²  &  s   € ÷ 'ñ ' 3ð '¨3ñ 'rš   c                	ód   € R .V P                  4       ,          pRW!&   RRP                  V4       R2# )rÓ   r]  rU  r  rV  )r  rq  )rR  r,  Úsizess   && r˜   Úindexing_size_strÚTritonKernel.indexing_size_str&  s7   € Ø�˜4×2Ñ2Ó4Õ4ˆØˆ‰Ø�4—9‘9˜UÓ#Ð$ AÐ&Ð&rš   c               ó   € V ^8„  d   QhRR/# ©rœ   r°   rO  rŸ   )r    s   "r˜   r¡   r²  +  s   € ÷ ñ  ñ rš   c                	ó¼   € R .V P                  4       ,          pV P                  4        F/  pVP                  f   K  VP                  4       WP                  &   K1  	  V# )rû   )r  rk  r  Úblock_size_str)rR  rì  r  s   &  r˜   r.  ÚTritonKernel.dense_size_list+  sP   € Ø�˜×/Ñ/Ó1Õ1ˆØ×+Ñ+Ö-ˆDØ�‰Ô*Ø)-×)<Ñ)<Ó)>�—o‘oÓ&ñ .ð ˆrš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   r²  2  s   € ÷ 8ñ 8 ñ 8rš   c                	óH   € R RP                  V P                  4       4       R2# rT  )rq  r.  rQ  s   &r˜   Údense_size_strÚTritonKernel.dense_size_str2  s$   € Ø�4—9‘9˜T×1Ñ1Ó3Ó4Ð5°QÐ7Ð7rš   c               ó    € V ^8„  d   QhRRRR/# ©rœ   Úentryro   r°   rç   rŸ   )r    s   "r˜   r¡   r²  5  s   € ÷ 
ñ 
Ð*=ð 
À#ñ 
rš   c                	ó"  € VP                   f%   VP                  4        RV P                  4        R2# R.V P                  4       ,          pRW!P                   &   RP	                  V4      pVP                  4        RVP                  4        RV R2# )	Nú = tl.full(z, True, tl.int1)rÓ   r]  r  z = tl.full([z], True, tl.int1)[rV  )r  r*  rö  r  rq  rò  )rR  rú  rì  r·  s   &&  r˜   Úcreate_constant_maskÚ!TritonKernel.create_constant_mask5  sž   € Ø×ÑÒ#à—?‘?Ó$Ð% [°×1DÑ1DÓ1FÐ0GÐGWÐXðð �˜4×2Ñ2Ó4Õ4ˆØ"%ˆ×ÑÑØ—‘˜5Ó!ˆà�‰Ó Ð!ð "Ø×,Ñ,Ó.Ð/Ð/AÀ&ÀÈðLð	
rš   c               ó$   € V ^8„  d   QhRRRRRR/# ©rœ   r   rç   Ústorer´   r°   rŸ   )r    s   "r˜   r¡   r²  B  s!   € ÷ %ñ % cð %°Tð %¸cñ %rš   c               	óÀ   € V\         P                  P                  9   d   V# V'       d   V P                  P	                  V4      # V P                  P                  V4      # r¿   )rX   r­  Úremoved_buffersrÇ   rž  r°  ©rR  r   r  s   &&$r˜   Ú_trace_kernel_argÚTritonKernel._trace_kernel_argB  sD   € Ø”1—7‘7×*Ñ*Ô*ØˆKßØ—9‘9×#Ñ# DÓ)Ð)Ø�y‰y�‰˜tÓ$Ð$rš   c               ó$   € V ^8„  d   QhRRRRRR/# r   rŸ   )r    s   "r˜   r¡   r²  I  s!   € ÷ 1ñ 1 #ð 1°ð 1¸#ñ 1rš   c               	óè   € WP                   9  dQ   R \        V P                   4       2V P                   V&   V P                  P                  V P	                  WR7      4       V P                   V,          # )Úbuffer©r  )rÌ  r¨   rË  r_  r  r  s   &&$r˜   Ú_trace_bufferÚTritonKernel._trace_bufferI  sn   € Ø×2Ñ2Ô2àœ˜T×8Ñ8Ó9Ð:Ð;ð ×'Ñ'¨Ñ-ð ×*Ñ*×1Ñ1Ø×&Ñ& tÐ&Ó9ôð ×*Ñ*¨4Õ0Ð0rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r  r_   r°   ztuple[str, str, str, Any]rŸ   )r    s   "r˜   r¡   r²  S  s   € ÷ 
ñ 
 +ð 
Ð2Kñ 
rš   c                	ó0  € VP                   V P                  9  d0   R \        V P                  4       2V P                  VP                   &   RV P                  VP                   ,          \        VP                  4      V P                  VP                  4      3# )r`  rþ   )r   rÍ  r¨   rç   r®   Ú_normalize_trace_valuer  )rR  r  s   &&r˜   Ú_trace_cse_varÚTritonKernel._trace_cse_varS  sw   € Ø�8‰8˜4×3Ñ3Ô3Ø36´s¸4×;SÑ;SÓ7TÐ6UÐ1VˆD×$Ñ$ S§X¡XÑ.àØ×$Ñ$ S§X¡XÕ.Ü�—	‘	‹NØ×'Ñ'¨¯	©	Ó2ð	
ð 	
rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r%  r&  r°   r'  rŸ   )r    s   "r˜   r¡   r²  ^  s   € ÷ 
ñ 
 \ð 
°jñ 
rš   c                	óî   € \         P                  \         P                  \         P                  \         P                  \         P
                  3 F#  p\        W4      '       g   K  \        V,          u # 	  R # r¿   )r!   r=  r>  r?  r;  r<  r    r   )r%  r,  s   & r˜   Ú_trace_symbol_prefixÚ!TritonKernel._trace_symbol_prefix]  sP   € ô �K‰KÜ�K‰KÜ�K‰KÜ�M‰MÜ�M‰Mó
ˆDô ˜f×+Ô+Ü! $Õ'Ò'ñ
ñ rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r%  r&  r°   rŸ   )r    s   "r˜   r¡   r²  j  s   € ÷ ñ  Lð °\ñ rš   c                	ó"  € WP                   9   d   V P                   V,          # \        V\        P                  4      '       dP   V P                  P                  VP                  4      pVe'   \        P                  ! V4      pW0P                   V&   V# V P                  V4      pVf   V# V P                  V,          pV P                  V;;,          ^,          uu&   \        P                  ! V V 23/ VP                  B pW0P                   V&   V# r¿   )rÎ  r    r!   rü   rÍ  r	  r   r¤   r@  r  rÏ  Úassumptions0)rR  r%  r   Ú
normalizedr²  r½  s   &&    r˜   Ú_trace_symbolÚTritonKernel._trace_symbolj  sè   € Ø×0Ñ0Ô0Ø×.Ñ.¨vÕ6Ð6ä˜&¤$§(¡(×+Ò+Ø×+Ñ+×/Ñ/°·±Ó<ˆDØÒÜ"Ÿ\š\¨$Ó/�
Ø6@×+Ñ+¨FÑ3Ø!Ð!à×*Ñ*¨6Ó2ˆØŠ>ØˆMà×,Ñ,¨VÕ4ˆØ×$Ñ$ V×,°Õ1Ó,Ü—\’\ V H¨U¨GÐ"4ÑL¸×8KÑ8KÑLˆ
Ø.8×#Ñ# FÑ+ØÐrš   c               ó    € V ^8„  d   QhRRRR/# rh  rŸ   )r    s   "r˜   r¡   r²    s   € ÷ ñ ¨*ð ¸ñ rš   c                	óÚ   € \        VP                  \        P                  ! R 4      R7       Uu/ uF  pW P	                  V4      bK  	  ppV'       d   \        W4      p\        V4      # u upi )r   ©r�  )rr  r©   ÚoperatorÚ
attrgetterr  rP   Útexpr)rR  r�   r%  Úreplacementss   &&  r˜   Ú_normalize_trace_exprÚ"TritonKernel._normalize_trace_expr  sh   € ô ! ×!2Ñ!2¼×8KÒ8KÈFÓ8SÕTó
áT�ð ×&Ñ& vÓ.Ò.ÙTð 	ð 
÷ Ü˜dÓ1ˆDÜ�T‹{Ðùò
s   ®A(c               ó    € V ^8„  d   QhRRRR/# )rœ   r  r	   r°   rŸ   )r    s   "r˜   r¡   r²  ˆ  s   € ÷ ñ ¨Cð °Cñ rš   c                	óž  a € \        V\        4      '       d   S P                  V4      # \        V\        P                  4      '       d   R S P                  V4      3# \        V\        P                  4      '       d   R\        V4      3# \        V\        \        34      '       d3   \        ;QJ d    . V 3R lV 4       F  NK  	  5# ! V 3R lV 4       4      # \        V\        4      '       da   \        ;QJ d.    . V 3R l\        VP                  4       4       4       F  NK  	  5# ! V 3R l\        VP                  4       4       4       4      # V# )r¤   r®   c              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir¿   ©r  )rÀ   rª  rR  s   & €r˜   rÃ   Ú6TritonKernel._normalize_trace_value.<locals>.<genexpr>�  s   øé € ÐGÁ¸A˜×4Ñ4°Q×7Ð7Ãùó   ƒ!c              3  óN   <"  € T F  w  rVSP                  V4      3x € K  	  R # 5ir¿   r(  )rÀ   r�  r�  rR  s   &  €r˜   rÃ   r)  ’  s*   øé € ð á 5‘H�Cð �d×1Ñ1°#Ó6Õ7Û 5ùó   ƒ"%)r£   r_   r  r¤   r¥   r#  r×   r®   rç   r¿  rÈ   r¿  rr  rŠ  )rR  r  s   f&r˜   r  Ú#TritonKernel._normalize_trace_valueˆ  s÷   ø€ Ü�eœ[×)Ò)Ø×&Ñ& uÓ-Ð-Ü�eœUŸZ™Z×(Ò(Ø˜T×7Ñ7¸Ó>Ð?Ð?Ü�eœUŸ[™[×)Ò)ØœS ›ZÐ(Ð(Ü�eœd¤E˜]×+Ò+ß”5ÔGÁÓG—5ÐG�5ÔGÁÓGÓGÐGÜ�eœT×"Ò"ß”5ô ä & u§{¡{£}Ô 5ó—5ð �5ô ä & u§{¡{£}Ô 5óó ð ð ˆrš   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )rœ   r   rç   rÇ   rr  rj  r½  rÊ  r	   r°   rÓ   rŸ   )r    s   "r˜   r¡   r²  ˜  s<   € ÷ %
ñ %
àð%
ð ð%
ð ð	%
ð
 ð%
ð 
ñ%
rš   c                	óÀ  a € S P                   '       g   R # VR8X  d*   Vw  rVS P                  VRR7      S P                  V4      3pMƒVR8X  dK   Vw  rVr‰S P                  VRR7      S P                  V4      S P                  V4      S P                  V	4      3pM2\        ;QJ d    . V 3R lV 4       F  NK  	  5M! V 3R lV 4       4      pS P                  P                  \        TT\        ;QJ d.    . V 3R l\        VP                  4       4       4       F  NK  	  5M'! V 3R l\        VP                  4       4       4       4      S P                  V4      R7      4       R # )	Nr   Fr
  r  Tc              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir¿   r(  )rÀ   rÁ   rR  s   & €r˜   rÃ   Ú/TritonKernel.record_op_trace.<locals>.<genexpr>±  s!   øé € Ð#UÑPTÈ D×$?Ñ$?À×$DÐ$DÓPTùr*  c              3  óN   <"  € T F  w  rVSP                  V4      3x € K  	  R # 5ir¿   r(  )rÀ   r�  r  rR  s   &  €r˜   rÃ   r1  ·  s*   øé € ð á&<™
˜ð ˜$×5Ñ5°eÓ<Õ=Û&<ùr,  )r   rÇ   rj  rÊ  )	r�  r  r  rÈ   rÊ  r_  rq  rr  rŠ  )
rR  r   rÇ   rj  rÊ  rl  rK  Únormalized_argsr  Úmodes
   f&&&&     r˜   Úrecord_op_traceÚTritonKernel.record_op_trace˜  s2  ø€ ð ×#×#Ð#Ùà�6Œ>Ø!%ÑˆKà×"Ñ" ;°eÐ"Ó<Ø×+Ñ+¨EÓ2ð‰Oð �WŒ_Ø.2Ñ+ˆK à×"Ñ" ;°dÐ"Ó;Ø×+Ñ+¨EÓ2Ø×+Ñ+¨EÓ2Ø×+Ñ+¨DÓ1ð	‰O÷ $œeÔ#UÑPTÓ#UŸe™eÔ#UÑPTÓ#UÓUˆOà�‰×ÑÜØØ$ß”uô ä&,¨V¯\©\«^Ô&<ó—u‘uô ä&,¨V¯\©\«^Ô&<óó ð ×2Ñ2°6Ó:ôö
	
rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²  À  s   € ÷ :ñ : tñ :rš   c                	ó   € \         P                  '       g#   \         P                  P                  '       g   R # V P                  pV Uu. uF'  p\        V\        P                  4      '       g   K%  VNK)  	  pp\        V4      ^ 8X  d   R #  \        P                  P                  P                  WV4      p\        ;QJ d    R T 4       F  '       g   K   R# 	  R # ! R T 4       4      # u upi   \         d     R # i ; i)Fc              3  ó*   "  € T F	  q^8H  x € K  	  R# 5ir  rŸ   )rÀ   rÉ  s   & r˜   rÃ   Ú4TritonKernel._has_stride1_on_rdim.<locals>.<genexpr>Ù  s   é € Ð9©[ 6˜Q–;«[ùó   ‚T)r#   ÚdeterministicÚtest_configsÚforce_filter_reduction_configsr©   r    rð   r2  r¨   rX   r­  r§  Ústride_varsÚZeroDivisionErrorrˆ   )rK  Úsupport_varsr  Úreduce_varsr?  s   &    r˜   Ú_has_stride1_on_rdimÚ!TritonKernel._has_stride1_on_rdim¿  sÚ   € ô × × Ð ¤F×$7Ñ$7×$V×$VÐ$VáØ×)Ñ)ˆñ $ó
á#�Ü˜c¤=×#@Ñ#@×A÷ ˆCÙ#ð 	ð 
ô ˆ{Ó˜qÔ Ùð	ÜŸ'™'×*Ñ*×6Ñ6°uÈ<ÓXˆK÷ ‹sÑ9©[Ó9�sŒsÐ9ŠsÐ9ˆsÑ9©[Ó9Ó9Ð9ùò!
øô !ô 	Úð	ús   Á	"C)Á0C)Â*C. Ã.C=Ã<C=c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r“  r0  r®   rR  r°   r´   rŸ   )r    s   "r˜   r¡   r²  Ü  s&   € ÷ ñ Ø)ðà!ðð 
ñrš   c                óø   € Ve   V\         P                  8X  d   R# V P                   FN  p\        V\        \
        P                  34      '       d   K+  \        V\
        P                  4      '       d   KM   R# 	  R# )zˆWhether the host launcher can build a TensorDescriptor for this
access (not a TMA eligibility check -- that's TMACompatibilityChecker).
FT)r×   r´   r�  r£   r†  r¤   r¦   r@  )r“  r®   rÃ  s   && r˜   Ú_is_host_tma_materializableÚ(TritonKernel._is_host_tma_materializableÛ  s]   € ð Ò ¬%¯*©*Ô!4ÙØ×'Ô'ˆCÜ˜#¤¤U§]¡]Ð3×4Ò4ÙÜ˜#œuŸ|™|×,Ò,ÙÚñ (ñ rš   c               ó   € V ^8„  d   QhRR/# rÈ  rŸ   )r    s   "r˜   r¡   r²  í  s   € ÷ 4Hñ 4H°Tñ 4Hrš   c                ój  € \         P                  P                  '       g   \        4       V n        R# \        4       V n        ^RIHp \        R V P                   4       4      pV'       g   R# ^ RIH	pH
p \        P                  ! \        4      pVP                  V P                  P                   4       F¢  pVP"                  P$                   F…  p\'        VR4      '       g:   \'        VR4      '       d&   V P                  P)                  VP*                  4       KN  WWP*                  ,          P-                  VP.                  VP0                  34       K‡  	  K¤  	  VP3                  4        EFD  w  r‰W€P                  9   d   K  V	 Få  w  r«\        V4      p\4        ;QJ d&    R V
P6                   4       F  '       g   K   RM	  R	M! R V
P6                   4       4      '       d   V P                  P)                  V4        Mn\8        P:                  ! V
4       FN  p\=        WÓV34      '       g   K  VP6                  V,          '       g   K3  V P                  P)                  V4        M	  Kå   M	  W€P                  9   d   EK  \?        V	4      ^8”  g   EK)  V P                  P)                  V4       EKG  	  R# )
zxPopulate _host_tma_non_materializable_buffers with buffers that
can't be expressed as a single host-side TMA descriptor.N)ÚNodeScheduleMarkerc              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   ©r%  ræ  s   & r˜   rÃ   ÚCTritonKernel._prescan_host_tma_materializability.<locals>.<genexpr>ø  s   é € Ð'SÑBR¸$¯©¯¨ÓBRùó   ‚)r   r   Ú	var_namesr   c              3  óV   "  € T F  p\        V\        P                  4      x € K!  	  R # 5ir¿   )r    r!   rü   )rÀ   rb  s   & r˜   rÃ   rN    s    é € ÐOÑ<N°q”~ a¬¯©×2Ð2Ó<Nùrc  TF) r#   rí   ru  r   rÄ  Úsimd_kernel_featuresrK  rœ  Útorch.utils._sympy.functionsr   r   r.  r/  r¿  Ú
only_nodesr¹  Únode_scheduleÚread_writesÚreadsrë   rµ  r   r_  rK  rP  rŠ  rˆ   r©   r¤   Úpreorder_traversalr£   r¨   )rR  rK  Úrange_tree_symbolsr   r   Úbuffer_read_indicesr³   ÚdepÚbuf_namerW  rK  rP  Údep_varsÚ	expr_nodes   &             r˜   Ú#_prescan_host_tma_materializabilityÚ0TritonKernel._prescan_host_tma_materializabilityí  sù  € ô �}‰}×2×2Ð2ä8B»ˆDÔ5ÙÜ4>³LˆÔ1å<ä'Ñ'SÀ$×BRÒBRÓ'SÓSÐß!ÙçJô ×#Ò#¤DÓ)ð 	ð '×1Ñ1°$·-±-×2MÑ2MÖNˆDØ×'Ñ'×-Ô-�Ü˜s K×0Ò0Ü˜s F×+Ò+Ø×AÑA×EÑEÀcÇhÁhÔOÙØ#§H¡HÕ-×4Ñ4°c·i±iÀÇÁÐ5OÖPó .ñ Oð  3×8Ñ8×:‰OˆHØ×DÑDÔDÙã$)Ñ �Ü% iÓ0�ç“3ÑO¸E×<NÒ<NÓO—3—3’3ÑO¸E×<NÒ<NÓO×OÒOØ×=Ñ=×AÑAÀ(ÔKÙä!&×!9Ò!9¸%Ö!@�IÜ! )¸Ð-H×IÔIØ$×1Ñ1°H×<Ö<Ø ×EÑE×IÑIÈ(ÔSÙ!ñ	 "Añ Ùñ %*ð  ×DÑDÔDÚä�5‹z˜A�~Ø×9Ñ9×=Ñ=¸h×Gó1  ;rš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   r   rç   r  r®   r¯   r°   r´   rŸ   )r    s   "r˜   r¡   r²  #  s)   € ÷ ñ ¨Cð °cð À+ð ÐRVñ rš   c                óp  € \         P                  P                  '       g   R# \        P                  P                  4       P                  R8w  d   R# \        P                  P                  V4      pVf™   \        \        P                  R4      '       dy   \        P                  P                  '       dY   \        P                  P                  P                  P                  W4      pWQ8w  d    \        P                  P                  V4      pVf   R# \        VP                  4       R^ 4      pV^ 8X  d   R# WcP                  ,          p\        P                  P                  P!                  V\"        4      '       d   R# V P$                  P'                  V4       V P(                  P+                  VR4       R# )a(  Whether a buffer's layout offset can't be proven TMA-aligned, so
host-side TMA must be skipped. The CUtensorMap alignment requirement is
CUDA-specific, so this only applies on CUDA; an offset that is not
statically known to be a multiple of TMA_ALIGNMENT is treated as
misaligned (conservative).
Fr0  NÚ	schedulerrñ   T)r#   rí   ru  rX   r­  r¿  rè  Útry_get_bufferrë   rc  Úmutation_real_namer	  r¹   Ú
get_layoutrE  r§  rç  rQ   rÃ  rµ  rÂ  r³  )rR  r   r  r®   ÚbufÚ	real_nameÚlayout_offsetÚoffset_bytess   &&&&    r˜   Ú_check_buffer_alignmentÚ$TritonKernel._check_buffer_alignment#  s(  € ô �}‰}×2×2Ð2ÙÜ�7‰7×.Ñ.Ó0×5Ñ5¸Ô?ÙÜ�g‰g×$Ñ$ TÓ*ˆØŠ;œ7¤1§7¡7¨K×8Ò8¼Q¿W¹W×=N×=NÐ=NÜŸ™×)Ñ)×<Ñ<×@Ñ@ÀÓLˆIØÔ Ü—g‘g×,Ñ,¨YÓ7�ØŠ;ÙÜ §¡Ó 0°(¸AÓ>ˆØ˜AÔÙØ$§~¡~Õ5ˆÜ�7‰7×Ñ×8Ñ8¸Ä}×UÒUÙØ×)Ñ)×-Ñ-¨cÔ2Ø×%Ñ%×)Ñ)¨#¨tÔ4Ùrš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²  @  s   € ÷ 
ñ 
°ñ 
rš   c                	ó°   € \         ;QJ d0    R  V P                   4       F  '       d   K   R'       * # 	  R'       * # ! R  V P                   4       4      '       * # )c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   )rc   )rÀ   r   s   & r˜   rÃ   Ú>TritonKernel.has_store_with_contiguous_rdim.<locals>.<genexpr>A  s   é € ð 
Ù0P¨Ô˜d×#Ð#Ó0Pùr‰  FT)r¯  rØ  rQ  s   &r˜   Úhas_store_with_contiguous_rdimÚ+TritonKernel.has_store_with_contiguous_rdim?  sX   € ç“3ñ 
Ø04×0PÒ0Pó
—3”3ô 
ð 	
’3ô 
ð 	
�3ñ 
Ø04×0PÒ0Pó
ó 
ô 
ð 	
rš   c               ó    € V ^8„  d   QhRRRR/# r:  rŸ   )r    s   "r˜   r¡   r²  E  s   € ÷ "ñ " +ð "°#ñ "rš   c                	ó   € \        V4      # r¿   )rR   )rR  r®   s   &&r˜   Údtype_to_strÚTritonKernel.dtype_to_strE  s   € Ü˜5Ó!Ð!rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²  H  s   € ÷ 
ñ 
°$ñ 
rš   c                	ó  € V P                  4       e   R# V P                  ;'       df    \        P                  P	                  \        P
                  P                  4       V P                  P                  V P                  P                  4      # r´  )
Ú_strict_sum_rblockr·  rX   ÚchoicesÚ should_use_cooperative_reductionr­  r¿  r¹  r‰  Úreduction_numelrQ  s   &r˜   r{  Ú-TritonKernel.should_use_cooperative_reductionH  sg   € Ø×"Ñ"Ó$Ò0ÙØ×$Ñ$÷ 
ð 
¬¯©×)SÑ)SÜ�G‰G×/Ñ/Ó1Ø�M‰M×ÑØ�M‰M×)Ñ)ó*
ð 	
rš   c                óÊ  a € S P                   '       g   \        R4      hS P                   F,  pVP                  f   K  V;P                  ^,          un        K.  	  S P                  R,          pS P
                  '       d   \        VS P
                  R,          4      pS P                  P                  V4      S n	        \        S P                  4      S n        S P                  P                  R4       \        ;QJ d)    V 3R lS P                   4       F  '       g   K   RM	  RM! V 3R lS P                   4       4      '       d   S P                  P                  R	4       R# R# )
z/One time setup code for cooperative reductions.zexpected cooperative_reductionNrª  r=  a              RSPLIT_NEXT_POWER_OF_2: tl.constexpr = triton_helpers.constexpr_next_power_of_2(RSPLIT)
            RSPLIT_IS_POWER_OF_2: tl.constexpr = RSPLIT == RSPLIT_NEXT_POWER_OF_2
            HAS_RSPLIT: tl.constexpr = RSPLIT > 1
            rsplit_id = tl.program_id(0)
            num_rblocks = (rnumel + RBLOCK - 1) // RBLOCK
            rsplit_chunk = (num_rblocks + RSPLIT - 1) // RSPLIT * RBLOCK
            rsplit_start = rsplit_chunk * rsplit_id
            rsplit_end = rsplit_chunk * (rsplit_id + 1)
            c              3  óx   <"  € T F/  pVP                   '       g   K  SP                  V4      '       * x € K1  	  R # 5ir¿   )r1  r  ©rÀ   r  rR  s   & €r˜   rÃ   Ú:TritonKernel.init_cooperative_reduction.<locals>.<genexpr>n  s4   øé € ð 
á(�Ø× Õ ô .�×'Ñ'¨Ó-×-Ñ-Û(ùs   ƒ:œ:TFz>rsplit_end = tl.where(rsplit_end < rnumel, rsplit_end, rnumel))rÓ  r
  rœ  Úgrid_dimr¸  r‘  r   rÇ   Ú
semaphoresÚsemaphores_namer)  Ú%cooperative_reduction_workspace_cacherl  Úsplicerˆ   rQ  )rR  r  Ú	sem_counts   f  r˜   rÔ  Ú'TritonKernel.init_cooperative_reductionQ  s  ø€ à×)×)Ð)Ü Ð!AÓBÐBð ×$Ô$ˆDØ�}‰}Ô(Ø—’ Õ"—ñ %ð —K‘K Õ$ˆ	Ø××ÐÜ 	¨4×+<Ñ+<¸XÕ+FÓGˆIØ#Ÿy™y×3Ñ3°IÓ>ˆÔÜ5WØ�I‰Ió6
ˆÔ2ð 	�	‰	×Ñð	ô	
÷ ‹3ô 
à×(Ò(ó
�3�3Š3ô 
à×(Ò(ó
÷ 
ò 
ð
 �I‰I×ÑØPöñ
rš   c                	óJ  € R pV P                   '       g   V R2pV P                  P                  RV 24       V P                  4       '       d   V P                  P	                  R4       R# V P                   '       d   \        R4      hV P                  P                  R4       R# )z$tl.arange(0, RSPLIT_NEXT_POWER_OF_2)z	[None, :]zrsplit_arange = z½                if RSPLIT_IS_POWER_OF_2:
                    rsplit_mask: tl.constexpr = None
                else:
                    rsplit_mask = rsplit_arange < RSPLIT
                zexpected no_x_dim to be FalsezSrsplit_mask = xmask if RSPLIT_IS_POWER_OF_2 else ((rsplit_arange < RSPLIT) & xmask)N)r±  rl  rQ  Ú_has_constant_xmaskr†  r
  )rR  Úrsplit_aranges   & r˜   rÖ  Ú,TritonKernel.init_cooperative_reduction_maskw  sˆ   € Ø>ˆØ�}�}ˆ}Ø,˜o¨YÐ7ˆMØ�	‰	×ÑÐ.¨}¨oÐ>Ô?à×#Ñ#×%Ò%Ø�I‰I×Ñðöð �}�}ˆ}Ü$Ð%DÓEÐEØ�I‰I×ÑØeörš   c                	óÆ  € V P                    F  pVP                  '       g   V P                  WP                  4       K2  V P                  '       g   KF  V P                  P                  VP                   R V P                  V4       24       K�  	  V P                  '       dÀ   \        ;QJ d&    R V P                    4       F  '       g   K   RM	  RM! R V P                    4       4      '       dU   V P                  RRRR7      pV P                  V4      pV P                  P                  RV P                  V4       24       R# V P                  V P                  4       R# R# )zbase = c              3  ó8   "  € T F  qP                   x € K  	  R # 5ir¿   )Úis_loopræ  s   & r˜   rÃ   Ú2TritonKernel.codegen_range_tree.<locals>.<genexpr>š  s   é € Ð=Ñ,< D—<–<Ó,<ùr‰  TFrÈ  rò   zrbase = N)rœ  r�  Úiteration_ranges_codegen_headerrl  r·  rQ  r²  Úiteration_ranges_ranges_coderˆ   Ú_get_reduction_symbolsÚ_flatten_reduction_indicesr†  r$  Úcodegen_reduction_indices)rR  r  Úrn_basesÚrbases   &   r˜   rÕ  ÚTritonKernel.codegen_range_tree�  s  € Ø×$Ô$ˆDà—<—<�<Ø×4Ñ4°T¿9¹9ÖEØ×&×&Ò&ð —	‘	×#Ñ#Ø—{‘{�m 7¨4×+LÑ+LÈTÓ+RÐ*SÐTöñ %ð × × Ð ß‹sÑ=¨D×,<Ò,<Ó=�s�sŠsÑ=¨D×,<Ò,<Ó=×=Ò=à×6Ñ6Ø D°dð 7ó �ð ×7Ñ7¸ÓA�Ø—	‘	× Ñ  8¨D×,=Ñ,=¸eÓ,DÐ+EÐ!FÖGð ×.Ñ.¨t¯y©yÖ9ñ !rš   c                ó   € R# )z»
Indicate whether we need provide numel as arguments for the generated
kernel calls in the benchmark.

Should be true for pointwise/reduction kernels but false for triton
matmul kernels.
TrŸ   rQ  s   &r˜   Úneed_numel_argsÚTritonKernel.need_numel_args¥  s   € ñ rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²  ¯  s   € ÷ 
ñ 
°ñ 
rš   c                	ób  € V P                   '       g   R # V P                  P                  R4      '       d.   V P                  V P                  P                  4      '       d   R# V P                  P                  V P                  4      p\        P                  P                  WP                  4      # )Frñ  T)r·  r¹  Úcontains_opÚhas_persistent_RBLOCKr|  Úwith_tiling_scoresÚtiling_scoresrX   rz  Úshould_use_persistent_reductionrÓ  )rR  r¹  s   & r˜   r¢  Ú,TritonKernel.should_use_persistent_reduction¯  s†   € Ø×$×$Ð$Ùð �=‰=×$Ñ$ V×,Ò,°×1KÑ1KØ�M‰M×)Ñ)÷2
ò 2
ñ Ø—=‘=×3Ñ3°D×4FÑ4FÓGˆÜ�y‰y×8Ñ8Ø×0Ñ0ó
ð 	
rš   c               ó   € V ^8„  d   QhRR/# ©rœ   r°   r±  rŸ   )r    s   "r˜   r¡   r²  ¿  s   € ÷ 1ñ 1 Jñ 1rš   c                	ó\   € V P                   ^8w  d   R# V P                  P                  4       # r  )r¶  r¹  r‡  rQ  s   &r˜   ry  ÚTritonKernel._strict_sum_rblock¾  s&   € à×"Ñ" aÔ'ÙØ�}‰}×.Ñ.Ó0Ð0rš   c                	óà   € V P                   ;'       d\    \        V P                  4      V P                  ^,           8H  ;'       d+    V P                  ;'       d    V P                  R,          ^8H  # )r  r=  )rˆ  r¨   r¸  r¶  r‘  rQ  s   &r˜   Úwant_no_x_dimÚTritonKernel.want_no_x_dimÄ  sh   € à×%Ñ%÷ 1ð 1Ü�D—K‘KÓ  D×$;Ñ$;¸aÕ$?Ñ?÷1ð 1à×!Ñ!÷1ð 1ð ×!Ñ! (Õ+¨qÑ0ð		
rš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   r²  Í  s   € ÷ "ñ " ñ "rš   c                	ó   € R # )ztl.device_assertrŸ   rQ  s   &r˜   Úassert_functionÚTritonKernel.assert_functionÌ  s   € á!rš   Ú
copy_shapeÚdense_indexingÚoverride_maskr�  r‘  Úmask_constant_indexc               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rK  r­   r¯  zstr | tuple[str] | Noner‘  zTMACompatibilityChecker | NonerŸ   )r    s   "r˜   r¡   r²  Ð  s.   € ÷ h
ñ h
àðh
ð ,ð	h
ð $Bñh
rš   c          
     ó`  a aaaa!a"a#a$€ S P                  S4      oSP                  pRp	\        4       o!\        V\        P
                  ! R4      R7       EFg  p
\        V
\        P                  4      '       g   \        R\        V
4       24      hT	;'       g    \        P                  S V
4      p	V'       d   Ke  \        V
\        P                  4      '       dE   S P                   P"                  V
P$                  ,          pS!P'                  VP(                  4       KÉ  \        V
\        P*                  \        P,                  \        P.                  \        P0                  \        P2                  \        P4                  34      '       d   EK8  \        P7                  S V
4      ;p f   EKV  S!P9                  V4       EKj  	  \:        P<                  P>                  ;'       g!    T;'       g    S P@                  RJ;'       d    S^ 8g  pRpRp\        4       pS PC                  4        FH  pVPE                  VPF                  4      '       d   RpMRpVP9                  VPI                  4       4       KJ  	  V'       d3   S PJ                  '       d!   \:        P<                  PL                  '       g   S'       d¬   SPO                  4       '       d–   V'       gŽ   S P@                  '       g|   \Q        S!V,
          4      ^ 8X  de   S PS                  S4      '       gN   V'       dF   S PT                  R8X  d5   R R	 lo"R
 V 3R llo$R V"V$3R llo#R VVV!V#V V3R llpV! 4       pVe   V# RpRpS PW                  S4      pVV 3R lp\Y        S4      '       Ed#   S'       g   \Q        S P[                  4       4      ^8X  d   V! 4       w  ppMT\]        ^.\Q        S P[                  4       4      ,          4      p\_        ^.\Q        S P[                  4       4      ,          4      pRV RV R2pS P`                  '       g   S Pb                  '       g	   V'       d!   \        V 3R lS Pd                   4       4      o!M
\        4       o!S P@                  '       d   S!P9                  S P@                  4       \g        VS!VV	SVR7      # V'       EdR   V'       EgI   S Ph                  '       Ed    S Pj                  '       Ed   S!Pm                  4       pS P@                  '       d   VP9                  S P@                  4       \        R S PC                  4        4       4      pVPo                  V4      '       g}   VPq                  V4      pVPs                  4       p\        V\t        4      '       g   \        R\        V4       24      hVPw                  V4       VP'                  VP(                  4       K“  R.\Q        S P[                  4       4      ,          pV F³  p\        V\\        4      '       g   \        R\        V4       24      hS PC                  4        Fo  pVPy                  V4      '       g   K  VPz                  p\        V\|        4      '       g   \        R\        V4       24      hS P[                  4       V,          VV&   Kq  	  Kµ  	  RRP                  \�        \\        V4      4      ,           R,           p\_        V4      pRV RV R2pM;V! 4       w  ppRV RV R2pVo!M%V'       g   S'       d   V! 4       w  ppRV RV R2pVo!Vf   V'       g	   V'       d   V! 4       w  p pMR pV'       d   \        V.4      o!S P@                  '       d   S!P9                  S P@                  4       S Pƒ                  S!4       \g        VS!VV	SVR7      # )!z?
Compute the index and mask to pass to tl.load() or tl.store()
Fr   r  zexpected sympy.Symbol, got NTútl.int32c               ó$   € V ^8„  d   QhRRRRRR/# ©rœ   rK  r­   Ú
range_treero   r°   úBlockParameters | NonerŸ   )r    s   "r˜   r¡   Ú+TritonKernel.indexing.<locals>.__annotate__#  s$   € ÷ ñ Ø!ðØ/Bðà'ñrš   c                óÜ   € \         P                  ! WP                  4       4      pVf   R# \        VP                  .\
        P                  V4      .V.\
        P                  V4      .R7      # )zg
Matches expressions of the form:
    idx = s * xindex

This implies stride (s,), and shape (XBLOCK,).
N©r  r�  r”  r™  )rZ   Úmatch_affine_block_exprr%  ry  r‰  rð   r  r!  )rK  r¸  rÉ  s   && r˜   Úmatch_affine_blockÚ1TritonKernel.indexing.<locals>.match_affine_block#  sj   € ô -×DÒDØ×,Ñ,Ó.ó�ð ’>Ùä&Ø%×+Ñ+Ð,Ü!.×!=Ñ!=¸jÓ!IÐ JØ#˜HÜ*×;Ñ;¸JÓGÐHô	ð rš   c               ó$   € V ^8„  d   QhRRRRRR/# r·  rŸ   )r    s   "r˜   r¡   rº  9  s)   € ÷ xñ xØ!ðxØ/Bðxà'ñxrš   c                óZ  <aa€ VP                  4       p\        P                  ! R\        P                  ! \        P
                  V.R7      R7      w  r4\        ^\        VP                  4      V P                  \        W#4      4      V P                  \        W#V4      4      ,           4      p\        P                  P                  oSP                  V 4      p SP                  VP                   4      p\"        P$                  ! WWe4      pVf   R# Vw  pp	p
\"        P&                  ! V4      p\        P                  P                  oSP)                  VP*                  4      o\,        ;QJ d     VV3R lV 4       F  '       g   K   RM	  RM! VV3R lV 4       4      '       d   R# \.        P1                  V4      p\3        VSP5                  V^ ,          4      4      .\7        VR,          VR,          4       UUu. uF9  w  rm\9        \3        VSP5                  V4      4      SP5                  V4      4      NK;  	  upp,           pV
 Uu. uF#  p\;        Wò\.        P=                  V4      /4      NK%  	  pp\?        V Uu. uF  pSP5                  V4      NK  	  upVV	VR	7      # u uppi u upi u upi )
a  
Matches higher-dimensional blocks coming from FloorDiv and ModularIndexing.

Example expression to match:
   sN * ((rindex//(d1 * ... * d(N-1))))
       + s1 * ModularIndexing(rindex, 1, d1)
       + ...
       + s(N-1) * ModularIndexing(rindex, d1 * ... * d(N-2), d(N-1))

This iterates over a block of shape (dN, ..., d1) and stride
(sN, ..., s1). (d1,...,d(N-1)) and (s1,...,sN) are
wildcards that we match.

Note that dN does not appear in the expression, but we solve for it
using range tree numels and the other dims.
zdenom modulo)Úexclude©rÚ   Nc              3  óŽ   <"  € T F:  pSP                  VS4      '       * ;'       d    SP                  V4      '       * x € K<  	  R # 5ir¿   )rç  Ústatically_known_power_of_2)rÀ   r‰  rŽ  r§  s   & €€r˜   rÃ   ÚETritonKernel.indexing.<locals>.match_mod_div_block.<locals>.<genexpr>†  sM   øé € ð ñ ".˜ð !×=Ñ=¸eÀYÓOÔO÷ Hð HØ$×@Ñ@ÀÓGÔGôHã!-ùs
   ƒ"A¦ATFºr  NNr¼  ) r%  r¤   Úsymbolsr…  r†  ÚWildr�   r¨   r¨  r½  r   r   rX   r­  r§  Úremove_precomputed_replacementsr‰  rZ   Úmatch_mod_div_block_exprÚget_slice_numelsrŽ  r²  rˆ   rð   r  r   r¦  r"  r   rP   r!  ry  )rK  r¸  Ú	index_varr  ÚmoduloÚnum_dimsr‰  Úmatch_resultÚdimsr”  Úblock_index_exprsÚslice_numelsÚlinear_block_sizerÃ  r�  r�   rA  ÚdrŽ  r§  rR  s   &&                @@€r˜   Úmatch_mod_div_blockÚ2TritonKernel.indexing.<locals>.match_mod_div_block9  s€  ú€ ð& '×-Ñ-Ó/�	ô !&§¢Ø"Ü!×)Ò)¬%¯*©*¸y¸kÔJô!‘�ô
 Øô ˜
×(Ñ(Ó)àŸ™¤H¨YÓ$>Ó?ØŸ+™+¤o°iÈÓ&OÓPõQó	�ô& Ÿ7™7×+Ñ+�Ø ×@Ñ@ÀÓG�Ø ×@Ñ@À×AQÑAQÓR�ä2×KÒKØ eó �ð  Ò'Ùð !ñ	ØØØ%ä2×CÒCÀDÓI�ô Ÿ7™7×+Ñ+�Ø ŸN™N¨:×+<Ñ+<Ó=�	ß“3õ ñ ".ó—3—3’3õ ñ ".ó÷ ò ñ
  ô %2×$@Ñ$@ÀÓ$LÐ!äØ)Ø ×8Ñ8¸Àa½ÓIóð1ô '*¨,°rÕ*:¸DÀ½HÔ&Eôñ 'F™
˜ô ÜØ-¨x×/OÑ/OÐPUÓ/Vóð !×8Ñ8¸Ó=ö	ñ 'Fòõ1�ñ( !2ó	3ñ !2˜ô Ø¬-×*HÑ*HÈÓ*TÐUöñ !2ð	 ð 3ô 'ÙHLÓMÉÀ1˜8×;Ñ;¸AÖ>ÉÑMØ +Ø#Ø)ô	ð ùó%ùò3ùò Ns   Ç7?JÉ)J#É8J(c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r�   r­   r¸  ro   r°   r¹  rŸ   )r    s   "r˜   r¡   rº  ³  s&   € ÷ ñ Ø ðà/ðð (ñrš   c                ó†   <€ SS3 F7  p\         P                  ! WP                  4       4      pV! W14      pVf   K5  Vu # 	  R# )zE
Match a block indexing subexpression involving a single range tree.
N)rZ   Úfactor_index_exprr%  )r�   r¸  Ú
match_funcÚfactored_index_exprÚmatchr¾  rÖ  s   &&   €€r˜   Úmatch_block_subexprÚ2TritonKernel.indexing.<locals>.match_block_subexpr³  sS   ø€ ð 'Ø'ó#�Jô +>×*OÒ*OØ×/Ñ/Ó1ó+Ð'ñ 'Ð':ÓG�EØÔ(Ø$šñ#ñ rš   c               ó   € V ^8„  d   QhRR/# )rœ   r°   zBlockDescriptorOptions | NonerŸ   )r    s   "r˜   r¡   rº  Ç  s   € ÷ `ñ `Ð&Cñ `rš   c            
     óN  <€ \        SSP                  P                  4        U Uu/ uF  w  rWP                  bK  	  upp 4      pSP	                  4       pV Uu. uF'  p\
        P                  ! W$P                  4       4      NK)  	  pp\        R  V 4       4      p\        4       p\        W54       FH  w  rH\        VP                  VP                  4      4      ^8”  d    R# S! W„4      p	V	f    R# Wy,          pKJ  	  V\        V4      ,
          p
SP                  S4       \         P"                  P$                  '       d   SP&                  MSP(                  p\         P"                  P$                  '       d   Rp\        P*                  pM›\-        \.        S4      oSP1                  4       pSP2                   e   SP2                  pM\         P"                  P4                  p\7        SR4      '       d   VSRJ,          pV'       d   \        P8                  M\        P*                  pVP;                  VV
VSSP<                  VVR7      p\?        V\@        4      '       d@   \-        \.        S4      oSPC                  VPD                  VPF                  R7      '       g   R# V# u upp i u upi )c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   rM  ræ  s   & r˜   rÃ   ÚBTritonKernel.indexing.<locals>.match_block_expr.<locals>.<genexpr>Ø  s   é € Ð*QÁ[¸T¯;©;¯=¨=Ã[ùrO  NFÚtemplate_out_shape)rz  r{  rœ  rH  rž  r†  r   )r{  )$rP   r  rŠ  r�   rk  rZ   Úget_subexpr_involving_symbolr%  r   ry  r"  r¨   Úintersectionr©   rè  Úfilter_masksr#   rí   Úuse_block_ptrrª  r«  r  r
   rj  r†  r¬  Ú)transpose_discontiguous_tensor_descriptorrë   r  rË  rŽ  r£   r0  r¢  rz  r{  )r  rè  Úindex_relative_to_xyr_indexrœ  r  Úindex_subexprsÚrange_symbolsr~  Úsubexprrz  rñ   Úoptions_classr†  r   Útranspose_contiguousÚoptionsr¯  rK  rH  rÞ  rR  r‘  s                   €€€€€€r˜   Úmatch_block_exprÚ/TritonKernel.indexing.<locals>.match_block_exprÇ  s‡  ø€ Ü.8Ø°$×2GÑ2G×2MÑ2MÔ2OÔPÑ2O©$¨!˜AŸv™všIÑ2OÒPó/Ð+ð #×5Ñ5Ó7�ñ !,ó	"ñ !,˜ô (×DÒDØ3·[±[³]öñ !,ð	 ð "ô !+Ñ*QÁ[Ó*QÓ Q�Ü.Ó0�Ü%(¨Ö%E‘M�Dô ˜=×5Ñ5°g×6JÑ6JÓKÓLÈqÔPÚ#ñ 1°Ó?�FØ’~Ú#Ø Õ*’Lñ &Fð 5´s¸>Ó7JÕJ�ð ×!Ñ! )Ô,ô —}‘}×2×2Ð2ð ×.Ò.à×;Ñ;ð ô —=‘=×.×.Ð.Ø$�HÜ(7×(LÑ(LÑ%ä04Ü/Ð1Jó1Ð-ð  9×AÑAÓC�Hð ×PÑPØ#ò$ð !×TÑTñ -ô
 #ŸM™M×SÑSð -ô ˜tÐ%9×:Ò:Ø,°
À$Ð0FÕFÐ,÷ 0ô (×CÒCä,×AÑAð &ð (×.Ñ.Ø'Ø$*Ø +Ø'Ø"&§.¡.Ø%Ø&7ð /ó �ô ˜gÔ'>×?Ò?Ü04Ü/Ð1Jó1Ð-ð 5×TÑTØŸ™Ø(/×(?Ñ(?ð U÷ ò ñ  $à�ùó} Qùò"s   ¥JÁ-J"c                 óð   <€ S '       dF   \        S \        4      '       d   S  R 2R3# RRP                  R S  4       4      ,           R,           S 3# SP                  4       \	        SP                  4       4      3# )z.shapeNrU  r  c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   ©rç   )rÀ   rÙ  s   & r˜   rÃ   ÚATritonKernel.indexing.<locals>._get_expand_str.<locals>.<genexpr>6  s   é € Ð*F¹:°a¬3¨q¯6¨6»:ùr‰  rV  )r£   rç   rq  rö  rÈ   r.  )r¯  rR  s   €€r˜   Ú_get_expand_strÚ.TritonKernel.indexing.<locals>._get_expand_str1  sk   ø€ ßÜ˜j¬#×.Ò.Ø(˜\¨Ð0°$Ð6Ð6à §¡Ñ*F¹:Ó*FÓ!FÕFÈÕLÈjÐXÐXà×*Ñ*Ó,¬e°D×4HÑ4HÓ4JÓ.KÐKÐKrš   r·  r  z, tl.int32)c              3  óž   <"  € T FB  pVP                   '       d   K  SP                  V4      '       d   K0  VP                  4       x € KD  	  R # 5ir¿   )r1  r  r*  r€  s   & €r˜   rÃ   Ú(TritonKernel.indexing.<locals>.<genexpr>N  s@   øé € ð 'á 0˜Ø×,Õ,ô %à59×5LÑ5LÈT×5Rô %�D—N‘N×$Ð$Û 0ùs   ƒAœAµA)rL  c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   ©r*  ræ  s   & r˜   rÃ   rú  |  s   é € ð (Ù1J¨—N‘N×$Ð$Ó1JùrO  ú expected TritonCSEVariable, got rû   zexpected str mask, got zexpected int dim, got rU  r=  rV  r  r  rŸ   )BÚprepare_indexingr©   r   rr  r  r   r£   r¤   r@  r
  rè  rð   r3  r    r!   rü   rþ   rÿ   r   ri  rH  r  r  r  r  r  r  r-  rµ  r#   rí   r°  rf  rk  ræ  Úvar_listr*  Úallow_block_ptrrè  r{  r¨   Úis_indirect_indexingrq  r$  r«   r.  rç   rÈ   r‘  r�  rœ  rE  r·  r-  ÚcopyÚissubsetÚ
differencer³  r_  r§  ri  r  r†  rq  rs  rç  )%rR  rK  r¯  r°  r±  r�  r‘  r²  Ú
index_varsr[  r  r  r*  Ú
need_denseÚ
have_denseÚhave_loop_varsÚdense_mask_varsr  rñ  rð  rI  rL  rF  r÷  Ú
mask_shapeÚ
axis_masksÚ	tmp_masksr`  Úexpand_listr)  rÃ  Úexpand_shape_strrT  rH  r¾  rÞ  rÖ  s%   ffd$$$d$                         @@@@r˜   r“  ÚTritonKernel.indexingÐ  sa  ÿ€ ð ×%Ñ% eÓ,ˆØ×'Ñ'ˆ
Øˆ
ä%/£\ˆ	Ü˜*¬(×*=Ò*=¸fÓ*E×FÐFˆCÜ˜c¤5§<¡<×0Ò0Ü$Ð'BÄ4ÈÃ9À+Ð%NÓOÐOØ#÷ ð ¤}×'NÑ'NØ�có(ˆJ÷ ÙÜ ¤T§X¡X×.Ò.àŸ(™(×.Ñ.¨s¯x©xÕ8�Ø× Ñ  ×!2Ñ!2Ö3ÜØä×%Ñ%Ü—I‘IÜ×)Ñ)Ü—J‘JÜ—J‘JÜ×'Ñ'ð÷
ò 
ò ô "/×!CÑ!CÀDÈ#Ó!NÐN�IØõð —M‘M )×,ñ9 Gô> �M‰M×(Ñ(÷ +ð +Ø÷+ð +à�‰ dÐ*÷ð ð �q‰jð	 	ð ˆ
ØˆÜ+5«<ˆà×+Ñ+Ö-ˆDØ×&Ñ& t§}¡}×5Ò5Ø!%‘à"�
Ø×Ñ §¡Ó 0Ö1ñ .÷ ˜t×3×3Ð3¼¿¹×8S×8SÐ8Sç-Ø1×=Ñ=×?Ò?÷ "Ø—O—O�OÜ�I Õ/Ó0°AÔ5Ø×-Ñ-¨e×4Ò4ßà× Ñ  JÔ.õ÷,xð x÷tñ ÷(`õ `ñF 'Ó(ˆGØÒ"Ø�Øˆ
Ø'+ˆØ×%Ñ% eÓ,ˆ	ö	Lô ! ×'Ó'÷ œS ×!5Ñ!5Ó!7Ó8¸AÔ=Ù+:Ó+<Ñ(�
™Lä  ! ¤s¨4×+?Ñ+?Ó+AÓ'BÕ!BÓC�
Ü$ a S¬3¨t×/CÑ/CÓ/EÓ+FÕ%FÓG�à" : ,¨b°°¸;ÐGˆIØ× × Ð  D×$8×$8Ð$8×<OÜ&ô 'à $× 0Ò 0ó'ó ‘	ô '›L�	Ø��ˆØ—‘˜dŸo™oÔ.Ü"ØØØØØØ)ôð ÷ ˆ:Ÿj˜jØ×$×$Ñ$¨×)>×)>Ñ)>ð. 'Ÿ^™^Ó-�
Ø—?—?�?Ø—N‘N 4§?¡?Ô3ä'ñ (Ø15×1HÑ1HÔ1Jó(ó �
ð %×-Ñ-¨j×9Ò9Ø *× 5Ñ 5°jÓ A�IØ#Ÿ-™-›/�CÜ% cÔ+<×=Ò=Ü,Ø>¼tÀC»y¸kÐJóð ð ×&Ñ& sÔ+Ø×%Ñ% c§m¡mÖ4ð  #˜e¤c¨$×*>Ñ*>Ó*@Ó&AÕA�Û&�DÜ% d¬C×0Ò0Ü,Ð/FÄtÈDÃzÀlÐ-SÓTÐTØ $× 7Ñ 7Ö 9˜ØŸ>™>¨$×/Ô/Ø"&§/¡/˜CÜ#-¨c´3×#7Ò#7Ü&4Ø&<¼TÀ#»Y¸KÐ$Hó'"ð !"ð 04×/CÑ/CÓ/EÀcÕ/J˜K¨Ó,ó !:ñ 'ð ! 3§8¡8¬C´°[Ó,AÓ#BÕBÀSÕH�
Ü$ [Ó1�Ø.¨y¨k¸¸J¸<ÀqÐI‘	á+:Ó+<Ñ(�
˜LØ.¨y¨k¸¸J¸<ÀqÐI�	Ø+‘	ß§JÙ-<Ó->Ñ*Ð˜lØ*¨9¨+°RÐ8HÐ7IÈÐKˆIØ'ˆIàÒßŸZÙ"1Ó"3‘�‘<à!�çÜ" M ?Ó3ˆIà�?�?ˆ?Ø�M‰M˜$Ÿ/™/Ô*à×Ñ˜)Ô$äØØØØØØ%ô
ð 	
rš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   r   rç   r  r“  z)BlockPtrOptions | TensorDescriptorOptionsr°   ztuple[str, str]rŸ   )r    s   "r˜   r¡   r²  º  s8   € ÷ I'ñ I'àðI'ð ðI'ð <ð	I'ð 
ñI'rš   c                óD  € VP                  4       p\        V\        4      '       Edu   V'       d!   V'       d   VR8w  d   \        RV: 24      hRp\	        4       '       dª   \
        P                  P                  '       dŠ   VP                  '       gx   VP                  ^ 8X  dg   W P                  9  dW   V P                  V\        P                  P                  V4      4      '       d"   W P                  9  d   W0P                  V&   W$3# \	        4       '       d|   \
        P                  P                  '       d\   VP                  '       gJ   VP                  ^ 8w  d9   V P                  P!                  V4       W P                  9   d   V P                  V RV n        M7V'       g   RpM,V'       d   VR8w  d   \        RV: 24      hRV: R2pMRV: 2pV P$                  '       d:   V P&                  R,          P(                  '       d   VP+                  4       '       g   VP                  '       EdÞ   VP                  '       d'   W P,                  9   d   V P,                  V,          pWd3# VP/                  VRR7      pV P0                  P3                  V4      pV'       d   \5        V4      V3# \7        V P8                  4      p	\        V\:        4      '       d   R	V	 2pMR
V	 2pV P0                  P=                  V\>        P@                  . R7      p
V P0                  PC                  Wz4       \E        W RV 24      pVP                  '       d+   V PF                  PI                  V4       W`P,                  V&   MV PJ                  PI                  V4       \        V\:        4      '       df   WPL                  V&   \N        PP                   FC  pVPS                  V4      pV PT                  V,          pWn9   d   \        RV RV R24      hWÞV&   KE  	  Wd3# VP/                  V4      pWd3# )a%  Generate a block pointer or tensor descriptor for Triton kernel operations.

This method creates either a block pointer (for regular Triton operations) or
a tensor descriptor (for TMA operations) based on the indexing type. It handles
caching and reuse of descriptors for performance optimization.

Args:
    name: The name of the buffer/tensor being accessed
    var: The variable name for the pointer
    indexing: Block pointer options or tensor descriptor options containing
             indexing information and boundary check settings
    other: Additional parameters string (e.g., padding options)

Returns:
    A tuple containing:
    - block_descriptor: The generated block pointer or tensor descriptor variable name
    - other: Modified additional parameters string with boundary check options
ú, other=0.0zexpected ', other=0.0', got rŒ   Tú, boundary_check=z, padding_option='zero'F)rÕ  r�  Útma_descriptorr  rJ  z#duplicate advancement for pointer 'z' at type 'rä  r¬  )+rï  r£   r0  r
  r   r#   rí   Úenable_host_side_tmar†  r{  rÃ  rG  rX   r­  Ú	get_dtyperÂ  rµ  rÅ  r·  rœ  r�  r[  r¸  r    rþ   r´  rç   Únextr¾  r=  Únamedvarr×   Úuint64rµ  r`   r¹  rQ  rl  rÀ  rð   r2  rL  rÁ  )rR  r   r  r“  rm  ÚcheckÚblock_descriptorÚblock_ptr_lineÚ	block_varÚblock_descriptor_idÚ	named_varÚ	line_bodyr,  Úadvance_offsetsÚadvancementss   &&&&&          r˜   Úcodegen_block_ptrÚTritonKernel.codegen_block_ptrº  s¥  € ð2 ×'Ñ'Ó)ˆÜ�hÔ 7×8Ó8ßŸð ˜MÔ)Ü(Ð+GÈÁyÐ)QÓRÐRØ�ô *×+Ò+Ü—M‘M×6×6Ð6Ø ×)×)Ð)Ø×,Ñ,°Ô1Ø×@Ñ@Ô@Ø×4Ñ4°X¼q¿w¹w×?PÑ?PÐQUÓ?V×WÒWà×;Ñ;Ô;Ø9A×1Ñ1°#Ñ6Ø�zÐ!ô *×+Ò+Ü—M‘M×6×6Ð6Ø ×)×)Ð)Ø×,Ñ,°Ô1à×1Ñ1×5Ñ5°cÔ:Ø×7Ñ7Ô7Ø×5Ñ5°cÐ:ð (,ˆDÕ$÷ à‘ßØ˜MÔ)Ü(Ð+GÈÁyÐ)QÓRÐRØ+¨E©9Ð4KÐL‘à+¨E©9Ð5�ð ×!×!Ð!Ø× Ñ  Õ$×,×,Ð,Ø×#Ñ#×%Ò%Ø××ÑØ× × Ð  S×,?Ñ,?Ô%?ð $(×#6Ñ#6°sÕ#;Ð ðl  Ð&Ð&ði "*§¡°¸e Ó!D�Ø ŸH™H×,Ñ,¨^Ó<�	÷ Ü˜y›>¨5Ð0Ð0ä&*¨4×+<Ñ+<Ó&=Ð#Ü˜h¬×8Ò8Ø)2Ð3FÐ2GÐ'HÑ$à)7Ð8KÐ7LÐ'MÐ$Ø ŸH™H×-Ñ-Ø$¬E¯L©LÀð .ó �	ð —‘—‘˜^Ô7ä(¨Ð1CÀ3À~ÐFVÐ/WÓX�	Ø×$×$Ð$Ø—M‘M×+Ñ+¨IÔ6à/?×'Ñ'¨Ò,à—I‘I×'Ñ'¨	Ô2ä˜h¬×8Ò8ð BF×,Ñ,Ð-=Ñ>ô !.× =Ô =˜Ø*2×*BÑ*BÀ4Ó*H˜à'+×'@Ñ'@ÀÕ'F˜Ø+Ô;Ü"0Ø"EÐFVÐEWÐWbÐcgÐbhÐhiÐ jó#ð ð :IÐ%5Ó6ñ !>ð  Ð&Ð&ð  (Ÿ™¨sÓ3ÐØÐ&Ð&rš   c                	óZ  € R V RVP                    R2pVP                  pVP                  pVP                  P                  '       g7   VP                  P                  V4      pVP                  P                  V4      p\        \        VP                   V4      4       F=  w  pw  rš\        P                  P                  P                  Wš4      '       g   K9  RWx&   K?  	  VP                  P                  '       g"   VP                  P                  V4      Vn        MWrn        VP                  VVP                   VP                  RRR7      w  rK\        P                  P                  V4      pWP                   P"                  9   dd   V P                   P"                  V,          p\%        V\&        4      '       g1   \        P                  P                  VP(                  ^ ,          4      pV R\+        V4       R2p\%        V\,        4      '       d   RV RV V R2# V P/                  W2V4      # )r  r  r  FT©r  r	  r’  ú	tl.store()r‚  r  r�  r„  r#  r!  rM  r"  rX   r­  r§  r®  rñ  r-  r�  r  rÇ   Úinplace_buffersr£   rf   Úother_namesrA  r=  Úcodegen_descriptor_store_line)rR  r   r“  r�  r  rm  r  r�  rë  rÃ  Úbroadcast_dimrT  Ústore_dtyperg  s   &&&&&&        r˜   Úcodegen_block_ptr_store_lineÚ)TritonKernel.codegen_block_ptr_store_lineE  sã  € ð # 5 '¨¨H×,@Ñ,@Ð+AÀÐCˆð
 #×2Ñ2ˆØ$×6Ñ6ÐØ×%Ñ%×1×1Ð1Ø&×4Ñ4×;Ñ;¸OÓLˆOØ (× 6Ñ 6× =Ñ =Ð>OÓ PÐô *3Ü�×$Ñ$ oÓ6ö*
Ñ%ˆCÑ%�#ô �w‰w×Ñ×7Ñ7¸×KÔKØ).Ð!Ó&ñ	*
ð ×%Ñ%×1×1Ð1Ø)1×)?Ñ)?×)DÑ)DÐEVÓ)WˆHÕ&à):Ô&à×9Ñ9ØØ× Ñ Ø× Ñ Ø Øð :ó 
‰ˆô —g‘g×'Ñ'¨Ó-ˆØ—9‘9×,Ñ,Ô,Ø—)‘)×+Ñ+¨DÕ1ˆCÜ˜c¤:×.Ò.ÜŸg™g×/Ñ/°·±ÀÕ0BÓC�Ø�'˜Ô/°Ó<Ð=¸QÐ?ˆÜ�h¤×0Ò0Ø˜y˜k¨¨E¨7°5°'¸Ð;Ð;Ø×1Ñ1°)ÀuÓMÐMrš   c                ó`   € V R\         P                  P                  VP                  4       R2# )zFGenerate the descriptor load line. Override for backend customization.z.load(r  ©rX   rý   r$  r™  )rR  r  r“  s   &&&r˜   Úcodegen_descriptor_load_lineÚ)TritonKernel.codegen_descriptor_load_linex  s-   € à"Ð# 6¬!¯(©(×*?Ñ*?À×@PÑ@PÓ*QÐ)RÐRSÐTÐTrš   c                óf   € V R\         P                  P                  VP                  4       RV R2# )zGGenerate the descriptor store line. Override for backend customization.z.store(r  r  r0  )rR  r�  r“  r  s   &&&&r˜   r*  Ú*TritonKernel.codegen_descriptor_store_line|  s2   € à�˜G¤A§H¡H×$9Ñ$9¸(×:JÑ:JÓ$KÐ#LÈBÈuÈgÐUVÐWÐWrš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   r�   r­   rd  r´  r´   rB  rŸ   )r    s   "r˜   r¡   r²  €  s8   € ÷ Mñ MàðMð ðMð ð	Mð
 ñMrš   c                	ót  € V'       g   V'       g   R # \        V\        P                  4      '       g   \        R\	        V4       24      hV P                  VRR R7      p\        V\        4      '       g   \        R\	        V4       24      hVP                  pVP                  4       '       d   VP                  MR pV'       d   \        V P                  V4      4      MR pT P                  Yc'       d   RMR W‡4      p	V P                  V4      p
V P                  P                  W©R\         P"                  R7       R # )Nzexpected sympy.Expr, got Fr�  r’  Ú0)Ú
assignmentr®   )r£   r¤   r¥   r
  rè  r“  rE  rF  rS  rt  r!  Úrename_indexingÚindirect_assertÚget_load_bufferrþ   r  r×   rF  )rR  r�   rd  r´  rB  r“  rF  rt  Úsize_strÚliner	  s   &&&&&      r˜   Úcheck_boundsÚTritonKernel.check_bounds€  sù   € ÷ ŸÙä˜$¤§
¡
×+Ò+Ü Ð#<¼TÀ$»Z¸LÐ!IÓJÐJØ—=‘= °ÐRV�=ÓWˆÜ˜(¤O×4Ò4Ü Ð#AÄ$ÀxÃ.ÐAQÐ!RÓSÐSà×&Ñ&ˆ	Ø(0×(9Ñ(9×(;Ò(;�8×$Ò$Àˆß8=”5˜×-Ñ-¨dÓ3Ô4À4ˆð ×#Ñ#Øže‘s¨¨xó
ˆð ×%Ñ% hÓ/ˆØ�‰×Ñ˜&°5ÄÇÁÐÖLrš   c                	ód  € VP                  4       '       g   VP                  4       '       d   V P                  # V P                  '       d\   V P                  R,          P
                  '       d9   VP                  4       '       g#   VP                  4       '       g   V P                  # V P                  # )r  r¬  )
rW  rd  r  r·  rœ  r�  r[  rl  rl  Úloads)rR  r“  s   &&r˜   r;  ÚTritonKernel.get_load_bufferœ  s€   € Ø× Ñ ×"Ò" h×&:Ñ&:×&<Ò&<à—<‘<Ðà×!×!Ð!Ø× Ñ  Õ$×,×,Ð,Ø×'Ñ'×)Ò)Ø×&Ñ&×(Ò(ð —9‘9Ðà—:‘:Ðrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r)  rç   r°   r�   rŸ   )r    s   "r˜   r¡   r²  «  s   € ÷ ñ ¨3ð °>ñ rš   c                	ó¤   € V P                  4        F;  pVP                  V4      '       g   K  VP                  V P                  4       4      u # 	  R # r¿   )rk  ri  r
  r  )rR  r)  r  s   && r˜   Ú_range_tree_mask_shapeÚ#TritonKernel._range_tree_mask_shape«  sA   € Ø×+Ñ+Ö-ˆDØ�~‰~˜d×#Ô#Ø—‘ t×'>Ñ'>Ó'@ÓAÒAñ .ñ rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r)  zstr | TritonCSEVariabler°   r�   rŸ   )r    s   "r˜   r¡   r²  ±  s   € ÷ 1ñ 1Ð 7ð 1¸Nñ 1rš   c                	óh   € \        V\        4      '       d   VP                  # V P                  V4      # r¿   )r£   r_  r  rE  )rR  r)  s   &&r˜   Ú_mask_shapeÚTritonKernel._mask_shape±  s+   € Ü�dÔ-×.Ò.Ø—:‘:ÐØ×*Ñ*¨4Ó0Ð0rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r  r�   rH  z#OrderedSet[str | TritonCSEVariable]r°   rŸ   )r    s   "r˜   r¡   r²  ¶  s(   € ÷ ñ àðð 7ðð 
ñ	rš   c                	ó”   € Vf   R # \        V4      pV F0  pV P                  V4      pVf    R # \        V\        V4      4      pK2  	  V# r¿   )rÈ   rI  r?   )rR  r  rH  Úresult_shaper)  r
  s   &&&   r˜   Ú_broadcast_shape_with_masksÚ(TritonKernel._broadcast_shape_with_masks¶  sQ   € ð
 Š=Ùä˜U“|ˆÛˆDØ×)Ñ)¨$Ó/ˆJØÒ!ÚÜ0°¼uÀZÓ?PÓQŠLñ	 ð Ðrš   ztl.extra.cuda.gdc_wait()z%tl.extra.cuda.gdc_launch_dependents()c                 	óð  € \         P                  P                  P                  P                  '       g   R # \        \        P                  \         P                  P                  P                  4      '       d   R # \         P                  P                  '       d   R # \        P                  P                  4       P                  R8H  ;'       d)    \         P                  P!                  4       ^ ,          ^	8¬  # )Fr0  )r×   r  r#   rí   Ú
enable_pdlr£   rX   rý   r  r  rˆ  r‰  r­  r¿  rè  r0  rw  rŸ   rš   r˜   Ú_enable_pdl_codegenÚ TritonKernel._enable_pdl_codegenÊ  sœ   € ä�‰×%Ñ%×,Ñ,×7×7Ð7ÙÜ”a—h‘h¤§¡× @Ñ @× UÑ U×VÒVÙä�=‰=××ÐÙä�G‰G×/Ñ/Ó1×6Ñ6¸&Ñ@÷ ;ð ;Ü—
‘
×0Ñ0Ó2°1Õ5¸Ñ:ð	
rš   Úconsider_readsc               	ó„  aaaa€ V P                  4       '       g   R # \        P                  P                  o\        P                  P
                  e%   \        P                  P
                  P                  MR oVVV3R loV'       g   \        R4      hSR J ;'       g;    \        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      pV'       g   R # V P                  '       d0   V P                  R,          P                  '       d   V P                  pVP                  V P                  4       R # )Nc                óL  <a € Sf   \        R4      hSf   \        R4      hSP                  P                  pS'       d,   \        P                  ! VSP                  P
                  4      p\        ;QJ d     VV 3R lV 4       F  '       g   K   R# 	  R# ! VV 3R lV 4       4      # )Nzprev_node must not be Nonezcurrent_node must not be Nonec              3  óŠ   <"  € T F8  pSSP                   P                  VP                  VP                  4      8H  x € K:  	  R # 5ir¿   )Úmutation_renamesr	  r   )rÀ   ÚwÚcurrent_noder[  s   & €€r˜   rÃ   ÚOTritonKernel._handle_pdl_before_access.<locals>.matching_dep.<locals>.<genexpr>ê  s8   øé € ð á"�Að �|×4Ñ4×8Ñ8¸¿¹ÀÇÁÓHÖHÛ"ùs   ƒA ATF)r
  rV  Úwritesr‹  rŒ  rW  rˆ   )r[  Ú	prev_depsrT  rZ  Ú	prev_nodes   f €€€r˜   Úmatching_depÚ<TritonKernel._handle_pdl_before_access.<locals>.matching_depâ  s’   ù€ ØÒ Ü$Ð%AÓBÐBØÒ#Ü$Ð%DÓEÐEØ!×-Ñ-×4Ñ4ˆIßÜ%ŸOšO¨I°y×7LÑ7L×7RÑ7RÓS�	ß“3õ á"ó—3”3ð ’3ð �3õ á"óó ð rš   zdependencies must not be emptyc              3  ó4   <"  € T F  pS! V4      x € K  	  R # 5ir¿   rŸ   )rÀ   rÕ  r_  s   & €r˜   rÃ   Ú9TritonKernel._handle_pdl_before_access.<locals>.<genexpr>ñ  s   øé € Ð,SÁlÀ©\¸!¯_¨_Ãlùs   ƒTFr¬  )rR  rX   rý   rZ  r­  rc  Úprevious_noder
  rˆ   r·  rœ  r�  rl  rQ  ÚGDC_WAIT)rR  Úwait_bufferrT  ÚdependenciesÚ	need_waitrZ  r_  r^  s   &&d* @@@r˜   Ú_handle_pdl_before_accessÚ&TritonKernel._handle_pdl_before_accessØ  sÖ   û€ ð ×'Ñ'×)Ò)ÙÜ—x‘x×,Ñ,ˆä/0¯w©w×/@Ñ/@Ò/LŒA�G‰G×Ñ×+Ò+ÐRVð 	÷	÷ Ü Ð!AÓBÐBØ Ð%×SÐS¯«Ô,SÁlÓ,S¯¯ªÔ,SÁlÓ,SÓ)Sˆ	ßÙà× × Ð  T×%5Ñ%5°bÕ%9×%A×%AÐ%AØŸ)™)ˆKà×Ñ˜dŸm™mÖ,rš   c                	óJ  € V P                  4       '       g   R # VP                  ^8”  d   R # V P                  '       d0   V P                  R,          P                  '       d   V P
                  pVP                  V P                  4       VP                  V P                  4       R # )Nr¬  )	rR  Ú	use_countr·  rœ  r�  rº  rQ  rd  Ú
GDC_LAUNCH)rR  Úlaunch_bufferÚ
result_vars   &&&r˜   Ú_handle_pdl_after_loadÚ#TritonKernel._handle_pdl_after_loadú  sx   € Ø×'Ñ'×)Ò)ÙØ×Ñ !Ô#Ùà× × Ð  T×%5Ñ%5°bÕ%9×%A×%AÐ%AØ ×2Ñ2ˆMð 	×Ñ §¡Ô.Ø×Ñ §¡Ö0rš   c               ó   € V ^8„  d   QhRR/# ©rœ   Úcodera   rŸ   )r    s   "r˜   r¡   r²  
  s   € ÷  ñ   ñ  rš   c                	óN  € . pR pRpVP                    Fˆ  p\        V4      \        J d   V P                  V9   d   V'       d   K1  Rp\        V4      \        J d2   V P                  V9   d!   Ve   VP                  V4       \        V4      pVP                  V4       KŠ  	  W!n         R# )FNT)Ú_linesrè  rç   rd  rl  r³  r¨   r_  )rR  rs  Ú	new_linesÚhas_waitÚprevious_launchÚls   &&    r˜   Ú_filter_pdlÚTritonKernel._filter_pdl
  s†   € Øˆ	ØˆØˆØ—”ˆAÜ�A‹wœ#‹~ $§-¡-°1Ô"4ßÙà#�HÜ�A‹wœ#‹~ $§/¡/°QÔ"6Ø"Ò.Ø—M‘M /Ô2Ü"% i£.�Ø×Ñ˜QÖñ ð  Žrš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rK  r­   r  ro   r°   zLoadIndexBasis | NonerŸ   )r    s   "r˜   r¡   r²    s$   € ÷ (ñ (Øð(Ø':ð(à	ñ(rš   c                ó  € \         P                  P                  p. pVP                   Fƒ  pV P                  P                  V4      pVf   K$  VP                  VJ g   K6  VP                  VP                  \        P                  P                  4      '       d   Kr  VP                  V4       K…  	  \        V4      ^8:  d   R# . p\        P                  P                  pV'       dp   \        V4       F^  w  r–VP                  VP                  V4      '       g   K)  VP                  V4       W†P                  ,          pVP!                  V	4        Ks  	  R# VP                  W‚P"                  4      '       g   R# \%        V4      # )a’  Find split digits that reconstruct a range tree's flat index.

Each entry is one digit in a mixed-radix index. A complete basis has at
least two non-unit digits, starts at divisor 1, and forms a contiguous
divisor chain whose total extent equals the root's numel.

Symbolic lengths are supported when size analysis can prove those
identities without guards; otherwise this conservatively returns None.
N)rX   r­  r§  r©   r  r	  r  r®  Úlengthr¤   rº  r»  r_  r¨   rM  Údivisorr³  r‰  rÈ   )
rR  rK  r  r§  Ú	remainingr%  rú  Úbasisr  r,  s
   &&&       r˜   Ú_load_index_split_basisÚ$TritonKernel._load_index_split_basis  s  € ô —7‘7×#Ñ#ˆØ02ˆ	Ø×(Ô(ˆFØ×)Ñ)×-Ñ-¨fÓ5ˆEàÔ!Ø—J‘J $Õ&Ø ×8Ñ8¸¿¹ÄuÇwÁwÇ{Á{×SÔSà× Ñ  Ö'ñ )ô ˆy‹>˜QÔÙà,.ˆÜ—'‘'—+‘+ˆ÷ Ü% iÖ0‘�Ø×3Ñ3°E·M±MÀ7×KÔKØ—L‘L Ô'ØŸ|™|Õ+�GØ—M‘M !Ô$Úñ 1ñ Ø×/Ñ/°¿¹×DÒDÙÜ�U‹|Ðrš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²  E  s   € ÷ 

ñ 

°$ñ 

rš   c                óF  € V P                   \        J ;'       d‰    V P                  P                  4       ;'       dg    V P                  '       * ;'       dN    \
        ;QJ d&    R V P                   4       F  '       g   K   RM	  RM! R V P                   4       4      '       * # )z=Whether this kernel uses a supported shared coordinate scope.c              3  óB   "  € T F  p\        V\        4      x € K  	  R # 5ir¿   )r£   rl   ræ  s   & r˜   rÃ   Ú@TritonKernel._supports_load_index_basis_reuse.<locals>.<genexpr>K  s"   é € ð á,�Dô ˜4Ô!;×<Ð<Û,ùó   ‚TF)rf  r$  r¹  r1  rÓ  rˆ   rœ  rQ  s   &r˜   Ú _supports_load_index_basis_reuseÚ-TritonKernel._supports_load_index_basis_reuseE  sŒ   € ð �N‰NœlÐ*÷ ð Ø—‘×*Ñ*Ó,÷ð à×.Ñ.Ô.÷ð ÷ “Cñ à ×,Ò,ó—C—C’Cñ à ×,Ò,óó ô ð		
rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   ÚstateÚLoadIndexStater°   rU  rŸ   )r    s   "r˜   r¡   r²  Q  s   € ÷ 
ñ 
¨~ð 
À.ñ 
rš   c                óÚ   a a€ \        S\        4      '       d   SP                  # \        ;QJ d"    . V V3R lS P                   4       F  NK  	  5# ! V V3R lS P                   4       4      # )z<Return cached bases or derive them from the prior live load.c              3  ó\   <"  € T F!  pSP                  SP                  V4      x € K#  	  R # 5ir¿   )r‚  rK  )rÀ   r  rR  rŒ  s   & €€r˜   rÃ   Ú9TritonKernel._resolve_load_index_bases.<locals>.<genexpr>W  s)   øé € ð 
ÙHXÀˆD×(Ñ(¨¯©°d×;Ð;ÓHXùs   ƒ),)r£   rT  rV  rÈ   rœ  )rR  rŒ  s   ffr˜   Ú_resolve_load_index_basesÚ&TritonKernel._resolve_load_index_basesQ  s[   ù€ ä�eÔ4×5Ò5Ø—;‘;Ð÷ Œuõ 
ØHL×HXÒHXó
�uð 	
ˆuõ 
ØHL×HXÒHXó
ó 
ð 	
rš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   rK  r­   r  ro   r�  ÚLoadIndexBasisr°   rŸ   )r    s   "r˜   r¡   r²  [  s8   € ÷ Jñ JàðJð "ðJð ð	Jð
 
ñJrš   c                óŠ  € \        R V 4       \        P                  P                  4      p\	        V Uu. uF  qUP                  4       NK  	  up4      p/ p\        P                  P                  pVP                  V,
           F¤  p	V P                  P                  V	4      pVe   VP                  VJd   K4  VP                  VP                  \        P                  P                  4      ;'       d'    VP                  VP                   VP"                  4      p
V
'       g   K   WGV	&   K¦  	  V'       d   \%        W4      # T# u upi )zAReplace a tree's flat symbol with its exact split-coordinate sum.c              3  ób   "  € T F%  qP                  4       VP                  ,          x € K'  	  R # 5ir¿   )r%  r  )rÀ   rú  s   & r˜   rÃ   Ú>TritonKernel._rewrite_full_range_with_basis.<locals>.<genexpr>c  s    é € Ð?¹°�\‰\‹^˜eŸm™m×+Ò+»ùs   ‚-/)rè  r¤   rº  ræ  r   r%  rX   r­  r§  r©   r  r	  r  r®  r  r»  r~  r‰  rP   )rR  rK  r  r�  Úsplit_indexrú  Úbasis_symbolsr"  r§  r%  Úis_full_ranges   &&&&       r˜   Ú_rewrite_full_range_with_basisÚ+TritonKernel._rewrite_full_range_with_basis[  s  € ô Ù?¹Ó?ÄÇÁÇÁó
ˆô #ÁÓ#FÁ°u§L¡L¦NÁÑ#FÓGˆØ79ˆÜ—7‘7×#Ñ#ˆØ×(Ñ(¨=×8Ð8ˆFØ×)Ñ)×-Ñ-¨fÓ5ˆEð Š} §
¡
°$Ó 6ÙØ$×<Ñ<Ø—‘œuŸw™wŸ{™{ó÷ Mð Mà×2Ñ2°5·<±<ÀÇÁÓLð ÷ ‰}Ø'2˜VÓ$ñ 9÷ 3?Œz˜%Ó.ÐIÀEÐIùò $Gs   µE c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r   rç   rK  r­   r°   rŸ   )r    s   "r˜   r¡   r²  u  s!   € ÷ &ñ &¨Cð &¸
ð &Àzñ &rš   c                ó|  € V P                  4       '       g   V# \        \        V P                  4      pVP	                  V4      pVP
                  P                  V4      pVf   \        W"4      VP
                  V&   V# VP                  V8X  d   VP                  # V P                  V4      pTp\        V P                  VRR7       F  w  r‰V	f   K  V P                  WxV	4      pK  	  Wr8w  d8   \        P                  P                   P#                  WpP%                  4       4      p\'        W'V4      VP
                  V&   V# )aE  Rewrite a full-range load coordinate to an observed split basis.

Reduction bodies can use split coordinates while later pointwise work
uses one flattened coordinate for the same range root. Looped reductions
may reuse a basis within their body; closing the loop invalidates CSE and
clears the basis before codegen enters a different scope.

TritonKernel subclasses and derived iteration families may use separate
codegen scopes. Cooperative reductions also use an untested partitioned
execution model. Only the base, non-cooperative kernel with base range
trees is accepted here.
T)r—   )r‰  r
   rX  rþ   rg  rZ  r	  rQ  rK  rÊ  r‘  r"  rœ  r›  rX   r­  r§  Úsimplify_with_rangesÚ
var_rangesrT  )
rR  r   rK  rþ   r¶  rŒ  rV  rÊ  r  r�  s
   &&&       r˜   Ú_reuse_load_index_basisÚ$TritonKernel._reuse_load_index_basisu  s  € ð ×4Ñ4×6Ò6ØˆLä”9˜dŸh™hÓ'ˆà—O‘O DÓ)ˆ	Ø×&Ñ&×*Ñ*¨9Ó5ˆØŠ=ô 1JÈ%Ó0WˆC×"Ñ" 9Ñ-ØˆLØ�;‰;˜%ÔØ—<‘<Ðà×.Ñ.¨uÓ5ˆØˆÜ˜t×/Ñ/°¸t×D‰KˆDØÔ Ø×<Ñ<¸VÈ5ÓQ’ñ Eð Œ?Ü—W‘W×%Ñ%×:Ñ:¸6Ç?Á?ÓCTÓUˆFÜ,CØ˜5ó-
ˆ×Ñ˜yÑ)ð ˆrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r   rç   r¼  r½  rŸ   )r    s   "r˜   r¡   r²  �  s   € ÷ 
ñ 
Øð
Ø:Hñ
rš   c                	óP   € V P                   P                  \        WV4      4       R # r¿   )Úsaved_partial_accumulater_  rp   )rR  r   r”   r�  r¼  s   &&&&&r˜   rÀ  ÚTritonKernel.partial_accumulate�  s"   € ð 	×%Ñ%×,Ñ,Ü˜d°CÓ8ö	
rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r   rç   rK  r­   rŸ   )r    s   "r˜   r¡   r²  ¤  s   € ÷ kñ k˜ð k Zñ krš   c           
     ó–  aaaaa € V P                   P                  S4      pV P                  o S S;;,          ^,          uu&   \        pV P	                  SV4      pV P                  V4      oTp\        P                  P                  S4      p\        Wc4      p\        P                  P                  '       dU   V P                  f   V P                  4        SV P                  ;'       g    R&9   d   V P                  P!                  V4       \        P                  P                  ;'       d    V P#                  SW64      pV'       d   RM V P%                  V VR\'        V RR4      SR7      p	V P)                  VRV	R7      p
\+        V
\,        4      '       d)   V P/                  V
P0                  4      '       d   RV n        V
P5                  4       oV
P7                  4       p\8        ;QJ d9    R V P;                  V4      P=                  4        4       F  '       g   K   RM.	  RM*! R V P;                  V4      P=                  4        4       4      pV P?                  V4      '       d   RpM†V'       g   RpM{V P@                  '       dh   V PB                  '       g$   V PD                  R',          PF                  '       d3   VVVV V3R	 lpS S,          oR
p\H        PJ                  ! \L        RV4      pMRpV'       g	   S'       dP   V
PO                  4       '       d:   V PP                  '       d   R\S        V PP                  4       2pMV'       d   RpMRpMRp Rp\        P                  PT                  '       d.   V PV                  PY                  4       pSV9   d   VS,          ^8„  p V P?                  V4      '       * ;'       d+    V P@                  '       * ;'       d    V'       * ;'       d    TpRpV'       d   RpRpRp\[        S4      '       ds   TpV\\        P^                  \\        P`                  39   dH   \        P                  Pb                  '       d   \\        Pd                  pMVR\g        V4       R2,          pR&pEM8\+        V
\h        \j        34      '       dz   V Pm                  SW:V4      w  pp\+        V
\h        4      '       d   RV V V V R2pMV Po                  VV
4      pV
Pq                  VV
Pr                  V
Pt                  RRR7      w  ppMû\w        V4      '       dP   V P                  P!                  V4       V Px                  P{                  VR4       RV RV R2pV
P|                  pR&pM›V P                  P!                  V4       V Px                  P{                  VR4       RV RV
P~                   RV
P€                   V V V R2
pV
P‚                  '       d   V
P‚                  pM\„        P‡                  V
P0                  4      pV\\        P^                  \\        P`                  39   d:   \        P                  Pb                  '       d   VR,          p\\        Pd                  pV\\        Pˆ                  8X  d6   \\        PŠ                  PŒ                  f   VR,          p\\        Pˆ                  pV P�                  V
4      pSV P�                  P’                  9   dI   \        P                  P•                  4       P–                  R8w  d   VP™                  \›        SR4      4       V P�                  VS4       V P�                  PŸ                  VV! V4      VVR7      pV P¡                  VV4       VP¢                  ^8”  d   S S;;,          ^,          uu&   \+        V\¤        4      '       g   \§        R\—        V4       24      hV
P¨                  VnT        V'       Ed4   TpV\\        Pˆ                  8X  d)   \«        V4      R(9   d   R\«        V4      R8X  d   ^M^  R 2pR!V R"V R2pV P�                  PŸ                  VVWjP‚                  R7      pV
P¨                  '       d²   VP¬                  '       d   R#pMV\\        Pˆ                  8X  d   RpMR$pV PP                  '       d   \S        V PP                  4      MTpR%V
P€                   R"V R"V R2pV P�                  PŸ                  VVVV P¯                  VP°                  V
P¨                  4      R7      pV P@                  '       d   VV P²                  J d   V P´                  P!                  V4       V# ))zS
Load from the memory location 'name', offset by some indexing expression 'index'.
NFÚtma_load_for_template_epilogue©r	  rk  rl  Tr�  c              3  ó*   "  € T F	  q^8H  x € K  	  R# 5ir  rŸ   )rÀ   r,  s   & r˜   rÃ   Ú$TritonKernel.load.<locals>.<genexpr>à  s   é € ð 
ÙM�q�ŽFÓMùr;  z, eviction_policy='evict_last'c                 óH   <€ SS,          S 8”  d   S'       g	   S'       d   R # R# )Ú
evict_lastÚevict_firstrŸ   )Úexpected_countr[  Úindirect_indexingÚload_countsr   s   €€€€€r˜   Údecide_laterÚ'TritonKernel.load.<locals>.decide_laterë  s   ø€ Ø˜tÕ$ ~Ô5ß×"3á'Ù$rš   z, eviction_policy='<EP>'z<EP>rŒ   z, other=z	, other=0r  z, cache_modifier='.cg'r’  r  r­  r&  r5  rx  ú), r|  r�  rt  útl.debug_barrier()r  rý  ÚTrueztl.full([1], z
, tl.int1)r  r  z0.0r7  r×  rŸ   r¬  )r·  ÚFalse)[rÇ   r°  rÇ  r   r¡  r  rX   r­  r  rz   r#   rí   r  rÄ  r_  rÃ  rµ  rk  Útma_compatibility_checker_clsr¹   r“  r£   rE  rC  rK  r×  r[  rd  rˆ   Úget_strides_of_loadr�  Úis_broadcastedr·  rˆ  rœ  r�  r…  r†  rE   rS  Ú_load_otherrk   Úskip_l1_cacher¹  Úbuffer_read_countsrx   r×   r[  r\  rZ  rØ   rR   r=  r0  r#  r1  r-  r�  r‚  r«   rÂ  r³  rI  rF  rt  rL  rð   r  r´   rˆ  r‰  r;  rþ   Úinvalidated_storesr¿  rè  rQ  r`   rh  r  ro  rk  r_  r
  rH  rç   rË   rN  r  rl  r¼  )!rR  r   rK  r  Ú	make_lineÚoriginal_indexr®   Úuses_uint8_storageÚskip_tmaÚtma_checkerr“  rd  Úis_coalescedÚepr³  rm  Úhas_read_depsr¾  r½  ÚcachemodÚappend_broadcastr  r=  r  Úload_bufferrn  Úbcast_operandr^  Ú	other_valr°  r[  r±  r²  s!   &f&                          @@@@r˜   r   ÚTritonKernel.load¤  s3  ü€ ð �i‰i�o‰o˜dÓ#ˆØ×'Ñ'ˆØ�D×˜QÕÓÜ=Eˆ	à×,Ñ,¨T°5Ó9ˆØ ×5Ñ5°eÓ<ÐØˆÜ—‘×!Ñ! $Ó'ˆÜLÈUÓXÐä�=‰=×-×-Ð-Ø×8Ñ8Ò@Ø×8Ñ8Ô:Ø˜×AÑA×GÐGÀRÔHØ×1Ñ1×5Ñ5°cÔ:ä—=‘=×5Ñ5÷ 
ð 
¸$×:VÑ:VØ�#ó;
ˆ÷
 ñ à×3Ñ3ØØØÜ˜dÐ$DÀeÓLØ ð 4ó ð 	ð —=‘=ØØØ&1ð !ó 
ˆô �h¤×0Ò0°T×5NÑ5NØ�N‰N÷6
ò 6
ð 26ˆDÔ.à×(Ñ(Ó*ˆ
Ø×*Ñ*Ó,ˆ÷ “sñ 
Ø ×4Ñ4°^ÓD×KÑKÔMó
—s—s’sñ 
Ø ×4Ñ4°^ÓD×KÑKÔMó
ó 
ˆð ×Ñ˜~×.Ò.Ø1‰BßØ1‰BØ×"×"Ð"Ø×%×%Ð%¨×)9Ñ)9¸"Õ)=×)E×)EÐ)E÷%ñ %ð )¨Õ.ˆNØ+ˆBÜ!×)Ò)Ô*:¸FÀLÓQ‰IàˆBçŸ:¨8×+<Ñ+<×+>Ò+>Ø××ÐØ"¤=°×1AÑ1AÓ#BÐ"CÐD‘ß#Ø#‘à%‘àˆEð	ð ˆÜ�=‰=×&×&Ð&Ø!%§¡×!AÑ!AÓ!CÐð Ð)Ô)Ø 2°4Õ 8¸1Ñ <�ð	ð ×#Ñ# NÓ3Ô3÷ ð Ø×)Ñ)Ô)÷ð à!Ô!÷ð ð ð	 	ð ˆßØ/ˆHàÐØ $ˆä# D×)Ò)ØˆDð œŸ™¬¯©Ð7Ô7Ü—=‘=×7×7Ð7Ü!ŸM™M‘Eà˜d¤;¨uÓ#5Ð"6°aÐ8Õ8�DØŠEô ˜(¤_Ô6MÐ$N×OÒOØ*.×*@Ñ*@Ø˜#¨ó+Ñ'Ð  %ô ˜h¬×8Ò8Ø%Ð&6Ð%7¸°w¸r¸dÀ8À*ÈAÐN‘Dà×<Ñ<Ð=MÈxÓX�DØ&×DÑDØØ×(Ñ(Ø×(Ñ(Ø#'Ø#ð Eó ‘�‘eô ' ~×6Ò6Ø×1Ñ1×5Ñ5°cÔ:Ø×-Ñ-×1Ñ1°#°tÔ<Ø! #  d¨>Ð*:¸"Ð=�Ø#+×#6Ñ#6Ð Ø‘à×1Ñ1×5Ñ5°cÔ:Ø×-Ñ-×1Ñ1°#°tÔ<Ø! #  d¨8×+=Ñ+=Ð*>¸cÀ(×BSÑBSÐATÐUWÐTXÐY^ÐX_Ð`hÐ_iÐijÐk�ð ×(×(Ð(Ø$×1Ñ1‘Eä)×9Ñ9¸(¿.¹.ÓI�Eð œ%Ÿ-™-¬¯©Ð8Ô8Ü—M‘M×8×8Ð8àÐ)Õ)�ÜŸ™�ØœŸ
™
Ô"¤u§}¡}×'8Ñ'8Ò'@ð ˜Õ&�ÜŸ
™
�à×*Ñ*¨8Ó4ˆð �D—H‘H×/Ñ/Ô/Ü—‘×3Ñ3Ó5×:Ñ:¸eÔCà×!Ñ!¤,¨tÐ5IÓ"JÔKØ×&Ñ& {°DÔ9Ø—X‘X×&Ñ&Ø™ 4›°¸Uð 'ó 
ˆ
ð 	×#Ñ# K°Ô<Ø×Ñ !Ô#Ø˜× Õ"ÓÜ˜*Ô&7×8Ò8Ü Ð#CÄDÈÓDTÐCUÐ!VÓWÐWØ'×1Ñ1ˆ
ÔçÐØ&ˆMØœŸ
™
Ô"¤s¨:£Ð:KÔ'Kà#¬¨Z«¸FÔ)B¡AÈÐ#JÈ*ÐUð ð & m _°BÐ7GÐ6HÈÐJˆDØŸ™×*Ñ*Ø˜T¨×6KÑ6Kð +ó ˆJð ×!×!Ð!Ø×*×*Ð*Ø ‘DØœeŸj™jÔ(Ø!‘Dà�Dà7;×7G×7GÐ7G”M $×"2Ñ"2Ô3ÈTð ð # 8×#4Ñ#4Ð"5°R¸
°|À2ÀiÀ[ÐPQÐR�Ø!ŸX™X×.Ñ.ØØØØ×:Ñ:Ø"×(Ñ(¨(×*<Ñ*<óð	 /ó �
ð ×$×$Ð$¨°t·y±yÓ(@Ø×"Ñ"×&Ñ& zÔ2àÐrš   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# ©rœ   r   rç   rK  r­   r  r_   r4  rW   r°   rÓ   rŸ   )r    s   "r˜   r¡   r²  ‘  s;   € ÷ bñ bØðbØ *ðbØ3>ðbØFOðbà	ñbrš   c           	     óB	  € V P                   P                  V4      pTp\        P                  P	                  V4      pV P                  WV4      pRp	V'       g<   Ve   VR8X  d1   VR8H  ;'       g    \        V RR4      p
V P                  V VRV
VR7      p	V P                  VRVRJ V	VR8H  R7      p\        V\        4      '       d=   V P                  VP                  4      '       d   V P                  P                  V4       WP                   P                  9   pV P!                  V4      pV'       d.   V'       d&   V P"                  P%                  \'        VR	4      4       \        V\(        \*        34      '       d*   V P-                  WV4      w  rïV P/                  WWãV4      pEMVEf/   VP0                  p\3        V4      '       dÁ   V P4                  '       d   VR
V P7                  4        R2,          pM’VP8                  e…   \:        ;QJ d&    R VP8                   4       F  '       d   K   RM	  RM! R VP8                   4       4      '       g7   RP=                  \?        \@        VP8                  4      4      pVR
V R2,          pV PB                  PE                  V4       V PF                  PI                  VR4       RV RV RV RVPJ                   R2	pMåVR8X  dÑ   RV n&        VP0                  p\3        V4      '       d“   VP8                  e…   \:        ;QJ d&    R VP8                   4       F  '       d   K   RM	  RM! R VP8                   4       4      '       g7   RP=                  \?        \@        VP8                  4      4      pVR
V R2,          pRV RV RV RVPJ                   R2	pM\O        RV 24      h\P        PR                  ! 4       pV PT                  '       g=   V PV                  '       d+   VPY                  V P[                  WP"                  4      4       V P]                  V P"                  VRR7       V P"                  P%                  \'        VV4      4       V PT                  '       g   V P^                  PE                  V4       VPa                  4        R# )z^
store the 'value' to the memory location 'name', offset by some indexing expression 'index'.
NÚtmaÚ	tma_storeFTrª  Ú
atomic_add)r°  r�  r‘  r²  r¶  ú.broadcast_to(r  c              3  ó>   "  € T F  p\        V4      R 8H  x € K  	  R# 5i©rû   Nrõ  râ  s   & r˜   rÃ   Ú%TritonKernel.store.<locals>.<genexpr>Ó  s   é € ð 9Ù+6 a”C˜“F˜c–M«;ùó   ‚r  r'  r5  rµ  c              3  ó>   "  € T F  p\        V4      R 8H  x € K  	  R# 5irÖ  rõ  râ  s   & r˜   rÃ   r×  á  ó   é € Ð?±;¨aœC ›F cžM³;ùrØ  ztl.atomic_add(z, sem='relaxed')zstore mode=)rT  )1rÇ   rž  rX   r­  r  rk  r¹   r¹  r“  r£   rE  rC  rK  rØ  r_  r(  r»  ÚstoresrQ  r`   r=  r0  r#  r-  rF  r«   r�  rö  r  r¯  rq  rs  rç   rÃ  rµ  rÂ  r³  rt  Úatomic_add_foundr$  Ú
contextlibÚ	ExitStackr·  rÓ  Úenter_contextÚguard_cooperative_storerh  r¼  Úclose)rR  r   rK  r  r4  r  rÁ  r®   Úbuffer_misalignedr‘  rk  r“  Ú
is_inplacer»  r  rm  r=  Úindexing_strÚvalue_shapeÚ
exit_stacks   &&&&&               r˜   r  ÚTritonKernel.store‘  sí  € ð �i‰i×Ñ˜tÓ$ˆØˆÜ—‘×!Ñ! $Ó'ˆà ×8Ñ8¸ÀEÓJÐà$(Ð!ß  d¢l°d¸e´mØ˜E‘M×FÐF¤W¨T°;ÀÓ%FˆEØ(,×(JÑ(JØØØØØ ð )Kó )Ð%ð —=‘=ØØØ˜d�lØ&?Ø $¨Ñ 4ð !ó 
ˆô �h¤×0Ò0°T×5NÑ5NØ�N‰N÷6
ò 6
ð ×,Ñ,×3Ñ3°DÔ9ð ŸY™Y×6Ñ6Ñ6ˆ
Ø×,Ñ,¨^Ó<ˆßŸ.Ø�K‰K×!Ñ!¤,¨tÐ5IÓ"JÔKä�h¤Ô2IÐ J×KÒKØ&*×&<Ñ&<¸TÈÓ&QÑ#Ðà×4Ñ4ØÐ 0¸óŠDð ‹\ð $×-Ñ-ˆLÜ$ U×+Ò+Ø×'×'Ð'à  n°T×5HÑ5HÓ5JÐ4KÈ1Ð$MÕM‘LØ—[‘[Ò,·S³Sñ 9Ø+0¯;ª;ó9·S·S²Sñ 9Ø+0¯;ª;ó9÷ 6ò 6ð #'§)¡)¬C´°U·[±[Ó,AÓ"B�KØ  n°[°MÀÐ$CÕC�LØ×-Ñ-×1Ñ1°#Ô6Ø×)Ñ)×-Ñ-¨c°4Ô8Ø˜s˜e 4¨ ~°S¸¸¸rÀ(×BSÑBSÐATÐTUÐV‰DØ�\Ô!Ø$(ˆDÔ!Ø#×-Ñ-ˆLä% e×,Ò,Ø—K‘KÒ+ß›Ñ?°5·;²;Ó?ŸŸšÑ?°5·;²;Ó?×?Ò?à"Ÿi™i¬¬C°·±Ó(=Ó>�Ø .°°¸QÐ ?Õ?�Ø# C 5¨¨\¨N¸#¸e¸WÀBÀx×GXÑGXÐFYÐYiÐj‰Dä%¨°D°6Ð&:Ó;Ð;ä×)Ò)Ó+ˆ
Ø×$×$Ð$¨×)C×)CÐ)CØ×$Ñ$ T×%AÑ%AÀ$ÏÉÓ%TÔUà×&Ñ& t§{¡{°DÈÐ&ÔNØ�‰×Ñœl¨4°Ó6Ô7à×$×$Ð$Ø×"Ñ"×&Ñ& uÔ-à×ÑÖrš   c               ó   € V ^8„  d   QhRR/# rÈ  rŸ   )r    s   "r˜   r¡   r²  õ  s   € ÷ Iñ I°ñ Irš   c                	ó\   € V P                   P                  R V R\        V4       R24       R# )ztl.device_assert(r  r  N)r  rQ  rN  )rR  ÚcondÚmsgs   &&&r˜   Údevice_assert_asyncÚ TritonKernel.device_assert_asyncõ  s(   € Ø�‰×ÑÐ!2°4°&¸¼4À»9¸+ÀQÐGÖHrš   c                ó”   € V P                   P                  4       pVP                  \        VRV R24      4       VP	                  4       # )z“
For cooperative reductions only one thread block should write out the result.
We rotate which thread block does each write for better parallelism
zif rsplit_id == (z % RSPLIT):)r…  rE  rQ  r`   Úindent)rR  r   r	  rë  s   &&& r˜   rà  Ú$TritonKernel.guard_cooperative_storeø  sC   € ð
 ×8Ñ8×NÑNÓPˆØ×Ñœ dÐ.?À¸uÀKÐ,PÓQÔRØ�}‰}‹Ðrš   c               ó   € V ^8„  d   QhRR/# )rœ   Ú	variablesúCSEVariable | NonerŸ   )r    s   "r˜   r¡   r²    s   € ÷ 
ñ 
Ð);ñ 
rš   c                	ó˜   € R pV FA  pVf   K	  \        VR4      '       g   K  Vf   VP                  pK/  W#P                  ,          pKC  	  V# )NrH  )rë   rH  )rR  rò  ÚmasksÚelems   &*  r˜   Ú_combine_masksÚTritonKernel._combine_masks  sG   € ØˆÛˆDØŠ|ÙÜ�t˜[×)Ô)Ø’=Ø ŸN™N’Eà!§N¡NÕ2’Eñ ð ˆrš   c               ó8   € V ^8„  d   QhRRRRRRRRRR	R
RRRRR/# )rœ   r�  r_   Ú
boundariesz.tuple[str, sympy.Expr, sympy.Expr, sympy.Expr]Úboundary_indicesÚindexing_dtyper¯   rg  r´   Úsorterztuple[str, sympy.Expr] | NoneÚsorter_indicesró  r°   rŸ   )r    s   "r˜   r¡   r²    s[   € ÷ 9ñ 9àð9ð Cð9ð &ð	9ð
 $ð9ð ð9ð .ð9ð +ð9ð 
ñ9rš   c                óÂ  € V P                   P                  \        P                  4       V P                  P                  V^ ,          4      pV P                  V^,          4      p	V P                  V^,          4      p
V P                  V^,          4      pV'       d#   V P                  P                  V^ ,          4      MRpV'       d   V P                  V^,          4      MRpV\        P                  8X  d   RpM#V\        P                  8X  d   RpM\        R4      hV P                  ! V P                  V^ ,          .V'       d   V^ ,          .M. O5!   V P                  P                  V P                  RV RV RV	 RV
 RV RV RV RV RV RV RV R2VVP                  R7      pV P!                  V P                  V4       V P#                  WV4      pVVn        V# )	z#
See [Note: Inductor bucketize op]
rÓ   rµ  ztl.int64z5Bucketize only supports indexing with int32 and int64z'triton_helpers.bucketize_binary_search(r  z, )r  )rÐ  rµ  r0   ÚONE_ELEMENT_PER_THREADrÇ   r°  r$  r×   rF  rD  r$  rh  r  rþ   r  r  ro  r÷  rH  )rR  r�  rú  rû  rü  rg  rý  rþ  Úboundaries_ptrÚboundary_sizeÚboundaries_underlying_numelÚboundary_strideÚ
sorter_ptrÚsorter_strideÚtriton_dtyperÊ  rõ  s   &&&&&&&&         r˜   Ú	bucketizeÚTritonKernel.bucketize  sÂ  € ð$ 	×Ñ×Ñ¤× CÑ CÔDàŸ™Ÿ™¨°A­Ó7ˆØ×)Ñ)¨*°Q­-Ó8ˆØ&*×&7Ñ&7¸
À1½Ó&FÐ#Ø×+Ñ+¨J°q­MÓ:ˆß39�T—Y‘Y—_‘_ V¨A¥YÔ/¸vˆ
ß8>˜×)Ñ)¨&°­)Ô4ÀFˆàœUŸ[™[Ô(Ø%‰LØœuŸ{™{Ô*Ø%‰Lä%ØGóð ð 	×&Ò&Ø�L‰L˜* Q�-ð	
ß:@¨F°1­I©;Àbô	
ð —‘×"Ñ"Ø�L‰LØ5°f°X¸RØÐ˜b  ¨rÐ2MÐ1NÈbÐQ`ÐPaÐacØÐ  Øˆn˜BØˆg�RØˆl˜"˜]˜O¨2ØÐð ðð !Ø—,‘,ð #ó 
ˆð 	×#Ñ# D§L¡L°&Ô9à×#Ñ# F¸nÓMˆØ ˆÔàˆrš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   r²  H  s   € ÷ .ñ .¨ñ .rš   c                	óÀ   € V P                  4       pV^8X  d   RV R2# V P                  pR.W#,
          ,          R.V,          ,           pV RRP                  V4       R2# )r  ú!triton_helpers.promote_to_tensor(r  r]  rÓ   rU  r  rV  ©r  r¶  rq  )rR  r  ÚndimsÚnreducerì  s   &&   r˜   Úreduction_resizeÚTritonKernel.reduction_resizeH  sh   € Ø×'Ñ'Ó)ˆØ�AŒ:Ø6°u°g¸QÐ?Ð?à×)Ñ)ˆØ�˜�Õ)¨V¨H°wÕ,>Õ>ˆØ�˜˜$Ÿ)™) EÓ*Ð+¨1Ð-Ð-rš   c               ó   € V ^8„  d   QhRR/# )rœ   r°   ztuple[str, BlockShapeType]rŸ   )r    s   "r˜   r¡   r²  Q  s   € ÷ 
9ñ 
9Ð:Tñ 
9rš   c                	ó  € V P                  4       pV^8X  d	   RV R2V3# V P                  pR.W4,
          ,          R.V,          ,           pVe   . VRW4,
           O^.V,          O5MRpV RRP                  V4       R2V3# )	r  r	  r  r]  rÓ   NrU  r  rV  r	  )rR  r  r  r	  r	  rì  r  s   &&&    r˜   Úreduction_resize_and_shapeÚ'TritonKernel.reduction_resize_and_shapeQ  sŸ   € Ø×'Ñ'Ó)ˆØ�AŒ:Ø6°u°g¸QÐ?ÀÐFÐFà×)Ñ)ˆØ�˜�Õ)¨V¨H°wÕ,>Õ>ˆà=BÒ=NÐ9ˆeÐ'�u•Ð(Ð9¨A¨3°­=Ò9ÐTXð 	ð �˜˜$Ÿ)™) EÓ*Ð+¨1Ð-¨yÐ8Ð8rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r  r_   r®   r¯   r°   rŸ   )r    s   "r˜   r¡   r²  ]  s$   € ÷ 
ñ 
Ø(ð
Ø1<ð
à	ñ
rš   c                ó  € V P                   ^8X  d   V# V P                  4       V P                   ,
          pV P                  4       pVRV R.,           pV P                  P	                  V\        \        V4      WV4      V\        V4      R7      # )z3
Reshape to RBLOCK, collapsing all reduction dims.
Nr'  r  )r¶  r  r.  rþ   r  r  rç   rÈ   )rR  r	  r  r®   Útarget_ndimr  Útarget_shapes   &&&&   r˜   Úreduction_collapse_dimsÚ$TritonKernel.reduction_collapse_dims]  s‰   € ð ×"Ñ" aÔ'ØˆLà×-Ñ-Ó/°$×2IÑ2IÕIˆØ×,Ñ,Ó.ˆØ$ \ kÐ2°h°ZÕ?ˆØ�x‰x× Ñ ØÜœ3˜u›: }ÓCØÜ˜Ó%ð	 !ó 
ð 	
rš   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	rœ   r®   r¯   rž  r”   rV   r  z%CSEVariable | tuple[CSEVariable, ...]r°   rŸ   )r    s   "r˜   r¡   r²  q  sC   € ÷ y
ñ y
àðy
ð ðy
ð &ð	y
ð
 5ðy
ð 
/ñy
rš   c                ó˜)  a aaaaSaTaUaVaWaXaYaZa[a\a]a^€ R R loZR VZ3R llp\         P                  ! VZ3R lV4      pSpSpV'       dW   \         P                  ! WT4      pSZ! S4      '       d   \        P                  MSoSZ! S4      '       d   \        P                  MSoS P
                  '       g   \        R4      h\        R S P                   4       4      p	S P                  V	4       \        V	4      p	S P                  '       d   V	P                  S P                  4       S P                  R],          P                  ^ ,          p
S P                  4       RJ;'       d    SR	8H  o[S[;'       d    S P                  '       * pS P                   '       dz   S P#                  4       p\%        V4      ^8  d   \        R
\%        V4       24      hV Uu. uF  pRV9   g
   RV9   g   K  VNK  	  ppRRP'                  V4       R2oV\)        V4      o]M)S P+                  4       oV\)        S P#                  4       4      o]S P-                  VVV V]3R lV4      pR^pR_oSR`oTVSS,           ST,           pRRRRRRRRRRRR/pRpSV9   d   \/        V\(        4      '       d   Vw  ppS P1                  4       S P2                  ,
          oWR VWVVV V[3R lloXR VX3R llpRaVWVYV 3R llpVSVTV3R lpSSV3pVS P4                  P6                  9   d   S P4                  P6                  V,          # \9        S4      p\;        S4      pSV9   d   S P<                  P?                  4       MRp\A        S P#                  4       4      p\C        SWSWS P2                  ,           4       F  pR VV&   K
  	  \        R! V	 4       4      pSST9   dm   Vf   \        R"4      hS P4                  PE                  V\)        V4      R#7      S P4                  PE                  V\)        V4      R#7      3pV F
  pVVn#        K  	  MqSV9   d>   Vf   \        R"4      hS P4                  PE                  V\)        V4      R#7      pVVn#        M-S P4                  PE                  V\)        V4      R#7      pVVn#        R$P'                  V	4      oUVU3R% lo^S P                  '       Ed   \H        PJ                  PM                  SS4      pR& o\R' V VV\V^3R( llp SR)8X  d   \/        V\(        4      '       g   Rp!M€\/        V\(        4      '       d)   \O        VV4       U"U#u. uF  w  p"p#V ! V"V#4      NK  	  p!p"p#MBSR*8X  d3   S P4                  PQ                  S PR                  WDPT                  R+7      p!M	V ! VV4      p!SV9   dÐ   \/        V!\V        4      '       g   \        R,\Y        V!4       24      hVf   \        R-4      hV'       d#   R.\[        V4       R/S P]                  V4       R02p$MC\[        S P4                  PQ                  S PR                  R1V
 R2V! R32VV!P^                  R#7      4      p$VS,          oYV! S PR                  VV!V$V! 4       4       E	M/SR48X  d?   S P`                  '       d   S Pc                  VSVS^VS4      pEMþS Pe                  SV4      pEMêSR58X  d¦   \/        V!\f        4      '       g   \        R6\Y        V!4       24      hV!w  p%p&p'\(        ;QJ d6    . VV 3R7 lS Pi                  S PR                  V%V&V'SWS4       4       F  NK  	  5M/! VV 3R7 lS Pi                  S PR                  V%V&V'SWS4       4       4      pEM>SR)8X  d¾   \/        V\(        4      '       d”   \/        V!\f        4      '       g   \        R8\Y        V!4       24      hS P4                  PE                  S\k        \V        V4      P^                  R#7      p(S Pm                  S PR                  VV(V!^ ,          V!^,          SWS4      pEMŽS Po                  SV4      pEMz\/        V!\V        4      '       g   \        R,\Y        V!4       24      hSX! S PR                  V!V!PT                  4      w  p)p*p+S['       dB   S P<                  Pq                  4       '       g"   \s        \k        \t        V4      4      p,V, R9V) R02p)S P4                  PQ                  S PR                  V)V*V+R#7      pEM·SST9   d   \k        \t        V4      ^ ,          MTp-S P4                  Pw                  R:V- 2V\)        S P#                  4       4      R#7      p.\H        PJ                  Py                  SS4      pS P-                  \r        V4      p\/        V\(        4      '       Eg7   SR*8X  d¦   S P#                  4       p\%        V4      ^8  d   \        R
\%        V4       24      hV Uu. uF  pRV9   g
   RV9   g   K  VNK  	  pp\)        V4      V.n/        RRP'                  V4       R2oVS Pz                  P}                  V. R;SV RV RV R024       MŠV'       dN   \)        V4      V.n/        RRP'                  V4       R2p/S Pz                  P}                  V. R;V/ RV RV R024       M5S Pz                  P}                  V. R;S P+                  4        RV RV R024       SV9   Ed   R:V- R<2p$Vf   \        R"4      hS Pz                  P}                  V$ R;S P+                  4        R\        P~                  ! V4      P€                   RS P]                  V4       R024       VS,          oYVe"   R.\[        V4       R/S P]                  V4       R02MV
 R2p0S PR                  Pƒ                  R=V. R>V$ R?SY R@V. RV$ RV RV0 RAV. RBS^! V. RC2V.4       RDV$ RBS^! V$ RC2V$4       RD24       V! S P„                  VV.V$V! 4       4       EM¼\‡        S4      '       d   S Pc                  VSVS^VS4      pEM“SR)8X  EdÀ   R:V RE2p1R:V RF2p2S Pz                  P}                  V1 R;S P+                  4        RGV R024       S Pz                  P}                  V2 RHS P+                  4        RV R024       \/        V\(        4      '       dW   Vw  p3p4S PR                  Pƒ                  RIV1 R>V2 RJV1 RV2 RV3 RV4 RK\ˆ        PŠ                   R\ˆ        PŒ                   RL24       MMS PR                  Pƒ                  RIV1 R>V2 RMV1 RV2 RV RK\ˆ        PŠ                   R\ˆ        PŒ                   RL24       S PR                  Pƒ                  RNV1 RBS^! V1 RC2V14       RNV2 RBS^! V2 RC2V24       RN2	4       Tp5S P4                  PE                  S\k        \t        V54      P^                  R#7      p(S Pm                  S P„                  V5V(V1V2SWS4      pEMÌV'       dÚ   \k        \Z        V4      p,S P4                  PQ                  S PR                  S^! VV,4      VPT                  VP^                  R#7      p6SX! S PR                  V6R4      w  p7p8p9S P4                  PQ                  S PR                  V7V8V9R#7      p:S PR                  P}                  V. RBV. ROV: 24       S P„                  P}                  V RBV. 24       Më\H        PŽ                  ! SS4      p;V;! V.V4      p<SR*8X  d"   S PR                  P}                  V. RBV< 24       M'S PR                  P}                  V. RBS^! V<V.4       24       S\        P�                  8X  dE   S P4                  PQ                  S P„                  V. RP2\        P’                  V.P^                  R#7      p.V! S P„                  \k        \V        V4      V.R4       S P`                  '       Ed   \H        PJ                  Py                  SS4      p\”        P–                  ! 4       p=S P„                  S P˜                  3 F3  p>V>P}                  RQ4       V=P›                  V>P�                  4       4       K5  	  SV9   Edy   SST9   d>   \k        \(        \V        \V        3,          V4      w  p?p@T?p-\[        V?4      pA\[        V@4      pBMoSSS9   d1   \k        \V        V4      p-\[        V4      pAS PŸ                  V RR24      pBM8\k        \V        V4      p-S PŸ                  V RS24      pAS PŸ                  V RR24      pBV- RT2pCS P„                  P}                  VC RBXA 24       S P¡                  VCSV4      pDS P<                  P?                  4       pV- RU2pES P„                  P}                  VE RBXB 24       S P¡                  VEV\        P~                  ! V4      P€                  4      pFV! S P˜                  VVDVFV! 4       4       EMì\‡        S4      '       dÏ   SR48w  d   \        RVS: 24      h\k        \(        \V        \V        \V        3,          V4      w  pGpHpIS P¡                  VG\;        S4      V^ ,          4      pJS P¡                  VH\;        S4      V^,          4      pKS P¡                  VI\;        S4      V^,          4      pLS P£                  S P˜                  VGVHVIVJVKVLSWS4	       EMSR)8X  dº   \k        \(        \V        \V        3,          V4      w  p5p(\/        V\f        4      '       g   \        RW\Y        V4       24      hS P¡                  V5\;        S4      V^ ,          4      pMS P¡                  V(\;        S4      V^,          4      pNS Pm                  S P˜                  V5V(VMVNSWS4       MMS P¡                  \k        \V        V4      \;        S4      V4      pOV! S P˜                  \k        \V        V4      VOR4       V=P¥                  4        \k        \t        V4      S P4                  P6                  V&   \/        V\(        4      '       d   TMV3pPS P¦                  P©                  VP4       \ª        ;QJ d    RX XP 4       F  '       d   K   RYM	  RZM! RX XP 4       4      '       g   \        R[4      hV'       dx   \­        XP4       Fh  w  ppQSST9   d
   V^ 8”  d   K  SSSST,           9   d   TMTpRXQPT                  VR8w  g   K;  S P„                  P}                  XQ RBVQ R\\¯        XR4       R024       Kj  	  V# u upi u up#p"i u upi )bzC
codegen reduction of value to Triton according the reduction_type
c               ó    € V ^8„  d   QhRRRR/# )rœ   rÕ  rR  r°   r´   rŸ   )r    s   "r˜   r¡   Ú,TritonKernel.reduction.<locals>.__annotate__|  s   € ÷ 	Lñ 	LÐ/ð 	L°Dñ 	Lrš   c                ó`   € V R J;'       d$    V P                   ;'       d    V P                  ^8  # r¿   )rË   rE  )rÕ  s   &r˜   Úshould_upcastÚ-TritonKernel.reduction.<locals>.should_upcast|  s*   € Ø˜D�=×KÐK Q×%8Ñ%8×KÐK¸Q¿Z¹ZÈ!¹^ÐKrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r  r_   r°   rŸ   )r    s   "r˜   r¡   r	    s   € ÷ 		ñ 		 ð 		°ñ 		rš   c                ó‚   <€ S! V P                   4      '       d&   \        P                  ! V \        P                  4      # T # r¿   )r®   r÷  r®  r×   rØ   )r  r!	  s   &€r˜   Úmaybe_upcastÚ,TritonKernel.reduction.<locals>.maybe_upcast  s7   ø€ ñ ! §¡×-Ò-ô —’˜U¤E§M¡MÓ2ðð ðrš   c                ó(   <€ S! V P                   4      # r¿   r<  )r  r!	  s   &€r˜   Ú<lambda>Ú(TritonKernel.reduction.<locals>.<lambda>Š  s   ø€ ©m¸A¿G¹GÔ.Drš   úexpected inside_reductionc              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   rü  ræ  s   & r˜   rÃ   Ú)TritonKernel.reduction.<locals>.<genexpr>•  ó   é € ÐIÑ8H°Ÿ>™>×+Ð+Ó8HùrO  Nrè  z%expected at least 3 dense sizes, got ÚXÚYrU  r  rV  c                óx   <€ SP                   P                  SP                  R V  RS R2V P                  SR7      # )r  r  r  r  )rþ   r  r  r®   )r  rö  rR  rå  s   &€€€r˜   r(	  r)	  ¼  s=   ø€ �d—h‘h×'Ñ'Ø—‘Ø" 1 # R¨Ð'7°qÐ9Ø—g‘gØ!ð	 (ô rš   ÚargmaxÚargminÚargmax_valueÚargmin_valueÚargmax_with_valueÚargmin_with_valuer�   r�   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r  r_   Úresult_typerR  r°   z.tuple[str, torch.dtype | None, BlockShapeType]rŸ   )r    s   "r˜   r¡   r	  Þ  s(   € ÷ &	.ñ &	.àð&	.ð ,ð&	.ð <ñ	&	.rš   c           	     óâ  <€ \        S
4      pSP                  WS	4      pS
R8X  dk   \        SP                  4       4      ^8H  pVP                  f   \        R4      hV'       d   V R2p^.VP                  O^NpMKV R2p. VP                  O^NpM5S'       d   RMRpSP                  V RV RS V R	2VP                  4      w  rVVe   V R
SP                  V4       R	2pMVP                  pWRV3# )z3
Helper to generate a reduction call, e.g. tl.sum.
r  zvalue.shape must not be Nonez[None,:,:,None]z
[:,:,None]zB, reduction_ordering=tl.constexpr(tl.ReductionOrdering.INNER_TREE)rŒ   rÎ  r  r  r’  )	r™   r	  r¨   r.  r  r
  r	  ru  r®   )r	  r  r8	  Útriton_reduction_fnÚis_bmmrÊ  r  Úreduction_orderingrÃ  r®   r”   rR  Ú
strict_sums   &&&     €€€€€r˜   Úfinal_reductionÚ/TritonKernel.reduction.<locals>.final_reductionÞ  s"  ø€ ô #@ÀÓ"OÐà×0Ñ0°ÀÓFˆEØ Ô&ä˜T×1Ñ1Ó3Ó4¸Ñ9�Ø—;‘;Ò&Ü(Ð)GÓHÐHßØ %˜w oÐ6�FØÐ0 §¡Ð0¨aÐ0‘Eà %˜w jÐ1�FØ-˜eŸk™kÐ-¨1Ð-‘E÷ "ñ Yàð #ð
 !%× ?Ñ ?Ø*Ð+¨1¨U¨G°2°c°UÐ;MÐ:NÈaÐPØ—K‘Kó!‘�ð
 Ò&Ø"˜8 4¨×(9Ñ(9¸+Ó(FÐ'GÀqÐI‘à#Ÿk™k�à¨Ð-Ð-rš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   rn  r_   r  r8	  rR  r°   rÓ   rŸ   )r    s   "r˜   r¡   r	    s2   € ÷ 	5ñ 	5à#ð	5ð ð	5ð ,ð		5ð
 ñ	5rš   c                óN   <€ S! WV4      w  p pV P                  V RV 24       R# )z=
Generate a reduction and assign it to an existing variable.
rJ  N)r†  )r	  rn  r  r8	  rT  r>	  s   &&&& €r˜   Úfinal_reduction_defineÚ6TritonKernel.reduction.<locals>.final_reduction_define  s.   ø€ ñ *¨&¸ÓE‰KˆE�1�aØ�M‰M˜Z˜L¨¨E¨7Ð3Ö4rš   rK  c                óÎ  <€ S	P                  WVP                  4      pS	P                  T T\        V\        4      '       d%   \	        \
        P                  VP                  4      M\        P                  P                  4       4      pVR 8X  dW   Vw  rVV P                  RV RV RS RV RV RS RV RS	P                  V 4       RV RS	P                  V 4       R24       R# VR8X  d?   V P                  RV R	V R
S RV RV RS RV RS	P                  V R24       R24       R# V P                  RV R	V R
S RV RV RS RV RS	P                  V R24       R24       R# )Úvalue_and_indexz                    r  z = triton_helpers.z_with_index(z)
                    rJ  ú
                    r  z_val, z_idx = triton_helpers.Ú_valÚ_idxN)r	  r®   r£   r_   r
   r×   rX   rý   r”  r†  r	  )
r	  rn  r  rK  Úresult_kindÚresult_valueÚresult_indexrÃ  Úroot_oprR  s
   &&&&&  €€€r˜   Úfinal_argreduceÚ/TritonKernel.reduction.<locals>.final_argreduce  sß  ø€ Ø×0Ñ0°ÀÇÁÓLˆEØ×0Ñ0ØØä˜e¤[×1Ò1ô ”U—[‘[ %§+¡+Ô.ä—X‘X×<Ñ<Ó>óˆEð Ð/Ô/Ø-7Ñ*�Ø—‘ðØ!�N " \ NÐ2DÀWÀIÈ\ÐZ_ÐY`Ð`bÐchÐbiÐikÐloÐkpð qØ!�N # d×&;Ñ&;¸|¸nÓ&NÐ%Oð PØ!�N # d×&;Ñ&;¸|¸nÓ&NÐ%Oð Pðöð  Ô'Ø—‘ðØ�L  z lÐ2HÈÈ	ÐQ]Ð^cÐ]dÐdfÐglÐfmÐmoÐpsÐotð uØ�L  D×$9Ñ$9¸Z¸LÈÐ:MÓ$NÐ#Oð Pðöð —‘ðØ�L  z lÐ2HÈÈ	ÐQ]Ð^cÐ]dÐdfÐglÐfmÐmoÐpsÐotð uØ�L  D×$9Ñ$9¸Z¸LÈÐ:MÓ$NÐ#Oð Pðörš   c                 ó,   <€ SS9   d   R # SS 9   d   R# R# )rE	  r  rK  rŸ   )Úarg_value_reduction_typesÚarg_with_value_reduction_typesr”   s   €€€r˜   Úargreduce_result_kindÚ5TritonKernel.reduction.<locals>.argreduce_result_kind4  s   ø€ ØÐ!?Ô?Ù(ØÐ!:Ô:ÙÙrš   rû   c              3  óZ   "  € T F!  p\        V^ ,          4      '       d   K  Vx € K#  	  R# 5ir+  )rM   r‡  s   & r˜   rÃ   r,	  I  s!   é € ð &
Ù �CÔ(;¸CÀ½F×(C�CŠC›5ùs   ‚+¡
+z*index_dtype must be set for arg reductionsr  rp  c                óD   <€ S'       g   V # \         P                  SW4      # r¿   )r  r	  )ÚtvalÚfvalrê  s   &&€r˜   r  Ú*TritonKernel.reduction.<locals>.where_condb  s   ø€ ßØ�Ü(×.Ñ.¨t°TÓ@Ð@rš   c                óŠ  € VP                   '       g   V\        P                  8X  d   V # W8X  g   V ^ 8X  d   V # V \        P                  ! V4      P                  8X  d!   \        P                  ! V4      P                  # V \        P                  ! V4      P
                  8X  d!   \        P                  ! V4      P
                  # V # )z7update reduction constant mask value to match dst_dtype)rË   r×   r´   Úiinfor�   r�   )rÂ  rž  r¢  s   &&&r˜   Úupdate_constant_dtypeÚ5TritonKernel.reduction.<locals>.update_constant_dtypej  sŽ   € ð
 ×.×.Ð.°)¼u¿z¹zÔ2IØ#�OàÔ)¨X¸¬]Ø#�OàœuŸ{š{¨9Ó5×9Ñ9Ô9Ü Ÿ;š; yÓ1×5Ñ5Ð5Ø¤§¢¨YÓ!7×!;Ñ!;Ô;Ü Ÿ;š; yÓ1×5Ñ5Ð5à#�Orš   c               ó   € V ^8„  d   QhRR/# ©rœ   r°   r_   rŸ   )r    s   "r˜   r¡   r	  |  s   € ÷ 	ñ 	¨{ñ 	rš   c                óÞ   <€ S! VSV P                   4      pSP                  \        V4      pSP                  P	                  SP
                  S! W4      V P                   V P                  R 7      # r¢  )r®   Ú_map_tuple_or_scalarrk   rþ   r  r  r  )r  r  Údefault_strrR  rž  r[	  r  s   && €€€€r˜   Ú_mask_valueÚ+TritonKernel.reduction.<locals>._mask_value|  s`   ø€ Ù/°¸ÀEÇKÁKÓP�Ø"×7Ñ7¼ÀwÓO�à—x‘x×(Ñ(Ø—L‘LÙ˜uÓ2ØŸ+™+ØŸ+™+ð	 )ó ð rš   Úonline_softmax_reducer  r<  zexpected CSEVariable, got zexpected index_dtype to be setrÎ  rn  r  r  zindex, z.shape)Úwelford_reduceÚwelford_combinezexpected Sequence, got c              3  óz   <"  € T F0  w  rSP                   P                  SP                  VSVR 7      x € K2  	  R# 5i)r  N)rþ   r  r  )rÀ   r  r  r®   rR  s   &  €€r˜   rÃ   r,	  Ä  s=   øé € ð #ñ)™˜ð —H‘H×%Ñ% d§l¡l°EÀÈeÐ%×TÐTó)ùs   ƒ8;z,expected masked_value to be a Sequence, got r5  rT  rü  Ú_indexú                ú_next, z_next = triton_helpers.z%imum_with_index(
                    ú#
                )
                rJ  Ú_nextú
                Ú_maxÚ_sumz, float('-inf'), ú = tl.zeros(z
                        zT_next = triton_helpers.online_softmax_combine_with_sum(
                            z,
                            z3
                        )
                        zK_next = triton_helpers.online_softmax_combine(
                            rF	  r®  z.to(tl.int8)zif HAS_RSPLIT:rH	  rG	  Ú_bvalÚ_bidxú.expected reduction_type 'welford_reduce', got zexpected Sequence default, got c              3  óB   "  € T F  p\        V\        4      x € K  	  R # 5ir¿   )r£   r_  râ  s   & r˜   rÃ   r,	    s   é € ÐJ¹\¸”:˜aÔ!2×3Ð3»\ùrˆ  FTz2all result_tuple entries must be TritonCSEVariabler’  r¬  )r1	  r2	  )r3	  r4	  )r5	  r6	  )rK  )XÚpytreeÚtree_anyÚtree_mapr×   rØ   r·  r
  r   rœ  rç  rr  rf  r_  r²  ry  rˆ  r-  r.  r¨   rq  rÈ   rö  r`	  r£   r  r¶  rþ   Úreduction_cacherJ  rG  r¹  Úselect_index_dtyper¿  rÁ  rP  rH  r$   r  r  r"  r  r  r®   r_   rè  rç   ru  r  rÓ  re	  Úwelford_reduce_fallbackr   Ú_welfordr
   Ú%online_softmax_reduce_final_reductionÚ prepare_softmax_twopass_fallbackry  rk   r	   r  Údefault_accumulatorrl  rQ  rZ	  r�   r†  rº  rJ   r#   rå  r“   Úget_reduction_combine_fnr´   r@  rÝ  rÞ  r»  rß  rï  r	  Ú*codegen_cooperative_reduction_peer_combineÚwelford_reduce_final_reductionrá  r¼  ri  r¯  rM  r=  )_rR  r®   rž  r”   r  r%	  Ú	do_upcastÚoriginal_dtypeÚoriginal_src_dtyperõ  Úreduction_range_prefixÚstrict_sum_loopÚdense_sizesrd  Úxy_sizes_onlyÚarg_index_reduction_typesÚarg_reduction_typesÚarg_root_opsÚlogical_indexrB	  rM	  rR	  r¶  Úacc_typeÚtorch_acc_typerq  rM  r,  Úresult_mask_varsrn  r  r  rb	  Úmasked_valuer  rÕ  Úaccumulator_indexÚmeanÚm2ÚweightÚ
result_sumÚ_resultÚ_dtypeÚ_shaper^  Úresult_prefixÚaccumulatorÚresult_size_strrÍ  Úaccumulator_maxÚaccumulator_sumÚ	value_maxÚ	value_sumÚ
result_maxrn  Ú
chunk_exprÚchunk_dtypeÚchunk_shapeÚchunkÚ
combine_fnÚupdatedræ  rg  rJ	  rK	  Úblock_valueÚblock_indexÚblock_value_nameÚpeer_valÚpeer_idx_inputÚpeer_idxÚresult_meanÚ	result_m2Úresult_weightÚ	peer_meanÚpeer_m2Úpeer_weightÚpeer_maxÚpeer_sumÚpeersÚresult_tuplerÊ  Útarget_dtyperP	  rQ	  rê  rö  rÃ  r>	  rL	  r!	  r=	  r[	  rå  r  s_   ffff&                                                                              @@@@@@@@@@@@r˜   Ú	reductionÚTritonKernel.reductionq  sú  ÿÿ€ õ	L÷		ð 		ô —O’OÔ$DÀeÓLˆ	ØˆØ&Ðßä—O’O LÓ8ˆEÙ)6°y×)AÒ)AœŸšÀyˆIÙ%2°5×%9Ò%9”E—M’M¸uˆEà×$×$Ð$Ü Ð!<Ó=Ð=ÜÑI¸×8HÒ8HÓIÓIˆØ×Ñ˜%Ô Ü�u“ˆØ�?�?ˆ?Ø�L‰L˜Ÿ™Ô)Ø!%×!1Ñ!1°"Õ!5×!<Ñ!<¸QÕ!?Ðð ×,Ñ,Ó.°dÐ:×VÐV¸~ÐQVÑ?Vˆ
Ø$×FÐF¨T×-FÑ-FÔ)Fˆð × × Ð Ø×.Ñ.Ó0ˆKÜ�;Ó !Ô#Ü$Ø;¼CÀÓ<LÐ;MÐNóð ñ /:ÓX©k d¸SÀD¼[ÈCÐSWÉKŸT˜T©kˆMÐXØ  §¡¨=Ó!9Ð :¸!Ð<ˆNÜ Ó.‰Kà!×0Ñ0Ó2ˆNÜ × 4Ñ 4Ó 6Ó7ˆKð ×)Ñ)öð ó
ˆð %9Ð!Ø$DÐ!Ø)SÐ&à%Ø'õ(à,õ-ð 	ð �eØ�eØ˜EØ˜EØ Ø ð
ˆð ˆØÐ0Ô0Ü˜%¤×'Ò'Ø',Ñ$��}à×%Ñ%Ó'¨$×*AÑ*AÕAˆ÷&	.ô &	.÷P	5ð 	5÷	ñ 	÷B	ð  °Ð6ˆ	Ø˜Ÿ™×0Ñ0Ô0Ø—8‘8×+Ñ+¨IÕ6Ð6ä" 9Ó-ˆÜ)¨)Ó4ˆð Ð!4Ô4ð �M‰M×,Ñ,Ô.àð 	ô
 ˜D×0Ñ0Ó2Ó3ˆÜ�s˜C $×"9Ñ"9Õ9Ö:ˆAØ!ˆL˜‹Oñ ;ä%ñ &
Ù ó&
ó 
Ðð Ð;Ô;ØÒ"Ü$Ð%QÓRÐRà—‘—‘ n¼EÀ,Ó<O�ÓPØ—‘—‘ k¼¸|Ó9L�ÓMðˆJó "�Ø 0�–ò "àÐ8Ô8ØÒ"Ü$Ð%QÓRÐRØŸ™Ÿ™¨{Ä%ÈÓBU˜ÓVˆJØ#3ˆJÕ àŸ™Ÿ™Ø$¬E°,Ó,?ð )ó ˆJð $4ˆJÔ Ø�z‰z˜%Ó ˆõ	Að
 ×$×$Ñ$Ü—l‘l×0Ñ0°ÀÓKˆGò$÷$	ó 	ð Ð!8Ô8ÄØ”u÷Bò Bð
  $‘Ü˜E¤5×)Ò)Ü>AÀ%ÈÔ>QÔRÑ>Q±d°a¸¡¨A¨qÖ 1Ñ>Q�ÑR�Ø 5Ô(ð
  $Ÿx™x×0Ñ0°·±¸uÏKÉKÐ0ÓX‘á*¨5°'Ó:�àÐ!4Ô4Ü! ,´×<Ò<Ü(Ø4´T¸,Ó5GÐ4HÐIóð ð Ò&Ü(Ð)IÓJÐJß àœC Ó.Ð/¨u°T×5FÑ5FÀ{Ó5SÐ4TÐTUÐVñ &ô ),ØŸ™×)Ñ)Ø ŸL™LØ.Ð/EÐ.FÀgÈlÈ^Ð[bÐcØ"-Ø".×"4Ñ"4ð	 *ó ó)Ð%ð ' ~Õ6�ÙØ—L‘LØØ Ø%Ù)Ó+öð  Ð#3Ô3Ø×-×-Ð-à!%×!4Ñ!4Ø" N°E¸:ÀxÐQVó"’Jð "&×!=Ñ!=¸eÀUÓ!K’JØÐ#4Ô4Ü! ,´×9Ò9Ü(Ð+BÄ4ÈÓCUÐBVÐ)WÓXÐXØ%1Ñ"��r˜6ß"œUõ #à(,¯©ØŸ™ d¨B°¸¸Uô)ó#ŸU™Uõ #à(,¯©ØŸ™ d¨B°¸¸Uô)ó#ó ’
ð  Ð#:Ô:Ü˜e¤U×+Ò+Ü% l´H×=Ò=Ü,ØJÜ# LÓ1Ð2ð4óð ð "&§¡§¡Ø#¬4´¸ZÓ+H×+NÑ+Nð "1ó "�Jð "&×!KÑ!KØŸ™Ø"Ø"Ø$ Q�Ø$ Q�ØØó"’Jð "&×!FÑ!FÀuÈeÓ!T’Jä! ,´×<Ò<Ü(Ø4´T¸,Ó5GÐ4HÐIóð ñ +:Ø—L‘L ,°×0BÑ0Bó+Ñ'�˜ ÷  d§m¡m×&UÑ&U×&WÒ&WÜ(¬¬c°7Ó);Ó<�DØ!%  d¨7¨)°1Ð5�GØ!ŸX™X×.Ñ.Ø—L‘L '°¸vð /ó ’
ð "Ð%CÔCô ”S˜*Ó% aÖ(àð ð
 Ÿ(™(×+Ñ+Ø�M�?Ð#Ø$Ü˜D×0Ñ0Ó2Ó3ð ,ó ˆKô
 —l‘l×6Ñ6°~ÀyÓQˆGØ×/Ñ/´¸wÓGˆGÜ˜g¤u×-Ó-Ø! UÔ*Ø"&×"6Ñ"6Ó"8�KÜ˜;Ó'¨!Ô+Ü,ØCÄCÈÓDTÐCUÐVóð ñ *5ó%Ù)4 ¸¸t¼ÀsÈdÁ{Ÿ˜©ð "ð %ô ).¨mÓ(<�KÔ%Ø'(¨¯©°=Ó)AÐ(BÀ!Ð%D�NØ—I‘I×'Ñ'Ø&˜- {°>Ð2BÀ"ÀWÀIÈRÐPXÈzÐYZÐ[õ÷ %Ü(-¨lÓ(;�KÔ%Ø()¨$¯)©)°LÓ*AÐ)BÀ!Ð&D�OØ—I‘I×'Ñ'Ø&˜- {°?Ð2CÀ2ÀgÀYÈbÐQYÐPZÐZ[Ð\õð —I‘I×'Ñ'Ø&˜- {°4×3FÑ3FÓ3HÐ2IÈÈGÈ9ÐTVÐW_ÐV`Ð`aÐbôð Ð!4Õ4Ø&'¨ °fÐ$=Ð!ØÒ&Ü(Ð)UÓVÐVØ—	‘	×#Ñ#Ø(Ð)¨°T×5HÑ5HÓ5JÐ4KÈ2Ü—{’{ ;Ó/×3Ñ3Ð4°B°t×7HÑ7HÈÓ7UÐ6VÐVWðYôð ' ~Õ6�ð %Ò0ð œ˜MÓ*Ð+¨5°×1BÑ1BÀ;Ó1OÐ0PÐPQÑRà2Ð3°5Ð9ð ð
 —‘×#Ñ#ðØ�˜WÐ%6Ð$7Ð7NÈwÈið XØ �M Ð$5Ð#6°b¸¸¸rÀ)Àð Mà�˜S¡¨{¨m¸5Ð,AÀ;Ó!OÐ Pð QØ"Ð# 3¡zÐ5FÐ4GÀuÐ2MÐO`Ó'aÐ&bð cðôñ  Ø×*Ñ*ØØØ%Ù)Ó+öô & n×5Ò5Ø!×0Ñ0Ø °°zÀ8ÈUó’
ð  Ð#:Õ:Ø$% j \°Ð"6�Ø$% j \°Ð"6�ð —	‘	×#Ñ#Ø&Ð' {°4×3FÑ3FÓ3HÐ2IÐIZÐ[cÐZdÐdeÐfôð —	‘	×#Ñ#Ø&Ð' |°D×4GÑ4GÓ4IÐ3JÈ"ÈXÈJÐVWÐXôô ˜e¤U×+Ò+Ø+0Ñ(�I˜yØ—L‘L×'Ñ'ðØ(Ð)¨°Ð0Að BØ,Ð-¨R°Ð/@ÀÀ9À+ÈRÐPYÈ{ð [Ü#×1Ñ1Ð2°"´V×5NÑ5NÐ4Oð Pðõð —L‘L×'Ñ'ðØ(Ð)¨°Ð0Að BØ,Ð-¨R°Ð/@ÀÀ5À'ð JÜ#×1Ñ1Ð2°"´V×5NÑ5NÐ4Oð Pðôð —‘×#Ñ#ðØ$Ð% S©°Ð6GÀuÐ4MÈÓ)_Ð(`ð aØ$Ð% S©°Ð6GÀuÐ4MÈÓ)_Ð(`ð aðôð (�
Ø!ŸX™XŸ_™_Ø¤t¬C°Ó'<×'BÑ'Bð -ó �
ð "×GÑGØ×*Ñ*ØØØ#Ø#ØØó’
÷ !ÜœC Ó)�ØŸ™×*Ñ*Ø—L‘LÙ˜u dÓ+ØŸ+™+ØŸ+™+ð	 +ó �ñ 8GØ—L‘L &¨$ó8Ñ4�
˜K¨ð Ÿ™×)Ñ)Ø—L‘LØØ%Ø%ð	 *ó �ð —‘×&Ñ&¨+¨°c¸+¸ÀcÈ%ÈÐ'QÔRØ×&Ñ&×0Ñ0°J°<¸sÀ;À-Ð1PÕQä×8Ò8¸ÈÓS�
Ù$ [°%Ó8�Ø! UÔ*Ø—L‘L×*Ñ*¨k¨]¸#¸g¸YÐ+GÕHà—L‘L×*Ñ*Ø&˜- s©:°g¸{Ó+KÐ*LÐMôð ¤§
¡
Ô*ð #'§(¡(×"3Ñ"3Ø×.Ñ.Ø&˜- |Ð4Ü#Ÿj™jØ)×/Ñ/ð	 #4ó #�Kñ 'Ø×*Ñ*Üœ jÓ1ØØô	ð ×%×%Ñ%Ü—l‘l×6Ñ6°~ÀyÓQˆGÜ#×-Ò-Ó/ˆJØ×.Ñ.°×0DÑ0DÓE�à—‘Ð.Ô/Ø×(Ñ(¨¯©«Ö6ñ Fð
 Ð!4Õ4Ø!Ð%CÔCÜ15Üœk¬;Ð6Õ7¸ó2Ñ.�L ,ð %1�MÜ"% lÓ"3�KÜ"% lÓ"3‘KØ#Ð'@Ô@Ü$(¬°jÓ$A�MÜ"% j£/�KØ"&×"7Ñ"7¸:¸,ÀdÐ8KÓ"L‘Kä$(¬°jÓ$A�MØ"&×"7Ñ"7¸:¸,ÀdÐ8KÓ"L�KØ"&×"7Ñ"7¸:¸,ÀdÐ8KÓ"L�KØ&3 _°EÐ#:Ð Ø×&Ñ&×0Ñ0Ð4DÐ3EÀSÈÈÐ1VÔWØ×JÑJØ$ i°ó�ð #Ÿm™m×>Ñ>Ó@�Ø$1 ?°%Ð!8�Ø×&Ñ&×0Ñ0°NÐ3CÀ3À{ÀmÐ1TÔUØ×JÑJØ" K´·²¸[Ó1I×1MÑ1Mó�ñ  Ø×(Ñ(ØØØÙ)Ó+öô & n×5Ò5Ø!Ð%5Ô5Ü(ØHÈÑHZÐ[óð ô 9=Üœ+¤{´KÐ?Õ@À*ó9Ñ5�˜Y¨ð !×KÑKØÜ$ YÓ/Ø˜A•Jó�	ð
 ×IÑIØÜ$ YÓ/Ø˜A•Jó�ð
 #×MÑMØ!Ü$ YÓ/Ø˜A•Jó�ð
 ×3Ñ3Ø×(Ñ(ØØØ!ØØØØØö
ð  Ð#:Ô:Ü)-Üœ+¤{Ð2Õ3°Zó*Ñ&�
˜Jô " '¬8×4Ò4Ü(Ø9¼$¸w»-¸ÐIóð ð  ×JÑJØÔ 0°Ó ;¸WÀQ½Zó�ð  ×JÑJØÔ 0°Ó ;¸WÀQ½Zó�ð ×:Ñ:Ø×(Ñ(ØØØØØØõð ×GÑGÜœ jÓ1Ô3CÀIÓ3NÐPWó�ñ 'Ø×(Ñ(¬$¬{¸JÓ*GÈÐPTôð ×ÑÔä.2´3¸
Ó.Cˆ�‰× Ñ  Ñ+ä%/°
¼E×%BÒ%B‘zÈÈˆØ×Ñ×%Ñ% lÔ3ß‹sÑJ¹\ÓJ�s�sŠsÑJ¹\ÓJ×JÒJÜ Ð!UÓVÐV÷ Ü& |Ö4‘	��6Ø!Ð%CÔCÈÈAÌÙð &Ø1Ð4RÕRôTñ 'ð (ð	 ð —<‘< <Ö/Ø×*Ñ*×4Ñ4Ø!˜( # f X¨TÔ2EÀlÓ2SÐ1TÐTUÐVöñ 5ð Ðùòy YùóB  Sùòh%s#   Ç
AR<ÇAR<Ô&ASæ6ASçASc               ó   € V ^8„  d   QhRR/# ©rœ   r®   r¯   rŸ   )r    s   "r˜   r¡   r²  ,  s   € ÷ &ñ &ØDOñ&rš   c                	ó¸  € V P                  WV4      pV P                  WV4      p\        ^4       Uu. uF(  p\        V P                  P	                  VR7      4      NK*  	  upw  rxVP                  RV RV RV RV RV R\        P                   R\        P                   RV RV P                  V 4       RV RV P                  V 4       R24       Wx3# u upi )rœ   r<  ú
            r  ú9 = triton_helpers.online_softmax_reduce(
                ú,
                ú)
            rJ  )
r	  rÁ  rç   rþ   rP  r†  r#   rå  r“   r	  )	rR  r	  rœ	  r�	  rÃ  r®   rT  r 	  r•	  s	   &&&&&&   r˜   Ú_online_softmax_reduceÚ#TritonKernel._online_softmax_reduce,  s  € ð ×6Ñ6°vÐPUÓVˆØ×6Ñ6°vÐPUÓVˆÜMRÐSTÌXÓ!VÉXÈ¤# d§h¡h§o¡o¸E oÓ&BÖ"CÉXÑ!VÑˆ
Ø�‰ðØˆL˜˜:˜,ð 'Ø Ð!  OÐ#4°B°s°eð <Ü×%Ñ%Ð& b¬×)BÑ)BÐ(Cð DØˆL˜˜D×1Ñ1°Z°LÓBÐCð DØˆL˜˜D×1Ñ1°Z°LÓBÐCð Dðô	
ð Ð%Ð%ùò "Ws   ².Cc               ó   € V ^8„  d   QhRR/# r»	  rŸ   )r    s   "r˜   r¡   r²  >  s   € ÷ 
ñ 
¸[ñ 
rš   c           
     óÊ  a aaa€ VVV 3R lW#V3 4       w  r#pRV RV RV RS R2	pV3R lpW#V3 U	u. uF0  p	S P                   P                  SV! V	P                  4      R7      NK2  	  p
p	SP                  RP	                  V
 Uu. uF  p\        V4      NK  	  up4       RV 24       \        ;QJ d    . V 3R lV
 4       F  NK  	  5# ! V 3R lV
 4       4      # u up	i u upi )	z+
Helper to codegen triton_helpers.welford.
c              3  óJ   <"  € T F  pSP                  SVS4      x € K  	  R # 5ir¿   )r	  )rÀ   r  r	  r®   rR  s   & €€€r˜   rÃ   Ú(TritonKernel._welford.<locals>.<genexpr>B  s*   øé € ð 
á+�ð ×(Ñ(¨°¸×>Ð>Û+ùs   ƒ #ztriton_helpers.welford(r  r  c                óB   <€ \        V ^ S V S^,           R ,           4      # r+  )rÈ   rQ  s   &€r˜   Úreduced_shapeÚ,TritonKernel._welford.<locals>.reduced_shapeH  s$   ø€ Ü˜˜q ˜¨¨c°A­g¨iÐ(8Õ8Ó9Ð9rš   r  rJ  c              3  óZ   <"  € T F   pSP                  WP                  4      x € K"  	  R # 5ir¿   )r	  r  )rÀ   r  rR  s   & €r˜   rÃ   rÆ	  Q  s*   øé € ð 
á(�ð ×+Ñ+¨E·;±;×?Ð?Û(ùó   ƒ(+)rþ   rP  r  rQ  rq  rç   rÈ   )rR  r	  r’	  r“	  r”	  rÃ  r®   ÚwelfordrÈ	  r  Úwelford_resultsr<  s   ff&&&ff     r˜   r{	  ÚTritonKernel._welford>  sù   û€ ö
à FÑ+ó
Ñˆ�&ð ,¨D¨6°°B°4°r¸&¸ÀÀCÀ5ÈÐJˆõ	:ð
  FÑ+ó
á+�ð �H‰H�O‰O %©}¸U¿[¹[Ó/IˆOÖJÙ+ð 	ð 
ð 	×Ñ˜DŸI™I±Ó&G±°!¤s¨1¦v±Ñ&GÓHÐIÈÈWÈIÐVÔWçŒuô 
á(ó
�uð 	
ˆuô 
á(ó
ó 
ð 	
ùò
ùò 'Hs   ³6CÂC c                óÐ  € V P                  4       V P                  ,
          p\        V R2\        V P	                  4       4      V\
        P                  ! 4       R7      p\        V R2\        V P	                  4       4      V\
        P                  ! 4       R7      p	\        V R2\        V P	                  4       4      V\
        P                  ! 4       R7      p
V P                  P                  V RV P                  4        RV R24       V P                  P                  V	 RV P                  4        RV R24       V P                  P                  V
 RV P                  4        RV R24       VR8X  d>   Vw  r¼pV P                  P                  R	V R
V	 R
V
 RV RV	 RV
 RV RV RV R24       MGVR8w  d   \        RV: 24      hV P                  P                  R	V R
V	 R
V
 RV RV RV	 RV
 R24       V P                  P                  RV RV! V R2V4       RV	 RV! V	 R2V	4       RV
 RV! V
 R2V
4       R24       TpV P                  V P                  VRRVV	V
VV4	      # )z%Helper to codegen a welford reductionÚ_mean©r  r®   ra  Ú_m2Ú_weightrp	  r  r  rf	  ri	  rj	  z<_next = triton_helpers.welford_combine(
                    z,
                    rk	  re	  rs	  z;_next = triton_helpers.welford_reduce(
                    z1, roffset == 0
                )
                z            rJ  rl	  r½	  N)r  r¶  r_  rÈ   r.  r"   Úunknownrl  rQ  rö  r  r†  r
  r�	  rº  )rR  rn  r”   r  r  r�	  r®   rÃ  rš	  Úaccumulator_m2Úaccumulator_weightr’	  r“	  r”	  r­	  s   &&&&&&&        r˜   re	  ÚTritonKernel.welford_reduceV  s  € ð ×%Ñ%Ó'¨$×*AÑ*AÕAˆä'Øˆl˜%Ð Ü˜×,Ñ,Ó.Ó/ØÜ×&Ò&Ó(ô	
ˆô +Øˆl˜#ÐÜ˜×,Ñ,Ó.Ó/ØÜ×&Ò&Ó(ô	
ˆô /Øˆl˜'Ð"Ü˜×,Ñ,Ó.Ó/ØÜ×&Ò&Ó(ô	
Ðð 	�	‰	×ÑØˆm˜<¨×(;Ñ(;Ó(=Ð'>¸bÀÀ
È!ÐLô	
ð 	�	‰	×ÑØÐ˜l¨4×+>Ñ+>Ó+@Ð*AÀÀHÀ:ÈQÐOô	
ð 	�	‰	×ÑØ!Ð" ,¨t×/BÑ/BÓ/DÐ.EÀRÈÀzÐQRÐSô	
ð Ð.Ô.Ø$ÑˆD�fØ�L‰L×ÑðØ�˜W ^Ð$4°GÐ<NÐ;Oð PØ �M  NÐ#3°2Ð6HÐ5Ið JØ�F˜"˜R˜D  6 (ð +ðõð Ð!1Ô1Ü$ØDÀ^ÑDVÐWóð ð �L‰L×ÑðØ�˜W ^Ð$4°GÐ<NÐ;Oð PØ�G˜2˜k˜]¨"¨^Ð,<¸BÐ?QÐ>Rð Sðôð 	�‰×ÑðØˆM˜™Z¨;¨-°uÐ(=¸{ÓKÐLð MØÐ˜C¡
¨nÐ-=¸UÐ+CÀ^Ó TÐUð VØÐ  ¡JÐ2DÐ1EÀUÐ/KÐM_Ó$`Ð#að bðô	
ð !ˆØ×2Ñ2Ø×"Ñ"ØØØØØØØØó

ð 
	
rš   c
           
     ó  € \        V P                  WWgW‰4      4      p
W#V.p\        \        Wº4      4       FE  w  pw  pw  rïVf!   V P                  P                  WŸR7      pWÛV&   VP                  V RV 24       KG  	  \        V4      # )z0Helper to codegen call to triton_helpers.welfordr  rJ  )r¿  r{	  rM  r"  rþ   rP  r†  rÈ   )rR  r	  r­	  r®	  r¯	  r’	  r“	  r”	  rÃ  r®   r�  Úresult_exprsr,  Úresult_exprr  r  s   &&&&&&&&&&      r˜   r�	  Ú+TritonKernel.welford_reduce_final_reduction¡  s‹   € ô �d—m‘m F°"¸cÓIÓJˆà#°Ð>ˆÜ09¼#¸lÓ:SÖ0TÑ,ˆAÑ,�™^˜eØÒ"Ø"Ÿh™hŸo™o°E˜oÓG�Ø"-˜Q‘Ø�M‰M˜[˜M¨¨U¨GÐ4Ö5ñ	 1Uô �\Ó"Ð"rš   c                	ó.  € V P                  WV4      pV P                  WV4      p	VP                  R V RV RV RV	 RV R\        P                   R\        P                   RV RV P                  V 4       R V RV P                  V 4       R 24       W#3# )r½	  r  r¾	  r¿	  rÀ	  rJ  )r	  r†  r#   rå  r“   r	  )
rR  r	  r 	  r•	  r³	  r´	  rÃ  r®   rœ	  r�	  s
   &&&&&&&&  r˜   r|	  Ú2TritonKernel.online_softmax_reduce_final_reduction¹  sÎ   € ð ×6Ñ6°vÈÓOˆØ×6Ñ6°vÈÓOˆØ�‰ðØˆL˜˜:˜,ð 'Ø Ð!  OÐ#4°B°s°eð <Ü×%Ñ%Ð& b¬×)BÑ)BÐ(Cð DØˆL˜˜D×1Ñ1°Z°LÓBÐCð DØˆL˜˜D×1Ñ1°Z°LÓBÐCð Dðô	
ð Ð%Ð%rš   c                	óX   € V P                   '       d   V P                   R ,          # \        # )ÚRSPLIT)r‘  r6   rQ  s   &r˜   Ú
max_rsplitÚTritonKernel.max_rsplitÉ  s%   € Ø××ÐØ×$Ñ$ XÕ.Ð.Ü Ð rš   c               ó   € V ^8„  d   QhRR/# r^	  rŸ   )r    s   "r˜   r¡   r²  Î  s   € ÷ ñ à	ñrš   c                ó2  € V P                   R,          pV P                  4       '       g   RMRpWBP                  ,          V P                  4       ,          pV P                  P                  V4      w  rxV P                  P                  RV RV RV P                  V4       R\        V4       RV R	V R
V R2RR7       V P                  V R2RR.V\        P                  ! 4       R7      p	V P                  P                  V	 RV R\        V4       R24       V	# )zé
Generate code to save a [XBLOCK, RSPLIT] temporary workspace, where each thread block writes a different
column.  After the barrier, every thread block loads the completed value so that it can compute the final
value independently.
rª  zxindex < xnumelNrm	  z_ws = (r®  z).to(tl.pointer_type(z))
                tl.store(z%_ws + (xindex * RSPLIT + rsplit_id), r  rÀ	  T©rL  Ú_peersr=  rß	  rÑ	  z = tl.load(z_ws + (xindex * RSPLIT + rsplit_arange), rsplit_mask, eviction_policy='evict_first', other=triton_helpers.if_mask(rsplit_mask, rx  )r¸  rŠ  rE  rà	  r…  r>  rº  r†  r$  rR   Úcreate_cse_varr"   rÔ	  r»  rQ  rk   )
rR  rn  r®   Údefault_valÚxnumelr)  r6  r<  r=  rµ	  s
   &&&&      r˜   r€	  Ú7TritonKernel.codegen_cooperative_reduction_peer_combineÎ  sR  € ð —‘˜SÕ!ˆØ(,×(@Ñ(@×(BÒ(BÑ ÈˆàŸ.™.Õ(¨4¯?©?Ó+<Õ<ˆØ!×GÑG×PÑPÐQWÓXÑˆà×Ñ×%Ñ%ðØ�˜G G 9¨C°×0AÑ0AÀ)Ó0LÐ/MÐMbÔcnÐotÓcuÐbvð wØ$˜Ð%JÈ:È,ÐVXÐY]ÐX^ð _ðð ð 	&ô 	
ð ×#Ñ#Øˆl˜&Ð!Ø˜XÐ&ØÜ×&Ò&Ó(ð	 $ó 
ˆð 	×Ñ×&Ñ&Øˆg�[  ð -eÜerÐs~Óeð  eAð  ACðDô	
ð ˆrš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r   rç   rK  r­   r  r_   rŸ   )r    s   "r˜   r¡   r²  ï  s-   € ÷ @ñ @àð@ð ð@ð ñ	@rš   c                	ó6  € V P                   '       g   \        R 4      hRV n         \        P                  P	                  V4      pV P                  VRV P                  V VRRR7      R7      pRV n         V P                  P                  V4      p\        P                  ! 4       pV P                  '       d+   VP                  V P                  WP                  4      4       V P                  V P                  V4       \!        V\"        \$        34      '       d\   V P                  P'                  \)        VV P+                  VVVP-                  V4      VRVP/                  4       : 24      4      4       EM\!        V\0        4      '       g   \        R\3        V4       24      hVP4                  p\7        V4      '       d“   VP8                  e…   \:        ;QJ d&    R VP8                   4       F  '       d   K   RM	  RM! R VP8                   4       4      '       g7   R	P=                  \?        \@        VP8                  4      4      p	VR
V	 R2,          pV P                  P'                  \)        VRV RV RV R	VPB                   R2	4      4       VPE                  4        R# )r*	  FT)rý   r®   r	  rk  r�  r  r’  Nc              3  ó>   "  € T F  p\        V4      R 8H  x € K  	  R# 5irÖ  rõ  râ  s   & r˜   rÃ   Ú/TritonKernel.store_reduction.<locals>.<genexpr>#  rÚ  rØ  r  rÔ  r  r'  r5  rµ  )#r·  r
  rX   r­  r  r“  r¹  rÇ   rž  rÝ  rÞ  rÓ  rß  rà  r»  rh  r£   r=  r0  rQ  r`   r-  r    rï  rE  rè  rF  r«   r  r¯  rq  rs  rç   rt  rá  )
rR  r   rK  r  r®   r“  r  ræ  rä  rå  s
   &&&&      r˜   Ústore_reductionÚTritonKernel.store_reductionï  s;  € ð ×$×$Ð$Ü Ð!<Ó=Ð=Ø %ˆÔÜ—‘×!Ñ! $Ó'ˆØ—=‘=ØØØ&*×&HÑ&HØØØØð	 'Ió 'ð !ó 	
ˆð !%ˆÔØ�i‰i×Ñ˜tÓ$ˆä×)Ò)Ó+ˆ
Ø×%×%Ð%Ø×$Ñ$Ø×,Ñ,¨T×3GÑ3GÓHôð 	×&Ñ& t×';Ñ';¸SÔAä�h¤Ô2IÐ J×KÒKØ× Ñ ×*Ñ*ÜØØ×5Ñ5ØØ Ø Ÿ™¨Ó,ØØ+¨H×,CÑ,CÓ,EÑ+HÐIóó	öô ˜h¬×8Ò8Ü$Ð'EÄdÈ8ÃnÐEUÐ%VÓWÐWà#×-Ñ-ˆLä% e×,Ò,Ø—K‘KÒ+ß›Ñ?°5·;²;Ó?ŸŸšÑ?°5·;²;Ó?×?Ò?à"Ÿi™i¬¬C°·±Ó(=Ó>�Ø .°°¸QÐ ?Õ?�à× Ñ ×*Ñ*ÜØØ ˜u D¨¨°c¸%¸ÀÀ8×CTÑCTÐBUÐUVÐWóôð 	×ÑÖrš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   r  r_   r  r  r®   r¯   r°   rŸ   )r    s   "r˜   r¡   r²  1  s2   € ÷ 
ñ 
àð
ð 0ð
ð ð	
ð
 
ñ
rš   c                ór   € V P                   P                  V P                  V P                  W4      VVR7      # )z=Emit a tl.reshape into a new tile shape, returning a CSE var.r  )rþ   r  r  Ú_reshape_expr)rR  r  r  r®   s   &&&&r˜   Úemit_reshapeÚTritonKernel.emit_reshape1  s;   € ð �x‰x× Ñ Ø�L‰LØ×Ñ˜uÓ,ØØð	 !ó 
ð 	
rš   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )rœ   r  r_   r”   rç   Úaxisr†  r®   r¯   r  r˜  r°   rŸ   )r    s   "r˜   r¡   r²  ?  sF   € ÷ 
ñ 
àð
ð ð
ð ð	
ð
 ð
ð ð
ð 
ñ
rš   c           	     ó|   € \        V4      pV P                  P                  V P                  V RV RV R2VVR7      # )zDEmit a Triton reduction primitive along `axis`, returning a CSE var.rÎ  r  r  r  )r™   rþ   r  r  )rR  r  r”   rö	  r®   r  Ú	reduce_fns   &&&&&& r˜   Úemit_reduceÚTritonKernel.emit_reduce?  sM   € ô 2°.ÓAˆ	Ø�x‰x× Ñ Ø�L‰LØˆk˜˜5˜'  D 6¨Ð+ØØð	 !ó 
ð 	
rš   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR/# )rœ   r  r_   r(  r  r  r‚  r®   r¯   Ú	out_shaper˜  r°   rŸ   )r    s   "r˜   r¡   r²  P  sP   € ÷ 
ñ 
àð
ð >ð
ð :ð	
ð
 6ð
ð ð
ð !ð
ð 
ñ
rš   c                óØ   € V P                  W4      pRV R\        V4       R2p\        V\        V4      \        V4      4      p	V P                  P                  V P                  V	VVR7      # )zÇreshape(broadcast_to(reshape(value, pre_broadcast), broadcast), final).

Used for nested-reduction broadcasts that lift a reduced-resolution
value (one element per group) to full or half resolution.
r  r  r  r  )rò	  rX  r  r¿  rþ   r  r  )
rR  r  r(  r  r‚  r®   rü	  ÚreshapedÚbroadcastedr=  s
   &&&&&&&   r˜   Úemit_broadcast_via_reshapeÚ'TritonKernel.emit_broadcast_via_reshapeP  sx   € ð ×%Ñ% eÓAˆà˜x˜j¨Ô+;¸OÓ+LÐ*MÈQÐOð 	ô ˜k¬4°Ó+@Ä$À{ÓBSÓTˆØ�x‰x× Ñ Ø�L‰LØØØð	 !ó 
ð 	
rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r  r_   r  r  r°   rç   rŸ   )r    s   "r˜   r¡   r²  k  s+   € ÷ Hñ HØðHà/ðHð 
ñHrš   c                	ó˜   € \        V R R4      pVf   RV  R\        V4       R2# \        \        V 4      \	        V4      \	        V4      4      # )r  Nr[  r  r  )r¹   rX  r  rç   r¿  )r  r  r  s   && r˜   rò	  ÚTritonKernel._reshape_exprj  sO   € ô
 ˜E 7¨DÓ1ˆ	ØÒØ    rÔ*:¸5Ó*AÐ)BÀ!ÐDÐDÜœc %›j¬$¨y«/¼4À»;ÓGÐGrš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r�  útuple[CSEVariable, ...]Údtypesútuple[torch.dtype, ...]r°   rç   rŸ   )r    s   "r˜   r¡   r²  t  s)   € ÷ >Sñ >SØ1ð>SØ;Rð>Sà	ñ>Srš   c                	óô  aaaaaaa€ \        4       oSP                  R 4       \        4       o\        ^4       Uau. uF[  o\        ;QJ d*    . VV3R l\        \        W#4      4       4       F  NK  	  5M#! VV3R l\        \        W#4      4       4       4      NK]  	  ppRP                  R \        P                  P                  V4       4       4      pSP                  RV R24       \        4       oRo^ RIHp ^ RIHp V! 4       oV! 4       o ! VVVVVV3R	 lR
\         4      p	SP#                  4       ;_uu_ 4        \$        P&                  ! V	! 4       4      ;_uu_ 4        V! V!  p
RP                  R V
 4       4      p
SP                  RV
 24       RRR4       RRR4       V P(                  P+                  SP-                  4       SR7      # u upi   + '       g   i     LH; i  + '       g   i     LS; i)z@triton.jitc              3  ót   <"  € T F-  w  pw  r#SP                  R S RV 2W2P                  R7      x € K/  	  R# 5i)rÁ   rT  r  N)r  r  )rÀ   rÙ  r  r®   rþ   r,  s   &   €€r˜   rÃ   Ú,TritonKernel._lift_helper.<locals>.<genexpr>~  s?   øé € ð á)GÑ%�A‘~˜ð —‘˜s 1 # Q q c˜]°%¿{¹{�×KÐKÛ)Gùs   ƒ58r  c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   rõ  râ  s   & r˜   rÃ   r
  „  s   é € ÐRÑ.Q¨œc !Ÿf˜fÓ.Qùr‰  zdef {name}(ú):rÎ  r}   )ÚShapePropagationOpsHandlerc                  ó4   <€ ] tR tRtR V VVVVV3R lltRtR# )Ú+TritonKernel._lift_helper.<locals>.CSEProxyi•  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rœ   r   rç   rÇ   rr  rj  r½  r°   r	   rŸ   )r    s   "r˜   r¡   Ú8TritonKernel._lift_helper.<locals>.CSEProxy.__annotate__–  s,   € ÷ ñ ØðØ'6ðØ@Nðàñrš   c                	ó®   <€ S	R V 2,          o	\        SV4      ! V/ VB p\        SV4      ! V/ VB pSP                  S\        S
V4      ! V/ VB VVR7      # )rT  r  )r¹   r  )rR  r   rÇ   rj  r–  Úoutput_shaperþ   Údtype_handlerÚhelperÚhelper_nameÚ	overridesÚshape_handlers   &&&&  €€€€€€r˜   Ú_defaultÚ4TritonKernel._lift_helper.<locals>.CSEProxy._default–  s”   ø€ ð   4 &˜zÕ)�ä&Ø!Øô ð ð #ð "ñ #�ô
  'Ø!Øô ð ð #ð "ñ #�ð
 —|‘|ØÜ˜I tÔ,¨dÐ=°fÑ=Ø&Ø&ð	 $ó ð rš   rŸ   N)rÖ   rÞ   rß   rà   r
  rä   )rþ   r
  r
  r
  r
  r
  s   €€€€€€r˜   ÚCSEProxyr
  •  s   ø† ÷÷ ñ rš   r
  c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   rõ  )rÀ   rž  s   & r˜   rÃ   r
  ¯  s   é € ÐB¹'°¤ F§ »'ùr‰  úreturn N)rÍ  )ra   rQ  r^   rÁ  rÈ   rM  r"  rq  r‹  rŒ  Úfrom_iterablerœ  ru  r~   Ú!torch._inductor.shape_propagationr
  r-   rï  rX   Úset_ops_handlerr¨  rµ  Úgetvalue)rR  rŠ  r�  r
  r,  rÇ   Ú	signaturer~   r
  r
  Úoutputsrþ   r
  r
  r
  r
  r
  s   &&&&`      @@@@@@r˜   Ú_lift_helperÚTritonKernel._lift_helpert  s‰  þ€ ô
  Ó!ˆØ×Ñ˜Ô'Ü‹eˆô ˜1”Xô
ñ
 �÷	 ŒEõ ä)2´3°vÓ3FÔ)Gó�E‰Eõ ä)2´3°vÓ3FÔ)Góö ñ ð 	ð 
ð —I‘IÑR¬i¯o©o×.KÑ.KÈDÔ.QÓRÓRˆ	Ø×Ñ˜=¨¨°2Ð6Ô7ä#Ó%ˆ	ð *ˆåPÝPá2Ó4ˆÙ2Ó4ˆ÷	ô 	”~ô 	ð0 �]‰]�_�_œa×/Ò/±³
×;Õ;Ù˜$‘iˆGØ—i‘iÑB¹'ÓBÓBˆGØ×Ñ˜w w iÐ0Ô1÷ <�_ð
 ×$Ñ$×(Ñ(¨¯©Ó):ÀkÐ(ÓRÐRùòk
÷` <×;ú�_�_ús0   »GÁAGÄ=$G'Å!3G	ÆG'ÇG$ÇG'Ç'G7	c               ó(   € V ^8„  d   QhRRRRRRRR/# )rœ   r
  r
  r¥	  zUCallable[[tuple[CSEVariable, ...], tuple[CSEVariable, ...]], tuple[CSEVariable, ...]]r�  r
  r°   rŸ   )r    s   "r˜   r¡   r²  ´  s8   € ÷ E"ñ E"à'ðE"ð
ðE"ð (ðE"ð 
!ñE"rš   c                ó0  a a€ S P                   '       g   \        R4      hS P                  '       d   \        R4      h\        R S P                   4       4      pS P                  V4       \        V4      pS P                  '       d   \        R4      h. p. p\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\        P                  ! S P                  P                  S P                  4      pS P                  W#V4      pS P                  4       S P                   ,
          p	\#        W14       EFa  w  r«S P                  P                  S P                  V
 R\%        V4       R2VV
P&                  R7      pS P                  P                  S P                  R	V R
S P)                  4        R2V\        S P+                  4       4      R7      p
VP-                  V
4       \/        V4      pS P0                  '       d   KÍ  S P+                  4       pRVR&   S P                  P3                  W¾R7      pRR
P5                  V4       R2pVP6                  '       d   RMRpS P8                  P;                  V RV R
V R
V R24       VP-                  V4       EKd  	  R oVV 3R lpV! RS! V4       RV	 R
V R2VVV4      pS P0                  '       gé   R pV Uu. uF+  pV! RV R2\=        VP>                  4      V! V4      R7      NK-  	  ppV! \        V4      \        V4      4      pV! \        V4      V4      p\#        VV4       UUu. uF,  w  ppV! RV R
V R2VP>                  VP&                  R7      NK.  	  ppp\#        VVV4       F+  w  pppS P                  P;                  V RV R
V R24       K-  	  MTpV F@  p\A        V\B        4      '       g   \        R\E        V4       24      h\        V4      Vn#        KB  	  \        V4      # u upi u uppi )z*
Perform an associative scan on 'values'.
r*	  ÚTODOc              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   rü  ræ  s   & r˜   rÃ   Ú$TritonKernel.scan.<locals>.<genexpr>Ã  r-	  rO  z(ops.scan not supported inside ops.maskedc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   ©rT   ©rÀ   r®   s   & r˜   rÃ   r+
  Ì  ó   é € ÐF¹v°eÔ*¨5×1Ð1»vùr‰  r’  r  r  r  r  rû   rU  rV  zfloat('nan')r7  rü  c                ó2   € R P                  R V  4       4      # )rå  c              3  ó*   "  € T F	  q R 2x € K  	  R# 5i©r=  NrŸ   ©rÀ   r  s   & r˜   rÃ   Ú1TritonKernel.scan.<locals>.csv.<locals>.<genexpr>ð  ó   é € Ð<±V¨E˜g Q�K³Vùr;  ©rq  ©r�  s   &r˜   ÚcsvÚTritonKernel.scan.<locals>.csvï  ó   € Ø—8‘8Ñ<±VÓ<Ó<Ð<rš   c           	     ó²  <€ \        V4      p\        V4       Uu. uF  qP R V R V 2NK  	  pp\        ;QJ d    V3R lV 4       F  '       d   K   RM	  RM! V3R lV 4       4      '       d,   V Uu. uF  pSP                  P	                  V4      NK   	  up# \        W14       UU	u. uF+  w  r‰SP                  P                  W‰P                  R7      NK-  	  p
pp	SP                  P                  S! V
4       RV  24       \        W¦4       F.  w  r·V'       d   W+n
        SP                  P                  W{4       K0  	  \        V
4      # u upi u upi u up	pi )r  c              3  óZ   <"  € T F   pSP                   P                  V4      x € K"  	  R # 5ir¿   ©rþ   Úcontains©rÀ   r¶  rR  s   & €r˜   rÃ   Ú:TritonKernel.scan.<locals>.cse_multiple.<locals>.<genexpr>õ  ó#   øé € ÐLÁ°I�4—8‘8×$Ñ$ Y×/Ð/ÃùrË	  FTr  rJ  ©r¨   rÁ  r¯  rþ   r	  r"  rP  r  r  rQ  rH  rµ  rÈ   )r=  r�  rõ  r
  rÙ  r,  Ú
cache_keysr¶  r®   r  Úresult_varsrn  r8
  rR  s   &&&&        €€r˜   Úcse_multipleÚ'TritonKernel.scan.<locals>.cse_multipleò  s#  ø€ Ü�F“ˆAÜ;@À¼8ÓD¹8°a˜F " Q C r¨%¨Ó1¹8ˆJÐDß‹sÔLÁÓL�s�sŠsÔLÁÓL×LÒLÙAKÓLÁ°I˜Ÿ™Ÿ™ YÖ/ÁÑLÐLô '*¨&Ô&9ôá&9‘N�Uð —‘—‘ e·;±;�Ö?Ù&9ð ñ ð �L‰L×"Ñ"Ù�{Ó#Ð$ C¨ vÐ.ôô *-¨[Ö)EÑ%�
ßØ+0Ô(Ø—‘—‘˜YÖ3ñ *Fô ˜Ó%Ð%ùò EùâLùóó   šE	Á2$EÂ'1Eztl.associative_scan((rµ  c                óZ   € V P                   f   R # \        V P                   4      pRVR&   V# )Nrû   r¬  )r  r¿  )r  r  s   & r˜   Ú_partial_scan_shapeÚ.TritonKernel.scan.<locals>._partial_scan_shape  s*   € Ø—9‘9Ò$Ùä  §¡›O�EØ #�E˜"‘IØ �Lrš   ztriton_helpers.select_one((z1), rbase == (RBLOCK - 1), dim=-1, keep_dims=True)ztl.where(roffset > 0, z = tl.where(roffset > 0, rý  r¬  )$r·  r
  rÓ  r   rœ  rç  rr  rf  rÈ   r…  r†  rþ   r  r  r%
  r  r¶  r"  r=  r  rö  r.  r_  rJ  rˆ  rP  rq  rË   rl  rQ  rT   r®   r£   r_  rè  rH  ) rR  r
  r¥	  r�  rõ  Úbroadcasted_valuesÚaccumulatorsÚcse_computeÚcombine_helper_fnrÃ  r  r®   Úvalue_dtyper�	  Úreduced_sizerš	  Úreduced_size_strr  rE
  Úpartial_scan_varsrI
  Úpartial_scan_varÚpartial_reduce_varsÚ	accs_nextÚfull_scan_varsÚ	full_scanÚpartial_scanrD
  Úacc_nextÚpartial_reducern  r8
  s    f&&&                           @r˜   ÚscanÚTritonKernel.scan´  s.  ù€ ð ×$×$Ð$Ü Ð!<Ó=Ð=Ø×%×%Ð%Ü  Ó(Ð(ÜÑI¸×8HÒ8HÓIÓIˆØ×Ñ˜%Ô Ü�u“ˆØ�?�?ˆ?Ü Ð!KÓLÐLàÐØˆç”ÑF¹vÓF—‘ÑF¹vÓFÓFˆÜ×'Ò'¨¯©×(9Ñ(9¸4¿<¹<ÓHˆØ ×-Ñ-¨jÀ&ÓIÐØ×%Ñ%Ó'¨$×*AÑ*AÕAˆä ×/‰LˆEØŸ(™(×+Ñ+Ø—‘Ø�'˜Ô1°%Ó8Ð9¸Ð;ØØ—k‘kð	 ,ó ˆKð —H‘H×%Ñ%Ø—‘Ø" ; -¨r°$×2EÑ2EÓ2GÐ1HÈÐJØÜ˜D×0Ñ0Ó2Ó3ð	 &ó ˆEð ×%Ñ% eÔ,ä& uÓ-ˆHà×,×,Ò,Ø#×3Ñ3Ó5�Ø#&�˜RÑ Ø"Ÿh™hŸo™o°E˜oÓN�Ø%& t§y¡y°Ó'>Ð&?¸qÐ#AÐ à,1×,C×,CÐ,C™.È�Ø—	‘	×#Ñ#Ø"�m ;Ð/?Ð.@ÀÀ7À)È2ÈhÈZÐWXÐYôð ×#Ñ# K×0ñ9 0ò<	=ö	&ñ$ )Ø#¡CÐ(:Ó$;Ð#<¸CÀ¸uÀBÐGXÐFYÐYZÐ[ØØØó	
Ðð ×(×(Ð(ò!ñ ):ó#ñ ):Ð$ñ Ø1Ð2BÐ1CÐCtÐuÜ-Ð.>×.DÑ.DÓEÙ-Ð.>Ó?÷ñ
 ):ð  ð #ñ #¤5¨Ó#6¼Ð>QÓ8RÓSˆIÙ'¬¨lÓ(;Ð=NÓOˆNô 03°>ÐCTÔ/Uôñ 0VÑ+�I˜|ñ Ø,¨Y¨K°r¸,¸ÀqÐIØ&×,Ñ,Ø&×,Ñ,÷ñ
 0Vð ñ ô :=Ø˜<Ð)<ö:Ñ5�˜+ ~ð —‘×&Ñ&Ø"�mÐ#<¸X¸JÀbÈÐHXÐXYÐZöò:ð ,ˆKã%ˆJÜ˜jÔ*;×<Ò<Ü$Ø6´t¸JÓ7GÐ6HÐIóð ô $.¨eÓ#4ˆJÖ ñ &ô �[Ó!Ð!ùòE#ùós   Ë1PÍ2Pc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	rœ   r
  r
  r�  r
  Ústabler´   Ú
descendingr°   rŸ   )r    s   "r˜   r¡   r²  ;  sC   € ÷ J"ñ J"à'ðJ"ð (ðJ"ð ð	J"ð
 ðJ"ð 
!ñJ"rš   c                	ó^  a a€ S P                   '       g   \        R 4      hS P                  '       d   \        R4      h\        R S P                   4       4      pS P                  V4       \        V4      pS P                  '       d   \        R4      hS P                  '       g   \        R4      h\        P                  ! S P                  P                  S P                  4      pS P                  4       S P                  ,
          p\         ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\#        V4      \#        V4      8w  d$   \        R\#        V4       R\#        V4       24      h\%        V4       UU	u. uFB  w  r‰V! RV	 R	S P'                  4        R
2W,          \!        S P)                  4       4      R7      NKD  	  p
pp	R oVV 3R lpS P                  R,          P*                  '       g   \        R4      hS P-                  S P                  R,          4      '       d   RMRp\#        V4      ^8X  d.   RV
^ ,           R	V
^,           R	V R	V RV RV R
2pV! WÚWQ4      pM\        R4      h\/        Wâ4       F  w  ppW_n        VP2                  Vn        K  	  \!        V4      # u up	pi )r*	  r)
  c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   rü  ræ  s   & r˜   rÃ   Ú$TritonKernel.sort.<locals>.<genexpr>F  r-	  rO  z(ops.sort not supported inside ops.maskedz3ops.sort is only supported in persistent reductionsc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   r-
  r.
  s   & r˜   rÃ   rb
  Q  r/
  r‰  z)expected len(dtypes) == len(values), got r^  r  r  r  r  c                ó2   € R P                  R V  4       4      # )rå  c              3  ó*   "  € T F	  q R 2x € K  	  R# 5ir2
  rŸ   r3
  s   & r˜   rÃ   Ú1TritonKernel.sort.<locals>.csv.<locals>.<genexpr>`  r5
  r;  r6
  r7
  s   &r˜   r8
  ÚTritonKernel.sort.<locals>.csv_  r:
  rš   c           	     ó²  <€ \        V4      p\        V4       Uu. uF  qP R V R V 2NK  	  pp\        ;QJ d    V3R lV 4       F  '       d   K   RM	  RM! V3R lV 4       4      '       d,   V Uu. uF  pSP                  P	                  V4      NK   	  up# \        W14       UU	u. uF+  w  r‰SP                  P                  W‰P                  R7      NK-  	  p
pp	SP                  P                  S! V
4       RV  24       \        W¦4       F.  w  r·V'       d   W+n
        SP                  P                  W{4       K0  	  \        V
4      # u upi u upi u up	pi )r  c              3  óZ   <"  € T F   pSP                   P                  V4      x € K"  	  R # 5ir¿   r=
  r?
  s   & €r˜   rÃ   Ú:TritonKernel.sort.<locals>.cse_multiple.<locals>.<genexpr>e  rA
  rË	  FTr  rJ  rB
  )r=  rK
  rõ  r
  rÙ  r,  rC
  r¶  r®   r  rD
  rn  r8
  rR  s   &&&&        €€r˜   rE
  Ú'TritonKernel.sort.<locals>.cse_multipleb  s%  ø€ ÜÐ&Ó'ˆAÜ;@À¼8ÓD¹8°a˜F " Q C r¨%¨Ó1¹8ˆJÐDß‹sÔLÁÓL�s�sŠsÔLÁÓL×LÒLÙAKÓLÁ°I˜Ÿ™Ÿ™ YÖ/ÁÑLÐLô %(¨Ô$Côá$C‘L�Eð —‘—‘ e·;±;�Ö?Ù$Cð ñ ð �L‰L×"Ñ"Ù�{Ó#Ð$ C¨ vÐ.ôô *-¨[Ö)EÑ%�
ßØ+0Ô(Ø—‘—‘˜YÖ3ñ *Fô ˜Ó%Ð%ùò EùâLùórG
  z#last range tree must be a reductionrÓ   Úrnumelztriton_helpers.sort_with_index(z	, stable=z, descending=zUnhandled sortr¬  )r·  r
  rÓ  r   rœ  rç  rr  rf  rˆ  r…  r†  rþ   r  r  r  r¶  rÈ   r¨   rM  rö  r.  r1  r  r"  rH  ra  )rR  r
  r�  r^
  r_
  rõ  rM
  rÃ  r,  r  rK
  rE
  rl
  r=  rD
  rn  Ú	input_varr8
  s   f&&&&            @r˜   rñ  ÚTritonKernel.sort;  sw  ù€ ð ×$×$Ð$Ü Ð!<Ó=Ð=Ø×%×%Ð%Ü  Ó(Ð(ÜÑI¸×8HÒ8HÓIÓIˆØ×Ñ˜%Ô Ü�u“ˆØ�?�?ˆ?Ü Ð!KÓLÐLØ×(×(Ð(Ü Ð!VÓWÐWä×'Ò'¨¯©×(9Ñ(9¸4¿<¹<ÓHˆØ×%Ñ%Ó'¨$×*AÑ*AÕAˆç”ÑF¹vÓF—‘ÑF¹vÓFÓFˆÜˆv‹;œ#˜f›+Ô%Ü Ø;¼CÀ»K¸=ÈÌSÐQWË[ÈMÐZóð ô & fÔ-ô
ñ .‘�ñ Ø" 5 '¨¨D×,?Ñ,?Ó,AÐ+BÀ!ÐDØ•iÜ˜D×0Ñ0Ó2Ó3÷ñ
 .ð 	ñ 
ò	=ö	&ð$ ×Ñ Õ#×0×0Ð0Ü Ð!FÓGÐGØ×2Ñ2°4×3CÑ3CÀBÕ3G×HÒH‘Èhˆäˆv‹;˜!Ôà1Ð2DÀQÕ2GÐ1HÈÐK]Ð^_ÕK`ÐJað bØ�8˜2˜c˜U )¨F¨8°=ÀÀÈAðOð ñ ' tÀÓO‰Kä Ð!1Ó2Ð2ä%(¨Ö%=Ñ!ˆJ˜	Ø#(Ô Ø )× 0Ñ 0ˆJÖñ &>ô �[Ó!Ð!ùó_
s   Å;AJ)c               ó   € V ^8„  d   QhRR/# rr  rŸ   )r    s   "r˜   r¡   r²  ‡  s   € ÷ $ñ $ ^ñ $rš   c                óÌ   € V P                   '       g   R# VP                  V P                   4       V P                   P                  4        V P                  P                  4        R# )z„
Generate the output from prologue. This should be
extracted from the subgraph, which is why this is
partitioned from codegen_body.
N)r¹  r†  ra  r¸  )rR  rs  s   &&r˜   Úcodegen_prologueÚTritonKernel.codegen_prologue‡  sB   € ð �}�}ˆ}Ùà�‰�D—M‘MÔ"Ø�‰×ÑÔØ×Ñ×!Ñ!Ö#rš   c                óš  € V P                   '       g]   V P                  '       gK   V P                  '       g9   V P                  '       g'   V P                  '       g   V P
                  '       g   R# V P                   Uu. uF  qP                  '       g   K  VNK  	  ppV P                  '       Ed@   V P                  '       g   \        R4      h/ p\        V P                  4       F©  w  rEVP                  p\        P                  P!                  V\"        P$                  4      pV P'                  \(        V4      pRV 2pV P*                  P-                  V RV R24       V P.                  P1                  V\"        P$                  R+R7      W8&   K«  	  V P*                  P-                  R4       V P*                  P-                  R4       V P*                  P3                  ^R	7      ;_uu_ 4        V P5                  4       '       gx   V P                  ^ ,          p	V	P6                  R
8w  d   \        RV	P6                  : 24      hV	P6                  p
V P*                  P-                  V
 RV	P8                   RV
 R24       V P*                  P;                  V P                   4       V P*                  P=                  R.4       V P*                  P;                  V P                  4       V P*                  P;                  V P                  4       V P*                  P;                  V P                  4       V P*                  P;                  V P
                  4       V P>                  '       d   V P*                  P-                  R4       \        V P                  4       EF	  w  rEVP@                  pRV 2p\        PB                  ! VP                  \"        P$                  4      p\E        VP                  4      pV P.                  PG                  V P*                  V RV R2VPH                  R,R7      p^ RI%pVPL                  PN                  PQ                  V RV P*                  4      ;_uu_ 4        V! W8,          V4      pRRR4       V P*                  P-                  V RX 24       EK  	  RRR4       \S        \U        V P                  4      4       F%  pV P*                  P-                  RV RV R24       K'  	  EMàV PV                  '       Ed:   \U        V4      ^ 8”  Ed)   \        V4       EF+  w  ppV P*                  P3                  VR	7      ;_uu_ 4        VP6                  pV PX                  '       d   RMRpV PX                  '       d   RMV R2p\"        PZ                  P\                  '       d   \_        4       R-8”  d   RpMRpV P*                  P-                  RV RV RV RVPa                  4        R V R!24       RRR4       V P*                  P3                  V^,           R	7      ;_uu_ 4        V Pc                  WP*                  4       RRR4       EK.  	  V P*                  P3                  \U        V4      R	7      ;_uu_ 4        V Pe                  V P*                  4       V P*                  P;                  V P                   4       V P*                  P;                  V P                  4       V P*                  P;                  V P                  4       V P*                  P;                  V P                  4       RRR4       \g        . \        V4      O4       EFì  w  ppV P*                  P3                  V^,           R	7      ;_uu_ 4        V Ph                  VPj                  ,          Pm                  4        EFL  w  ppV\U        V4      ^,
          8  d—   VV^,           ,          pV Ph                  VPj                  ,          pVV9   dc   VV,          p\n        Pq                  V4      p\s        VPt                  V4      p\w        VV4       UUu. uF  w  ppVVV,          ,
          NK  	  ppp\x        ;QJ d    R" V 4       F  '       d   K   R#M	  R$M! R" V 4       4      '       d   Kð  V P*                  P-                  \{        V P|                  V,          V R%V R\~        P€                  Pƒ                  V4       R&24      4       EKO  	  RRR4       V P.                  P…                  V P†                  4       VP‰                  4        EKï  	  M”V P*                  P;                  V P                   4       V P*                  P;                  V P                  4       V P*                  P;                  V P                  4       V P*                  P;                  V P                  4       V P*                  P;                  V P                  4       V PX                  '       do   V P                  '       g   V P
                  '       dK   V PŠ                   R'2pV P*                  P;                  R(V R)2R$R*7       V PŒ                  P�                  4        V P                  '       g&   V P*                  P;                  V P
                  4       V P                   P‘                  4        V P                  P‘                  4        V P                  P‘                  4        V P                  P‘                  4        V P                  P‘                  4        V P
                  P‘                  4        R# u upi   + '       g   i     ELæ; i  + '       g   i     ELÍ; i  + '       g   i     EL�; i  + '       g   i     EK~  ; i  + '       g   i     EL}; iu uppi   + '       g   i     ELÊ; i).zØ
Concat output code from index_code, loads, compute, stores,
suffix into self.body.

For pointwise kernels, this is called just once at the end.

For reduction kernels, this generates a loop over the reduction
axis.
Nz1Mix order reduction requires persistent reductionÚaccumz = tl.full([R0_BLOCK], z, tl.float32)[None, :]r  z/split_size = min(RSPLIT_SIZE, xnumel - xoffset)z@for _ in tl.range(0, split_size, XBLOCK, num_stages=NUM_STAGES):)rñ   rª  zexpected entry prefix 'x', got zmask = ú < r‰  zxindex += XBLOCKzxoffset += XBLOCKrÎ  z, 0)r  rJ  z&tl.store(ws_ptr + (tl.program_id(0) + z3 * tl.num_programs(0)) * r0_numel + r0_index, accumz
, r0_mask)Úrsplit_startr7  Ú
rsplit_endz, num_stages = 2rŒ   zfor zoffset in tl.range(r  rõ   r
  c              3  óž   "  € T FC  p\         P                  P                  P                  V\        P
                  ! ^ 4      4      x € KE  	  R# 5ir+  )rX   r­  r§  r®  r¤   r¦   )rÀ   rñ   s   & r˜   rÃ   Ú,TritonKernel.codegen_body.<locals>.<genexpr>*  sC   é € ð ñ +6 ô ŸG™G×,Ñ,×DÑDØ &¬¯ª°aÓ(8÷ð ó +6ùs   ‚AAFTz = tl.advance(r  z + tl.program_id(1)zR
                if HAS_RSPLIT:
                    triton_helpers.x_grid_barrier(z)
                rä	  )rû   ÚR0_BLOCK)rz
  )r4  rœ   )IÚindexing_coderA  rÛ  r  rº  r»  rœ  r�  Úmix_order_reductionrˆ  r
  rM  r¥  r”   r$   r  r~	  r×   rÑ  r`	  rk   rl  rQ  rþ   r  rï  rŠ  r²  r   r†  Ú
writelinesrÜ  r  r	  r™   r  r®   ÚunittestÚmockÚpatchrž   rÁ  r¨   r·  rÓ  rˆ  r‰  r   rB  r‘  r•  rÀ  rÁ  r,  rŠ  rð   r  r   r‰  r"  r¯  r`   rÀ  rX   rý   r$  r`  r¼  Úcache_clearr„  r…  rA  ra  ) rR  r  Ú
loop_treesÚaccumname2varrë  Úpartial_accumr”   r  r   rú  rª  r  r¥	  Útriton_reduction_functionÚnewvalr~
  r¦	  Úlevelr²  Ú
loop_startÚloop_endÚ
num_stagesr�  ÚadvancementÚ	prev_treeÚprev_advancementsÚprev_advancementÚ
prev_blockÚprev_num_iterÚcurÚprevÚsem_ptrs    &                               r˜   Úcodegen_bodyÚTritonKernel.codegen_body”  sR	  € ð ××ÐØ�z�zˆzØ�{�{ˆ{Ø�|�|ˆ|Ø×%×%Ð%Ø×#×#Ð#áà'+×'7Ò'7ÓHÑ'7˜t¿<½<—d�dÑ'7ˆ
ÐHØ×#×#Ñ#Ø×,×,Ð,Ü$ØGóð ð ˆMÜ&/°×0MÑ0MÖ&NÑ"�Ø!.×!=Ñ!=�ÜŸ,™,×:Ñ:¸>Ì5Ï;É;ÓW�Ø×3Ñ3´MÀ7ÓK�Ø˜s˜e�}�Ø—	‘	×#Ñ#Ø�fÐ3°G°9Ð<RÐSôð '+§h¡h×&7Ñ&7Ø¤§¡Ð3Dð '8ó '�Ó#ñ 'Oð �I‰I×ÑÐ QÔRØ�I‰I×ÑØRôð —‘×!Ñ!¨Ð!×+Õ+à×/Ñ/×1Ò1Ø ×,Ñ,¨QÕ/�EØ—|‘| sÔ*Ü,Ø=¸e¿l¹lÑ=MÐNóð ð Ÿ™�AØ—I‘I×'Ñ'¨1¨#¨W°U·Z±Z°LÀÀAÀ3ÀeÐ(LÔMØ—	‘	× Ñ  ×!3Ñ!3Ô4Ø—	‘	×$Ñ$à*ðôð
 —	‘	× Ñ  §¡Ô,Ø—	‘	× Ñ  §¡Ô.Ø—	‘	× Ñ  §¡Ô-Ø—	‘	× Ñ  ×!5Ñ!5Ô6à—=—=�=Ø—I‘I×'Ñ'Ð(;Ô<ô +4°D×4QÑ4Q×*RÑ&�CØ'×-Ñ-�CØ" 3 %˜=�DÜ!#×!<Ò!<Ø%×4Ñ4´e·k±kó"�Jô 1NØ%×4Ñ4ó1Ð-ð "ŸX™X×.Ñ.ØŸ	™	Ø4Ð5°Q°s°e¸4Ð@Ø!Ÿi™iØ+ð	 /ó �Fó $à!Ÿ™×,Ñ,×3Ñ3°D¸)ÀTÇYÁY×OÕOÙ",Ø)Õ/Ø"ó#˜÷ Pð
 —I‘I×'Ñ'¨4¨&°°G°9Ð(=×>ñ- +S÷3 ,ôb œS ×!>Ñ!>Ó?Ö@�Ø—	‘	×#Ñ#Ø<¸S¸EÐAtÐuxÐtyð  zDð  Eöó Að
 ×"×"Ñ"¤s¨:£¸Õ':ä(¨×4‘��tØ—Y‘Y×%Ñ%¨UÐ%×3Õ3Ø!Ÿ[™[�FØ37×3M×3MÐ3M¡ÐSV�Jà(,×(B×(BÐ(B™È6È(ÐRWÐHXð ô
 —}‘}×(×(Ð(Ô-?Ó-AÀFÔ-JØ%7™
à%'˜
Ø—I‘I×'Ñ'Ø˜v˜hÐ&9¸*¸ÀRÈÀzÐQSÐTZ×T`ÑT`ÓTbÐScÐchÐisÐhtÐtvÐwô÷ 4ð —Y‘Y×%Ñ%¨U°Q­YÐ%×7Õ7Ø×8Ñ8¸¿y¹yÔI÷ 8Ò7ñ!  5ð( —‘×!Ñ!¬¨Z«Ð!×9Õ9Ø×.Ñ.¨t¯y©yÔ9Ø—	‘	× Ñ  ×!3Ñ!3Ô4Ø—	‘	× Ñ  §¡Ô,Ø—	‘	× Ñ  §¡Ô.Ø—	‘	× Ñ  §¡Ô-÷ :ô  (Ð(@¬)°JÓ*?Ð(@×A‘��tØ—Y‘Y×%Ñ%¨U°Q­YÐ%×7Õ7à26×2KÑ2KØŸ	™	õ3ç‘e“gó3Ñ.˜	 ;ð !¤3 z£?°QÕ#6Ô6Ø(2°5¸1µ9Õ(=˜IØ04×0IÑ0IØ )§¡õ1Ð-ð  )Ð,=Ô=Ø3DÀYÕ3OÐ 0Ü-:×-IÑ-IÈ)Ó-T 
Ü07¸	¿¹ÈÓ0T ô 69¸ÐFVÔ5Wô/"á5W©	¨¨Tð %(¨$°Õ*>×$>Ð$>Ù5Wð !,ñ /"÷ ›3ñ ñ +6ó	Ÿ3Ÿ3š3ñ ñ +6ó	÷ ò ñ %àŸ	™	×+Ñ+Ü(Ø $× 8Ñ 8¸Õ CØ#, +¨^¸I¸;ÀbÌÏÉ×I^ÑI^Ð_jÓIkÐHlÐlmÐ nó÷ñ;3÷ 8ðN —‘×#Ñ# D×$:Ñ$:Ô;Ø× Ñ ×"òS  BðV �I‰I×Ñ˜T×/Ñ/Ô0Ø�I‰I×Ñ˜TŸZ™ZÔ(Ø�I‰I×Ñ˜TŸ\™\Ô*Ø�I‰I×Ñ˜TŸ[™[Ô)Ø�	‰	×Ñ˜×/Ñ/Ô0Ø×%×%Ð%Ø×"×"Ð" d×&:×&:Ð&:à×-Ñ-Ð.Ð.AÐBˆGØ�I‰I×Ñð3à3:°)ð <ðð ð ô ð ×6Ñ6×BÑBÔDØ×'×'Ð'Ø�I‰I×Ñ˜T×1Ñ1Ô2Ø×Ñ× Ñ Ô"Ø�
‰
×ÑÔØ�‰×ÑÔØ�‰×ÑÔØ×Ñ×$Ñ$Ô&Ø×Ñ×"Ñ"Ö$ùò[ I÷@ P×OÐOú÷U ,×+Ð+ú÷r 4×3Ð3ú÷ 8×7Ñ7ú÷ :×9Ð9üó0/"÷ 8×7Ð7úsœ   Á=m	Âm	Ç+E4m"Í Dm"Ñ!mÑ1-m"Õ	4m6Õ>&m6Ö%Am6Ø%n
Ù;B0nÝ;Cn9à<n3án9á&n9á:n9âA#n9ímí	m"í"m3	í6nî
nîn0	î3n9î9o
c               ó   € V ^8„  d   QhRR/# rð  rŸ   )r    s   "r˜   r¡   r²  W  s   € ÷ ñ ¨Yñ rš   c                	óÊ  € . pV P                  4       '       EdJ   . pV P                  R V. 4       V EF-  p\        V\        4      '       d   VP	                  \        V4      4       K6  \        V\        4      '       d\   \        P                  P                  P                  VP                  V P                  R7      pVP	                  \        V4      4       K§  \        V\        P                  4      '       dS   \        P                  P                  P                  VV P                  R7      pVP	                  \        V4      4       EK  \        R\!        V4       24      h	  V# )rŒ   ©r°  z!Unsupported numel argument type: )rš  Úadd_numel_to_call_argsr£   r†  r_  rç   r{   rX   r­  r§  Úoptimization_hint_with_overrideÚ
inner_exprr°  r¤   r¥   r2  rè  )rR  rÇ   Ú
numel_argsrÁ   Úhints   &    r˜   Úkernel_benchmark_extra_argsÚ(TritonKernel.kernel_benchmark_extra_argsW  s  € ØˆØ×Ñ×!Ó!Ø+-ˆJØ×'Ñ'¨¨J¸Ô;Ü!�Ü˜c¤3×'Ò'Ø—K‘K¤ C£Ö)Ü ¤_×5Ò5ÜŸ7™7×+Ñ+×KÑKØŸ™Ø&*×&8Ñ&8ð Ló �Dð —K‘K¤ D£	Ö*Ü ¤U§Z¡Z×0Ò0ÜŸ7™7×+Ñ+×KÑKØØ&*×&8Ñ&8ð Ló �Dð —K‘K¤ D£	×*ä$Ð'HÌÈcËÈÐ%TÓUÐUñ! "ð" ˆrš   c               ó    € V ^8„  d   QhRRRR/# )rœ   Únum_gbzfloat | Noner°   ra   rŸ   )r    s   "r˜   r¡   r²  o  s   € ÷ {ñ {¨|ð {Àñ {rš   c                óÎ  € \        4       pV P                  P                  4       w  r4rVVP                  . RO4       VP	                  4       ;_uu_ 4        \
        P                  ! 4       p. p\        WE4       EFO  w  ršR\        V4       2p\        P                  P                  V	4      pV'       dÎ   \        P                  P                  P                  VP                  4       V P                  R7      p\        P                  P                  P                  VP!                  4       V P                  R7      pVP#                  V RV RV R\%        VP'                  4       4       RVP)                  4        R2
4       EM6V	\        P                  P*                  9   dç   \        P                  P*                  V	,          p\        P                  P                  P                  VP-                  4       V P                  R7      p\        P                  P                  P                  VP/                  4       V P                  R7      pVP#                  V RV RV R\%        VP0                  4       RVP2                   R2
4       EM1\5        V
\6        4      '       dj   \        P                  P                  P9                  V
P:                  V P                  R7      pR	V
P<                  9   d   ^ pVP#                  V R
V 24       M²\5        V
\>        4      '       d�   \        P                  PA                  4       p\        P                  P                  P9                  V
P                  V P                  R7      pVP#                  V RV R\%        V4       RV
P2                   R24       M\C        RV	 24      hVPE                  V4       EKR  	  VPG                  V PI                  4       4       VP#                  RRPK                  V4       R24       RRR4       VP                  . RO4       \        P                  PA                  4       p\M        VPN                  4      w  ppVP	                  4       ;_uu_ 4        V'       d   VP#                  V4       VP#                  R\        P                  PP                  PS                  V4       R24       VP	                  4       ;_uu_ 4        VP#                  \        P                  PP                  PU                  V4      4       \W        VPN                  4      pVP#                  V RV R24       VP#                  \Y        \Z        P\                  4       RV R24       RRR4       RRR4       VP                  . RO4       VP	                  4       ;_uu_ 4        V'       d   VP#                  V4       VP#                  R\        P                  PP                  PS                  V4       R24       VP	                  4       ;_uu_ 4        VP#                  \        P                  PP                  PU                  V4      4       VP#                  R\Y        \Z        P\                  4       R24       RRR4       RRR4       VP                  . RO4       VP	                  4       ;_uu_ 4        VP#                  R4       VP#                  R4       VP#                  R4       VP#                  R\        P                  PA                  4       P^                   R24       VP#                  RV 24       VP#                  R4       VP#                  R4       RRR4       V#   + '       g   i     ELk; i  + '       g   i     EL; i  + '       g   i     EL!; i  + '       g   i     EL/; i  + '       g   i     EL;; i  + '       g   i     T# ; i) a�  
Generates Python code for benchmarking this Triton kernel.
- Creates example inputs (random tensors, constants, sizes).
- Runs the kernel on the current GPU/stream.
- Prints runtime (ms) and throughput (GB/s) using `num_gb`.
Args:
    num_gb (float): The number of gigabytes to use for throughput calculation.
Returns:
    IndentedBuffer: A buffer containing the generated Python benchmark code.
rŒ   Úarg_r˜
  z = rand_strided(r  z
, device='z	', dtype=r  r±  rJ  z = torch.zeros(z*Don't find the buffer or const tensor for r
  r=  Nzwith r]  z = get_raw_stream(z.run(*args, stream=z.benchmark_all_configs(*args)z<from torch._inductor.runtime.benchmarking import benchmarkerzargs = get_args()z7ms = benchmarker.benchmark(lambda: call(args), device='z
', rep=40)z	num_gb = zgb_per_s = num_gb / (ms / 1e3)z<print(f"{ms:.3f}ms    {num_gb:.3f}GB    {gb_per_s:.2f}GB/s"))rŒ   rŒ   zdef get_args():)Ú
r¤
  zdef call(args):)r¤
  r¤
  z def benchmark_all_configs(args):)r¤
  r¤
  zif __name__ == '__main__':)0ra   rÇ   Úpython_argdefsr}
  rï  r‹  r½  r"  r  rX   r­  rd  r§  Ú optimization_hints_with_overrideÚget_sizer°  Ú
get_striderQ  rA   Ú
get_devicer  Ú	constantsrd  rÉ  Údevicer®   r£   rg   rš
  r�   r   ri   r¿  ÚKeyErrorr_  Úextendrž
  rq  r@   rK  Ú
device_opsÚdevice_guardÚ
set_devicerB   rç   rK   ÚKERNEL_NAMErè  )rR  r¡
  rÊ  Ú_argdefsÚ	call_argsr#
  rT  Úname_cntrP  Úarg_nameÚarg_sigÚvar_namerg  rd  rÉ  Úconst_tensorÚsymval_hintr«
  r½  r€  Úcoor_preamblerK  Ústream_names   &&                     r˜   Úcodegen_kernel_benchmarkÚ%TritonKernel.codegen_kernel_benchmarko  s…  € ô  Ó!ˆØ,0¯I©I×,DÑ,DÓ,FÑ)ˆ˜Yà×ÑÒ5Ô6Ø�]‰]�_�_Ü —’Ó(ˆHØˆIÜ%(¨×%>Ñ!�Ø!¤$ x£.Ð!1Ð2�Ü—g‘g×,Ñ,¨XÓ6�ßÜŸ7™7×+Ñ+×LÑLØŸ™›Ø&*×&8Ñ&8ð Mó �Dô ŸW™W×-Ñ-×NÑNØŸ™Ó(Ø&*×&8Ñ&8ð Oó �Fð ×$Ñ$Ø#˜*Ð$4°T°F¸"¸V¸HÀJÌÐ_b×_mÑ_mÓ_oÓOpÐNqÐqzÐ{~÷  |Iñ  |Ió  |Kð  {Lð  LMð  Nöð ¤§¡×!2Ñ!2Ô2ä#$§7¡7×#4Ñ#4°XÕ#>�LÜŸ7™7×+Ñ+×LÑLØ$×)Ñ)Ó+Ø&*×&8Ñ&8ð Mó �Dô ŸW™W×-Ñ-×NÑNØ$×+Ñ+Ó-Ø&*×&8Ñ&8ð Oó �Fð ×$Ñ$Ø#˜*Ð$4°T°F¸"¸V¸HÀJÌÐ_k×_rÑ_rÓOsÐNtÐt}ð  K÷  Qñ  Qð  ~Rð  RSð  Töô   ¬×1Ò1Ü"#§'¡'×"2Ñ"2×"RÑ"RØŸ™Ø&*×&8Ñ&8ð #Só #�Kð %¨¯©Ô4Ø&'˜Ø×$Ñ$¨ z°°[°MÐ%BÕCÜ ¬×6Ò6ÜŸW™W×@Ñ@ÓB�FÜŸG™G×,Ñ,×LÑLØŸ™°T×5GÑ5Gð Mó �Eð ×$Ñ$Ø#˜* O°E°7¸*Ä_ÐU[ÓE\ÐD]Ð]fÐgn×gtÑgtÐfuÐuvÐwõô #ØDÀXÀJÐOóð ð × Ñ  ×*ñk &?ðl ×Ñ˜T×=Ñ=Ó?Ô@Ø×Ñ˜w t§y¡y°Ó';Ð&<¸AÐ>Ô?÷u ðx 	×ÑÒ9Ô:ÜŸ™×<Ñ<Ó>ˆÜ8¸×9MÑ9MÓNÑˆ�uØ�]‰]�_�_ßØ× Ñ  Ô/Ø×Ñ˜u¤Q§W¡W×%7Ñ%7×%DÑ%DÀUÓ%KÐ$LÈAÐNÔOØ—‘—•Ø× Ñ Ü—G‘G×&Ñ&×1Ñ1°%Ó8ôô 2°.×2FÑ2FÓG�Ø× Ñ  K =Ð0BÀ5À'ÈÐ!KÔLØ× Ñ Üœ;×2Ñ2Ó3Ð4Ð4GÈÀ}ÐTUÐVô÷ !÷	 ð 	×ÑÒJÔKØ�]‰]�_�_ßØ× Ñ  Ô/Ø×Ñ˜u¤Q§W¡W×%7Ñ%7×%DÑ%DÀUÓ%KÐ$LÈAÐNÔOØ—‘—•Ø× Ñ Ü—G‘G×&Ñ&×1Ñ1°%Ó8ôð × Ñ Øœc¤+×"9Ñ"9Ó:Ð;Ð;XÐYô÷	 !÷	 ð 	×ÑÒDÔEØ�]‰]�_�_Ø×ÑØNôð ×Ñ˜RÔ à×ÑÐ0Ô1Ø×ÑØIÌ!Ï'É'×JmÑJmÓJo×JtÑJtÐIuÐuð  Aôð ×Ñ˜y¨¨Ð1Ô2Ø×ÑÐ=Ô>Ø×ÑØNô÷ ð  ˆ÷Y �_ˆ_ú÷F !—�ú÷	 �_ˆ_ú÷( !—�ú÷	 �_ˆ_ú÷ Ž_ð  ˆúsf   ÁN:]/Ñ6A.^Ó$B^	Õ7^Ö2A.^?Ø A%^+	Ú^?Û B%_Ý/^ 	Þ^Þ	^Þ^(	Þ+^<Þ6	^?Þ?_	ß_$	c                	óš   € \         P                  ! R 4      P                  \        P                  P
                  P                  R4      4      # )zp
            from torch._dynamo.testing import rand_strided
            {}
            import torch
            Úget_raw_stream)ÚtextwrapÚdedentr    rX   r­  r®
  Úimport_get_raw_stream_asrQ  s   &r˜   Úimports_for_benchmark_kernelÚ)TritonKernel.imports_for_benchmark_kernelì  s=   € ô �Šðó
÷ ‰&”—‘×#Ñ#×<Ñ<Ð=MÓNÓ
Oð	Prš   c                	óà   € V P                   '       d   R # V P                  '       d   R# V P                  '       d    V P                  '       g   \	        R4      hR# V P                  '       d   R# R# )r‘  rÓ  r*	  rˆ  r¸	  Ú	pointwise)r‘  rÓ  rˆ  r·  r
  rQ  s   &r˜   Ú_get_heuristicÚTritonKernel._get_heuristic÷  sY   € Ø××ÐÙ!Ø×'×'Ð'Ù*Ø×&×&Ð&Ø×(×(Ð(Ü$Ð%@ÓAÐAÙ)Ø×"×"Ð"ÙÙrš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   r²    s   € ÷ %"ñ %"¨#ñ %"rš   c                	óp  € \        4       pVP                  R 4        ^ RIpVP                  R4       \	        4       ;p'       d   VP                  V4       VP                  R4       \        P                  P                  '       d   VP                  R4       VP                  4       #   \         d     L‚i ; i)zP
            import triton
            import triton.language as tl
            NzU
               import triton.language.extra.tlx as tlx  # noqa: F401
               a'  
            from torch._inductor.runtime import triton_helpers, triton_heuristics
            from torch._inductor.runtime.triton_helpers import libdevice, math as tl_math
            from torch._inductor.runtime.hints import AutotuneHint, ReductionHint, TileHint, DeviceProperties
            z¥
                import triton.profiler as proton
                import triton.profiler.language as pl
                pl.enable_semantic('triton')
                )
ra   r†  Útriton.language.extra.tlxÚImportErrorrî   rQ  r#   rí   Úproton_profilingr"
  )rÚ   Úimportsrí   Ú	attr_descs   &   r˜   Úgen_common_triton_importsÚ&TritonKernel.gen_common_triton_imports  s­   € ô !Ó"ˆØ�‰ðô	
ð		Û,à�N‰Nðôô 3Ó4Ð4ˆ9Ö4Ø×Ñ˜iÔ(à�‰ðô	
ô �=‰=×)×)Ð)Ø�N‰Nðôð ×ÑÓ!Ð!øô+ ô 	Ùð	ús   �B' Â'B5Â4B5c               ó   € V ^8„  d   QhRR/# )rœ   r°   r7   rŸ   )r    s   "r˜   r¡   r²  .  s   € ÷ 
ñ 
 :ñ 
rš   c                	ó„   € R \         P                  '       * RV P                  4       R\         P                  P                  /# )Úenable_fp_fusionÚ
launch_pdlÚdisable_ftz)r#   Úemulate_precision_castsrR  r×  rÖ
  rÃ  s   &r˜   Útriton_meta_commonÚTritonKernel.triton_meta_common-  s;   € ð ¤F×$BÑ$BÔ BØ˜#×1Ñ1Ó3Øœ6×0Ñ0×<Ñ<ð
ð 	
rš   c                	óœ  € / R \         P                  P                  P                  4       bR\        P
                  bR\        P                  bR\        P                  P                  bR\        P                  bR\        P                  bR\        P                  bR\        P                  bR\        P                  bR	\        P                  bR
\        P                  P                  bR\        P                  P                   bR\        P                  P"                  bR\        P$                  ;'       g    \        P&                  bR\        P&                  bR\        P(                  P*                  bR\        P                  P,                  bR\        P                  P.                  /Cp\        P0                  '       d   \         P2                  ! 4       VR&   \         P4                  P6                  e   RVR&   \        P8                  ! 4       '       d   RVR&   \        P:                  '       dM   \        P:                  VR&   \        P<                  VR&   \        P>                  VR&   \        P@                  VR&   \        PB                  '       d:   \        PB                  VR&   \        PD                  VR&   \        PF                  VR&   V# )Úbackend_hashÚassert_indirect_indexingÚautotune_local_cacheÚautotune_pointwiseÚautotune_remote_cacheÚforce_disable_cachesÚdynamic_scale_rblockÚincremental_autotuneÚmax_autotuneÚmax_autotune_pointwiseÚmin_split_scan_rblockÚspill_thresholdÚstore_cubinr<  Úbatch_invariantr>  Ú&mix_order_reduction_allow_multi_stagesÚdynamic_disable_pipeliningÚ$are_deterministic_algorithms_enabledTÚis_hipr‡  Úprofile_bandwidthÚprofile_bandwidth_regexÚprofile_bandwidth_outputÚ/profile_bandwidth_with_do_bench_using_profilingÚcoordinate_descent_tuningÚ coordinate_descent_search_radiusÚ'coordinate_descent_check_all_directions)$r×   r&   Ú_tritonÚtriton_hash_with_backendr#   rÜ
  rÝ
  rí   rÞ
  rß
  rà
  rá
  râ
  rã
  rä
  rå
  ræ
  rç
  r<  rè
  r=  r>  ré
  rê
  Ú*write_are_deterministic_algorithms_enabledrë
  rˆ  r‰  r‡  rí
  rî
  rï
  rð
  rñ
  rò
  ró
  )rÚ   Úinductor_metas   & r˜   Úinductor_meta_commonÚ!TritonKernel.inductor_meta_common5  s…  € ð
ØœEŸK™K×/Ñ/×HÑHÓJð
à&¬×(GÑ(Gð
ð #¤F×$?Ñ$?ð
ð !¤&§-¡-×"BÑ"Bð	
ð
 $¤V×%AÑ%Að
ð #¤F×$?Ñ$?ð
ð #¤F×$?Ñ$?ð
ð #¤F×$?Ñ$?ð
ð œF×/Ñ/ð
ð %¤f×&CÑ&Cð
ð $¤V§]¡]×%HÑ%Hð
ð œvŸ}™}×<Ñ<ð
ð œ6Ÿ=™=×4Ñ4ð
ð œV×1Ñ1×KÐK´V×5KÑ5Kð
ð œv×5Ñ5ð
ð  -¬f×.AÑ.A×.`Ñ.`ð!
ð" 5´f·m±m×6jÑ6jð#
ð$ )¬&¯-©-×*RÑ*Rñ%
ˆô* ×<×<Ð<ä×:Ò:Ó<ð Ð@ÑAô �=‰=×ÑÒ(Ø&*ˆM˜(Ñ#Ü×Ò×ÒØ)-ˆM˜+Ñ&Ü×#×#Ð#Ü17×1IÑ1IˆMÐ-Ñ.Ü7=×7UÑ7UˆMÐ3Ñ4Ü8>×8WÑ8WˆMÐ4Ñ5ä×FÑFð ÐKÑLô ×+×+Ð+ä×0Ñ0ð Ð5Ñ6ô ×7Ñ7ð Ð<Ñ=ô ×>Ñ>ð ÐCÑDð Ðrš   c               ó   € V ^8„  d   QhRR/# )rœ   r°   r½  rŸ   )r    s   "r˜   r¡   r²  h  s   € ÷ bñ b¨.ñ brš   c                ó^  aa€ RV P                   RV P                  RV P                  RV P                  RV P                  R\        V P                  4      /pV P                  '       d   V P                  VR&   \        P                  '       g!   \        P                  P                  '       d$   V P                  ;'       g    V P                  VR&   V P                  '       d   V P                  VR	&   V P                   '       d   R
VR&   V P"                  '       d   R
VR&   V P$                  '       d   V P$                  VR&   V P&                  e   V P&                  VR&   V P(                  e   V P(                  VR&   V P*                  '       d   V P,                  VR&   V P/                  4       ;pe   W!R&   V P0                  '       d   R
VR&   V P3                  4       ;pe   W!R&   \        P4                  '       g-   \        P6                  '       g   \        P8                  '       d    V P;                  4       R,          pVe   W1R&   \        P4                  '       g   \        P8                  '       d   V P=                  4       pVe   WAR&   V P>                  '       Edl   V P@                  PC                  4       w   rVp\E        R V 4       4      o/ oV P,                  '       d�   V PF                   F|  pVPH                  '       g   K  VPJ                  PM                  4        R2pVS9  g   K=   V PO                  VPP                  4      p	V PR                  '       d   \U        V	^4      p	V	SV&   K~  	  VV3R lp
R p/ pV P>                  P[                  4        Fm  w  rÞVP\                   Uu. uF
  qú! V4      NK  	  ppRTRVP^                   Uu. uF
  qû! V4      NK  	  upRVP`                   Uu. uF
  qû! V4      NK  	  up/WÍ&   Ko  	  WÁR&   V#   \V        \X        3 d     EK2  i ; iu upi u upi u upi )zs
Used by both standalone codegen_kernel() and ComboKernel.combo_grid_meta()
(which calls this on each sub_kernel).
r±  rÜ  Únum_loadÚ	num_storeÚnum_reductionrÐ  ÚRSPLIT_SIZEÚ"has_loadstore_with_contiguous_rdimr’  TrÜ  rà  r¡  Ú
min_xblockÚ
min_rblockrˆ  r3   Úadd_persistent_rblockr‡  g    eÍÍAÚkernel_num_gbÚkernel_flopc              3  ób   "  € T F%  p\        VR 4      '       g   K  VP                  x € K'  	  R# 5i)r   N)rë   r   )rÀ   rÁ   s   & r˜   rÃ   Ú8TritonKernel.inductor_meta_per_kernel.<locals>.<genexpr>Ÿ  s"   é € ð 'Ù$-˜S´¸¸f×1E”�—–£Iùs   ‚/›/rõ   c                ó–   <€ \        V 4      pVS9   d   V# VS9   d
   SV,          #  \        V 4      #   \        \        3 d    Tu # i ; ir¿   )rç   r†  Ú	TypeErrorr2  )rb  Ús_strÚfixed_blocksÚsig_arg_namess   & €€r˜   Ú_resolve_block_dimÚATritonKernel.inductor_meta_per_kernel.<locals>._resolve_block_dim°  sS   ø€ Ü˜A›�Ø˜MÔ)Ø �LØ˜LÔ(Ø'¨Õ.Ð.ð!Ü˜q›6�MøÜ!¤:Ð.ô !Ø ’Lð!ús   §
2 ²AÁAc                ó^   €  \        V 4      #   \        \        3 d    \        T 4      u # i ; ir¿   )r†  r	  r2  rç   )rb  s   &r˜   Ú_resolve_tensor_dimÚBTritonKernel.inductor_meta_per_kernel.<locals>._resolve_tensor_dim»  s-   € ð"Ü˜q›6�MøÜ!¤:Ð.ô "Ü˜q›6’Mð"ús   ‚
 �,«,r�  r  r”  rÂ  )1r±  rÜ  rü
  rý
  rþ
  ÚsetrÐ  r|
  Úrsplit_sizer#   r<  r=  r>  r×  rq  r’  rÜ  rà  r¡  r  r  rÓ  rˆ  Ú$_get_native_matmul_persistent_rblockr  ry  Úbenchmark_kernelrí
  Úbenchmark_combo_kernelÚestimate_kernel_num_bytesÚestimate_flopsrÂ  rÇ   r¥
  r   rœ  r1  r²  rB  rŠ  r‰  r-  r�   r	  r2  rŠ  r�  r  r”  )rR  r³  rJ  r¡
  ÚflopsrT  r#
  ÚrtÚ
block_namer�  r  r  ÚresolvedÚinnerÚoptsrb  rÑ  r  r  s   &                @@r˜   Úinductor_meta_per_kernelÚ%TritonKernel.inductor_meta_per_kernelh  s»  ù€ ð ˜Ÿ™Ø × 5Ñ 5Ø˜Ÿ™Ø˜Ÿ™Ø˜T×/Ñ/àœc $×"5Ñ"5Ó6ð
ˆð ×#×#Ð#Ø!%×!1Ñ!1ˆC�ÑÜ××Ð¤6×#6Ñ#6×#U×#UÐ#Uà×2Ñ2÷ 7ð 7Ø×6Ñ6ð Ð4Ñ5ð ×#×#Ð#Ø)-×)AÑ)AˆCÐ%Ñ&Ø�=�=ˆ=Ø"ˆC�
‰OØ××ÐØ%)ˆCÐ!Ñ"Ø××ÐØ#'×#5Ñ#5ˆC�Ñ Ø�?‰?Ò&Ø $§¡ˆC�ÑØ�?‰?Ò&Ø $§¡ˆC�ÑØ×%×%Ð%Ø*.×*CÑ*CˆCÐ&Ñ'Ø×?Ñ?ÓAÐAˆFÒNØ5;Ð1Ñ2Ø×%×%Ð%Ø+/ˆCÐ'Ñ(Ø×-Ñ-Ó/Ð/ˆFÒ<Ø'-Ð#Ñ$ä×#×#Ð#Ü×'×'Ð'Ü×,×,Ð,à×3Ñ3Ó5¸Õ;ˆFØÒ!Ø'-�OÑ$Ü×"×"Ð"¤f×&C×&CÐ&CØ×'Ñ'Ó)ˆEØÒ Ø%*�MÑ"Ø×(×(Ñ(Ø!%§¡×!9Ñ!9Ó!;ÑˆAˆq˜QÜ&ñ 'Ù$-ó'ó ˆMð ,.ˆLØ×(×(Ð(Ø×*Ô*�BØ——’Ø(*¯	©	¯©Ó(9Ð':¸%Ð%@˜
Ø%¨]Ö:ð%Ø&*×&JÑ&JÈ2Ï8É8Ó&T Ø#'×#8×#8Ð#8Ü*-¨c°2«, CØ;> ¨ZÓ 8ñ +ö	!ò"ð ˆHØ#×<Ñ<×BÑBÖD‘�Ø7;×7GÒ7GÓHÑ7G°!Ð*¨1Ö-Ñ7G�ÐHà! 4Ø¸d¿jºjÓI¹j¸Ð1°!Ö4¹jÑIØÀÇÂÓMÁ¸1Ð 3°AÖ 6ÁÑMð#�“ñ  Eð /7Ð*Ñ+Øˆ
øô; %.¬zÐ#:ô %Û $ð%üò, Iùò JùÚMs*   Ì(,PÍPÎ#P ÏP%Ï'P*ÐPÐPc               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²  Í  s   € ÷ 0ñ 0 tñ 0rš   c                	óÆ  € V P                   P                  4       ;'       d    V P                  '       * pV P                  p\	        V P
                  4      ^8H  pV'       Ed   V'       Edø   V P                   P                  V P
                  4      pVP                  P                  P                  ^ ,          pVP                  pVe/   RV9   d(   RV9   d!   \        W P                   P                  4      pM,V P                   P                  V4      \        P                  8H  pVP                   P                  P"                  pVP                  P                  P"                  p	\$        P&                  P(                  P+                  V4      \-        \$        P&                  P(                  P+                  V	4      ^4      ,          p
V
R8¼  dš   V'       d’   \$        P&                  P(                  P/                  V P                   P                  R4      '       dN   \$        P&                  P(                  P1                  V P                   P                  R4      '       d
   V^
8:  d   R# R# )rœ   rª  Úr0_gÍÌÌÌÌÌô?i €  i   TF)r¹  r1  rˆ  r¡  r¨   r®  Úmemory_statsÚ
persistentÚmemoryrÃ  Úcount_per_threadrs   r|  Úget_reduction_hintr4   ÚINNERÚloopedÚbytesrX   r­  r§  Úoptimization_hintr�   Ústatically_known_leqÚstatically_known_gt)rR  Ú
looped_redr¡  Ú	two_d_redr$  Ú	dim_statsÚmem_ops_per_threadÚcontiguous_redÚ
looped_memÚpersistent_memÚsaved_bytes_ratios   &          r˜   r  Ú"TritonKernel.add_persistent_rblockÌ  sÏ  € ð —]‘]×/Ñ/Ó1×SÐS¸$×:SÑ:SÔ6Sˆ
Ø×*Ñ*ˆÜ˜Ÿ™Ó$¨Ñ)ˆ	ßˆ:Ÿ)˜)ØŸ=™=×5Ñ5°d·k±kÓBˆLØ$×/Ñ/×6Ñ6×:Ñ:¸1Õ=ˆIØ!*×!;Ñ!;Ðð Ò)Ø˜=Ô(Ø˜]Ô*ä!FØ!§=¡=×#@Ñ#@ó"‘ð
 —M‘M×4Ñ4°]ÓCÜ$×*Ñ*ñ+ð ð
 &×,Ñ,×3Ñ3×9Ñ9ˆJØ)×4Ñ4×;Ñ;×AÑAˆNä !§¡× 0Ñ 0× BÑ BÀ:Ó NÔQTÜ—‘× Ñ ×2Ñ2°>ÓBØóRõ !Ðð " SÔ(ß"ä—G‘G×$Ñ$×9Ñ9Ø—M‘M×1Ñ1°5÷ò ô —G‘G×$Ñ$×8Ñ8Ø—M‘M×1Ñ1°4÷ò ð '¨"Ô,áÙrš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   r²  ÿ  s   € ÷ Uñ U¨3ñ Urš   c                óp  a&a'€ \        4       p/ pV P                  P                  4        Fk  w  rE\        V4      '       d   V P                  '       g   K*  \
        P                  P                  P                  V4      p\        \        V4      4      pWsV&   Km  	  Vf§   VP                  V P                  4       4       \
        P                  P                  4       P                  pVR8X  d   VP                  R4       MVP                  R4       \        P                   '       d    VP                  V P#                  4       4       V P$                  P'                  4       w  o&p	o'p	\)        S'4       F®  w  r«\+        V\,        4      '       g   K  \/        \0        P2                  VP4                  4      pV\
        P                  P                  P6                  9   g   Kl  \-        VP8                  \
        P                  P                  P6                  V,          4      S'V
&   K°  	  \;        4       pV P<                   EFB  pWàP$                  P>                  9   d-   VPA                  V P$                  P>                  V,          4       WàP$                  PB                  9   dt   V\
        P                  PD                  9  dU   WàPD                  9  dE   VPA                  \/        \F        V P$                  PB                  V,          4      PH                  4       WàP$                  PJ                  9   g   Kó  V P$                  PJ                  V,          p\+        V\L        4      '       d   \O        R4      hVPA                  V4       EKE  	  \Q        S&S'4       FZ  w  pp\+        V\R        4      '       g   K  VPT                  \V        PX                  8X  g   K?  VPA                  VP8                  4       K\  	  \[        V4      pV P]                  4        F[  p\-        VP^                   R2VP`                  4      pS'Pc                  V4       S&Pc                  \e        VP8                  4      4       K]  	  V&V'3R lpV Pf                   F\  pVPh                  '       d   V Pj                  '       d   K)  VPl                  f   K9  V! VP^                  Po                  4        R24       K^  	  V Pp                  '       d	   V! R	4       V Pr                  '       d   V! R
4       V! R4       \u        S'V Pv                  S&R7      p^ RI<H=p \
        P                  P                  4       pV! 4       '       d!   \|        P~                  ! VP                  4      p\/        \€        RTR\‚        P„                  ! V4      R/ R\|        P†                  P                  Pˆ                  PŠ                  ;'       d9    R\�        V PŽ                  4      9   ;'       g    R\�        V P�                  4      9   /V P“                  4       C4      pV Pp                  '       d   RVR&   \
        P                  P”                  ;'       g    \
        P                  P–                  pRV P™                  4       Pš                  R\�        \œ        Pž                  4      RVRV/V P¡                  4       CV P£                  4       Cp\¥        S'4       F   p^VR,          S'V,          P8                  &   K"  	  VV nS        VV nT        V P«                  V PŽ                  4       V P­                  4        V P¯                  4        R3pV P¡                  4       pV F>  pV P¨                  P±                  VR4       VV9   g   K(  VV,          V P¨                  V&   K@  	  V P²                  '       g   V P¨                  P±                  RR4       V Pµ                  V PŽ                  4       \|        P¶                  P¸                  eF   V Pº                  '       g!   \        Pˆ                  P¼                  '       g   \¿        S'R4RR7      .VR&   M\¿        S'RR7      .VR&   V PÀ                   F%  pVPÃ                  R4       VP                  V4       K'  	  V PÄ                  '       d6   RV PÇ                  4        RV PÄ                  P                  : R V: R!V: R"2	pM­V P                  '       dJ   V PÈ                  PË                  V PÌ                  4      p RV PÇ                  4        R#V: R$V  R V: R!V: R"2pMR\Ï        VS'4      p!V!e   R%V!P8                   R&2MRp"RV PÇ                  4        R#V: R'V" R(V: R!V: R)V PÐ                   R"2pVP                  V4       T;'       g    \�        \œ        PÒ                  4      p#VPÃ                  R*V# R+R'PÕ                  R, S& 4       4       R-24       VP×                  4       ;_uu_ 4        \        Pˆ                  PØ                  '       d   VPÃ                  R.V# R/24       V PÛ                  V4       V P$                  PÝ                  4        F  w  p$p%VPÃ                  V$ R0V% 24       K  	  VP                  V PŽ                  4       \        Pˆ                  PØ                  '       d   VPÃ                  R1V# R/24       RRR4       \        P                   '       d0   VP                  V Pß                  VPá                  R24      4      4       VPã                  4       #   + '       g   i     Le; i)5z‘
Convert the TritonKernel from Inductor SIMD IR to triton code, including inductor triton heuristics, imports,
metadata, and benchmarking infra.
Nrt  z"triton_helpers.set_driver_to_cpu()z"triton_helpers.set_driver_to_gpu()z%mutation_arg must not be a RemovedArgr‰  c                ó”   <€ \        4       '       d   SP                  \        V 4      4       SP                  \        V R R7      4       R# )T)Úis_constexprN)rS   r_  r]   r[   )rµ
  Úargdefsr#
  s   &€€r˜   Úadd_constexpr_argÚ6TritonKernel.codegen_kernel.<locals>.add_constexpr_argY  s2   ø€ ä-×/Ò/Ø× Ñ ¤¨hÓ!7Ô8Ø�N‰Nœ7 8¸$Ô?Ö@rš   rõ   rß	  rÿ
  Ú
NUM_STAGES)Ú
size_dtyper<  ©Ú_coor_enabledr#
  r«
  rª
  Únative_matmulztl.dotTÚlaunch_cooperative_gridÚ	grid_typeÚkernel_nameÚmutated_arg_namesÚoptimize_memr’  )Úpointer_range_overrideÚ'skip_cpp_wrapper_input_tensor_alignmentÚconfigs)rJ  rŒ   z$
                @triton_heuristics.z(
                    config=zI,
                    filename=__file__,
                    triton_meta=z$,
                    inductor_meta=z;
                )
                @triton.jit
            z!(
                    size_hints=z%,
                    reduction_hint=ztile_hint=TileHint.r=  r  zH
                    filename=__file__,
                    triton_meta=z*,
                    min_elem_per_thread=zdef rÎ  c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   )Ú	full_namerâ  s   & r˜   rÃ   Ú.TritonKernel.codegen_kernel.<locals>.<genexpr>  s   é € Ð*JÁ'¸Q¯;©;¯=¨=Ã'ùrO  r
  zpl.enter_scope("r,  rJ  zpl.exit_scope("r  )r’  rÜ  rà  rÂ  rŸ   )rra   r¸  rŠ  rM   r·  rX   r­  r§  r,  r9   r†  r†  rÐ
  r¿  rè  r#   r  rÃ
  rÇ   r¥
  rM  r£   rg   r
   r¤   r@  r�   Úinv_precomputed_replacementsr   r   Ú	mutationsÚinput_buffersrµ  r(  r  rb   Ú
inner_nameÚoutput_buffersrf   r
  r"  ri   Ú	zero_moderj   ÚZERO_ON_CALLrr  rk  r²  r‰  r_  r[   rœ  r1  rˆ  r  rB  rÓ  r|
  ry   rq  Ú"torch.fx.experimental.proxy_tensorrB  r×   r«
  r7   r1   rË  r  rí   rC  rç   rl  r  rØ
  Úis_inferenceÚis_backwardÚ_get_grid_typerÖ   rK   ÚDESCRIPTIVE_NAMEr  rø
  ru   rÑ  r÷
  rq
  r_  r”
  r³  rÜ  rz  rˆ  r‰  rÜ  Úemit_pointer_range_32rt   r¨  rQ  r‘  rÇ
  r¹  r(  r¡  rw   rª  r±
  rq  rï  rÍ
  Úcodegen_static_numelsÚaliasesr¼
  r	  r"
  )(rR  r   rs  Ú
size_hintsr²  r‰  Ú
numel_hintÚ	size_hintrz  rT  r,  rÁ   r%  Úmutated_argsÚmutationÚmutation_argÚargnamer  Úsizeargr=  Útriton_meta_signaturerB  Úprops_devicerÑ  rH  r÷
  Úarg_numÚ
tma_fieldsÚfinal_kernel_metar÷  r
  Úheuristics_lineÚreduction_hintr�
  Ú	tile_hintrF  ÚoldÚnewr<  r#
  s(   &&                                    @@r˜   Úcodegen_kernelÚTritonKernel.codegen_kernelÿ  s0	  ù€ ô Óˆàˆ
Ø!Ÿ[™[×.Ñ.Ö0‰MˆFÜ" 6×*Ò*°4×3H×3HÐ3HÙäŸ™×)Ñ)×;Ñ;¸EÓBˆJÜ'¬¨J«Ó8ˆIØ!*�vÓñ 1ð Š<Ø�K‰K˜×6Ñ6Ó8Ô9ÜŸ'™'×=Ñ=Ó?×DÑDˆKØ˜eÔ#Ø—‘Ð@ÕAà—‘Ð@ÔAä×&×&Ð&Ø—‘˜D×=Ñ=Ó?Ô@à#'§9¡9×#;Ñ#;Ó#=Ñ ˆ��I˜qä 	Ö*‰FˆAÜ˜#œw×'Ô'ô œeŸl™l¨C¯H©HÓ5�ØœQŸW™W×-Ñ-×JÑJÖJÜ#*ØŸ™¤!§'¡'×"2Ñ"2×"OÑ"OÐPVÕ"Wó$�I˜a“Lñ +ô )3«ˆØŸ�ˆHØŸ9™9×2Ñ2Ô2Ø× Ñ  §¡×!8Ñ!8¸Õ!BÔCàŸI™I×5Ñ5Ô5Ø¤A§G¡G×$;Ñ$;Ô;Ø×$8Ñ$8Ô8à× Ñ Üœ¨¯©×)BÑ)BÀ8Õ)LÓM×XÑXôð Ÿ9™9×3Ñ3Ö3Ø#Ÿy™y×7Ñ7¸ÕA�Ü˜l¬J×7Ò7Ü(Ð)PÓQÐQØ× Ñ  ×.ñ 'ô8   ¨Ö3‰LˆG�Sä˜3¤×-Ô-Ø—M‘MÔ%6×%CÑ%CÖCà× Ñ  §¡Ö.ñ 4ô ˜lÓ+ˆà×+Ñ+Ö-ˆDÜ §¡ ¨UÐ3°T·Z±ZÓ@ˆGØ×Ñ˜WÔ%Ø�N‰Nœ7 7§<¡<Ó0Ö1ñ .ö	Að ×$Ô$ˆDØ× × Ð  T×%>×%>Ð%>áØ�‰Ò&Ùá §¡×!2Ñ!2Ó!4Ð 5°UÐ;Ö<ñ %ð ×%×%Ð%Ù˜hÔ'à×#×#Ð#Ù˜mÔ,Ù˜lÔ+ä 1Ø $×"2Ñ"2¸Gô!
Ðõ 	Eä—w‘w×:Ñ:Ó<ˆÙ�?Š?ô !Ÿ<š<¨×(9Ñ(9Ó:ˆLÜ"&ÜàÐ2ØÔ*×1Ò1°,Ó?Ø˜RØÜ—O‘O×*Ñ*×1Ñ1×?Ñ?÷ Vð VØ!¤S¨¯©£^Ñ3×TÐT°xÄ3ÀtÇ|Á|ÓCTÑ7Tð	ð ×)Ñ)Ó+ð	ó#
ˆð ×%×%Ð%ð 6:ˆKÐ1Ñ2ô
 —w‘w×+Ñ+×BÐB¬q¯w©w×/BÑ/Bˆð ˜×,Ñ,Ó.×7Ñ7Øœ3œ{×;Ñ;Ó<Ø Ø˜Lð	
ð
 ×+Ñ+Ó-ð
ð ×'Ñ'Ó)ð
ˆô +¨9Ö5ˆGØ@AˆK˜Õ$ Y¨wÕ%7×%<Ñ%<Ó=ñ 6ð 'ˆÔØ*ˆÔà×Ñ˜dŸi™iÔ(Ø×0Ñ0Ô2Ø×ÑÔð
ˆ
ð !×9Ñ9Ó;ÐÛˆEØ×Ñ×"Ñ" 5¨$Ô/ØÐ)Ö)Ø,=¸eÕ,D�×"Ñ" 5Ó)ñ  ð
 �}�}ˆ}ð ×Ñ×"Ñ"Ð#8¸$Ô?à×Ñ˜Ÿ™Ô#ô �=‰=×ÑÒ(Ø×!×!Ð!¬¯©×)L×)LÐ)Lô ØØ+-Ø<@ôð&ˆK˜	Ò"ô ˜)ÈTÔRð&ˆK˜	Ñ"ð ×+Ô+ˆFØ�N‰N˜2ÔØ�K‰K˜Öñ ,ð ××Ðð#$Ø$(×$7Ñ$7Ó$9Ð#:ð ;Ø ×-Ñ-×4Ñ4Ñ7ð 8!à!,¡ð 0#Ø#0Ñ"3ð 4ð‰Oð ×"×"Ð"Ø!Ÿ]™]×=Ñ=¸d×>PÑ>PÓQˆNð#$Ø$(×$7Ñ$7Ó$9Ð#:ð ; Ø *™~ð .$Ø$2Ð#3ð 4!à!,¡ð 0#Ø#0Ñ"3ð 4ð	‰Oô $ J°	Ó:ˆDØ>BÒ>NÐ-¨d¯i©i¨[¸Ñ:ÐTVˆIð#$Ø$(×$7Ñ$7Ó$9Ð#:ð ; Ø *™~¨R°	¨{ð ;!à!,¡ð 0#Ø#0Ñ"3ð 4)Ø)-×)AÑ)AÐ(Bð Cð	ˆOð 	�‰�OÔ$Ø×:Ð:œc¤+×"9Ñ"9Ó:ˆØ�‰Ø�;�-˜q §¡Ñ*JÁ'Ó*JÓ!JÐ KÈ2ÐNô	
ð �[‰[�]�]Ü�}‰}×-×-Ð-Ø—‘Ð!1°+°¸bÐAÔBØ×&Ñ& tÔ,Ø ŸI™I×-Ñ-Ö/‘��SØ—‘ #  c¨#¨Ð/Ö0ñ 0à�K‰K˜Ÿ	™	Ô"Ü�}‰}×-×-Ð-Ø—‘ °°¸RÐ@ÔA÷ ô ×"×"Ð"Ø�K‰KØ×-Ñ-Ø!×%Ñ% oÓ6óôð �}‰}‹Ð÷# �]ús   ç7B;l%ê3l%ì%l5	c                	óv  € \         P                  P                  P                  V 4      p \	        V \
        P                  \        34      '       d   \        V 4      p\        V4      pV# ^p\         P                  P                  P                  W4      '       g!   VR8”  d   \        RV  24      hV^,          pKO  V# )r  z!Failed to find static RBLOCK for i @  )rX   r­  r§  Úsimplifyr£   r¤   r¦   r†  r9   r-  r2  )rl
  r�  s   & r˜   Ú_get_persistent_RBLOCKÚ#TritonKernel._get_persistent_RBLOCK  s–   € ä—‘×!Ñ!×*Ñ*¨6Ó2ˆÜ�fœuŸ}™}¬cÐ2×3Ò3Ü�f“+ˆCÜ! #Ó&ˆCð ˆ
ð ˆCÜ—g‘g×&Ñ&×;Ñ;¸F×HÒHØ˜”?Ü$Ð'HÈÈÐ%QÓRÐRØ�q•’àˆJrš   c               ó   € V ^8„  d   QhRR/# r¥  rŸ   )r    s   "r˜   r¡   r²  '  s   € ÷ 7ñ 7°jñ 7rš   c                	ó^  € V P                   '       d%   V P                  '       d   V P                  '       d   R # V P                   Uu. uF;  pVP                  '       g   K  \        V P                  VP                  4      4      NK=  	  ppV'       d   \        P                  ! V4      # R # u upi r¿   )
r-  rˆ  rÓ  rœ  r1  r3   rt  r‰  rº  r‘   )rR  r  Úrblockss   &  r˜   r  Ú1TritonKernel._get_native_matmul_persistent_rblock'  s�   € à×%×%Ð%Ø×,×,Ð,Ø×)×)Ð)áð ×(Ò(ó
á(�Ø× Õ ô UÔ+¨D×,GÑ,GÈÏ
É
Ó,SÖTÙ(ð 	ð 
÷
 &-Œt�yŠy˜Ó!Ð6°$Ð6ùò
s   ÁB*Á (B*c               ó   € V ^8„  d   QhRR/# rã  rŸ   )r    s   "r˜   r¡   r²  6  s   € ÷ 3ñ 3¸ñ 3rš   c                	óÄ   € V P                  4       ;pe=   \        P                  P                  P	                  W!4      '       d   V# \        R4      hV P                  V4      # )NzQpersistent strict sum requires its planned reduction block to cover the reduction)ry  rX   r­  r§  rŒ  r
  rt  )rR  rl
  rJ  s   && r˜   rŠ  Ú,TritonKernel._get_persistent_reduction_block6  s[   € Ø×-Ñ-Ó/Ð/ˆFÒ<Ü�w‰w×Ñ×4Ñ4°V×DÒDØ�Ü ð)óð ð ×*Ñ*¨6Ó2Ð2rš   c                	óV   €  \         P                  V 4       R #   \         d     R# i ; i)TF)r$  rt  r2  )rl
  s   &r˜   rŸ  Ú"TritonKernel.has_persistent_RBLOCK@  s*   € ð	Ü×/Ñ/°Ô7ÙøÜô 	Úð	ús   ‚ ™(§(c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   Úkernel_featuresr‚   Úkernel_kwargsr½  r°   rÓ   rŸ   )r    s   "r˜   r¡   r²  I  s)   € ÷ Cñ CØ+ðCØ<JðCà	ñCrš   c                	ó  € V P                  R 4      '       g   V P                  4       '       d   RVR&   RVR&   \        P                  V P                  4      '       g*   VP                  R4      '       d   \        R4      hRVR&   R# R# )rñ  TÚoverride_persistent_reductionFÚoverride_cooperative_reductionz@cannot override persistent reduction with unknown dynamic rnumelN)rž  ry  r$  rŸ  r|  r	  r
  )r€  r�  s   &&r˜   Ú apply_feature_required_overridesÚ-TritonKernel.apply_feature_required_overridesH  s‡   € ð ×'Ñ'¨×/Ò/Ø×@Ñ@×BÒBà=AˆMÐ9Ñ:Ø>CˆMÐ:Ñ;ä×1Ñ1°/×2QÑ2Q×RÒRØ× Ñ Ð!@×AÒAÜ$ØVóð ð >CˆMÐ9Ó:ñ Srš   c                óh  € R R lpV P                    EFš  pVP                  '       d   V P                  '       dk   \        P                  P
                  P                  VP                  4      pV! V4      '       d*   VP                  VP                   R\        V4       24       VP                  '       d½   V P                  '       d«   V P                  '       d2   V P                  V P                  VP                  4      4      pRV R2pM9V P                  VP                  4      pV P                   '       d   \#        V^4      pVP                  VP                  P%                  4        RV 24       VP                  R8X  g   EKt  V P&                  '       g   EK‰  VP                  R4       EK�  	  R	# )
ay  
We get a small speedup from hard coding numels if they are static.

This code stomps on the passed-in values by writing an constant to the top of the kernel.

In a kernel like:
def KERNEL_NAME(in_ptr0, in_ptr1, out_ptr2, xnumel, r0_numel, XBLOCK : tl.constexpr, R0_BLOCK : tl.constexpr):

We would add
xnumel = 4096
r0_numel = 768

After the signature, before the kernel code, if we decided to make these static. As its hardcoded, it becomes
a better signal to triton on how to unroll and do some static indexing. So, it's not so much that downstream
knows that its a static numel, as that you just plop a constant into the kernel.
c               ó    € V ^8„  d   QhRRRR/# )rœ   r�   r­   r°   r´   rŸ   )r    s   "r˜   r¡   Ú8TritonKernel.codegen_static_numels.<locals>.__annotate__n  s   € ÷ 	:ñ 	: Jð 	:°4ñ 	:rš   c                óB   € \        V \        P                  \        34      # r¿   )r£   r¤   r¦   r†  rª   s   &r˜   Úis_static_integerÚ=TritonKernel.codegen_static_numels.<locals>.is_static_integern  s   € Ü˜d¤U§]¡]´CÐ$8Ó9Ð9rš   znumel = z*triton_helpers.constexpr_next_power_of_2((z + RSPLIT - 1) // RSPLIT)zBLOCK: tl.constexpr = rª  zXBLOCK: tl.constexpr = 1N)rœ  r1  r·  rX   r­  r§  rs  r‰  rQ  r²  r†  rˆ  rÓ  r©  r9  rŠ  r-  r�   rB  r±  )rR  rs  r‹  r  Úsimplified_tree_numelr‰  r�  s   &&     r˜   r\  Ú"TritonKernel.codegen_static_numels\  s>  € õ$	:ð ×$Õ$ˆDØ×$×$Ð$¨×(=×(=Ð(=Ü()¯©×(8Ñ(8×(AÑ(AÀ$Ç*Á*Ó(MÐ%Ù$Ð%:×;Ò;Ø—N‘N d§k¡k ]°(¼3Ð?TÓ;UÐ:VÐ#WÔXà× × Ð  T×%>×%>Ð%>Ø×-×-Ð-Ø ŸJ™J t×';Ñ';¸D¿J¹JÓ'GÓH�EØFÀuÀgÐMfÐg‘Cà×>Ñ>¸t¿z¹zÓJ�CØ×,×,Ð,ä! # r›l˜à—‘ $§+¡+×"3Ñ"3Ó"5Ð!6Ð6LÈSÈEÐRÔSà�{‰{˜c×! d§m§m£mØ—‘Ð9×:ó' %rš   c               ó   € V ^8„  d   QhRR/# )rœ   r°   z type[triton_heuristics.GridExpr]rŸ   )r    s   "r˜   r¡   r²  †  s   € ÷ Cñ CÐ @ñ Crš   c                	óÊ  € \        V P                   Uu. uF  p\        VP                  '       * 4      NK  	  up4      pV P                  '       d&   V^8w  d   \        RV 24      h\        P                  # V P                  '       d&   V^8w  d   \        RV 24      h\        P                  # V^8X  d   \        P                  # V^8X  dP   \        \        V P                  V P                  4      4      '       d   \        P                  # \        P                  # V^8X  d3   V P                   '       d   \        P"                  # \        P$                  # \'        RV 24      hu upi )r  zexpected n == 1, got z"Unsupported number of dimensions: )rè  rœ  r†  r1  r|
  r
  r.   ÚMixOrderReductionGridrÓ  ÚCooperativeReductionGridÚGrid1Drˆ   rs  rå  ÚGrid2DWithYZOverflowÚGrid2Dr-  ÚBatchMatmulGrid3DÚGrid3Dr2  )rR  r  rÙ  s   &  r˜   rY  ÚTritonKernel._get_grid_type†  s)  € Ü¸×8HÒ8HÓIÑ8H°”˜×*Ñ*Ô*Ö+Ñ8HÑIÓJˆØ×#×#Ð#Ø�AŒvÜ$Ð'<¸Q¸CÐ%@ÓAÐAÜ$×:Ñ:Ð:Ø×'×'Ð'Ø�AŒvÜ$Ð'<¸Q¸CÐ%@ÓAÐAÜ$×=Ñ=Ð=Ø�!ŒVÜ$×+Ñ+Ð+Ø�!ŒVÜ”3�t×2Ñ2°D×4DÑ4DÓE×FÒFÜ(×=Ñ=Ð=Ü$×+Ñ+Ð+Ø�!ŒVØ×$×$Ð$Ü(×:Ñ:Ð:Ü$×+Ñ+Ð+ÜÐ=¸a¸SÐAÓBÐBùò' Js   ”#E c                	ó®  € V P                    FÄ  p\        VP                  \        P                  \        P
                  34      '       d   VP                  pM)\        P                  P                  P                  W4      pVP                  '       d   V P                  '       g   K™  VP                  V4       VP                  \        V4      4       KÆ  	  R # r¿   )rœ  r£   r‰  r¤   r¦   r@  rX   r­  Úwrapper_codeÚgenerate_numel_exprr1  r·  r_  rè  )rR  r   r³
  Ú	arg_typesr  r�   s   &&&&  r˜   r™
  Ú#TritonKernel.add_numel_to_call_argsœ  sŠ   € à×$Ô$ˆDÜ˜$Ÿ*™*¤u§}¡}´e·l±lÐ&C×DÒDØ—z‘z‘ä—w‘w×+Ñ+×?Ñ?ÀÓK�à×$×$Ð$¨×(=×(=Ò(=Ø× Ñ  Ô&Ø× Ñ ¤ d£Ö,ó %rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r   rç   r³   zIRNode | NoneÚdeallocate_wsr´   rŸ   )r    s   "r˜   r¡   r²  ¨  s$   € ÷ )ñ )Øð)Ø,ð)ØDHñ)rš   c           	     	óž  € \         P                  P                  pVP                  4        V P                  P                  4       w  rVrWV P                  WV4       V P                  P                   F  pVP                  V4       K  	  VP                  VVR VV P                  V P                  R7       V'       d   V P                  4        R# R# )T)rí   rœ  rÑ  r÷
  N)rX   r­  rš  Úwrite_triton_header_oncerÇ   r¥
  r™
  Úworkspace_argsÚgenerate_workspace_allocationÚgenerate_kernel_callrÑ  r÷
  Údeallocate_workspaces)	rR  r   r³   rŸ  ÚwrapperrT  r³
  rœ  Úwss	   &&&&     r˜   Úcall_kernelÚTritonKernel.call_kernel¨  s±   € ô —'‘'×&Ñ&ˆØ×(Ñ(Ô*Ø%)§Y¡Y×%=Ñ%=Ó%?Ñ"ˆ�aØ×#Ñ# D°YÔ?à—)‘)×*Ô*ˆBØ×1Ñ1°"Ö5ñ +ð 	×$Ñ$ØØØØØ×(Ñ(Ø×,Ñ,ð 	%ô 	
÷ Ø×&Ñ&Ö(ñ rš   c               ó   € V ^8„  d   QhRR/# rÈ  rŸ   )r    s   "r˜   r¡   r²  ¿  s   € ÷ ,ñ , 4ñ ,rš   c                	óœ  € \         P                  P                  pV P                  P	                  4       w  r#rB\        W44       F…  w  rV\        V\        4      '       g   K  \         P                  P                  '       d   VP                  R V RV R24       KW  RV R2pVP                  V4       RV R2pVP                  V4       K‡  	  R# )z:AOTI_TORCH_ERROR_CODE_CHECK(aoti_torch_check_inf_and_nan("z", z));zassert not z.isnan().any().item()z.isinf().any().item()N)
rX   r­  rš  rÇ   r¥
  r"  r£   rh   Úcpp_wrapperrQ  )rR  r¦  rT  r³
  Úarg_signaturesrÁ   Úarg_signaturer=  s   &       r˜   Úcodegen_nan_checkÚTritonKernel.codegen_nan_check¿  sº   € Ü—'‘'×&Ñ&ˆØ*.¯)©)×*BÑ*BÓ*DÑ'ˆ�nÜ"% iÖ"@ÑˆCÜ˜-¬×3Ô3Ü—7‘7×&×&Ð&Ø×%Ñ%ØTÐUXÐTYÐY\Ð]`Ð\aÐadÐeöð )¨¨Ð-BÐC�DØ×%Ñ% dÔ+Ø(¨¨Ð-BÐC�DØ×%Ñ% dÖ+ó #Arš   c               ó   € V ^8„  d   QhRR/# )rœ   r°   r_  rŸ   )r    s   "r˜   r¡   r²  Î  s   € ÷ 2ñ 2Ð1Bñ 2rš   c                	ó   € \        V/ VB # r¿   )r_  )rR  rÇ   rj  s   &*,r˜   ræ	  ÚTritonKernel.create_cse_varÎ  s   € Ü  $Ð1¨&Ñ1Ð1rš   c               ó   € V ^8„  d   QhRR/# )rœ   rú  rn   rŸ   )r    s   "r˜   r¡   r²  Ñ  s   € ÷ 	&ñ 	&Ð4Hñ 	&rš   c                	óf  € VP                    R V P                  V P                  VP                  4      4       2pVP                  P
                  '       g$   V P                  '       d/   VP                  R8X  d   V P                  P                  V4       R# V P                  P                  V4       R# )rJ  rª  N)r   r©  r9  r�   r  r�  r|
  r²  r{
  rQ  rl  )rR  rú  r=  s   && r˜   Úcodegen_iteration_ranges_entryÚ+TritonKernel.codegen_iteration_ranges_entryÑ  s   € Ø—*‘*�˜S §¡¨D×,@Ñ,@ÀÇÁÓ,LÓ!MÐ NÐOˆð �:‰:××Ð $×":×":Ð":¸u¿|¹|ÈsÔ?RØ×Ñ×(Ñ(¨Ö.ð �I‰I×Ñ Ö%rš   c               ó    € V ^8„  d   QhRRRR/# rù  rŸ   )r    s   "r˜   r¡   r²  Ü  s   € ÷ Oñ OÐ2Eð OÈ#ñ Orš   c                	óØ  € VP                   f   \        R4      hV P                  VP                   4      pV P                  '       d)   VP                   ^ 8X  d   V P	                  4       ^8X  d   RpV P
                  pVR8w  d   RV R2MRpV P                  '       d*   V P                  '       d   VP                  '       d   V R2pRV P                  VP                  4       4       RV V 2# )Nz!entry.tensor_dim must not be NonerŒ   rµ  r’  r  z + rsplit_startztl.arange(0, )r  r
  rí  r-  r  rq  rÓ  rˆ  r1  r©  r  )rR  rú  rd  rq  r·  s   &&   r˜   r’  Ú)TritonKernel.iteration_ranges_ranges_codeÜ  sÞ   € Ø×ÑÒ#Ü Ð!DÓEÐEØ×%Ñ% e×&6Ñ&6Ó7ˆð ×!×!Ð!Ø× Ñ  AÔ%Ø×'Ñ'Ó)¨QÔ.àˆDØ×&Ñ&ˆØ*5¸Ô*C�4˜�} AÑ&Èˆà×&×&Ð&Ø×)×)Ð)Ø×"×"Ð"à�x˜Ð/ˆFØ˜tŸz™z¨%×*:Ñ*:Ó*<Ó=Ð>¸aÀ¸vÀfÀXÐNÐNrš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rú  ro   r  r	   r°   rç   rŸ   )r    s   "r˜   r¡   r²  ò  s$   € ÷ :ñ :Ø(ð:Ø14ð:à	ñ:rš   c                	óf   € V P                   pV P                  4       p^.V,          pRV RV RV R2# )r  r·  r  r  )rq  r  )rR  rú  r  rq  r  rd  s   &&&   r˜   Úiteration_ranges_scalar_codeÚ)TritonKernel.iteration_ranges_scalar_codeò  sC   € ð ×&Ñ&ˆØ×&Ñ&Ó(ˆØˆs�T�zˆØ˜$˜˜r % ¨¨;¨-°qÐ9Ð9rš   c               ó    € V ^8„  d   QhRRRR/# rù  rŸ   )r    s   "r˜   r¡   r²  ú  s   € ÷ ñ Ð.Að Àcñ rš   c                	óÚ  € VP                   f   \        R4      hRVP                    R2pV P                  V4      '       d(   RV RVP                   ^,            RVP                    R2pV P                  '       d4   V P	                  4       ^8X  d   ^ ^^^^^ /pRW1P                   ,           R2pVP
                  P                  W"4      pV P                  R8w  d   V R	V P                   R2# V# )
Nzentry.grid_dim must not be Noneztl.program_id(r  rÎ  z + tl.program_id(z) * tl.num_programs(rx  rµ  r’  )r‚  r
  rå  r-  r  Ú	pid_cacher	  rq  )rR  rú  r�  Úreversed_pid_mapÚpids   &&   r˜   Úiteration_ranges_get_pidÚ%TritonKernel.iteration_ranges_get_pidú  sø   € Ø�>‰>Ò!Ü Ð!BÓCÐCØ˜uŸ~™~Ð.¨aÐ0ˆð ×&Ñ& u×-Ò-ð �c�UÐ+¨E¯N©N¸QÕ,>Ð+?Ð?SÐTY×TbÑTbÐScÐceÐfˆCð
 × × Ð  T×%<Ñ%<Ó%>À!Ô%CØ ! 1 a¨¨A¨qÐ1ÐØ"Ð#3·N±NÕ#CÐ"DÀAÐFˆCà�o‰o×!Ñ! #Ó+ˆØ×Ñ˜zÔ)Ø�U˜$˜t×/Ñ/Ð0°Ð2Ð2Øˆ
rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   rú  ro   r°   r´   rŸ   )r    s   "r˜   r¡   r²    s   € ÷ 

ñ 

Ð,?ð 

ÀDñ 

rš   c                	ób  € V P                   '       d   V P                  '       d   R # VP                  ^8H  ;'       dt    VP                  '       * ;'       d[    V P                  '       * ;'       dB    \
        P                  P                  P                  VP                  \        4       4      '       * # ró  )r�  r�  r‚  Úhas_zdimrÓ  rX   r­  r§  r-  r‰  r8   )rR  rú  s   &&r˜   rå  Ú#TritonKernel.needs_yz_grid_overflow  s�   € ð ××Ð D×$=×$=Ð$=Ùà�N‰N˜aÑ÷ Yð YØ—N‘NÔ"÷Yð Yà×.Ñ.Ô.÷Yð Yô —G‘G×$Ñ$×9Ñ9¸%¿+¹+Ä~ÓGWÓXÔXð		
rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r²  rç   r°   r†  rŸ   )r    s   "r˜   r¡   r²    s   € ÷ 0ñ 0 ð 0¨ñ 0rš   c                	ó¤   € V P                   '       d%   V P                   VP                  4        R 2,          # \        VP                  4       ,          # )rõ   )r‘  rB  r5   )rR  r²  s   &&r˜   rŽ  ÚTritonKernel.max_block  s>   € Ø××ÐØ×$Ñ$¨¯©«Ð'7°uÐ%=Õ>Ð>Ü §¡£Õ/Ð/rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   r  ro   r°   r´   rŸ   )r    s   "r˜   r¡   r²  #  s   € ÷ <ñ <Ð':ð <¸tñ <rš   c                	ó  € VP                  4       '       g   R # V P                  '       d=   \        P                  P                  P                  VP                  ^4      '       d   R # V P                  '       g   R # V P                  '       dc   VP                  P                  4        R2V P                  9   d7   V P                  VP                  P                  4        R2,          ^8X  d   R# MrV P                  '       ga   \        P                  P                  P                  VP                  ^4      '       d'   VP                  '       d   V P                  '       g   R# VP                  '       dv   V P                  '       dd   V P                  VP                  4      p\        P                  P!                  4       p\#        V4      p\%        V\&        4      '       d	   W$8  d   R # MAVP                  R8X  d   V P(                  '       d   ^pMV P+                  VP                  4      pVP                  '       d)   V P,                  '       d   W P/                  4       ,          p\        P                  P                  P1                  VP                  V4      '       dh   VP2                  ^8g  ;'       gQ    VP4                  ;'       g=    \        P                  P                  P7                  VP                  \9        4       4      # R # )Frõ   Trª  )Úsupports_constant_maskr-  rX   r­  r§  Ústatically_known_ltr‰  rµ  r‘  r²  rB  r�  r®  r1  rˆ  rŠ  r¿  r2   r£   r†  r±  rŽ  rÓ  rà	  rç  r‚  rÈ  r-  r8   )rR  r  rŽ  r«
  Ú	warp_sizes   &&   r˜   r  ÚTritonKernel._has_constant_mask#  s&  € Ø×*Ñ*×,Ò,Ùà× × Ð ô �w‰w×Ñ×3Ñ3°D·J±JÀ×CÒCÙà×!×!Ð!Ùà××Ð D§K¡K×$5Ñ$5Ó$7Ð#8¸Ð!>À$×BSÑBSÔ!SØ× Ñ  D§K¡K×$5Ñ$5Ó$7Ð#8¸Ð!>Õ?À1ÔDÙð Eà×%×%Ð%Ü�w‰w×Ñ×7Ñ7¸¿
¹
ÀA×FÒFØ×)×)Ð)¨d×.G×.GÐ.GÙð ××Ð ×!:×!:Ð!:Ø×<Ñ<¸T¿Z¹ZÓHˆIô —W‘W×8Ñ8Ó:ˆFÜ% fÓ-ˆIÜ˜)¤S×)Ò)¨iÔ.CÙøØ�[‰[˜CÔ D§M§M MØ‰IàŸ™ t§{¡{Ó3ˆIà××Ð ×!;×!;Ð!;Ø!§O¡OÓ$5Õ5ˆIô �7‰7×Ñ×8Ñ8¸¿¹ÀY×OÒOà—‘ Ñ"÷ Wð WØ—=‘=÷Wð Wä—7‘7×#Ñ#×8Ñ8¸¿¹Ä^ÓEUÓVðñ rš   c               ó   € V ^8„  d   QhRR/# rN  rŸ   )r    s   "r˜   r¡   r²  a  s   € ÷ .ñ . Tñ .rš   c                	óž   € V P                   ^ ,          pVP                  R8w  d   \        RVP                  : 24      hV P                  V4      # )r   rª  zexpected xtree prefix 'x', got )rœ  r²  r
  r  )rR  Úxtrees   & r˜   rŠ  Ú TritonKernel._has_constant_xmaska  sG   € Ø× Ñ  Õ#ˆØ�<‰<˜3ÔÜ Ð#BÀ5Ç<Á<ÑBRÐ!SÓTÐTØ×&Ñ& uÓ-Ð-rš   c               ó    € V ^8„  d   QhRRRR/# )rœ   rH  rG  r°   rÓ   rŸ   )r    s   "r˜   r¡   r²  g  s   € ÷ "ñ " oð "¸$ñ "rš   c                	ó¾   € V P                    F;  pV P                  V4      '       g   K  VP                  VP                  4       4       K=  	  VP                  R 4       R# )rÓ   N)rœ  r  r§  r*  )rR  rH  r  s   && r˜   rç  ÚTritonKernel.filter_masksg  sH   € Ø×$Ô$ˆDØ×&Ñ& t×,Ô,Ø×!Ñ! $§.¡.Ó"2Ö3ñ %ð 	×Ñ˜&Ö!rš   c               ó   € V ^8„  d   QhRR/# rð  rŸ   )r    s   "r˜   r¡   r²  o  s   € ÷ 
ñ 
¨	ñ 
rš   c                	óŽ   € \        \        P                  4      R V P                    Uu. uF  p\        V,          NK  	  up# u upi r¿   )r¿  rð   r2  r¶  r   )rR  r,  s   & r˜   Úget_reduction_prefixesÚ#TritonKernel.get_reduction_prefixesn  sJ   € ô œ]×:Ñ:Ó;Ð<U¸d×>UÑ>UÑVó
áV�ô �t×ÐÙVñ
ð 	
ùò 
s   ©Ac               ó    € V ^8„  d   QhRRRR/# ©rœ   r	  ra   r°   rÓ   rŸ   )r    s   "r˜   r¡   r²  u  s   € ÷ Fñ F¨~ð FÀ$ñ Frš   c                óÞ  € V P                    Uu. uF  q"P                  '       g   K  VNK  	  ppRP                  \        R V 4       4      4      pVP	                  RV P                  V4       24       V P                    Uu. uF,  pVP                  '       g   K  \        P                  V4      NK.  	  pp\        V4      pVP	                  RV P                  V4       24       R# u upi u upi )zN
Generates code that flattens ND reduction numels, block sizes, etc. into 1D.
r1  c              3  ó>   "  € T F  qP                    R 2x € K  	  R# 5i)r‰  N)r²  ræ  s   & r˜   rÃ   Ú8TritonKernel.codegen_reduction_numels.<locals>.<genexpr>{  s   é € Ð"UÁ_¸T§k¡k ]°%Õ#8Ã_ùrØ  z	rnumel = zRBLOCK: tl.constexpr = N)	rœ  r1  rq  rr  r†  r©  rð   r  rO   )rR  r	  r  Úreduction_treesrl
  Ú	rn_blocksrJ  s   &&     r˜   rÒ  Ú%TritonKernel.codegen_reduction_numelsu  sÑ   € ð
 -1×,<Ò,<ÓRÑ,< D×@QÕ@QŸ4˜4Ñ,<ˆÐRØ—‘œFÑ"UÁ_Ó"UÓUÓVˆØ�‰˜	 $§*¡*¨VÓ"4Ð!5Ð6Ô7ð
 ×(Ò(ó
á(�Ø× Õ ô /ŒM×(Ñ(¨Ö.Ù(ð 	ð 
ô
 ˜yÓ)ˆØ�‰Ð/°·
±
¸6Ó0BÐ/CÐDÖEùò Sùò

s   �C%§C%ÂC*ÂC*c               ó    € V ^8„  d   QhRRRR/# )rœ   r·  rç   r°   zlist[sympy.Symbol]rŸ   )r    s   "r˜   r¡   r²  ‡  s   € ÷ Wñ W¨Sð WÐ?Qñ Wrš   c                ó‚   € V P                  4       pV Uu. uF  p\        P                  ! V V 23/ VB NK   	  up# u upi )z;
Helper to initialize symbols like rn_numel, rn_base, etc.
)rÜ  r¤   r@  )rR  r·  rj  Úrn_prefixesr²  s   &&,  r˜   r“  Ú#TritonKernel._get_reduction_symbols‡  sA   € ð ×1Ñ1Ó3ˆÙJUÓVÉ+À”—’ ˜x¨ xÐ0Ñ;°FÔ;É+ÑVÐVùÒVs   •$<c               ó   € V ^8„  d   QhRR/# rˆ  rŸ   )r    s   "r˜   r¡   r²  �  s   € ÷ 
ñ 
Ð-=ñ 
rš   c                ó  € V P                  4       pV P                  RRRR7      p\        \        V4      ^,
          4       Uu. uF  p\	        W#^,           R 4      NK  	  up\
        P                  ! ^4      .,           # u upi )z˜
Compute coefficients to convert ND reduction indices to linear indices.
For example:
  rindex = r0_index * r1_numel * ... * rn_numel + ... + rn_index.
r‰  Trö   N)rÜ  r“  rÁ  r¨   rO   r¤   r¦   )rR  rè  Ú	rn_numelsrë  s   &   r˜   Ú_get_reduction_index_coeffsÚ(TritonKernel._get_reduction_index_coeffsŽ  s~   € ð ×1Ñ1Ó3ˆØ×/Ñ/°ÀÐPTÐ/ÓUˆ	ä;@ÄÀ[ÓAQÐTUÕAUÔ;Vó
Ù;V°CŒM˜)¨!¥G IÐ.Ö/Ñ;Vñ
ä�]Š]˜1ÓÐõð 	ùò 
s   ÁA>c               ó    € V ^8„  d   QhRRRR/# )rœ   Ú
multi_indsr‰  r°   r­   rŸ   )r    s   "r˜   r¡   r²  ›  s   € ÷ -ñ -Ð5Eð -È*ñ -rš   c                ó8   € V P                  4       p\        W!4      # )z;
Compute linear reduction indices from N dimensional ones.
)rí  rN   )rR  rð  Úcoeffss   && r˜   r”  Ú'TritonKernel._flatten_reduction_indices›  s   € ð ×1Ñ1Ó3ˆÜ˜Ó,Ð,rš   c               ó    € V ^8„  d   QhRRRR/# rß  rŸ   )r    s   "r˜   r¡   r²  ¢  s   € ÷ ?ñ ?°ð ?À4ñ ?rš   c                ó&  € V P                  RRRR7      pV P                  RRRR7      pV P                  V4      pVP                  RV P                  V4       24       V P                  V4      pVP                  RV P                  V4       24       R# )zH
Generates code that converts ND reduction indices into linear indices.
rñ   Trò   rK  z
roffset = z	rindex = N)r“  r”  r†  r$  )rR  r	  Ú
rn_offsetsÚrn_indsrÕ  Úrindexs   &&    r˜   r•  Ú&TritonKernel.codegen_reduction_indices¢  sš   € ð
 ×0Ñ0Ø˜d°ð 1ó 
ˆ
ð ×-Ñ-¨g¸tÐQUÐ-ÓVˆð ×1Ñ1°*Ó=ˆØ�‰˜
 4×#4Ñ#4°WÓ#=Ð">Ð?Ô@Ø×0Ñ0°Ó9ˆØ�‰˜	 $×"3Ñ"3°FÓ";Ð!<Ð=Ö>rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rú  ro   rs  ra   r°   rÓ   rŸ   )r    s   "r˜   r¡   r²  ²  s-   € ÷ 4Mñ 4Mà"ð4Mð ð4Mð 
ñ	4Mrš   c           	     	óî  € VP                  4       '       Ed*   V P                  '       d0   V P                  '       d   VP                  '       d   \	        R 4      hVP                  4        F9  w  r4pV'       d   RMRpVP                  V V RV P                  V4       24       K;  	  VP                  VP                   RV P                  VP                  4       4       RV P                  V4       24       VP                  VP                  4        RVP                   RV P                  VP                  4       24       R# VP                  pVP                  '       d&   VP                  VP                   RV RV R24       MëVP                  fE   VP                  VP                   RV P                  V4       24       VP                  V R	24       M™VP                   e   V RV P                  V4       2pMV P#                  W R
24      pV P$                  '       g   VP'                  4        R2MRp	VP)                  V RV P+                  V4       RV	 2VP                   RV 2.4       V P-                  V4      '       d#   VP                  V P/                  V4      4       R# VR8X  d   V P$                  '       g5   VP                  VP                  4        RVP                   RV R24       R# R# )z=derived reduction roots do not support cooperative reductionsz: tl.constexprrŒ   rJ  r®  ru
  Nz	offset + rÈ  z
offset = 0rñ   rõ   rÿ
  z	offset = r1  rª  r‰  )Úhas_custom_codegen_headerrÓ  rˆ  r1  r
  Únamed_constantsrQ  r$  r   r   r’  r*  r‰  r²  r�  r‚  r  r½  r|
  rB  r}
  rÄ  r  rý  )
rR  rú  rs  rÆ  r�   Ú	constexprÚ
annotationrª  r=  r  s
   &&&       r˜   r‘  Ú,TritonKernel.iteration_ranges_codegen_header²  s¬  € ð
 ×*Ñ*×,Ó,à×*×*Ð*Ø×-×-Ð-Ø×&×&Ð&ä$ØSóð ð ).×(=Ñ(=Ö(?Ñ$�˜9ß1:Ñ-À�
Ø—‘ #  z l°#°d×6GÑ6GÈÓ6MÐ5NÐOÖPñ )@ð �N‰NØ—:‘:�,˜c $×"3Ñ"3°E×4FÑ4FÓ4HÓ"IÐ!JÈ#Ø×4Ñ4°UÓ;Ð<ð>ôð �N‰NØ—?‘?Ó$Ð% S¨¯©¨°C¸×8IÑ8IÈ%Ï+É+Ó8VÐ7WÐXôñ à�L‰LˆØ�=�=ˆ=Ø�N‰N˜eŸj™j˜\¨¨Q¨C¨y¸¸¸4Ð@ÕAØ�^‰^Ò#à�N‰N˜eŸj™j˜\¨¨T×-NÑ-NÈuÓ-UÐ,VÐWÔXØ�N‰N˜a˜S 
Ð+Õ,à×ÑÒ+Ø˜˜I d×&GÑ&GÈÓ&NÐ%OÐP‘à×8Ñ8¸À#ÀVÀÓM�ð ,0×+C×+CÐ+C�1—7‘7“9�+˜UÑ#Èð ð �O‰Oà�c˜ 4×#@Ñ#@ÀÓ#GÐ"HÈÈJÈ<ÐXØ—z‘z�l # d VÐ,ðôð ×"Ñ" 5×)Ò)Ø�N‰N˜4×4Ñ4°UÓ;Ö<Ø�s”(˜t×7×7Ð7à�N‰N˜eŸo™oÓ/Ð0°°E·J±J°<¸sÀ1À#ÀUÐKÖLñ  8rš   )'rÅ  rÃ  rÄ  rÇ  rÌ  rÍ  rÏ  rÎ  rÉ  rÈ  rÜ  rÐ  r¾  rÀ  r…  rþ   r‘  r×  r¨  r°  rÂ  r÷
  r·  r�  rª  rÊ  rË  rµ  r¼  r�  rÁ  rº  r»  r¹  r¸  r„  rØ  r’  rÑ  )r   TNNFFr¿   )rŒ   ©NNrq  )�rÖ   rÞ   rß   rà   rá   r  r
  râ   r!  r©  r   rj  r¹  r=  rª  r0  r«  r¬  re  rv  rÜ  rà  r  rí  r.  rö  rý  r  r  r  r8  r  r  r#  r  r5  rC  rG  r_  rk  rq  ru  r{  rÔ  rÖ  rÕ  rš  r¢  rD   ry  r©  r­  r“  r#  r-  r1  r*  r>  r;  rE  rI  rN  rd  rl  rR  rh  ro  rz  r‚  r‰  r‘  r›  r¡  rÀ  r   r  rì  rà  r÷  r	  r	  r	  r	  r¸	  rÁ	  r{	  re	  r�	  r|	  rà	  r€	  rî	  ró	  rù	  r 
  rò	  r%
  r[
  rñ  rq
  r”
  rž
  r¼
  rÃ
  rÇ
  rã   r   rÐ
  rØ
  rø
  r  r…  Úcached_propertyr  rp  rt  r  rŠ  rŸ  r…  r\  rY  r™
  r¨  r¯  ræ	  r¶  r’  r½  rÄ  rå  rŽ  r  rŠ  rç  rÜ  rÒ  r“  rí  r”  r•  r‘  rä   rm  rn  s   @r˜   r$  r$  Ê  sd  ø‡ ñð &€IØ%Ó%Ø).€EÐ&Ó.Ø€OØ$;Ð!Ø3BÐÐ0ÓBàð "Ð#@ó ð HLÐ7¸ÓK÷?9ò ?9ðB ôOó ðOð ô(ó ð(õRõ'õ
õ8õ
õ%õ1õ
ð ô
ó ð
õõ*õ÷ %
ðN ô:ó ð:ð6 öó ðõ"4Hõlð8 ô
ó ð
õ
"õ
ò$òLò,:ò0õ
ð ô1ó ð1ò

ð ô"ó ð"ðh
ð /3ð	h
ð
 ðh
ð ðh
ð ðh
ð EIðh
ð "÷h
÷TI'ôV1NòfUòXõMò8õõ1õ
ð" *€HØ8€Jàñ
ó ð
ð -Ø9>ô -òD1õ  õ"(õT

õ
õJõ4&õP
õk÷ZbõHIòõ
÷9õv.õ
9õ
õ(y
õv&õ$
ò0I
òV#ò0&ò !õ
õB@õD
õ
õ"
ð4 ôHó ðHõ>Sõ@E"õNJ"õX$òA%õFõ0{òz	Pòð Ùˆtƒ_ô%"ó ó ð%"ðN ô
ó ð
ð ñ0ó ð0õdbðH ×Ñô0ó ð0÷dUðn ñó ðõ 7õ3ð ñó ðð ôCó ðCò&(;õTCò,
-÷)õ.,õ2õ	&õOõ,:õõ0

õ0õ
<õ|.õ"ð ô
ó ð
õFõ$Wð ô
ó ð
õ-õ?÷ 4Mó 4Mrš   r$  c                  óZ   a € ] tR tRtRtR V 3R lltR R ltRR R lltR	 R
 ltRt	V ;t
# )ÚFusedUserDefinedTritonKernelié  zz
When fusing a user-defined triton kernel with epilogues, we use this class to generate the modified triton kernel source
c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rœ   r®  r¯  r¹  r‚   Úscheduler_noder;   r°   rÓ   rŸ   )r    s   "r˜   r¡   Ú)FusedUserDefinedTritonKernel.__annotate__î  s8   € ÷ "Pñ "Pà%ð"Pð %ð"Pð =ð	"Pð
 
ñ"Prš   c           
     	ób  <€ \         SV `  VV^ RRRRR7       W0n        \        V P                  P                  P
                  \        P                  4      '       g6   \        R\        V P                  P                  P
                  4       24      hV P                  P                  P
                  V n
        V P                  P                  4       '       g   \        R4      h\        V P                  P                  P                  4      ^8w  d6   \        R\        V P                  P                  P                  4       24      h\        P                   ! V P                  P                  P                  ^ ,          P"                  4      V n        V P$                  P'                  RR	4      V n        R# )
r   TNF)r¹  rª  rµ  r‘  r°  r�  z&expected UserDefinedTritonKernel, got z ir_node epilogue must be fusableúexpected 1 store, got r¤
  rŒ   )rd  re  r  r£   Úkernel_noder³   r$   ÚUserDefinedTritonKernelr
  rè  Úir_nodeÚcan_fuse_epiloguer¨   Úkernel_storesrÛ  ÚastÚunparseÚstore_value_nodeÚoriginal_stored_exprrO  )rR  r®  r¹  r  rf  s   &&&&€r˜   re  Ú%FusedUserDefinedTritonKernel.__init__î  sc  ø€ ô 	‰ÑØØØ !ØØØØ!ð 	ô 	
ð -ÔÜØ×Ñ×+Ñ+×0Ñ0´"×2LÑ2L÷
ò 
ô !Ø8¼¸d×>QÑ>Q×>]Ñ>]×>bÑ>bÓ9cÐ8dÐeóð ð 48×3FÑ3F×3RÑ3R×3WÑ3WˆŒØ�|‰|×-Ñ-×/Ò/Ü Ð!CÓDÐDô ˆt�|‰|×)Ñ)×0Ñ0Ó1°QÔ6Ü Ø(¬¨T¯\©\×-GÑ-G×-NÑ-NÓ)OÐ(PÐQóð ô %(§K¢KØ�L‰L×&Ñ&×-Ñ-¨aÕ0×AÑAó%
ˆÔ!ð %)×$=Ñ$=×$EÑ$EÀdÈBÓ$OˆÖ!rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   r   rç   rK  r­   r°   r_  rŸ   )r    s   "r˜   r¡   r    s"   € ÷ ñ ˜ð  Zð Ð4Eñ rš   c                	ód  € \        V P                  P                  4      ^8w  d,   \        R\        V P                  P                  4       24      hWP                  P                  ^ ,          P	                  4       8X  d¥   V P
                  pV P                  V4      p\        P                  P                  V4      pVP                  '       d   VP                  pM\        P                  VP                  4      pV P                  P                  V P                   W5VR7      pV# \        RV R24      h)r  zexpected 1 mutable arg, got r  z!Epilogue attempted to load from 'úE'. Inductor indexing variables are not defined in user kernel scope. )r¨   r  Úmutable_argsr
  Úget_namer  r“  rX   r­  r  rL  rð   r  rK  rþ   r  rA  )rR  r   rK  Úloaded_exprr“  r®   r  rn  s   &&&     r˜   r   Ú!FusedUserDefinedTritonKernel.load  s  € äˆt�|‰|×(Ñ(Ó)¨QÔ.Ü Ø.¬s°4·<±<×3LÑ3LÓ/MÐ.NÐOóð ð —<‘<×,Ñ,¨QÕ/×8Ñ8Ó:Ô:ð ×3Ñ3ˆKØ—}‘} UÓ+ˆHÜ—G‘G×%Ñ% dÓ+ˆEØ×$×$Ð$Ø ×-Ñ-‘ä%×5Ñ5°h·n±nÓE�ØŸ™×*Ñ*Ø—
‘
˜K¸Eð +ó ˆJð Ðô !Ø3°D°6ð :Uð Uóð rš   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# rÏ  rŸ   )r    s   "r˜   r¡   r  -  s4   € ÷ ñ ØðØ *ðØ3>ðØFOðà	ñrš   c                	óÖ  € \        V P                  P                  P                  \        P
                  4      '       g6   \        R \        V P                  P                  P                  4       24      hWP                  P                  P                  P                  4       8X  d·   V P                  P                  P                  P                  p\        V\        P                  4      '       g   \        R\        V4       24      hVP                  pV P                  P                  V P                  V R\        V4       R2VVP                   R7      V n        R# \        RV R24      h)zexpected ComputedBuffer, got zexpected ir.Layout, got r’  r  r  z Epilogue attempted to store to 'r  N)r£   r  Úfused_epiloguer³   r$   ÚComputedBufferr
  rè  r  ÚlayoutÚLayoutr®   rþ   r  r  rA  r  Únew_store_cse_var)rR  r   rK  r  r4  r  r,  s   &&&&&  r˜   r  Ú"FusedUserDefinedTritonKernel.store-  s1  € ô ˜$×-Ñ-×<Ñ<×AÑAÄ2×CTÑCT×UÒUÜ Ø/´°T×5HÑ5H×5WÑ5W×5\Ñ5\Ó0]Ð/^Ð_óð ð ×&Ñ&×5Ñ5×:Ñ:×CÑCÓEÔEð ×(Ñ(×7Ñ7×<Ñ<×CÑCˆFÜ˜f¤b§i¡i×0Ò0Ü$Ð'?ÄÀVÃ¸~Ð%NÓOÐOØ Ÿ,™,ˆKØ%)§X¡X×%6Ñ%6Ø—‘Ø�'˜Ô/°Ó<Ð=¸QÐ?Ø!Ø—k‘kð	 &7ó &ˆDÖ"ô !Ø2°4°&ð 9Uð Uóð rš   c               ó   € V ^8„  d   QhRR/# ræ   rŸ   )r    s   "r˜   r¡   r  H  s   € ÷ =(ñ =(˜ñ =(rš   c                	óÔ  € V ;_uu_ 4        V P                  V P                  P                  P                  4       4      pV P                  P                  P	                  V4       R R R 4       \
        P                  ! V P                  P                  4      p^ RI	H
pHp V! V4      p\        VP                  4      ^8w  d"   \        R\        VP                  4       24      h\        P                   ! V P"                  P$                  4      pR R lpV! VP                  ^ ,          P&                  R^V4       \        P(                  ! V4      pVP+                  4       p	V! V4      pVP                  ^ ,          P&                  P,                  ^,
          p
RVP                  ^ ,          P&                  P.                  ,          pV P0                  P3                  4        Uu. uF  qËV,           NK  	  ppV P4                  P3                  4        Uu. uF  qËV,           NK  	  ppV	R V
 V,           V,           WšR  ,           pRP7                  V4      #   + '       g   i     ELñ; iu upi u upi )N)Úidentify_triton_storesÚidentify_triton_stores_from_astr	  c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   Ú	call_nodezast.Callrµ
  rç   Úpositional_indexr†  rŸ   )r    s   "r˜   r¡   Ú:FusedUserDefinedTritonKernel.codegen.<locals>.__annotate__]  s&   € ÷ 	,ñ 	,Øð	,àð	,ð "ñ	,rš   c                ó®   € \        V P                  4      V8”  d   W0P                  V&   V P                   F  pVP                  V8X  g   K  W4n        K  	  R # r¿   )r¨   rÇ   ÚkeywordsrÁ   r  )r(  rµ
  r)  Únew_argÚkeywords   &&&& r˜   Ú_replace_argÚ:FusedUserDefinedTritonKernel.codegen.<locals>._replace_arg]  sF   € ô �9—>‘>Ó"Ð%5Ô5Ø3:—‘Ð/Ñ0ð %×-Ô-�Ø—;‘; (Ö*Ø$+–Mó .rš   r  rå  r¤
  )Úsplit_and_set_rangesr  r  Ú
get_rangesÚcodegenr  Údeepcopyr  Ú
kernel_astÚ*torch._higher_order_ops.triton_kernel_wrapr%  r&  r¨   rÛ  r
  r  ÚNamer!  r   Ú
store_noder  Ú
splitlinesÚlinenoÚ
col_offsetrA  Úget_lines_refr  rq  )rR  r  Únew_astr%  r&  r  Únew_store_value_noder/  Úsrc_with_store_replacedÚ	src_linesÚstore_line_indexÚindentationsry  Ú
load_linesÚcompute_linesÚnew_src_liness   &               r˜   r3  Ú$FusedUserDefinedTritonKernel.codegenH  s  € ßŠTØ×2Ñ2Ø×#Ñ#×2Ñ2×=Ñ=Ó?óˆJð ×Ñ×.Ñ.×6Ñ6°zÔB÷	 ô —-’- §¡× 7Ñ 7Ó8ˆ÷	
ñ 8¸Ó@ˆÜˆ}×#Ñ#Ó$¨Ô)Ü Ð#9¼#¸m×>RÑ>RÓ:SÐ9TÐ!UÓVÐVä"Ÿxšx¨×(>Ñ(>×(CÑ(CÓDÐõ	,ñ 	Ø× Ñ  Õ#×.Ñ.°¸Ð<Pô	
ô #&§+¢+¨gÓ"6Ðð ,×6Ñ6Ó8ˆ	ñ /Ð/FÓGˆà(×/Ñ/°Õ2×=Ñ=×DÑDÀqÕHÐà˜]×1Ñ1°!Õ4×?Ñ?×JÑJÕJˆà04·
±
×0HÑ0HÔ0JÓKÑ0J¨1 Q×&Ð&Ñ0Jˆ
ÐKØ37·<±<×3MÑ3MÔ3OÓPÑ3O¨a¨×)Ð)Ñ3OˆÐPð Ð'Ð'Ð(Øõàõð Ð)Ð*õ+ð 	ð �y‰y˜Ó'Ð'÷y �TˆTüòf LùÚPs   ‹AIÇI ÈI%ÉI	)r  r!  r  r  r¿   )rÖ   rÞ   rß   rà   rá   re  r   r  r3  rä   rm  rn  s   @r˜   r  r  é  s)   ø† ñ÷"Pð "PõH÷6÷6=(ó =(rš   r  c            
      ól  a € ] tR tRt$ Rt]tR]R&   ]! ]	P                  ]	P                  ]	P                  ]	P                  ]	P                  ]	P                  ]	P                   ]	P"                  .4      tR V 3R llt]R R l4       tRR	 ltR
 tR tRR R lltRR R lltR R ltR R ltR tRtV ;t# )ÚTritonSchedulingiˆ  z5Scheduling backend for Triton kernel code generation.z	type[Any]Úkernel_typec               ó    € V ^8„  d   QhRRRR/# )rœ   rc  zScheduler | Noner°   rÓ   rŸ   )r    s   "r˜   r¡   ÚTritonScheduling.__annotate__™  s   € ÷ :ñ :Ð"2ð :°tñ :rš   c                	óÎ   <€ \         SV `  V4       Ve   \        VR4      '       g   R # VP                   F,  p\	        V\
        \        34      '       g   K!  \        Vn        K.  	  R # )Nr¨  )	rd  re  rë   r¨  r£   r>   r<   Údebug_triton_codeÚdebug_device_str)rR  rc  r³   rf  s   && €r˜   re  ÚTritonScheduling.__init__™  sN   ø€ Ü‰Ñ˜Ô#ØÒ¤G¨I°w×$?Ò$?ÙØ—O”OˆDÜ˜$¤Ô0BÐ C×DÔDÜ(9�Ö%ó $rš   c               ó   € V ^8„  d   QhRR/# )rœ   r«
  ztorch.devicerŸ   )r    s   "r˜   r¡   rK  ¢  s   € ÷ $ñ $¨,ñ $rš   c                	óè   € \         P                  P                  '       g!   \         P                  P                  '       d(   \	        . V P
                  O\        P                  N4      # V P
                  # r¿   )r#   rí   Úcooperative_reductionsÚforce_cooperative_reductionsr   Úbackend_featuresr\   ÚREDUCE_TO_SINGLE_ELEMENT)rÚ   r«
  s   &&r˜   Úget_backend_featuresÚ%TritonScheduling.get_backend_features¡  sX   € ô �M‰M×0×0Ð0Ü�}‰}×9×9Ð9äØP�#×&Ñ&ÐP¬×(OÑ(OÐPóð ð ×#Ñ#Ð#rš   c                	ó^  a
€ \         P                  P                  p\        W4      w  rEV'       d   VP	                  V4       \
        P                  '       dª   ^ RIHpH	o
 \        ;QJ d    V
3R lV 4       F  '       g   K   RM	  RM! V
3R lV 4       4      '       gb   V Uu. uF&  p\        Wv4      '       g   K  VP                  4       NK(  	  ppVP	                  VP                   RRP                  V4       24       V'       d    \        VV4      p	VP!                  W)4       R# R# u upi )r   )r:   ÚForeachKernelSchedulerNodec              3  ó<   <"  € T F  p\        VS4      x € K  	  R # 5ir¿   )r£   )rÀ   rÙ  rY  s   & €r˜   rÃ   Ú3TritonScheduling.codegen_comment.<locals>.<genexpr>¸  s   øé € ð ÙCP¸a”
˜1Ð8×9Ð9Ã=ùs   ƒTFz Fused node name list: r  N)rX   r­  rš  rI   Úmake_commentr#   Údebug_fusionÚtorch._inductor.schedulerr:   rY  rˆ   r£   r  Úcommentrq  r,   Úwrite_provenance_debug_handle)rR  rU  rF  r¦  ÚoriginsÚ_detailed_originsr:   rÙ  Ú
node_namesÚdebug_handlerY  s   &&&       @r˜   Úcodegen_commentÚ TritonScheduling.codegen_comment¬  s  ø€ Ü—'‘'×&Ñ&ˆÜ%8¸Ó%PÑ"ˆßØ× Ñ  Ô)ä××Ð÷÷
 “3ô ÙCPó—3—3’3ô ÙCPó÷ ò ñ +óá*˜Ü! !×7ô !�A—J‘J–LÙ*ð ð ð
 ×$Ñ$Ø—‘Ð'Ð'>¸t¿y¹yÈÓ?TÐ>UÐVô÷ ÜBØØóˆLð ×1Ñ1°+ÖLñ ùòs   Â$D*Â<D*c	                ó¤  € VP                  VVVVVV4      '       d   R# \        4       p	\        P                  4       '       d   \        P	                  WS4       T	P                  RV: R24       V	P                  VRR7       \        P                  P                  4       p
V	P                  RV
P                   R24       ^ RIHp V! 4       '       d3   V'       d+   ^ R	IHp \        P                   P#                  W|! 4       4      pR
V 2pV! Wa4      w  rïVRV,           R,           V,           ,          pVP%                  WIP'                  4       V4       R# )zDEmit kernel to wrapper, with support for external template handlers.Nzasync_compile.triton(z, '''Trä	  z''', device_str='z')rA  )Ú	cache_dirz# kernel path: r¤
  )Úemit_kernel_overridera   Úasync_compileÚuse_process_poolrí   rQ  r†  rX   r­  r¿  rè  rV  rB  Ú'torch._inductor.runtime.cache_dir_utilsrh  ÚosÚpathÚrelpathÚdefine_kernelr"
  )rR  r¦  rý   Úsrc_coderF  Ú	subs_namerU  Úkernel_pathrI   Úcompile_wrapperr€  rB  rh  Úmetadata_commentra  Údetailed_originss   &&&&&&&&&       r˜   Ú_emit_kernel_to_wrapperÚ(TritonScheduling._emit_kernel_to_wrapperÍ  s'  € ð ×&Ñ&ØØØØØØ÷
ò 
ñ ä(Ó*ˆä×)Ñ)×+Ò+ô × Ñ  Ô5à×!Ñ!Ð$9¸)¹ÀeÐ"LÔMà×Ñ˜x¨tÐÔ4ÜŸ™×<Ñ<Ó>ˆØ×!Ñ!Ð$5°n×6IÑ6IÐ5JÈ"Ð"MÔNõ
 	Eá�?Š?Ÿ{ÝIäŸ'™'Ÿ/™/¨+°y³{ÓCˆKØ,¨[¨MÐ:ÐÙ$7¸Ó$OÑ!ˆØ˜D 7�N¨TÕ1Ð4DÕDÕDÐØ×Ñ˜k×+CÑ+CÓ+EÐGWÖXrš   c           
     	óZ  € \         P                  P                  pWP                  9   d   VP                  V,          pV# \        P
                  P                  '       d%   \        V\        P
                  P                  4      MR pV'       d    \         P                  P                  Wa4      p\        V4      R,          pRP                  RWvVP                  4       .4      p\        P                  P                  '       d    \        P                  P                   RV 2pWTP                  V&   \        P
                  P                  '       d   TMRpVP!                  \#        \$        P&                  4      V4      pVP!                  \#        \$        P(                  4      V4      pVP!                  RR4      p\+        \-        VP/                  4       4      R4      w  ršpV P1                  VVVVVVV\2        4       \4        P6                  ! R4      '       d   \4        P8                  ! W[V4       V# )	rŒ   :Nr4  NrT  rí   Útriton_z#pragma CMTÚ#ÚpyÚkernel_metadata)rX   r­  rš  Úsrc_to_kernelr#   rí   Údescriptive_namesrH   rz  Úcustomize_fused_kernel_namerY   rq  Únext_kernel_suffixÚaot_inductorÚmodel_name_for_generated_filesÚunique_kernel_namesrO  rç   rK   rZ  r±
  r)   r(   rL  rw  rI   r%   Úis_metric_table_enabledÚlog_kernel_metadata)rR  rq  rU  rý   r¦  rF  Ú
fused_nameÚkernel_categoryrr  Ú	_basenamerT  rs  s   &&&&        r˜   rp  ÚTritonScheduling.define_kernel    sÉ  € Ü—'‘'×&Ñ&ˆØ×,Ñ,Ô,Ø!×/Ñ/°Õ9ˆKðf Ðô_ —=‘=×2×2Ð2ô & m´V·]±]×5TÑ5TÔUàð ÷
 ÜŸY™Y×BÑBÀ:ÓX�
Ü@ÀÓJÈ2ÕNˆOØŸ(™(Ø˜?¸×8RÑ8RÓ8TÐUóˆKô ×"Ñ"×A×AÐAô "(×!4Ñ!4×!SÑ!SÐ TÐTUÐVaÐUbÐc�ð /:×!Ñ! (Ñ+Ü'-§}¡}×'H×'HÐ'H™ÈiˆIð
  ×'Ñ'¬¬K×,HÑ,HÓ(IÈ;ÓWˆHØ×'Ñ'¬¬K×,CÑ,CÓ(DÀiÓPˆHð  ×'Ñ'¨°sÓ;ˆHä(0´¸8¿>¹>Ó;KÓ1LÈdÓ(SÑ%ˆI˜+à×(Ñ(ØØØØØØØÜ#ô	ô ×.Ò.Ð/@×AÒAÜ×+Ò+¨KÀhÔOàÐrš   c               ó   € V ^8„  d   QhRR/# )rœ   r°   útuple[float, str]rŸ   )r    s   "r˜   r¡   rK  8   s   € ÷ 	
ñ 	
ÐDUñ 	
rš   c                óš   € V P                  VRR7      p\        P                  ! V4      pV P                  WB\	        R V 4       4      R7      # )zk
Benchmark fused list of nodes and return the execution time
in milliseconds on randomly generated inputs.
T)r  c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   ©r  ©rÀ   rÙ  s   & r˜   rÃ   Ú9TritonScheduling.benchmark_fused_nodes.<locals>.<genexpr>@   s   é € Ð:WÑQVÈA¿:¹:¿<¸<ÓQVùrO  )rc  )Úgenerate_kernel_code_from_nodesr*   r   Úbenchmark_codegened_moduler   )rR  r¨  Ún_spills_thresholdrq  râ  s   &&&  r˜   Úbenchmark_fused_nodesÚ&TritonScheduling.benchmark_fused_nodes8   sS   € ð
 ×7Ñ7¸ÐPTÐ7ÓUˆÜ×Ò˜xÓ(ˆØ×.Ñ.Ø´
Ñ:WÑQVÓ:WÓ0Wð /ó 
ð 	
rš   c               ó$   € V ^8„  d   QhRRRRRR/# )rœ   rc  zOrderedSet[str] | NoneÚskip_perf_cacher´   r°   rŒ  rŸ   )r    s   "r˜   r¡   rK  C   s/   € ÷ c$ñ c$ð +ð	c$ð
 ðc$ð 
ñc$rš   c                ó  aaaaaa€ \        \        P                  P                  4      p\	        4       ;_uu_ 4        VP                  \        P                  P                  4       4      ;_uu_ 4        RoV3R loVV3R lpV3R lpVe   TM\        R.4      p\        P                  RVSP                  4       V'       g.   V! 4       oSe#   SSP                  3uuRRR4       uuRRR4       # SP                  4       oSP                  oSP                  o S! SP                  ! S!  ^ ,          4       SP(                  p	\+        T	4      ^8w  d   \-        R	\+        T	4       24      hT	^ ,          P.                  T8”  d   \'        R4      oMƒ\        P                  P                  4       p
\0        P2                  ! TTT3R
 lT
R7      o\+        SP4                  4      ^ 8”  d.   S\0        P2                  ! TT3R l\7        T
4      R7      ,
          o\        P                  RTS4       T! 4        SSP                  3uuRRR4       uuRRR4       #   \         dw   p\         P"                  P$                  '       d   h \        P                  RTT4       \'        R4      oT! 4        SSP                  3u Rp?uuRRR4       uuRRR4       # Rp?ii ; i  + '       g   i     M; i RRR4       R#   + '       g   i     R# ; i)a  Benchmark an already compiled module.

skip_perf_cache: don't serve the result from the .kernel_perf memo. Callers that
need the autotuned winner in mod.triton_.launchers (not just the timing) must set
this, since a perf-cache hit returns before the autotuner ever runs.
Nc                 ó¤   <€ S P                   f   \        R4      h\        P                  P	                  S P                   4      ^ ,          R,           # ©Nzmod.__file__ must not be Nonez.kernel_perf©Ú__file__r
  rm  rn  Úsplitext©râ  s   €r˜   Úcache_file_pathÚDTritonScheduling.benchmark_codegened_module.<locals>.cache_file_pathW   s<   ø€ Ø—<‘<Ò'Ü(Ð)HÓIÐIÜ—w‘w×'Ñ'¨¯©Ó5°aÕ8¸>ÕIÐIrš   c                 ó@   <€ S! 4       p \        V \        S4      4       R # r¿   ©r+   rç   )rn  r   Úmss    €€r˜   r£  Ú@TritonScheduling.benchmark_codegened_module.<locals>.store_cache\   s   ø€ Ù&Ó(�Ü˜T¤3 r£7Ö+rš   c                 óö   <€ S! 4       p \         P                  P                  V 4      '       d8   \        V 4      ;_uu_ 4       p\	        VP                  4       4      uuR R R 4       # R #   + '       g   i     R # ; ir¿   )rm  rn  ÚexistsÚopenrÑ  Úread©rn  Úfdr   s     €r˜   Ú
load_cacheÚ?TritonScheduling.benchmark_codegened_module.<locals>.load_cache`   sL   ø€ Ù&Ó(�Ü—7‘7—>‘> $×'Ò'Ü˜dŸœ rÜ$ R§W¡W£YÓ/÷ $šá÷ $žáús   ÁA'Á'A8	rÔ	  ú%kernel src code for %s written to: %sz*Exception (%s) in compiling fused nodes %sr¬  úexpected 1 launcher, got c                 ó>   <€ S! SP                   ! S !  ^ ,          4      # rÝ  ©Ú
clone_args©rÇ   ÚcallÚwrapped_jit_functions   €€€r˜   r(	  Ú=TritonScheduling.benchmark_codegened_module.<locals>.<lambda>“   s   ø€ ™DÐ!5×!@Ò!@À$Ñ!GÈÕ!JÔKrš   ©r«
  c                 ó$   <€ SP                   ! S !  # r¿   r±  ©rÇ   rµ  s   €€r˜   r(	  r¶  œ   s   ø€ Ð 4× ?Ò ?ÀÒ Frš   z+The fused kernel for %s took %.3f ms to run)r   rX   r­  rz  r   r«
  r¿  r   rL  rv  r�  Úget_argsr´  rz  r²  Ú	Exceptionr#   rí   Ú.disallow_failing_autotune_kernels_TESTING_ONLYrÑ  Ú	launchersr¨   r
  Ún_spillsr/   Ú	benchmarkrG  rç   )rR  râ  r”  rc  r˜  Údevice_interfacer£  r¬  rr  r½  r«
  rÇ   r   r´  r¤  rµ  s   &f&&&      @@@@@r˜   r“  Ú+TritonScheduling.benchmark_codegened_moduleC   sl  ý€ ô 4´A·G±G×4GÑ4GÓHÐä× Õ Ø×#Ñ#¤A§G¡G×$GÑ$GÓ$I×JÕJàˆBõJö
,õð )Ò4‘
¼*ÀiÀ[Ó:Qð ô �I‰IØ7ØØ—‘ô÷
 #Ù“\�Ø’>Ø˜sŸ|™|Ð+÷? KÑJ÷ !Ò ðD —<‘<“>ˆDØ—8‘8ˆDØ#&§;¡;Ð ð(ÙÐ)×4Ò4°dÑ;¸AÕ>Ô?ð -×6Ñ6ˆIÜ�9‹~ Ô"Ü$Ð'@ÄÀYÃÐ@PÐ%QÓRÐRð ˜�|×$Ñ$Ð'9Ô9ä˜5“\‘äŸ™×<Ñ<Ó>�ô !×*Ò*ÞKØ!ô�ô Ð+×=Ñ=Ó>ÀÔBØœk×3Ò3ÝFÜ" 6›{ôõ �Bô
 �I‰IØ=ØØôñ
 ŒMØ�s—|‘|Ð#÷g KÑJ÷ !Ò øôP ô 
(Ü—=‘=×O×OÐOØÜ—	‘	Ø@ØØôô
 ˜5“\�Ù”Ø˜3Ÿ<™<Ð'Ô'÷c KÑJ÷ !Ò ûðP
(ú÷O K×JúÐJ÷ !× × Ò úsn   ¼6K2Á2AK	ÃK	Ã
K2Ã0(K	ÄIÄ6DK	È;
K2ÉKÉAKÊ2KÊ3K	Ê7
K2ËKËK	ËK$ËK2Ë2L	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rœ   r€  r‚   Úkernel_argsú	list[Any]r�  r½  r°   úlist[TritonKernel]rŸ   )r    s   "r˜   r¡   rK  ¨   s8   € ÷ Qñ Qà+ðQð ðQð &ð	Qð
 
ñQrš   c                	óÀ  € VP                  R 4      pT;'       dQ    \        ;QJ d*    R VP                  4        4       F  '       g   K   RM	  RM! R VP                  4        4       4      pV P                  pV'       d	   ^RIHp TpV'       d   RVR&   VP                  W4       \        P                  P                  WaW#4      pV! V/ VB pV P                  W‚V4      # )r[
  c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   )Úis_split_scan)rÀ   r³   s   & r˜   rÃ   Ú9TritonScheduling.create_kernel_choices.<locals>.<genexpr>¯   s   é € ð (
Ù-N T×Ñ× Ð Ó-NùrO  TF)ÚTritonSplitScanKernelr„  )rž  rˆ   Úscheduler_nodesrI  Útriton_split_scanrÊ  r…  rX   rz  Útriton_kernel_kwargsÚadd_multi_kernel_choices)	rR  r€  rÃ  r�  Úis_scanrÈ  rI  rÊ  rý   s	   &&&&     r˜   Úcreate_kernel_choicesÚ&TritonScheduling.create_kernel_choices¨   sÏ   € ð "×-Ñ-¨fÓ5ˆØ÷ 
ð 
§C£Cñ (
Ø-<×-LÑ-LÔ-Nó(
§C§C¢Cñ (
Ø-<×-LÑ-LÔ-Nó(
ó %
ˆð +/×*:Ñ*:ˆßÝ@à/ˆKçà>CˆMÐ:Ñ;à×4Ñ4°_ÔTäŸ	™	×6Ñ6Ø¨+ó
ˆñ ˜kÐ;¨]Ñ;ˆØ×,Ñ,¨VÀ-ÓPÐPrš   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rœ   rý   r$  rÃ  rÄ  r�  r½  r°   rÅ  rŸ   )r    s   "r˜   r¡   rK  Ä   s2   € ÷ 3ñ 3àð3ð ð3ð &ð	3ð
 
ñ3rš   c           
     	óF  € V.p\         P                  P                  '       g   V# VP                  ;'       d    VP	                  R 4      '       * pVP
                  ;'       d    VP	                  R4      '       * pV'       d&   VP                  V P                  ! V/ VBR R/B 4       V'       d¯   VP                  P                  p\        P                  P                  P                  VR4      '       di   VP                  V P                  ! V/ VBRR/B ;p4       V'       d:   VP                  '       d(   VP                  V P                  ! V/ VBRRR R/B 4       \        V4      ^8”  d5   VR,           F  p	VP                  V	n        K  	  VP!                  R R7       V# )rƒ  r„  Fi   rÇ  c                ó   € V P                   # r¿   )rˆ  )r  s   &r˜   r(	  Ú;TritonScheduling.add_multi_kernel_choices.<locals>.<lambda>ö   s
   €  q×'=Ò'=rš   r  )r#   rí   Úmulti_kernelrˆ  r	  rÓ  r_  rI  r¹  r|  rX   r­  r§  r-  r¨   Úmust_keep_buffersrñ  )
rR  rý   rÃ  r�  ÚkernelsÚoptional_persistentÚoptional_cooperativerl
  rm  Úkernel2s
   &&&&      r˜   rÎ  Ú)TritonScheduling.add_multi_kernel_choicesÄ   s£  € ð (. hˆÜ�}‰}×)×)Ð)ØˆNà$×9Ñ9÷ 
ð 
À-×BSÑBSØ+óC
ô ?
Ðð  &×;Ñ;÷  
ð  
ÀM×DUÑDUØ,óE
ô A
Ð÷ Ø�N‰NØ× Ò Ø ðà#ñð 38òô÷  Ø—_‘_×4Ñ4ˆFä�w‰w×Ñ×4Ñ4°V¸U×CÒCØ—‘Ø!×-Ò-Ø$ðà'ñð 8=òð �Eô÷ '¨5×+E×+EÐ+EØ—N‘NØ×(Ò(Ø(ðà+ñð <Aðð ;@ò	ôô ˆw‹<˜!ÔØ" 2Ÿ;˜;�à,2×,DÑ,D�Ö)ñ 'ð �L‰LÑ=ˆLÔ>Øˆrš   c           	     ó  aaaaaaa € V3R loV3R lpVVV3R lp^ . reRp\         P                  P                  p\         P                  P                  p	\	        V4      \         P                  n        \	        V	4      \         P                  n        \
        P                  ^ 8„  p
\
        P                  ^ 8„  p\
        P                  p V P                  VRV
VRVR7      pV EF¼  w  rïpV Uu. uF  pVP                  4       NK  	  ppV UUu. uF  pV F  pVP                  4       NK  	  K  	  ppp\        V4      ^8X  d9   VV^ ,          ,          w  ppVV,          pV^ ,          pVP                  V4       K˜  Vf   \        R4      hVP                  \!        \"        P$                  4      R	4      p\&        P(                  ! V4      o\*        P-                  R
VSP.                  4       V! 4       w  ooSe1   VS,          pVS,          pVP                  SP.                  4       EKE  SP1                  4       oSP2                  oSP4                  o S! S P6                  ! S!  ^ ,          4       S P8                  p\        V4      ^8w  d   \        R\        V4       24      hV^ ,          P:                  ^ 8”  d   \=        R4      ;ooMY\         P                  P?                  4       p\@        PB                  ! VVV 3R lVR7      o\@        PB                  ! VV 3R lVR7      o\*        P-                  R\	        R V 4       4      SS4       V! 4        VS,          pVS,          pVP                  SP.                  4       R;o;oo \D        PF                  PI                  4        EK¿  	  V\         P                  n        V	\         P                  n        WWV3# u upi u uppi   T\         P                  n        T	\         P                  n        i ; i)a+  
Benchmark combo kernel partitions and return total execution time.

Generates kernel code for each partition and benchmarks them.
Single-node partitions use benchmark_fused_nodes(), while multi-node
partitions use the combo kernel benchmarking path.

Returns (total_ms, total_clone_ms, file_list).
c                 ó¤   <€ S P                   f   \        R4      h\        P                  P	                  S P                   4      ^ ,          R,           # r›  rœ  rŸ  s   €r˜   r   Ú@TritonScheduling.benchmark_combo_kernel.<locals>.cache_file_path!  s<   ø€ Ø�|‰|Ò#Ü$Ð%DÓEÐEÜ—7‘7×#Ñ# C§L¡LÓ1°!Õ4°~ÕEÐErš   c                 óŒ  <€ S! 4       p \         P                  P                  V 4      '       dƒ   \        V 4      ;_uu_ 4       p\        ;QJ d0    . R  VP                  4       P                  4        4       F  NK  	  5M)! R  VP                  4       P                  4        4       4      uuRRR4       # R#   + '       g   i     R# ; i)c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir¿   )rÑ  )rÀ   rr  s   & r˜   rÃ   ÚNTritonScheduling.benchmark_combo_kernel.<locals>.load_cache.<locals>.<genexpr>!  s   é € Ð EÑ3D¨a¤ q§ Ó3Dùr‰  Nr  )rm  rn  r§  r¨  rÈ   r©  rK  rª  s     €r˜   r¬  Ú;TritonScheduling.benchmark_combo_kernel.<locals>.load_cache!  sz   ø€ Ù"Ó$ˆDÜ�w‰w�~‰~˜d×#Ò#Ü˜$—Z”Z 2ß œ5Ñ E°2·7±7³9·?±?Ô3DÓ EŸ5™5Ñ E°2·7±7³9·?±?Ô3DÓ EÓE÷  ’ZàÐ÷  –ZàÐús   ÁA$B2Â2C	c                 ón   <€ S! 4       p \        V \        S4      R ,           \        S4      ,           4       R# )rå  Nr£  )rn  r   r¤  Úms_clones    €€€r˜   r£  Ú<TritonScheduling.benchmark_combo_kernel.<locals>.store_cache!  s&   ø€ Ù"Ó$ˆDÜ˜œs 2›w¨�}¬s°8«}Õ<Ö=rš   g        T)Úsubkernel_nodesÚcustom_part_algorithmÚenable_autotuneÚmixed_sizesÚonly_gen_src_coder�  Nzsrc_code must not be Nonerz  r®  r¯  r¬  c                 ó>   <€ S! SP                   ! S !  ^ ,          4      # rÝ  r±  r³  s   €€€r˜   r(	  Ú9TritonScheduling.benchmark_combo_kernel.<locals>.<lambda>_!  s   ø€ ¡Ð%9×%DÒ%DÀdÑ%KÈAÕ%NÔ Orš   r·  c                 ó2   <€ SP                   ! S !  ^ ,          # rÝ  r±  r¹  s   €€r˜   r(	  rí  c!  s   ø€ Ð 4× ?Ò ?ÀÑ FÀqÖ Irš   zDThe fused kernel for %s took %.3f ms to run, %.3f ms to clone inputsc              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir¿   r�  r�  s   & r˜   rÃ   Ú:TritonScheduling.benchmark_combo_kernel.<locals>.<genexpr>i!  s   é € Ð@±Z°Ÿz™zŸ|˜|³ZùrO  )%rX   r­  r  Úinplaced_to_remover   r#   Úcombo_kernels_autotuneÚcombo_kernel_allow_mixed_sizesÚ!combo_kernel_per_subkernel_blocksÚgenerate_combo_kernel_codeÚ	get_nodesr  r¨   r_  r
  rO  rç   rK   r±
  r*   r   rL  rv  r�  rº  r´  rz  r²  r½  r¾  rÑ  r¿  r/   r¿  r×   ÚacceleratorÚempty_cache)!rR  Ú	node_listÚnode_benchmark_resultsr¬  r£  Útotal_msÚ	file_listÚtotal_clone_msÚremoved_buffers_origÚinplaced_to_remove_origré  rê  r�  Úkernel_code_listrq  rý   Ú
node_groupr³   Úfused_node_listsr¨  rÙ  ÚnamesÚnode_msrn  r½  r«
  rÇ   r   r´  râ  r¤  rå  rµ  s!   &&&                       @@@@@@@r˜   r  Ú'TritonScheduling.benchmark_combo_kernelù   su  þ€ õ	Fõ
	 ÷	>ð   �)Ø #ˆô
  !Ÿw™w×6Ñ6ÐÜ"#§'¡'×"<Ñ"<ÐÜ",Ð-AÓ"BŒ�‰ÔÜ%/Ð0GÓ%HŒ�‰Ô"Ü ×7Ñ7¸!Ñ;ˆÜ×;Ñ;¸aÑ?ˆÜ%×GÑGÐðQ	AØ#×>Ñ>Ø )Ø&*Ø /Ø'Ø"&Ø%9ð  ?ó  Ðô 1AÑ,� *ÙAKÓ#LÁ¸ D§N¡NÖ$4ÁÐ Ð#LÙ3CÔSÑ3C¨%ËUÈ˜Ÿ™žÉU™Ñ3C�ÑSä�z“? aÔ'à$:¸:Àa½=Õ$I‘M�G˜Tà Õ'�HØ" aÕ'�NØ×$Ñ$ TÔ*ÙàÒ#Ü(Ð)DÓEÐEØ#×+Ñ+¬C´×0GÑ0GÓ,HÈ)ÓT�Ü!×&Ò& xÓ0�ä—	‘	Ø;ØØ—L‘Lôñ
  *›|‘��HØ’>Ø •N�HØ" hÕ.�NØ×$Ñ$ S§\¡\Ô2Úà—|‘|“~�Ø—x‘x�Ø'*§{¡{Ð$ñ Ð)×4Ò4°dÑ;¸AÕ>Ô?à0×:Ñ:�	Ü�y“> QÔ&Ü(Ð+DÄSÈÃ^ÐDTÐ)UÓVÐVØ˜Q•<×(Ñ(¨1Ô,ä$)¨%£LÐ0�B™äŸW™W×@Ñ@ÓB�Fô %×.Ò.ÞOØ%ô�Bô  +×4Ò4ÝIØ%ô �Hô
 —	‘	ØZÜÑ@±ZÓ@Ó@ØØô	ñ ”Ø˜B•�Ø (Õ*�Ø× Ñ  §¡Ô.Ø59Ð9�Ð9�tÐ2Ü×!Ñ!×-Ñ-×/ñG 1AðJ ';ŒA�G‰GÔ#Ø)@ŒA�G‰GÔ&Ø¨Ð2Ð2ùòM $MùÛSøðF ';ŒA�G‰GÔ#Ø)@ŒA�G‰GÕ&ús+   Ã$O Ã,OÄO Ä"OÄ.I4O ÏO Ï,PrŸ   r¿   )é   )r  NF) rÖ   rÞ   rß   rà   rá   r$  rI  râ   r   r\   ÚFOREACHÚ	BUCKETIZEÚINPLACE_BUFFERSÚMASKED_SCATTER_WITH_INDEXÚSCANÚSORTÚTRITON_TEMPLATESÚTUPLE_REDUCTIONrT  re  rã   rV  re  rw  rp  r•  r“  rÐ  rÎ  r  rä   rm  rn  s   @r˜   rH  rH  ˆ  s¾   ø‡ Ù?à)€K�Ó)Ù!à×"Ñ"Ø×$Ñ$Ø×*Ñ*Ø×4Ñ4Ø×ÑØ×ÑØ×+Ñ+Ø×*Ñ*ð		
óÐ÷:ð :ð ô$ó ð$ôMòB1Yòf6÷p	
÷c$õJQõ83÷j}3ð }3rš   rH  c               ó    € V ^8„  d   QhRRRR/# )rœ   r³   r:   r°   rO  rŸ   )r    s   "r˜   r¡   r¡   y!  s   € ÷ (ñ (Ð-ð (°)ñ (rš   c                óŒ  € . pV P                  4       pVe,   \        V\        P                  4      '       g   \	        R4      hV'       d3   VP
                  f%   VP                  V P                  4        R24       V# ^ RIH	p ^ RI
Hp V P                  4       pVf   \	        R4      hV P                  P                  V4      p\        V\        W434      '       g   \	        R\!        V4       24      h\"        P$                  P'                  V4      ;_uu_ 4        \(        P*                  pVP-                  V P/                  4       4      P1                  4       pV\(        n        R R R 4       VP                  V P                  4        R24       VP                  \2        P4                  ! XR4      4       V#   + '       g   i     LZ; i)	Nz4multi_template must be None or a MultiTemplateBufferz" Unfinalized multi template buffer)ÚCUDACombinedScheduling)ÚXPUCombinedSchedulingzdevice must not be Nonez]Scheduling backend should be SIMD or CUDACombined when generating debug Triton strings, got: z Triton code:z    )Úget_template_noder£   r$   ÚMultiTemplateBufferr
  Úmake_kernel_renderr_  r  Ú0torch._inductor.codegen.cuda_combined_schedulingr  Ú3torch._inductor.codegen.xpu.xpu_combined_schedulingr  r©
  rc  Úget_backendrr   rè  rX   r­  Úset_current_devicer%   Úgenerated_kernel_countr’  rö  rL  rÀ
  rï  )	r³   ÚlinesÚmulti_templater  r  r«
  ÚbackendÚold_generated_kernel_countÚtriton_codes	   &        r˜   rM  rM  y!  sz  € Ø€EØ×+Ñ+Ó-€NàÒ¤*¨^¼R×=SÑ=S×"TÒ"TäÐSÓTÐTß˜.×;Ñ;ÒCØ�‰˜Ÿ™›Ð(Ð(JÐKÔLð@ €Lõ=	
õ	
ð —‘Ó"ˆØŠ>Ü Ð!:Ó;Ð;Ø—.‘.×,Ñ,¨VÓ4ˆÜØ”nÐ&<ÐT÷
ò 
ô !ØoÔptÐu|Óp}Ðo~Ðóð ô �W‰W×'Ñ'¨×/Õ/ô *1×)GÑ)GÐ&Ø!×AÑAØ—‘Ó óç‰e‹gð ð .HŒGÔ*÷ 0ð 	�‰˜Ÿ™›Ð(¨Ð6Ô7Ø�‰”X—_’_ [°&Ó9Ô:Ø€L÷ 0×/ús   ÄA	F3Æ3G	r;  )ôÚ
__future__r   r  r.  rÝ  r  rö  r…  r‹  Úloggingrº  r  rm  rÀ
  Úabcr   Úcollections.abcr   r   r   r   Útypingr	   r
   r   r   r¤   Úsympy.printing.precedencer   r×   Útorch._loggingÚtorch.utils._pytreer&   Ú_pytreeru	  Útorch._dynamo.device_interfacer   Útorch._dynamo.utilsr   r   Útorch._prims_commonr   r   Útorch.utils._ordered_setr   rS  r   r   r   r   r   r   Útorch.utils._tritonr   r   r   r   Úutils._sympy.symbolr   r   r    r!   Úutils._sympy.value_rangesr"   rŒ   r#   r$   r%   rj  r'   Ú	codecacher(   r)   r*   r+   rv  r,   Úops_handlerr-   Úruntimer.   Úruntime.benchmarkingr/   Úruntime.hintsr0   r1   r2   r3   r4   r5   r6   r7   Úruntime.runtime_utilsr8   r9   rc  r:   r;   r<   r=   r>   Úshape_propagationr?   Ústream_utilsr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   ÚvirtualizedrU   r÷  rV   rW   rX   Úwrapper_benchmarkrY   Úblock_analysisrZ   Úcommonr[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   Úsimdrk   rl   rm   rn   ro   rp   rq   rr   rR  rs   Útriton_utilsrt   ru   rv   rw   rx   ry   rz   r¦  r{   Útypesr|   ru  r~   Ú%torch.fx.experimental.symbolic_shapesr   r€   r�   r‚   rƒ   Ú	getLoggerrÖ   rL  Ú_loggingÚgetArtifactLoggerÚperf_hint_logÚschedule_logÚ
fusion_logr™   r«   rÌ   rÎ   rî   rð   r'  rE  rx  r0  r=  r  rX  r  rf  rØ  r!  r=  rA  rG  rJ  rM  rP  rW  r]  r_  rq  rv  rš  rœ  rÜ   rÂ  rC  Ú_initialize_pointwise_overridesr  rÄ  ry  r)  rH  rç   rÈ   rd  r”  rU  rQ  rT  r�  rX  rj  r$  r  rH  rM  rŸ   rš   r˜   Ú<module>rG     sº  ðå "ã 
Û Û Û Û Û Û Û Û Û Û 	Û Ý ß 8Ñ 8Ý ß 4Ó 4ã Ý 0ã Û ß $Ð $Ý Cß <ß ?Ý /÷÷ ÷ó ÷ YÓ XÝ 4ß )Ó )Ý (ß FÓ FÝ ;Ý (Ý 'Ý .÷	÷ 	ó 	÷ D÷õ õ 6÷ñ ÷
÷ ÷ ÷ ÷ ÷( CÓ BÝ BÝ /÷÷ ÷ ÷ ó ÷$	÷ 	ó 	õ H÷÷ ñ õ %÷ Ý åLÝ>åÝ&Ý8á	�‹€Bà×Ó˜Ó!€Ø—’×0Ò0°¸<ÓH€Ø�~Š~×/Ò/°¸*ÓE€Ø�^Š^×-Ò-¨h¸ÓA€
Ù“€ò,õ	õ&'÷R6ñ 6ñ  ˆ4ƒôó ð÷$j
ñ j
ðZ ×Ò÷$
ð $
ó ð$
ðN ×Ò÷b$ð b$ó ðb$ðJ ×Òô?Ð4ó ?ó ð?ð8 ×Òô=Ð,ó =ó ð=õ@õ6õ+ôLGQ�Mô GQñT 	‹×Ò€õ3õ
õ&õ8õ
;õPõõô2˜ô 2ð@ ×Ó˜dÔ#÷ð ó $ðõ(÷(ôVk&�kô k&ð`! × Ò ˜×3Ò3°TÔ :Ø × Ò ˜×2Ò2°DÔ 9Ø × /Ò /°Ô 9ôU"˜Oô U"÷p$+ñ $+ðN ×Ò÷R
ð R
ó ðR
÷j!ñ !ðH ×Ò÷#ð #ó ð#ð �U˜3 ˜8•_Õ$€ØÐ+¨SÐ0Õ1€Ø�~¨Õ,¨cÐ1Õ2€ð ×Ó˜dÔ#÷ð ó $ðð ×Ó˜dÔ#÷ð ó $ðð +Ð-DÕD€ô�Ð% |Ð3Õ4ô ð* ×Ò÷oð oó ðoôd\HM�:Ð/Õ0ô \HMô~P\( <ô \(ô~n3�~ô n3÷b(rš   