ó
    Eñii  ã                  ó~  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKJrJr  S SKJrJr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKJrJr  S SK r S SK!r!S SK"r!S SK#J$r$  S S	K%J&r'  S S
K(J)r)  S SK*J+r+  S SK,J-r-  S SK.J/r0  S SK1J2r2J3r3J4r4  S SK5J6r6J7r7  SSK8J9r9J:r:  SSK;J<r<  SSK=J>r>J?r?  SSK@JArA  SSKBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrN  SSKOJPrPJQrQJRrRJSrSJTrTJUrUJVrV  \(       ak  S SKWJXrXJYrYJZrZJ[r[  S SK"J\r\  SSK]J^r^  SSK_J`r`JaraJbrbJcrc  SSKdJere  SSKfJgrgJhrhJiri  SSK@Jjrj  SSKkJlrl  \" S 5      rm\X\\h   /\g4   rn\o\l   rp\\q\ Rä                  4   rs\qrt\!Rê                  Rí                  \wS!5      rx\Rò                  " \w5      rzGSS" jr{\Rø                   " S# S$5      5       r} " S% S&\R$                  5      r~ " S' S(\5      r\H" S)S*9 " S+ S,\5      5       r€ " S- S.5      r�\Rø                   " S/ S05      5       r‚\Rø                   " S1 S25      5       rƒ\Rø                   " S3 S45      5       r„\Rø                   " S5 S65      5       r…\Rø                   " S7 S85      5       r†\\€\‚\ƒ\…\„4   r‡0 rˆS9\‰S:'    " S; S<5      rŠ0 r‹S=\‰S>'   0 rŒS?\‰S@'   0 r�SA\‰SB'       GS               GSSC jjrŽ " SD SE\5      r�    GSSF jr�      GSSG jr‘GSSH jr’ GS       GSSI jjr“GSSJ jr”GSSK jr•\GR,                  GSSL j5       r—        GSSM jr˜      GSSN jr™GSSO jrš\!GR6                  \!GR8                  \!GR:                  \!GR8                  0\!GR<                  \!GR>                  \!GR@                  \!GRB                  \!GRD                  \!GRF                  \!GRH                  \!GRJ                  \!GRL                  \!GRN                  \!GRP                  4 V s0 s H  n X _M     sn Er©SP\‰SQ'           GSSR jrª        GSST jr«        GSSU jr¬GSSV jr­ " SW SX5      r® " SY SZ\05      r/ " S[ S\5      r¯\GR`                  " S]\GRb                  S^9r²GS S_ jr³ " S` Sa\>\¯\R\   5      r´\Rø                   " Sb Sc5      5       rµ\¶" GS!0 Sd\µ" \$GRn                  Se SfSg9_Sh\µ" \$GRn                  Si Sj SkSl9_Sm\µ" \$GRn                  Sn So SpSl9_Sq\µ" \$GRn                  Sr Ss StSl9_Su\µ" \$GRn                  Sv Sw SxSl9_Sy\µ" \$GRn                  Sz S{ SyS|9_S}\µ" \$GRn                  S~ S S€Sl9_S�\µ" \$GRn                  S‚ Sƒ S„ S�S…9_S†\µ" \$GRp                  S‡ Sˆ S†Sl9_S‰\µ" \$GRn                  SŠ S‰Sg9_S‹\µ" \$GRn                  SŒ S‹Sg9_S�\µ" \$GRn                  SŽ S�Sg9_S�\µ" \$GRn                  S‘ S’Sg9_S“\µ" \$GRn                  S” S• S– S“S—9_S˜\µ" \$GRn                  S™ Sš S›S|9_Sœ\µ" \$GRn                  S� Sž SŸSl9_S \µ" \$GRn                  S¡ S¢Sg9_S£\µ" \$GRn                  S¤ S¥Sg9_S¦\µ" \$GRn                  S§ S¨ S©Sl9_Sª\µ" \$GRn                  S« S¬ S­Sl9_S®\µ" \$GRn                  S¯ S°Sg9_S±\µ" \$GRn                  S² S³Sg9_S´\µ" \$GRn                  Sµ S¶Sg9_S·\µ" \$GRn                  S¸ S¹Sg9_Sº\µ" \$GRn                  S» SºSg9_S¼\µ" \$GRn                  S½ S¾Sg9_S¿\µ" \$GRn                  SÀ SÁSg9_SÂ\µ" \$GRn                  SÃ SÄSg9_SÅ\µ" \$GRn                  SÆ SÇSg9_SÈ\µ" \$GRn                  SÉ SÊSg9_SË\µ" \$GRn                  SÌ SÍSg9_SÎ\µ" \$GRn                  SÏ SÐSg9_SÑ\µ" \$GRn                  SÒ SÓSg9_SÔ\µ" \$GRn                  SÕ SÖSg9_S×\µ" \$GRn                  SØ SÙSg9_SÚ\µ" \$GRn                  SÛ SÜSg9_SÝ\µ" \$GRn                  SÞ SßSg9_Sà\µ" \$GRn                  Sá SâSg9_Sã\µ" \$GRn                  Sä SåSg9_Sæ\µ" \$GRn                  Sç SèSg9_Sé\µ" \$GRn                  Sê SëSg9_6r¹Sì\‰Sí'   GS"Sî jrº " Sï Sð\D5      r» " Sñ Sò\G5      r¼ " Só Sô\5      r½\Rø                   " Sõ Sö5      5       r¾ " S÷ Sø5      r¿\¿" 5       rÀ " Sù Sú5      rÁ " Sû Sü5      rÂ\" Sý\qSþ9rÃ\" SS\Â\ÂSÿ9rÄ\(       a  \Å\!GRŒ                  \T\\Â\Å\ÂGS 4   4   4   rÇ " GS GS\\Ä\Ã4   5      rÈ " GS GS5      rÉ " GS GS\É\\Ä   5      rÊ\Rø                   " GS GS5      5       rË\GR,                  GS#GS	 j5       rÌ " GS
 GS5      rÍ " GS GS\?5      rÎgs  sn f ($  é    )ÚannotationsN)ÚABCÚabstractmethod)ÚautoÚEnum)Úchain)ÚAnyÚcastÚClassVarÚGenericÚ
NamedTupleÚOptionalÚTYPE_CHECKINGÚUnion)ÚSelfÚTypeVar)ÚELEMENTWISE_TYPE_PROMOTION_KIND)Ú_pytree)ÚConfigModule)Ú
OrderedSet)Úint_oo)ÚPythonPrinter)Úfree_symbol_is_typeÚsymbol_is_typeÚSymT)Úbound_sympyÚValueRangesé   )ÚconfigÚmetrics)ÚDtypePropagationOpsHandler)ÚBasicMathOpsMixinÚDefaultHandler)ÚShapePropagationOpsHandler)Úboolean_opsÚDeferredLineBaseÚgenerate_assertÚget_current_backendÚIndentedBufferÚir_dataclassÚ
ScopedDictÚ	sympy_dotÚsympy_index_symbolÚ
sympy_subsÚtriton_typeÚunique)ÚNullHandlerÚopsÚ
OpsHandlerÚOpsValueÚReductionTypeÚ	StoreModeÚV)ÚCallableÚIteratorÚMutableMappingÚSequence)ÚGraphModule)ÚCustomGraphModulePass)ÚBufferÚChoiceCallerÚFixedLayoutÚIRNode©ÚLoopBody)ÚBaseSchedulingÚ	SchedulerÚSchedulerNode)ÚBlockShapeTypeé   ©ÚPythonWrapperCodegenÚ_TÚschedulec                ó‚   • [         R                  [        R                  5      (       a  [         R	                  SU 5        g g )NzData type propagation: %s)Úschedule_logÚisEnabledForÚloggingÚDEBUGÚdebug)Úmsgs    Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/codegen/common.pyÚdata_type_loggerrU   a   s-   € Ü× Ñ ¤§¡×/Ñ/Ü×ÑÐ6¸Õ<ð 0ó    c                  ój   • \ rS rSr% SrS\S'   S\S'   SS jr\SS j5       rSS	 jr	\SS
 j5       r
Srg)ÚFileBackedGraphModuleéf   z…
Output of FX wrapper codegen. Exposes the same methods as ModuleType, but these
map back to a GraphModule instead of Python source.
r<   ÚgmzCallable[..., Any]Úcompiled_fnc                ó.  • [         R                  " SSSS9U l         [        R                  " [        R
                  U R                   R                  5        U R                    nUR                  U R                  5        S S S 5        g ! , (       d  f       g = f)Nzw+z.pyF)ÚmodeÚsuffixÚdelete)	ÚtempfileÚNamedTemporaryFileÚatexitÚregisterÚosÚremoveÚnameÚwriteÚvalue)ÚselfÚfs     rT   Ú__post_init__Ú#FileBackedGraphModule.__post_init__p   s^   € ô !×3Ò3Ø˜e¨Eñ
ˆŒô 	�ŠœŸ	™	 4§=¡=×#5Ñ#5Ô6Ø�]Š]˜aØ�G‰G�D—J‘JÔ÷ �]Ž]ús   Á!BÂ
Bc                ó.   • U R                   R                  $ ©N)r`   rf   ©ri   s    rT   Ú__file__ÚFileBackedGraphModule.__file__z   s   € à�}‰}×!Ñ!Ð!rV   c                ó    • U R                   " U6 $ rn   )r[   ©ri   Úargss     rT   ÚcallÚFileBackedGraphModule.call~   s   € Ø×Ò Ð&Ð&rV   c                ó.   • U R                   R                  $ rn   )rZ   Úcodero   s    rT   rh   ÚFileBackedGraphModule.value�   s   € à�w‰w�|‰|ÐrV   )r`   N©ÚreturnÚNone©r{   Ústr)rt   ú	list[Any]r{   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__rk   Úpropertyrp   ru   rh   Ú__static_attributes__© rV   rT   rX   rX   f   sF   ‡ ñð
 	ƒOØ#Ó#ô ð ó"ó ð"ô'ð óó órV   rX   c                  óH   • \ rS rSrSrSrSr\S	S j5       r\S
S j5       r	Sr
g)ÚWorkspaceZeroModeé†   r   rH   r   c                óŒ   • X:X  d  U[         R                  :X  a  U $ U [         R                  :X  a  U$ [        SU < SU< S35      e)NzWorkspaceZeroMode.combine(ú, Ú))rŠ   ÚUNINITIALIZEDÚNotImplementedError©ÚaÚbs     rT   ÚcombineÚWorkspaceZeroMode.combine‹   sI   € à‹6�QÔ+×9Ñ9Ó9ØˆHØÔ!×/Ñ/Ó/ØˆHÜ!Ð$>¸q¹eÀ2ÀaÁUÈ!Ð"LÓMÐMrV   c                óP   • U (       a  [         R                  $ [         R                  $ rn   )rŠ   ÚZERO_ON_CALLr�   )Ú	zero_fills    rT   Ú	from_boolÚWorkspaceZeroMode.from_bool“   s   € æÜ$×1Ñ1Ð1Ü ×.Ñ.Ð.rV   rˆ   N)r’   rŠ   r“   rŠ   r{   rŠ   )r˜   Úboolr{   rŠ   )r€   r�   r‚   rƒ   r�   r—   ÚZERO_PER_GRAPHÚstaticmethodr”   r™   r‡   rˆ   rV   rT   rŠ   rŠ   †   s9   † Ø€MØ€LØ€NàóNó ðNð ó/ó ó/rV   rŠ   c                  ó@   • \ rS rSrSr\SS j5       r\SS j5       rSrg)	ÚCodegenSymboléš   zH
An IR object possibly corresponding to a variable in the wrapper code.
c                ó   • g rn   rˆ   ro   s    rT   Úget_nameÚCodegenSymbol.get_nameŸ   ó   € àrV   c                ó   • g rn   rˆ   ro   s    rT   Úget_exampleÚCodegenSymbol.get_example£   r¤   rV   rˆ   Nr}   ©r{   z!Union[torch.Tensor, sympy.Symbol])	r€   r�   r‚   rƒ   r„   r   r¢   r¦   r‡   rˆ   rV   rT   rŸ   rŸ   š   s/   † ñð óó ðð óó órV   rŸ   T)Úfrozenc                  óN  • \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   SrS	\S'   \R                  r	S\S'   \
S S!S jj5       r\
S"S j5       r\
S#S j5       r\
S#S j5       rS$S jr\rS%S jrS&S jrS'S jr\S'S j5       r\r\r\rS(S jrS)S jrS)S jrS*S jrS+S jrS,S jrSrg)-ÚWorkspaceArgé¨   a  A temporary buffer used for a single kernel, then discarded.

Not registered as a traditional buffer since there are no users,
so it would be dead code eliminated.

Args:
    nbytes: The size of the buffer in bytes.
    zero_fill: Whether the buffer should be initialized to zero.

ú
sympy.ExprÚcountrŠ   Ú	zero_modeútorch.deviceÚdevicer~   Ú
outer_nameÚws_ptrÚ
inner_nameútorch.dtypeÚdtypec                óP   • U  [        [        R                  R                  5       3$ rn   )Únextr7   ÚgraphÚworkspace_id)Úprefixs    rT   Úunique_nameÚWorkspaceArg.unique_name¼   s!   € à�œ$œqŸw™w×3Ñ3Ó4Ð5Ð6Ð6rV   c                ó´   • U R                   UR                   :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rn   )r´   r¶   r±   r‘   s     rT   Úcan_joinÚWorkspaceArg.can_joinÀ   s@   € ð �L‰L˜AŸL™LÑ(×X¨Q¯W©W¸¿¹Ñ-?×XÀAÇHÁHÐPQ×PXÑPXÑDXð	
rV   c           	     óì   • [        U R                  UR                  -   [        R                  U R                  UR                  5      U R
                  U R                  U R                  U R                  S9$ ©N)r®   r¯   r¶   r±   r´   r²   )	r«   r®   rŠ   r”   r¯   r¶   r±   r´   r²   r‘   s     rT   ÚjoinÚWorkspaceArg.joinÆ   sS   € äØ—'‘'˜AŸG™GÑ#Ü'×/Ñ/°·±¸Q¿[¹[ÓIØ—'‘'Ø—8‘8Ø—|‘|Ø—|‘|ñ
ð 	
rV   c           	     ó°  • U R                   UR                   :X  a4  U R                  UR                  :X  a  U R                  UR                  :X  d   e[        [        R
                  " U R                  UR                  5      [        R                  U R                  UR                  5      U R                   U R                  U R                  U R                  S9$ rÂ   )r¶   r±   r´   r«   ÚsympyÚMaxr®   rŠ   r”   r¯   r²   r‘   s     rT   ÚmaximumÚWorkspaceArg.maximumÑ   s‘   € ð �G‰G�q—w‘wÓ 1§8¡8¨q¯x©xÓ#7¸A¿L¹LÈAÏLÉLÓ<Xð	
ØXäÜ—)’)˜AŸG™G Q§W¡WÓ-Ü'×/Ñ/°·±¸Q¿[¹[ÓIØ—'‘'Ø—8‘8Ø—|‘|Ø—|‘|ñ
ð 	
rV   c                ó   • U R                   $ rn   ©r±   ro   s    rT   Ú
get_deviceÚWorkspaceArg.get_deviceà   s   € Ø�{‰{ÐrV   c                ó   • U R                   $ rn   ©r¶   ro   s    rT   Ú	get_dtypeÚWorkspaceArg.get_dtypeå   s   € Ø�z‰zÐrV   c                ó>   • U R                  5       R                  5       $ rn   )Ú
get_layoutr¦   ro   s    rT   r¦   ÚWorkspaceArg.get_exampleè   s   € Ø�‰Ó ×,Ñ,Ó.Ð.rV   c                ó`   • SSK Jn  U" U R                  U R                  U R                  /S/S9$ )Nr   )r@   rH   )r±   r¶   ÚsizeÚstride)Úirr@   r±   r¶   r®   )ri   r@   s     rT   rÓ   ÚWorkspaceArg.get_layoutë   s.   € Ý$áØ—;‘;Ø—*‘*Ø—*‘*�Ø�3ñ	
ð 	
rV   c                ó"   • U R                  5       $ rn   )rÓ   ro   s    rT   ÚlayoutÚWorkspaceArg.layoutõ   s   € à�‰Ó Ð rV   c                ó6   • [         R                  R                  $ rn   )rÆ   ÚSÚZeroro   s    rT   Ú
get_offsetÚWorkspaceArg.get_offsetý   s   € Ü�w‰w�|‰|ÐrV   c                ó   • U R                   /$ rn   )r®   ro   s    rT   Úget_sizeÚWorkspaceArg.get_size   s   € Ø—
‘
ˆ|ÐrV   c                ó8   • [         R                  R                  /$ rn   )rÆ   rÞ   ÚOnero   s    rT   Ú
get_strideÚWorkspaceArg.get_stride  s   € Ü—‘—‘ˆ}ÐrV   c                ó   • U R                   $ rn   )r²   ro   s    rT   r¢   ÚWorkspaceArg.get_name  s   € Ø�‰ÐrV   c                ó   • g)NFrˆ   ro   s    rT   Úget_is_pinnedÚWorkspaceArg.get_is_pinned	  s   € ØrV   c                ó   • / $ rn   rˆ   ro   s    rT   Úget_inputs_that_alias_outputÚ)WorkspaceArg.get_inputs_that_alias_output  s   € Øˆ	rV   rˆ   N)Ú
workspace_)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{   úlist[sympy.Expr]r}   )r{   r›   )r{   ú	list[str]) r€   r�   r‚   rƒ   r„   r…   r´   ÚtorchÚuint8r¶   r�   r¼   r¿   rÃ   rÈ   rÌ   Úget_device_or_errorrÐ   r¦   rÓ   r†   rÛ   Úget_output_specÚmaybe_get_output_specÚmaybe_get_layoutrà   rã   rç   r¢   rì   rï   r‡   rˆ   rV   rT   r«   r«   ¨   sç   ‡ ñ	ð ÓØ Ó ØÓØƒOØ€J�ÓØŸ™€Eˆ;Ó$àõ7ó ð7ð ó
ó ð
ð
 ó
ó ð
ð ó
ó ð
ôð %Ðôô/ô
ð ó!ó ð!ð !€OØ&ÐØ!Ðôôôôô÷rV   r«   c                  ó(   • \ rS rSrSS jrSS jrSrg)ÚTritonScratchWorkspacei  c                ó   • Xl         X l        g rn   )rÖ   Ú_generate_dtype_str)ri   rÖ   Úgenerate_dtype_strs      rT   Ú__init__ÚTritonScratchWorkspace.__init__  s   € ØŒ	Ø#5Õ rV   c                ó"   • U R                  5       $ rn   )rý   ro   s    rT   rþ   Ú)TritonScratchWorkspace.generate_dtype_str  s   € Ø×'Ñ'Ó)Ð)rV   )rý   rÖ   N)rÖ   Úintrþ   úCallable[..., str]r}   )r€   r�   r‚   rƒ   rÿ   rþ   r‡   rˆ   rV   rT   rû   rû     s   † ô6÷*rV   rû   c                  óx   • \ rS rSr% S\S'   S\S'   S\S'   \R                  R                  rS\S'   S	r	S
\S'   Sr
g	)Ú	TensorArgi  r~   rf   Úbufferrµ   r¶   r­   ÚoffsetNúOptional[str]Úalias_ofrˆ   )r€   r�   r‚   rƒ   r…   rÆ   rÞ   rß   r  r
  r‡   rˆ   rV   rT   r  r    s.   ‡ à
ƒIØƒKØÓØŸ™Ÿ™€FˆJÓ%Ø"€HˆmÖ"rV   r  c                  ó>   • \ rS rSr% S\S'   S\S'   \S	S j5       rSrg)
ÚSizeArgi"  r~   rf   r­   Úexprc                ó   • g rn   rˆ   ro   s    rT   r
  ÚSizeArg.alias_of'  s   € àrV   rˆ   N©r{   r	  )r€   r�   r‚   rƒ   r…   r†   r
  r‡   rˆ   rV   rT   r  r  "  s   ‡ à
ƒIØ
Óàóó órV   r  c                  ó    • \ rS rSr% S\S'   Srg)ÚConstexprArgi,  r~   rf   rˆ   N©r€   r�   r‚   rƒ   r…   r‡   rˆ   rV   rT   r  r  ,  s   ‡ à
†IrV   r  c                  ó>   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)ÚTMADescriptorArgi1  r~   rf   Úapi_typezOptional[list[sympy.Expr]]Úblock_shapeúOptional[torch.dtype]r¶   rˆ   Nr  rˆ   rV   rT   r  r  1  s   ‡ à
ƒIØƒMØ+Ó+Ø Ö rV   r  c                  óF   • \ rS rSr% S\S'   S\S'   SrS\S'   SrS\S	'   S
rg)ÚDeviceCodegeni9  ÚSchedulingConstructorÚ
schedulingÚWrapperConstructorÚwrapper_codegenNúOptional[WrapperConstructor]Úcpp_wrapper_codegenÚfx_wrapper_codegenrˆ   )r€   r�   r‚   rƒ   r…   r   r!  r‡   rˆ   rV   rT   r  r  9  s&   ‡ à%Ó%Ø'Ó'Ø8<ÐÐ5Ó<Ø7;ÐÐ4Ö;rV   r  zdict[str, DeviceCodegen]Údevice_codegensc                  óÒ   • \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSS jr S       SS jjrSrg)ÚDeviceOpOverridesiF  c                ó   • [         ern   ©r�   ©ri   rf   s     rT   Úimport_get_raw_stream_asÚ*DeviceOpOverrides.import_get_raw_stream_asG  ó   € Ü!Ð!rV   c                ó   • [         ern   r&  ©ri   Ú
device_idxs     rT   Ú
set_deviceÚDeviceOpOverrides.set_deviceJ  r*  rV   c                ó   • [         ern   r&  ro   s    rT   ÚsynchronizeÚDeviceOpOverrides.synchronizeM  r*  rV   c                ó   • [         ern   r&  r,  s     rT   Údevice_guardÚDeviceOpOverrides.device_guardP  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_device_guardÚ"DeviceOpOverrides.cpp_device_guardS  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_aoti_device_guardÚ'DeviceOpOverrides.cpp_aoti_device_guardV  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_stream_guardÚ"DeviceOpOverrides.cpp_stream_guardY  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_aoti_stream_guardÚ'DeviceOpOverrides.cpp_aoti_stream_guard\  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_getStreamFromExternalÚ+DeviceOpOverrides.cpp_getStreamFromExternal_  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úkernel_headerÚDeviceOpOverrides.kernel_headerb  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úkernel_driverÚDeviceOpOverrides.kernel_drivere  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_stream_typeÚ!DeviceOpOverrides.cpp_stream_typeh  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úaoti_get_streamÚ!DeviceOpOverrides.aoti_get_streamk  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_kernel_typeÚ!DeviceOpOverrides.cpp_kernel_typen  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Úcpp_device_ptrÚ DeviceOpOverrides.cpp_device_ptrq  r*  rV   c                ó   • [         ern   r&  ro   s    rT   Útma_descriptor_helpersÚ(DeviceOpOverrides.tma_descriptor_helperst  r*  rV   Nc                ó   • [         ern   r&  )ri   ÚidxÚ	workspacer»   s       rT   Úcpp_scratchÚDeviceOpOverrides.cpp_scratchw  s
   € ô "Ð!rV   rˆ   ©rf   r~   r{   r~   )r-  r  r{   r~   r}   rn   )r[  r  r\  rû   r»   r	  r{   zOptional[tuple[list[str], str]])r€   r�   r‚   rƒ   r(  r.  r1  r4  r7  r:  r=  r@  rC  rF  rI  rL  rO  rR  rU  rX  r]  r‡   rˆ   rV   rT   r$  r$  F  sƒ   † ô"ô"ô"ô"ô"ô"ô"ô"ô"ô"ô"ô"ô"ô"ô"ô"ð TXð"Øð"Ø#9ð"ØCPð"à	(÷"ð "rV   r$  zdict[str, DeviceOpOverrides]Údevice_op_overrides_dictz*dict[str, Optional[CustomGraphModulePass]]Úcustom_backend_passesz!dict[str, Optional[ConfigModule]]Úcustom_backend_codegen_configsc                óÂ   • [        UUUU5      [        U '   U[        U '   U(       a1  [        U[        5      (       a	  U[
        Ld   SU< S[
        < 35       eU[        U '   g )Nzdevice_custom_config=z: cannot be the same as the default inductor config config=)r  r"  ra  Ú
isinstancer   r   rb  )r±   Údevice_schedulingÚdevice_wrapper_codegenÚdevice_cpp_wrapper_codegenÚdevice_fx_wrapper_codegenÚdevice_custom_passÚdevice_custom_configs          rT   Úregister_backend_for_devicerk  ˜  sy   € ô ,ØØØ"Ø!ó	„O�FÑð %7Ô˜&Ñ!ÞäÐ+¬\×:Ñ:Ø$¬FÒ2ð	
ð %Ð#Ñ%Ð%`ÔY_ÑXaÐbó		
ð3ð
 .BÔ" 6Ò*rV   c                  ó    • \ rS rSr\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r	\" 5       r
\" 5       r\" 5       r\" 5       r\" 5       rSrg)ÚBackendFeaturei²  rˆ   N)r€   r�   r‚   rƒ   r   ÚFOREACHÚ	BUCKETIZEÚINPLACE_BUFFERSÚMASKED_SCATTER_WITH_INDEXÚSCANÚSORTÚTUPLE_REDUCTIONÚPREFER_STORE_LOOP_ORDERÚTRITON_TEMPLATESÚREDUCE_TO_SINGLE_ELEMENTr‡   rˆ   rV   rT   rm  rm  ²  sL   † Ù‹f€GÙ“€IÙ“f€OÙ $£ÐÙ‹6€DÙ‹6€DÙ“f€OÙ"›fÐÙ“vÐÙ#›vÓrV   rm  c                ó\  • U c
  [        5       $ [        5         [        U [        R                  5      (       a  U R
                  nO=[        U [        5      (       d   [        U 5      5       eU n[        R                  " U5      n [        U5      nU(       d   eU" S 5      nUR                  U 5      $ rn   )	r   Úinit_backend_registrationrd  rô   r±   Útyper~   Úget_scheduling_for_deviceÚget_backend_features)r±   Údevice_typeÚscheduling_ctorr  s       rT   r|  r|  ¿  s�   € ð �~Ü‹|ÐÜÔÜ�&œ%Ÿ,™,×'Ñ'Ø—k‘k‰ä˜&¤#×&Ñ&Ð4¬¨V«Ó4Ð&ØˆÜ—’˜kÓ*ˆÜ/°Ó<€OÞÐˆ?Ù  Ó&€JØ×*Ñ*¨6Ó2Ð2rV   c                óL   • [        U[        5      (       d   eU[        U 5      ;   $ )zSee also V.graph.has_feature)rd  rm  r|  )r±   Úfeatures     rT   Úhas_backend_featurer�  Ñ  s(   € ô �gœ~×.Ñ.Ð.Ð.ØÔ*¨6Ó2Ñ2Ð2rV   c                ó@   • U [         ;   a  [         U    R                  $ S $ rn   )r"  r  rË   s    rT   r{  r{  Ù  s    € Ø17¼?Ó1JŒ?˜6Ñ"×-Ñ-ÐTÐPTÐTrV   c                óŽ   • U [         ;   a;  [         U    nU(       a  UR                  $ U(       a  UR                  $ UR                  $ g rn   )r"  r!  r   r  )r±   Úcpp_wrapperÚ
fx_wrapperÚwrapper_codegen_objs       rT   Úget_wrapper_codegen_for_devicer‡  Ý  sD   € ð ”Ó Ü-<¸VÑ-DÐÞØ&×9Ñ9Ð9ÞØ&×:Ñ:Ð:à&×6Ñ6Ð6ØrV   c                ó,   • [         R                  U 5      $ rn   )ra  ÚgetrË   s    rT   Ú"get_custom_backend_pass_for_devicerŠ  ë  s   € Ü ×$Ñ$ VÓ,Ð,rV   c                ó,   • [         R                  U 5      $ rn   )rb  r‰  rË   s    rT   Ú$get_custom_backend_config_for_devicerŒ  ï  s   € Ü)×-Ñ-¨fÓ5Ð5rV   c                 ó‚  ^^^• SSK Jn   SSKJn  SSKJn  SSKJn  SSKJ	n  SSK
Jn  SSKJn  SS	KJn  SS
KJn  SSKJn	  SSKJn
  SSKJn  SSKJn  [5        S5      c;  U UU
US.m[7        SU4S jU[8        R:                  R<                  (       a  UOUU5        [5        S5      c  UUUS.m[7        SU4S jUUU5        [5        S5      c  [7        SU
UUU5        [5        S5      c  SU0m[7        SU4S jU5        [5        S5      c  [7        SUUUU5        [5        S5      c  [7        SU
U	UU5        [>        R@                  RC                  5       nUS:w  a\  [5        U5      cO  SSK"J#n   U" S5      nU" S 5      nU" S!5      nU" S"5      nU(       a   U(       a  U(       a  [7        UUUUU5        gggggg! [H         a     gf = f)#zŒ
Register the backend for different devices, including the scheduling
for kernel code generation and the host side wrapper code generation.
rH   )ÚCppScheduling)ÚCppWrapperCpu)ÚCppWrapperCpuArrayRef)ÚCppWrapperGpu)ÚCppWrapperMps)ÚCUDACombinedScheduling)ÚHalideScheduling)ÚMetalScheduling)ÚPallasScheduling)ÚPythonWrapperMtia)ÚTritonSchedulingrI   )ÚWrapperFxCodegenÚcpuN)ÚcppÚhalideÚtritonÚpallasc                ó6   >• T[         R                     " U 5      $ rn   )r   Úcpu_backend)r  Úcpu_backendss    €rT   Ú<lambda>Ú+init_backend_registration.<locals>.<lambda>  ó   ø€ ˜|¬F×,>Ñ,>Ò?À
ÔKrV   Úcuda)r�  rœ  rž  c                ó6   >• T[         R                     " U 5      $ rn   )r   Úcuda_backend)r  Úcuda_backendss    €rT   r¢  r£  !  s   ø€ ˜}¬V×-@Ñ-@ÒAÀ*ÔMrV   ÚxpuÚtpurž  c                ó6   >• T[         R                     " U 5      $ rn   )r   Útpu_backend)r  Útpu_backendss    €rT   r¢  r£  6  r¤  rV   ÚmpsÚmtiaÚprivateuseoner   )Ú_get_custom_mod_funcÚ
SchedulingrJ   ÚCppWrapperCodegenr™  )%r›  rŽ  Úcpp_wrapper_cpur�  Úcpp_wrapper_cpu_array_refr�  Úcpp_wrapper_gpur‘  Úcpp_wrapper_mpsr’  Úcuda_combined_schedulingr“  rœ  r”  r®  r•  rž  r–  Úpython_wrapper_mtiar—  r�  r˜  ÚwrapperrJ   Úwrapper_fxirr™  r{  rk  r   Úaot_inductorÚallow_stack_allocationrô   Ú_CÚ_get_privateuse1_backend_nameÚ torch.utils.backend_registrationr±  ÚRuntimeError)rŽ  r�  r�  r‘  r’  r“  r”  r•  r–  r—  r˜  rJ   r™  Úprivate_backendr±  re  r  r   r!  r¡  r¨  r­  s                      @@@rT   ry  ry  ó  sí  ú€ õ #Ý.Ý@Ý.Ý.Ý@Ý(Ý$Ý(Ý6Ý(Ý-Ý.ä  Ó'Ñ/à Ø&Ø&Ø&ñ	
ˆô 	$ØÜKØ ä×"Ñ"×9×9ñ "àØô	
ô ! Ó(Ñ0ð -Ø&Ø&ñ
ˆô
 	$ØÜMØ ØØô	
ô ! Ó'Ñ/Ü#ØØØ ØØô	
ô ! Ó'Ñ/àÐ&ð
ˆô 	$ØÜKØ ô	
ô ! Ó'Ñ/Ü#ØØØ ØØô	
ô ! Ó(Ñ0Ü#ØØØØØô	
ô —h‘h×<Ñ<Ó>€Oà˜?Ó*Ü% oÓ6Ñ>åIð	Ù 4°\Ó BÐÙ2Ð3IÓJˆOÙ"6Ð7JÓ"KÐÙ!5Ð6HÓ!IÐÞ ¦_Ö9LÜ+Ø#Ø%Ø#Ø'Ø&õð :M _Ð ð ?ð 	+øô$ ó 	Ùð	ús   Å'AF1 Æ1
F>Æ=F>c                óJ   • SSK Jn  / U Q[        XR                  U5      5      P$ )Nr   )ÚFlexibleLayout)rØ   rÄ  r,   Úcontiguous_strides)ÚindexÚ
index_varsÚsizesrÄ  s       rT   Úindex_prevent_reorderingrÉ  d  s*   € õ
 $ð UˆUÐT”I˜j×*KÑ*KÈEÓ*RÓSÐTÐTrV   c                ó   • U[         U '   g rn   )r`  )r±   Údevice_op_overridess     rT   Úregister_device_op_overridesrÌ  o  s   € ð (;Ô˜VÒ$rV   c                óè   • [        U [        5      (       d   [        U 5      5       e[        (       d  SSKJnJn  SSKJn  SSK	Jn  SSK
Jn  U [        ;  a  SSKJn  [        X" 5       5        [        U    $ )NrH   )Úcpu_device_op_overridesÚmps_device_op_overrides)rË  )ÚCpuDeviceOpOverrides)rd  r~   rz  r`  Ú rÎ  rÏ  r¥  rË  r¯  r©  rÐ  rÌ  )r±   rÎ  rÏ  rË  Úmtia_op_overridesÚxpu_op_overridesrÐ  s          rT   Úget_device_op_overridesrÔ  u  sU   € Ü�fœc×"Ñ"Ð0¤D¨£LÓ0Ð"ç#Ò#ßFÝ-ÝBÝ@àÔ-Ó-åAä$ VÐ-AÓ-CÔDä# FÑ+Ð+rV   zdict[torch.dtype, torch.dtype]ÚDTYPE_TO_COMPUTATION_DTYPEc                óœ  • U [        5       ;   a  [        R                  $ U S;   a  SU;   a  US   $ US   $ U S;   a  [        R                  $ U S;   a  [        R                  $ U S:X  a  SU;   a  US   $ US   $ U S:X  a  SU;   a  US   $ US   $ U S	;   a$  US   n[
        R                  R                  U5      $ U S
:X  a  SU;   a  US   $ US   $ g)zC
Given op name and a list of input dtypes, deduce the output dtype
)Úto_dtypeÚ
index_exprr¶   éÿÿÿÿ)ÚrandÚrandn)Ú	get_indexÚ	randint64Ú	load_seedÚ	reductionrH   Úconstant)ÚloadÚstoreÚstore_reductionÚto_dtype_bitcastéþÿÿÿN)r%   rô   r›   ÚfloatÚint64r7   r¹   rÐ   )Úop_namert   ÚkwargsÚbuf_names       rT   Údeduce_output_dtype_by_namerë  �  s
  € ð ”+“-ÓÜ�z‰zÐØ	ð ó 
ð #*¨VÓ"3ˆv�g‰ÐA¸¸b¹ÐAØ	ð ó 
ô �{‰{ÐØ	ð ó 
ô
 �{‰{ÐØ	�KÓ	Ø")¨VÓ"3ˆv�g‰Ð@¸¸a¹Ð@Ø	�JÓ	Ø")¨VÓ"3ˆv�g‰ÐA¸¸b¹ÐAØ	ð ó 
ð
 ˜‘7ˆÜ�w‰w× Ñ  Ó*Ð*Ø	Ð&Ó	&Ø")¨VÓ"3ˆv�g‰ÐA¸¸b¹ÐAØrV   ÚCSEVariableTypec                ó*  • [        5       n[        R                  R                  (       a(  US:X  a"  U R	                  SU S[        U5       S35        g [        R                  R                  (       a£  US:X  aœ  SSKJnJ	n  [        X5      (       d   [        U5      5       eU[        R                  :X  a"  UR                  (       a  SU S	3nO2S
U SU S3nO(SU S3nUR                  (       a  SU S3nSU SXR    S3nU R	                  SU S35        g g g )Nr�  útl.static_assert(z
.dtype == rŽ   r›  rH   )ÚCppCSEVariableÚDTYPE_TO_CPPzIsVecMaskType<decltype(z	)>::valuezstd::is_same_v<decltype(z$), bool> || std::is_same_v<decltype(z), int>z	decltype(z	typename z::value_typezstd::is_same_v<r�   Ú>zstatic_assert(z);)r(   r   Útest_configsÚruntime_triton_dtype_assertÚ	writeliner/   Ústatic_cpp_dtype_assertÚ	cpp_utilsrï  rð  rd  rz  rô   r›   Úis_vec)r  Úvarr¶   Úbackendrï  rð  Ú
is_same_dtÚ
c_var_types           rT   Úcheck_dtyperü  Ç  s  € ô "Ó#€GÜ×Ñ×6×6¸7ÀhÓ;NØ×ÑÐ,¨S¨E°¼KÈÓ<NÐ;OÈqÐQÕRÜ	×	Ñ	×	4×	4¸ÀEÓ9Iß;ä˜#×.Ñ.Ð9´°S³	Ó9Ð.Ø”E—J‘JÓØ�z�zØ6°s°e¸9ÐE‘
ð  8¸°uÐ<`ÐadÐ`eÐelÐm‘
à$ S E¨Ð+ˆJØ�z�zØ(¨¨°LÐA�
Ø*¨:¨,°b¸Ñ9LÐ8MÈQÐOˆJà×Ñ˜>¨*¨°RÐ8Õ9ð! :JÐ	4rV   c                óþ   • [        5       nUc   e[        R                  R                  (       aO  US:X  aH  [	        U5      S:w  a  SR                  S U 5       5      OUS    S3nU R                  SU SU S	35        g g g )
Nr�  rH   r�   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7frn   ©r~   )Ú.0Úds     rT   Ú	<genexpr>Úcheck_shape.<locals>.<genexpr>ç  s   é € Ð,¢e ”c˜!—f�f¢eùs   ‚r   Ú,rî  z.shape == (ú)))r(   r   rò  Úruntime_triton_shape_assertÚlenrÃ   rô  )r  rø  Úshaperù  Ú	shape_strs        rT   Úcheck_shaper
  à  s…   € ô "Ó#€GØÑÐÐÜ×Ñ×6×6¸7ÀhÓ;Nä03°E³
¸a³ˆD�I‰IÑ,¡eÓ,Ô,ÈÈaÉÀzÐQRÀ^ð 	ð 	×ÑÐ,¨S¨E°¸Y¸KÀrÐJÕKð	 <OÐ6rV   c                ól   • [        5       nUS:X  a$  SnU R                  SU SU SU SU SU S35        g g )	Nr�  zNaN or Inf foundztl.device_assert((z == ú) & (z != float('inf')) & (z != float('-inf')), 'z'))r(   rô  )r  rø  rù  rS   s       rT   Ú	check_nanr  ì  sS   € Ü!Ó#€GØ�(ÓØ ˆØ×ÑØ    T¨#¨¨e°C°5Ð8MÈcÈUÐRgÐhkÐglÐlnÐoõ	
ð rV   c                  óx   • \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	\
SS j5       r\
SS	 j5       rS
rg)ÚDataTypePropagationiõ  c                óÂ   • Xl         SUR                  R                  0U l        UR                  R                  5        H  u  p#UR                  U R                  U'   M      g ©NÚroot)ÚbodyÚ
root_blockr¹   ÚgraphsÚ	subblocksÚitems)ri   r  ÚkÚvs       rT   rÿ   ÚDataTypePropagation.__init__ö  sL   € ØŒ	à�D—O‘O×)Ñ)ðB
ˆŒð —N‘N×(Ñ(Ö*‰DˆAØŸW™WˆD�K‰K˜‹Nò +rV   c                óÔ  • UR                   nU Vs/ s HB  n[        U[        R                  R                  5      (       d  M.  UR
                  S:w  d  M@  UPMD     nn[        U5      S:X  a  g [        S U 5       5      nU(       d  g [        R                  " [        R                  U Vs/ s H)  o3R                  [        R                     R                  PM+     sn5      $ s  snf s  snf )NÚplaceholderr   c              3  ó¼   #   • U  HR  n[         R                  UR                  ;   =(       a)    UR                  [         R                     R                  S Lv •  MT     g 7frn   )ÚOptimizationContextÚkeyÚmetar¶   )r   Úns     rT   r  ÚBDataTypePropagation.deduce_node_dtype_by_inputs.<locals>.<genexpr>  sR   é € ð )
ò !�ô  ×#Ñ# q§v¡vÑ-÷ BØ—‘Ô*×.Ñ.Ñ/×5Ñ5¸TÐAôBâ ùs   ‚AA)Úall_input_nodesrd  rô   ÚfxÚNodeÚopr  ÚallÚ	functoolsÚreduceÚpromote_typesr   r  r  r¶   )ri   ÚnodeÚinputsr!  Úinput_nodesÚall_input_nodes_propagateds         rT   Údeduce_node_dtype_by_inputsÚ/DataTypePropagation.deduce_node_dtype_by_inputsþ  sÈ   € Ø×%Ñ%ˆáó
Ú�!¤¨A¬u¯x©x¯}©}×!=‹AÀ!Ç$Á$È-ÑBW�A‘vð 	ð 
ô ˆ{Ó˜qÓ Øä%(ñ )
ñ !ó)
ó &
Ð"ö
 *Øä×ÒÜ×ÑÙ<GÓHºK°q�V‰VÔ'×+Ñ+Ñ,×2Ô2¹KÑHó
ð 	
ùò
ùò  Is   ‘-C ÁC ÁC Â)0C%
c                ól   • U R                   UR                     nU R                  U5      nU(       d   eU$ rn   )r  ÚtargetÚpropagate_graph)ri   r+  Ú	sub_graphr¶   s       rT   Údeduce_node_dtype_by_subgraphÚ1DataTypePropagation.deduce_node_dtype_by_subgraph  s0   € Ø—K‘K §¡Ñ,ˆ	Ø×$Ñ$ YÓ/ˆÞˆˆuØˆrV   c                óÀ  • UR                   S:X  a  g UR                  S:X  a  [        UR                  5      S:w  a  g UR                  [        R
                  L aY  UR                  S   n[        U[        R                  R                  5      (       d   [        U5      5       eU R                  U5      $ [        UR                  [        5      (       d   [        UR                  5      5       eUR                  R                  S5      (       a  U R                  U5      $ [        UR                  /UR                  Q70 UR                   D6=n b  U$ U R#                  U5      $ )Nr  ÚoutputrH   r   Úmasked_subblock)r&  r2  r  rt   ÚoperatorÚgetitemrd  rô   r$  r%  rz  Údeduce_node_dtyper~   Ú
startswithr5  rë  ré  r/  )ri   r+  Únode_argÚoutput_dtypes       rT   r<  Ú%DataTypePropagation.deduce_node_dtype  s$  € Ø�7‰7�mÓ#Øà�;‰;˜(Ó"¤s¨4¯9©9£~¸Ó':àà�;‰;œ(×*Ñ*Ò*Ø—y‘y ‘|ˆHÜ˜h¬¯©¯©×6Ñ6ÐF¼¸X»ÓFÐ6Ø×)Ñ)¨(Ó3Ð3ä˜$Ÿ+™+¤s×+Ñ+Ð>¬T°$·+±+Ó->Ó>Ð+à�;‰;×!Ñ!Ð"3×4Ñ4Ø×5Ñ5°dÓ;Ð;ô 8Ø—‘ðà—‘òð —+‘+ñð ˆLð
 ñð  Ðà×/Ñ/°Ó5Ð5rV   c                ó‚  • UR                   (       d   eS nUR                    H™  n[        R                  UR                  ;   a  UR                  [        R                     nO
[        5       nU R	                  U5      Ul        XCR                  [        R                  '   UR                  S:X  d  M�  UR
                  nM›     U$ )Nr8  )Únodesr  r  r   r<  r¶   r2  )ri   r¹   Úgraph_dtyper+  Úopt_ctxs        rT   r3  Ú#DataTypePropagation.propagate_graph6  s”   € Ø�{�{Ðˆ{Ø-1ˆð —K”KˆDÜ"×&Ñ&¨$¯)©)Ó3ØŸ)™)Ô$7×$;Ñ$;Ñ<‘ä-Ó/�à ×2Ñ2°4Ó8ˆGŒMØ18�I‰IÔ)×-Ñ-Ñ.Ø�{‰{˜hÕ&Ø%Ÿm™m’ñ  ð ÐrV   c                ó>   • U R                  U R                  S   5      $ r  )r3  r  ro   s    rT   Ú	propagateÚDataTypePropagation.propagateH  s   € Ø×#Ñ# D§K¡K°Ñ$7Ó8Ð8rV   c                ó.   • U " U5      R                  5       $ rn   )rG  )Úclsr  s     rT   Úpropagate_loopbodyÚ&DataTypePropagation.propagate_loopbodyK  s   € á�4‹y×"Ñ"Ó$Ð$rV   c                ó  • SSK Jn  SSKJn  [	        X5      (       d   [        U5      5       e[	        UR                  U5      (       d   [        UR                  5      5       e[        R                  UR                  5      $ )Nr   rB   )rF   )	Ú	loop_bodyrC   Ú	schedulerrF   rd  rz  Ú_bodyr  rK  )rJ  r+  rC   rF   s       rT   Úpropagate_scheduler_nodeÚ,DataTypePropagation.propagate_scheduler_nodeO  s\   € å(Ý-ä˜$×.Ñ.Ð:´°T³
Ó:Ð.Ü˜$Ÿ*™* h×/Ñ/ÐA´°d·j±jÓ1AÓAÐ/Ü"×5Ñ5°d·j±jÓAÐArV   )r  r  N)r  rC   r{   r|   )r+  útorch.fx.Noder{   r  )r+  rS  r{   rµ   )r¹   ztorch.fx.Graphr{   r  )r{   r  )r  rC   r{   r  )r+  rF   r{   r  )r€   r�   r‚   rƒ   rÿ   r/  r5  r<  r3  rG  ÚclassmethodrK  rQ  r‡   rˆ   rV   rT   r  r  õ  sJ   † ô%ô
ô*ô6ô:ô$9ð ó%ó ð%ð óBó óBrV   r  c                  óX   ^ • \ rS rSrSSS.       SU 4S jjjrSS	U 4S jjjrSrU =r$ )
r   iY  T)ÚsimplifyÚpc               óþ   >• U(       ag  [        U[        R                  5      (       aH  [        [        R
                  S5      (       a)  [        R
                  R                  R                  U5      n[        TU ]%  U5      $ )NÚsizevars)
rd  rÆ   ÚExprÚhasattrr7   r¹   rY  rV  ÚsuperÚdoprint)ri   r  rV  rW  Ú	__class__s       €rT   r]  ÚPythonPrinter.doprintZ  sQ   ø€ ö œ
 4¬¯©×4Ñ4¼ÄÇÁÈ*×9UÑ9UÜ—7‘7×#Ñ#×,Ñ,¨TÓ2ˆDÜ‰w‰˜tÓ$Ð$rV   c                óŒ   >• [        U[        R                  5      (       a  SU R                  U5       S3$ [        TU ]  XU5      $ ©NÚ(rŽ   )rd  rÆ   ÚModÚ_printr\  Úparenthesize)ri   ÚitemÚlevelÚstrictr^  s       €rT   re  ÚPythonPrinter.parenthesizeb  sA   ø€ Ü�dœEŸI™I×&Ñ&ð �t—{‘{ 4Ó(Ð)¨Ð+Ð+ä‘7Ñ'¨°VÓ<Ð<rV   rˆ   )r  r­   rV  r›   rW  r›   r{   r~   )F)rf  r­   rg  r  rh  r›   r{   r~   )r€   r�   r‚   rƒ   r]  re  r‡   Ú__classcell__©r^  s   @rT   r   r   Y  s<   ø† à48ÀDñ%Øð%Ø-1ð%Ø=Að%à	÷%ð %÷=÷ =rV   r   c                  ó”  • \ rS rSrSr\SS j5       r\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS	 j5       r\SS
 j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       rSrg)ÚOpDecompositionsil  z
Decomposes inductor ops
c                ó   • U $ rn   rˆ   )rh   s    rT   ÚidentityÚOpDecompositions.identityq  s	   € ð ˆrV   c                óv   • [         R                  " [         R                  " S[        R                  5      U 5      $ ©NrH   )r2   Útruedivrà  rô   Úint32©Úxs    rT   Ú
reciprocalÚOpDecompositions.reciprocalv  s"   € ä�{Š{œ3Ÿ<š<¨¬5¯;©;Ó7¸Ó;Ð;rV   c                ó.   • [         R                  " X 5      $ rn   ©r2   Úmulru  s    rT   ÚsquareÚOpDecompositions.squarez  s   € ä�wŠw�q‹}ÐrV   c                óž   • [         R                  " [         R                  " S[        R                  5      [         R
                  " U 5      5      $ rr  )r2   Úsubrà  rô   Úfloat32Úerfru  s    rT   ÚerfcÚOpDecompositions.erfc~  s*   € ä�wŠw”s—|’| A¤u§}¡}Ó5´s·w²w¸q³zÓBÐBrV   c                ó¨   • [         R                  " [         R                  " [         R                  " U 5      5      [         R                  " U 5      5      $ rn   )r2   r{  Úexpr|  r‚  ru  s    rT   ÚerfcxÚOpDecompositions.erfcx‚  s,   € ä�wŠw”s—w’wœsŸzšz¨!›}Ó-¬s¯xªx¸«{Ó;Ð;rV   c                óž   • [         R                  " [         R                  " U 5      [         R                  " S[        R
                  5      5      $ rr  )r2   r  r…  rà  rô   r€  ru  s    rT   Úexpm1ÚOpDecompositions.expm1†  s*   € ä�wŠw”s—w’w˜q“z¤3§<¢<°´5·=±=Ó#AÓBÐBrV   c           	     óÌ   • [         R                  " [         R                  " U 5      [         R                  " S[        R                  " S5      -  [
        R                  5      5      $ )NrH   é
   ©r2   r{  Úlogrà  Úmathrô   r€  ru  s    rT   Úlog10ÚOpDecompositions.log10Š  s7   € ä�wŠw”s—w’w˜q“z¤3§<¢<°´D·H²H¸R³LÑ0@Ä%Ç-Á-Ó#PÓQÐQrV   c           	     óÌ   • [         R                  " [         R                  " U 5      [         R                  " S[        R                  " S5      -  [
        R                  5      5      $ )NrH   r   r�  ru  s    rT   Úlog2ÚOpDecompositions.log2Ž  s6   € ä�wŠw”s—w’w˜q“z¤3§<¢<°´D·H²H¸Q³K±ÄÇÁÓ#OÓPÐPrV   c           
     óÆ   • [         R                  " [         R                  " U [         R                  " [        R
                  " S5      [        R                  5      5      5      $ )Nr   )r2   r…  r{  rà  r�  rŽ  rô   r€  ru  s    rT   Úexp2ÚOpDecompositions.exp2’  s3   € ä�wŠw”s—w’w˜q¤#§,¢,¬t¯xªx¸«{¼E¿M¹MÓ"JÓKÓLÐLrV   c           	     óž   • [         R                  " [         R                  " U [         R                  " S[        R
                  5      5      5      $ rr  )r2   rŽ  Úaddrà  rô   rt  ru  s    rT   Úlog1pÚOpDecompositions.log1p–  s+   € ä�wŠw”s—w’w˜q¤#§,¢,¨q´%·+±+Ó">Ó?Ó@Ð@rV   c                óô   • [         R                  " S[        R                  5      n[         R                  " U[         R
                  " U[         R                  " [         R                  " U 5      5      5      5      $ rr  )r2   rà  rô   rt  rs  r™  r…  Úneg)rv  Úones     rT   ÚsigmoidÚOpDecompositions.sigmoidš  sC   € ä�lŠl˜1œeŸk™kÓ*ˆÜ�{Š{˜3¤§¢¨¬S¯WªW´S·W²W¸Q³ZÓ-@Ó AÓBÐBrV   c                óv   • [         R                  " U [         R                  " S[        R                  5      5      $ ©Nr   )r2   rÈ   rà  rô   rt  ru  s    rT   ÚreluÚOpDecompositions.reluŸ  s"   € ä�{Š{˜1œcŸlšl¨1¬e¯k©kÓ:Ó;Ð;rV   c                óX   • [         R                  " [         R                  " X5      U5      $ rn   )r2   r™  r{  ©rv  ÚyÚzs      rT   ÚfmaÚOpDecompositions.fma£  s   € ô �wŠw”s—w’w˜q“} aÓ(Ð(rV   c                ó.   • [         R                  " X5      $ rn   rz  ©rv  r§  s     rT   Úmul_rnÚOpDecompositions.mul_rn¨  s   € ô �wŠw�q‹}ÐrV   c                óX   • [         R                  " [         R                  " U 5      U5      $ rn   )r2   r×  Úfloor©r’   r¶   s     rT   Úfloor_to_intÚOpDecompositions.floor_to_int­  ó   € ä�|Š|œCŸIšI a›L¨%Ó0Ð0rV   c                óX   • [         R                  " [         R                  " U 5      U5      $ rn   )r2   r×  Úceilr±  s     rT   Úceil_to_intÚOpDecompositions.ceil_to_int±  s   € ä�|Š|œCŸHšH Q›K¨Ó/Ð/rV   c                óX   • [         R                  " [         R                  " U 5      U5      $ rn   )r2   r×  Útruncr±  s     rT   Útrunc_to_intÚOpDecompositions.trunc_to_intµ  r´  rV   c           	     óž  • [         R                  " X5      n[         R                  " [         R                  " U[         R                  " S[
        R                  5      5      [         R                  " [         R                  " U5      [         R                  " U5      5      5      n[         R                  " U[         R                  " X!5      U5      $ r¢  )
r2   ÚmodÚand_Únerà  rô   rt  ÚsignbitÚwherer™  )r’   r“   ÚrÚconds       rT   Ú	remainderÚOpDecompositions.remainder¹  su   € ä�GŠG�A‹MˆÜ�xŠxÜ�FŠF�1”c—l’l 1¤e§k¡kÓ2Ó3Ü�FŠF”3—;’;˜q“>¤3§;¢;¨q£>Ó2ó
ˆô �yŠy˜œsŸwšw q›}¨aÓ0Ð0rV   c                óX   • [         R                  " [         R                  " U 5      U5      $ rn   )r2   r×  Úroundr±  s     rT   Úround_to_intÚOpDecompositions.round_to_intÂ  r´  rV   rˆ   N)rh   ÚOpVarTr{   rË  ©rv  rË  r{   rË  )rv  rË  r§  rË  r¨  rË  r{   rË  ©rv  rË  r§  rË  r{   rË  )r’   rË  r¶   rµ   r{   rË  ©r’   rË  r“   rË  r{   rË  )r€   r�   r‚   rƒ   r„   r�   ro  rw  r|  r‚  r†  r‰  r�  r“  r–  rš  rŸ  r£  r©  r­  r²  r·  r»  rÅ  rÉ  r‡   rˆ   rV   rT   rm  rm  l  s‘  † ñð óó ðð ó<ó ð<ð óó ðð óCó ðCð ó<ó ð<ð óCó ðCð óRó ðRð óQó ðQð óMó ðMð óAó ðAð óCó ðCð ó<ó ð<ð ó)ó ð)ð óó ðð ó1ó ð1ð ó0ó ð0ð ó1ó ð1ð ó1ó ð1ð ó1ó ó1rV   rm  z[a-z0-9_.]+|\([^)]*\)|)Úflagsc                óÞ   • U S   S:w  d  [        U 5      S:  a  gSn[        U SS  5       H8  u  p#US:X  a  US-  nOUS:X  a  US-  nUS:X  d  M$  U[        U 5      S-
  :w  d  M8    g   US:X  d   eg)Nr   rb  r   FrH   rŽ   T)r  Ú	enumerate)Ústringr®   ÚiÚchars       rT   Ú_all_in_parensrÕ  Ê  s�   € Øˆa�y�CÓœ3˜v›;¨›?ØØ€EÜ˜V A B˜ZÖ(‰ˆØ�3‹;Ø�Q‰J‰EØ�S‹[Ø�Q‰JˆEØ�A�:˜!œs 6›{¨Q™Õ.Ùñ )ð �A‹:Ðˆ:ØrV   c                  ó¢  • \ rS rSr\S$S j5       r\S%S j5       r\S&S j5       r\S'S j5       r\S(S j5       r	\S(S j5       r
\S(S j5       r\S(S	 j5       r\S(S
 j5       r\S)S j5       r\S*S j5       r  S+         S,S jjr          S-S jrS.S jr S/         S0S jjrS1S jrS2S jr          S3S jr        S4S jr          S5S jr  S6               S7S jjrS8S jrS(S jrS\R:                  SSS.             S9S jjrS:S jrS;S jr \S<S  j5       r!\"S=S! j5       r#\"S>S" j5       r$S#r%g)?ÚOpOverridesiÚ  c                ó�   • [        U [        5      (       d*  [        R                  U 5      (       d  [	        U 5      (       a  U $ SU  S3$ ra  )rd  ÚCSEVariableÚ_RE_PAREN_NOT_NEEDEDÚ	fullmatchrÕ  )rÒ  s    rT   ÚparenÚOpOverrides.parenÛ  sB   € ô �vœ{×+Ñ+Ü#×-Ñ-¨f×5Ñ5Ü˜f×%Ñ%ð ˆMØ�6�(˜!ˆ}ÐrV   c                ó   • [        U 5      $ rn   )Úrepr)rh   r¶   s     rT   rà  ÚOpOverrides.constantç  s   € ä�E‹{ÐrV   c                ó2   • S[         R                  U 5       3$ )NÚ~©r×  rÜ  ru  s    rT   Úbitwise_notÚOpOverrides.bitwise_notë  s   € à”;×$Ñ$ QÓ'Ð(Ð)Ð)rV   c                ó2   • [         R                  U 5       S3$ )Nz == 0rã  )r’   s    rT   Úlogical_notÚOpOverrides.logical_notï  s   € ä×#Ñ# AÓ&Ð' uÐ-Ð-rV   c                ó\   • [         R                  U 5       S[         R                  U5       3$ )Nz & rã  r¬  s     rT   Úbitwise_andÚOpOverrides.bitwise_andó  ó+   € ä×#Ñ# AÓ&Ð' s¬;×+<Ñ+<¸QÓ+?Ð*@ÐAÐArV   c                ó\   • [         R                  U 5       S[         R                  U5       3$ )Nz | rã  r¬  s     rT   Ú
bitwise_orÚOpOverrides.bitwise_or÷  rì  rV   c                ó\   • [         R                  U 5       S[         R                  U5       3$ )Nz ^ rã  r¬  s     rT   Úbitwise_xorÚOpOverrides.bitwise_xorû  rì  rV   c                ó\   • [         R                  U 5       S[         R                  U5       3$ )Nz << rã  r¬  s     rT   Úbitwise_left_shiftÚOpOverrides.bitwise_left_shiftÿ  ó+   € ä×#Ñ# AÓ&Ð' t¬K×,=Ñ,=¸aÓ,@Ð+AÐBÐBrV   c                ó\   • [         R                  U 5       S[         R                  U5       3$ )Nz >> rã  r¬  s     rT   Úbitwise_right_shiftÚOpOverrides.bitwise_right_shift  rö  rV   c                ó.   • [         R                  " X5      $ rn   )r2   rs  r‘   s     rT   Úint_truedivÚOpOverrides.int_truediv  s   € ô
 �{Š{˜1Ó Ð rV   c                óX   • [         R                  " U [        R                  " U5      5      $ rn   )r2   rá  rÆ   ÚInteger)rf   r  s     rT   rÞ  ÚOpOverrides.load_seed  s   € ä�xŠx˜œeŸmšm¨FÓ3Ó4Ð4rV   Tc                ó*   • [        [        U5      5      $ rn   )r-   r~   )ri   rø  rÖ   ÚcheckÚwrap_negs        rT   Úindirect_indexingÚOpOverrides.indirect_indexing  s   € ô "¤# c£(Ó+Ð+rV   c                óD   • [        [        U 5      R                   S35      e)Nz,: check_bounds should be handled by CSEProxy©r�   rz  r€   ©ri   r  rÖ   ÚlowerÚuppers        rT   Úcheck_boundsÚOpOverrides.check_bounds  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#OÐPó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz$: load should be handled by CSEProxyr  ©ri   rf   rÆ  s      rT   rá  ÚOpOverrides.load"  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rV   Nc                óD   • [        [        U 5      R                   S35      e)Nz%: store should be handled by CSEProxyr  ©ri   rf   rÆ  rh   r]   s        rT   râ  ÚOpOverrides.store'  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#HÐIó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e©Nz3: device_assert_async should be handled by CSEProxyr  ©ri   rÄ  rS   s      rT   Údevice_assert_asyncÚOpOverrides.device_assert_async.  ó%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#VÐWó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz/: store_reduction should be handled by CSEProxyr  ©ri   rf   rÆ  rh   s       rT   rã  ÚOpOverrides.store_reduction3  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#RÐSó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz): reduction should be handled by CSEProxyr  ©ri   r¶   Ú	src_dtypeÚreduction_typerh   s        rT   rß  ÚOpOverrides.reduction8  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz$: scan should be handled by CSEProxyr  ©ri   ÚdtypesÚ
combine_fnÚvaluess       rT   ÚscanÚOpOverrides.scanC  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz$: sort should be handled by CSEProxyr  ©ri   r"  r$  ÚstableÚ
descendings        rT   ÚsortÚOpOverrides.sortP  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz): bucketize should be handled by CSEProxyr  ©ri   r$  Ú
boundariesÚboundary_indicesÚindexing_dtypeÚrightÚsorterÚsorter_indicess           rT   Ú	bucketizeÚOpOverrides.bucketize[  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz2: halide_clamp only implemented for Halide backendr  )ri   rh   rÖ   r  s       rT   Úhalide_clampÚOpOverrides.halide_clampi  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#UÐVó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz): dot only implemented for Triton backendr  )ri   rv  r§  s      rT   ÚdotÚOpOverrides.dotn  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rV   rH   )Úconstraintsr¶   Úis_pureÚpackc               óD   • [        [        U 5      R                   S35      e)Nz<: inline_asm_elementwise only implemented for Triton backendr  )ri   Úasmr=  r¶   r>  r?  r,  s          rT   Úinline_asm_elementwiseÚ"OpOverrides.inline_asm_elementwises  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#_Ð`ó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz.: ops.output should not appear at codegen time©ÚAssertionErrorrz  r€   rs   s     rT   r8  ÚOpOverrides.output€  s%   € ÜÜ�D‹z×"Ñ"Ð#Ð#QÐRó
ð 	
rV   c                óD   • [        [        U 5      R                   S35      e)Nz3: ops.placeholder should not appear at codegen timerE  ©ri   rÆ  s     rT   r  ÚOpOverrides.placeholder…  s%   € ÜÜ�D‹z×"Ñ"Ð#Ð#VÐWó
ð 	
rV   c                ó4   ^ • SU 4S jjnT Ul         SUl        U$ )Nc                óJ   >• [        [        U 5      R                   ST 35      e)Nz does not implement ops.r  )ri   rt   ré  rf   s      €rT   ÚunimplementedÚ1OpOverrides._unimplemented.<locals>.unimplementedŒ  s*   ø€ Ü%Ü˜“:×&Ñ&Ð'Ð'?À¸vÐFóð rV   T)ri   r×  rt   r	   ré  r	   r{   rË  )r€   Úis_unimplemented)rf   rM  s   ` rT   Ú_unimplementedÚOpOverrides._unimplementedŠ  s    ø€ ÷	ð
 "&ˆÔØ)-ˆÔ&ØÐrV   c                óˆ   • [        XS 5      n[        [        US 5      nU(       + =(       d    X#:H  =(       d    [        USS5      $ )NrO  F)Úgetattrr3   )rJ  rf   ÚfnÚ
default_fns       rT   Ú_is_unimplementedÚOpOverrides._is_unimplemented•  s;   € ä�S Ó%ˆÜœZ¨¨tÓ4ˆ
ØŒv×S˜Ñ)×S¬W°RÐ9KÈUÓ-SÐSrV   c                ó`  • US;   d   U5       e[         R                  5        H‰  u  p#[        X15      nUc5  U R                  U5      (       a  [	        XU R                  U5      5        MF  MH  X R                  ;  d   SU SU R                   35       eX$l        [	        X[        U5      5        M‹     g )N)r�  r›  Úcppvecrœ  r®  zmultiple definitions of z on )	Úpointwise_overrides_datar  rS  rV  ÚsetattrrP  Ú__dict__r€   r�   )rJ  r2  ÚfuncnameÚdataÚimpls        rT   Ú_initialize_pointwise_overridesÚ+OpOverrides._initialize_pointwise_overrides›  s¨   € àÐEÓEÐMÀvÓMÐEä6×<Ñ<Ö>‰NˆHÜ˜4Ó(ˆDØ‰|Ø×(Ñ(¨×2Ñ2Ü˜C¨3×+=Ñ+=¸hÓ+GÖHñ 3ð  §|¡|Ó3ð Ø.¨x¨j¸¸S¿\¹\¸NÐKóÐ3ð !)”Ü˜¤|°DÓ'9Ö:ò ?rV   rˆ   )rÒ  rË  r{   rË  )rh   zUnion[bool, float, int]r¶   rµ   r{   rË  rÌ  )r’   rË  r{   rË  rÍ  rÎ  )rf   r~   r  rË  r{   rË  ©TT)
rø  rË  rÖ   úUnion[sympy.Expr, int]r  r›   r  r›   r{   úsympy.Symbol©
r  r­   rÖ   r­   r  r›   r	  r›   r{   r|   )rf   r~   rÆ  r­   r{   rË  rn   )
rf   r~   rÆ  r­   rh   rË  r]   r6   r{   r|   ©rÄ  rÙ  rS   r~   r{   r|   )rf   r~   rÆ  r­   rh   rË  r{   r|   )
r¶   rµ   r  rµ   r  r5   rh   ú!Union[OpVarT, tuple[OpVarT, ...]]r{   rg  )r"  útuple[torch.dtype, ...]r#  zFCallable[[tuple[OpVarT, ...], tuple[OpVarT, ...]], tuple[OpVarT, ...]]r$  útuple[OpVarT, ...]r{   ri  )
r"  rh  r$  ri  r)  r›   r*  r›   r{   ri  ©NN)r$  rË  r/  ú.tuple[str, sympy.Expr, sympy.Expr, sympy.Expr]r0  rË  r1  rµ   r2  r›   r3  ú Optional[tuple[str, sympy.Expr]]r4  zOptional[OpVarT]r{   rË  )rh   rË  rÖ   r­   r  r›   r{   rË  )r,  rË  rA  r~   r=  r	  r¶   rµ   r>  r›   r?  r  r{   rË  )rt   rË  r{   r|   )rÆ  r  r{   rË  )rf   r~   r{   zCallable[..., OpVarT]©rf   r~   r{   r›   )r2  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+  r5  r8  r;  rô   r€  rB  r8  r  rP  rT  rV  r`  r‡   rˆ   rV   rT   r×  r×  Ú  s1  † Øó	ó ð	ð óó ðð ó*ó ð*ð ó.ó ð.ð óBó ðBð óBó ðBð óBó ðBð óCó ðCð óCó ðCð ó!ó ð!ð ó5ó ð5ð Øð,àð,ð %ð,ð ð	,ð
 ð,ð 
õ,ð
Øð
Ø&0ð
Ø9=ð
ØFJð
à	ô
ô
ð NRð
Øð
Ø *ð
Ø39ð
ØAJð
à	õ
ô
ô

ð
	
àð	
ð ð	
ð &ð		
ð
 1ð	
ð 
+ô	
ð
à'ð
ð
ð
ð #ð
ð 
ô
ð	
à'ð	
ð #ð	
ð ð		
ð
 ð	
ð 
ô	
ð$ 48Ø+/ð
àð
ð Cð
ð !ð	
ð
 $ð
ð ð
ð 1ð
ð )ð
ð 
õ
ô
ô

ð &*Ø"Ÿ]™]ØØñ
àð
ð ð
ð #ð	
ð
 ð
ð ð
ð ð
ð 
õ
ô
ô

ð
 óó ðð óTó ðTð
 ó;ó ó;rV   r×  c                  ó„   • \ rS rSr% S\S'   S\S'   SrS\S'   SrS\S	'   \R                  r	S
\S'   Sr
S\S'   SrS\S'   Srg)ÚOverridesDatai¬  r~   rf   r  r›  NzOptional[Callable[..., str]]r�  rY  r   Útype_promotion_kindrœ  r®  rˆ   )r€   r�   r‚   rƒ   r…   r�  rY  r   ÚDEFAULTrp  rœ  r®  r‡   rˆ   rV   rT   ro  ro  ¬  sQ   ‡ à
ƒIØ	Óà+/€FÐ(Ó/à+/€FÐ(Ó/à'×/Ñ/ð Ð8ó ð ,0€FÐ(Ó/Ø(,€CÐ	%Ö,rV   ro  Úairy_aic                ó   • SU  S3$ )Nzairy_ai_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  À  s   € Ð(¨¨¨1Ñ-rV   Úspecial_airy_ai)rp  r›  rf   Ú	bessel_j0c                ó   • SU  S3$ )Nzbessel_j0_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  Å  ó   € Ð*¨1¨#¨QÑ/rV   c                ó   • SU  S3$ )Nzlibdevice.j0(rŽ   rˆ   ru  s    rT   r¢  r¢  Æ  ó   € ˜=¨¨¨1Ñ-rV   Úspecial_bessel_j0)rp  r›  r�  rf   Ú	bessel_j1c                ó   • SU  S3$ )Nzbessel_j1_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  Ë  rw  rV   c                ó   • SU  S3$ )Nzlibdevice.j1(rŽ   rˆ   ru  s    rT   r¢  r¢  Ì  ry  rV   Úspecial_bessel_j1Ú	bessel_y0c                ó   • SU  S3$ )Nzbessel_y0_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  Ñ  rw  rV   c                ó   • SU  S3$ )Nzlibdevice.y0(rŽ   rˆ   ru  s    rT   r¢  r¢  Ò  ry  rV   Úspecial_bessel_y0Ú	bessel_y1c                ó   • SU  S3$ )Nzbessel_y1_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  ×  rw  rV   c                ó   • SU  S3$ )Nzlibdevice.y1(rŽ   rˆ   ru  s    rT   r¢  r¢  Ø  ry  rV   Úspecial_bessel_y1Údigammac                ó   • SU  S3$ )Nzcalc_digamma(rŽ   rˆ   ru  s    rT   r¢  r¢  Ý  s   € ˜ a S¨Ñ*rV   c                ó   • U  S3$ )Nz
.digamma()rˆ   ru  s    rT   r¢  r¢  Þ  s   € ˜A˜3˜jÑ)rV   )rp  r›  rY  rf   r†  c                ó   • SU  S3$ )Nzcalc_erfcx(rŽ   rˆ   ru  s    rT   r¢  r¢  å  ó   € ˜ A 3 aÑ(rV   c                ó   • SU  S3$ )Nzlibdevice.erfcx(rŽ   rˆ   ru  s    rT   r¢  r¢  æ  s   € Ð+¨A¨3¨aÑ0rV   Úspecial_erfcxr©  c                ó   • SU  SU SU S3$ )Nz	std::fma(r�   rŽ   rˆ   r¦  s      rT   r¢  r¢  ë  s   € ˜i¨ s¨"¨Q¨C¨r°!°°AÑ6rV   c                ó   • SU  SU SU S3$ )Nzfmadd(r�   rŽ   rˆ   r¦  s      rT   r¢  r¢  ì  s   €  ¨ s¨"¨Q¨C¨r°!°°AÑ6rV   c                ó   • SU  SU SU S3$ )Nztl.fma(r�   rŽ   rˆ   r¦  s      rT   r¢  r¢  ñ  s   €  ¨¨¨2¨a¨S°°1°#°QÑ7rV   )rp  r›  rY  r�  rf   r­  c                ó   • SU  SU S3$ )Nrb  ú) * (rŽ   rˆ   r¬  s     rT   r¢  r¢  ü  s   € ˜1˜Q˜C˜u Q C qÑ)rV   c                ód   • [         R                  R                  (       a	  SU  SU S3$ SU  SU S3$ )Nrb  r’  rŽ   zlibdevice.mul_rn(r�   )rô   ÚversionÚhipr¬  s     rT   r¢  r¢  ý  s?   € Ü�=‰=××ð   ˜s %¨ s¨!Ð,ð +à    2 a S¨Ð*ð+rV   Úigammac                ó   • SU  SU S3$ ©Nzcalc_igamma(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢    ó   € ˜<¨ s¨"¨Q¨C¨qÑ1rV   Úigammacc                ó   • SU  SU S3$ ©Nzcalc_igammac(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  
  ó   € ˜=¨¨¨2¨a¨S°Ñ2rV   Úgammaincc                ó   • SU  SU S3$ r˜  rˆ   r¬  s     rT   r¢  r¢    r™  rV   Úspecial_gammaincÚ	gammainccc                ó   • SU  SU S3$ rœ  rˆ   r¬  s     rT   r¢  r¢    r�  rV   Úspecial_gammainccÚi0c                ó   • SU  S3$ )Nzcalc_i0(rŽ   rˆ   ru  s    rT   r¢  r¢    ó   € ˜   1‘orV   c                ó   • SU  S3$ ©Nzlibdevice.cyl_bessel_i0(rŽ   rˆ   ru  s    rT   r¢  r¢    ó   € Ð3°A°3°aÑ8rV   c                ó   • U  S3$ )Nz.i0()rˆ   ru  s    rT   r¢  r¢    s
   € ˜A˜3˜e™rV   )rp  r›  r�  rY  rf   Úi0ec                ó   • SU  S3$ )Nz	calc_i0e(rŽ   rˆ   ru  s    rT   r¢  r¢     ó   € ˜	 !  AÑ&rV   c                ó   • U  S3$ )Nz.i0e()rˆ   ru  s    rT   r¢  r¢  !  s
   € ˜A˜3˜f™rV   Úspecial_i0eÚi1c                ó   • SU  S3$ )Nzcalc_i1(rŽ   rˆ   ru  s    rT   r¢  r¢  &  r¦  rV   c                ó   • SU  S3$ ©Nzlibdevice.cyl_bessel_i1(rŽ   rˆ   ru  s    rT   r¢  r¢  '  r©  rV   Ú
special_i1Úi1ec                ó   • SU  S3$ )Nz	calc_i1e(rŽ   rˆ   ru  s    rT   r¢  r¢  ,  r­  rV   Úspecial_i1eÚlog_ndtrc                ó   • SU  S3$ )Nzcalc_log_ndtr(rŽ   rˆ   ru  s    rT   r¢  r¢  1  s   € ˜ q c¨Ñ+rV   Úspecial_log_ndtrÚmodified_bessel_i0c                ó   • SU  S3$ )Nzmodified_bessel_i0_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  7  ó   € Ð3°A°3°aÑ8rV   c                ó   • SU  S3$ r¨  rˆ   ru  s    rT   r¢  r¢  8  r©  rV   Úspecial_modified_bessel_i0Úmodified_bessel_i1c                ó   • SU  S3$ )Nzmodified_bessel_i1_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  =  r½  rV   c                ó   • SU  S3$ r³  rˆ   ru  s    rT   r¢  r¢  >  r©  rV   Úspecial_modified_bessel_i1Úmodified_bessel_k0c                ó   • SU  S3$ )Nzmodified_bessel_k0_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  C  r½  rV   Úspecial_modified_bessel_k0Úmodified_bessel_k1c                ó   • SU  S3$ )Nzmodified_bessel_k1_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  H  r½  rV   Úspecial_modified_bessel_k1Úndtrc                ó   • SU  S3$ )Nz
calc_ndtr(rŽ   rˆ   ru  s    rT   r¢  r¢  N  s   € ˜
 1 # QÑ'rV   Úspecial_ndtrÚndtric                ó   • SU  S3$ )Nzcalc_ndtri(rŽ   rˆ   ru  s    rT   r¢  r¢  S  r‹  rV   Úspecial_ndtriÚ	polygammac                ó*   • U  SU SU  SU SU SU  S3$ )Nz == 0 ? calc_digamma(z) : (z == 1 ? trigamma(z) : calc_polygamma(r�   r  rˆ   r¬  s     rT   r¢  r¢  X  s3   € ØˆSÐ% a S¨¨a¨SÐ0AÀ!ÀÐDWÐXYÐWZÐZ\Ð]^Ð\_Ð_aÑbrV   Úscaled_modified_bessel_k0c                ó   • SU  S3$ )Nz"scaled_modified_bessel_k0_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  `  ó   € Ð:¸1¸#¸QÑ?rV   Ú!special_scaled_modified_bessel_k0Úscaled_modified_bessel_k1c                ó   • SU  S3$ )Nz"scaled_modified_bessel_k1_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  e  rÔ  rV   Ú!special_scaled_modified_bessel_k1Úspherical_bessel_j0c                ó   • SU  S3$ )Nzspherical_bessel_j0_forward(rŽ   rˆ   ru  s    rT   r¢  r¢  k  s   € Ð4°Q°C°qÑ9rV   Úspecial_spherical_bessel_j0Úzetac                ó   • SU  SU S3$ )Nzzeta(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  p  s   € ˜5   2 a S¨Ñ*rV   Úspecial_zetaÚchebyshev_polynomial_tc                ó   • SU  SU S3$ )Nzchebyshev_polynomial_t_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  u  ó   € Ð:¸1¸#¸RÀ¸sÀ!ÑDrV   Úspecial_chebyshev_polynomial_tÚchebyshev_polynomial_uc                ó   • SU  SU S3$ )Nzchebyshev_polynomial_u_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  z  rá  rV   Úspecial_chebyshev_polynomial_uÚchebyshev_polynomial_vc                ó   • SU  SU S3$ )Nzchebyshev_polynomial_v_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢    rá  rV   Úspecial_chebyshev_polynomial_vÚchebyshev_polynomial_wc                ó   • SU  SU S3$ )Nzchebyshev_polynomial_w_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  „  rá  rV   Úspecial_chebyshev_polynomial_wÚlegendre_polynomial_pc                ó   • SU  SU S3$ )Nzlegendre_polynomial_p_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  ‰  ó   € Ð9¸!¸¸B¸q¸cÀÑCrV   Úspecial_legendre_polynomial_pÚshifted_chebyshev_polynomial_tc                ó   • SU  SU S3$ )Nz'shifted_chebyshev_polynomial_t_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  Ž  ó   € ÐBÀ1À#ÀRÈÀsÈ!ÑLrV   Ú&special_shifted_chebyshev_polynomial_tÚshifted_chebyshev_polynomial_uc                ó   • SU  SU S3$ )Nz'shifted_chebyshev_polynomial_u_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  “  rò  rV   Ú&special_shifted_chebyshev_polynomial_uÚshifted_chebyshev_polynomial_vc                ó   • SU  SU S3$ )Nz'shifted_chebyshev_polynomial_v_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  ˜  rò  rV   Ú&special_shifted_chebyshev_polynomial_vÚshifted_chebyshev_polynomial_wc                ó   • SU  SU S3$ )Nz'shifted_chebyshev_polynomial_w_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  �  rò  rV   Ú&special_shifted_chebyshev_polynomial_wÚhermite_polynomial_hc                ó   • SU  SU S3$ )Nzhermite_polynomial_h_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  ¢  s   € Ð8¸¸¸2¸a¸SÀÑBrV   Úspecial_hermite_polynomial_hÚhermite_polynomial_hec                ó   • SU  SU S3$ )Nzhermite_polynomial_he_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  §  rî  rV   Úspecial_hermite_polynomial_heÚlaguerre_polynomial_lc                ó   • SU  SU S3$ )Nzlaguerre_polynomial_l_forward(r�   rŽ   rˆ   r¬  s     rT   r¢  r¢  ¬  rî  rV   Úspecial_laguerre_polynomial_lzdict[str, OverridesData]rZ  c                óö   ^ • [        U 4S j[        R                  R                  [        R                  R                  [        R                  R
                  [        R                  R
                  4 5       5      $ )Nc              3  ó.   >#   • U  H
  nTU;   v •  M     g 7frn   rˆ   )r   rv  rf   s     €rT   r  Ú$is_buffer_removed.<locals>.<genexpr>³  s    øé € ð ò
ˆAð 	�Ž	ò
ùs   ƒ)Úanyr7   r¹   Úremoved_buffersÚkernelÚinplaced_to_remove©rf   s   `rT   Úis_buffer_removedr  ²  sU   ø€ Üô ô �G‰G×#Ñ#Ü�H‰H×$Ñ$Ü�G‰G×&Ñ&Ü�H‰H×'Ñ'ñ	
óó ð rV   c                  óD   ^ • \ rS rSrSrSU 4S jjrSS jrS	S jrSrU =r	$ )
ÚDeferredLinei¾  zHA line that can be 'unwritten' by adding name to V.graph.removed_buffersc                ó^   >• [         TU ]  U5        Xl        [        U[        5      (       a   eg rn   )r\  rÿ   rf   rd  r&   )ri   rf   Úliner^  s      €rT   rÿ   ÚDeferredLine.__init__Á  s,   ø€ Ü‰Ñ˜ÔØŒ	Ü˜dÔ$4×5Ñ5Ð5Ð5Ð5rV   c                óP   • [        U R                  5      (       d  U R                  $ g rn   )r  rf   r  ro   s    rT   Ú__call__ÚDeferredLine.__call__Æ  s   € Ü  §¡×+Ñ+Ø—9‘9ÐØrV   c                ó.   • [        U R                  U5      $ rn   )r  rf   )ri   r  s     rT   Ú	_new_lineÚDeferredLine._new_lineË  s   € Ü˜DŸI™I tÓ,Ð,rV   r  )rf   r~   r  r~   r  )r  r~   r{   r  )
r€   r�   r‚   rƒ   r„   rÿ   r  r  r‡   rj  rk  s   @rT   r  r  ¾  s   ø† ÙR÷6ô
÷
-ò -rV   r  c                  ó"   • \ rS rSrSSS jjrSrg)ÚBracesBufferiÏ  c                óL   ^ ^• [         R                  SUU 4S jj5       nU" 5       $ )Nc               3  óÚ  >#   • [        T5       H)  n TR                  S5        T=R                  S-  sl        M+     [        T* 5       H)  n T=R                  S-  sl        TR                  S5        M+     S v •  [        T* 5       H)  n TR                  S5        T=R                  S-  sl        M+     [        T5       H)  n T=R                  S-  sl        TR                  S5        M+     g 7f)NÚ{rH   Ú})Úrangerô  Ú_indent)Ú_r  ri   s    €€rT   ÚctxÚ BracesBuffer.indent.<locals>.ctxÑ  s³   øé € ä˜6–]�Ø—‘˜sÔ#Ø—’ Ñ!—ñ #ô ˜F˜7–^�Ø—’ Ñ!•Ø—‘˜sÖ#ñ $ó Ü˜F˜7–^�Ø—‘˜sÔ#Ø—’ Ñ!—ñ $ô ˜6–]�Ø—’ Ñ!•Ø—‘˜sÖ#ò #ùs   ƒC(C+)r{   úIterator[None])Ú
contextlibÚcontextmanager)ri   r  r#  s   `` rT   ÚindentÚBracesBuffer.indentÐ  s$   ù€ Ü	×	"Ñ	"÷	$ó 
#ð	$ñ ‹uˆrV   rˆ   N)rH   )r  r  r{   z'contextlib.AbstractContextManager[None])r€   r�   r‚   rƒ   r(  r‡   rˆ   rV   rT   r  r  Ï  s   † ÷ñ rV   r  c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚInplacedBufferiä  r~   r´   ró   Úother_namesrˆ   Nr  rˆ   rV   rT   r+  r+  ä  s   ‡ ØƒOØÖrV   r+  c                  ó8   • \ rS rSr% S\S'   SrS\S'   S
S jrSrg	)ÚArgNameié  r~   rf   Fr›   Úis_constexprc                óL   • U R                    U R                  (       a  S 3$ S 3$ )Nz : tl.constexprrÑ  )rf   r/  ro   s    rT   Ú	full_nameÚArgName.full_nameï  s*   € Ø—)‘)�°$×2C×2CÐ.ÐLÐMÐMÈÐLÐMÐMrV   rˆ   Nr}   )r€   r�   r‚   rƒ   r…   r/  r1  r‡   rˆ   rV   rT   r.  r.  é  s   ‡ à
ƒIà€L�$Ó÷NrV   r.  c                  ó   • \ rS rSrSS jrSrg)Ú
RemovedArgió  c                ó   • g)NÚREMOVEDrˆ   ro   s    rT   Ú__str__ÚRemovedArg.__str__ô  s   € ØrV   rˆ   Nr}   )r€   r�   r‚   rƒ   r7  r‡   rˆ   rV   rT   r4  r4  ó  s   † ÷rV   r4  c                  ó8  • \ rS rSr\        SS j5       rSS jrSS jr\SS j5       rSS jr	SS jr
SS jr\R                  4       SS	 jjrSS
 jrS S jrS!S jrS"S jrS#S jrS$S jrS%S jr S&   S'S jjr  S(S jrS)S jrS*S jrS+S jrSrg),Ú
KernelArgsiû  c                ó†   • UR                  U[        5      n[        U[        5      (       a  U  [	        U5       3=X'   nU$ U$ rn   )r‰  r6  rd  r4  r  )r»   Úodictrf   ÚresultÚ
new_results        rT   Ú_lookupÚKernelArgs._lookupü  sE   € ð */¯©°4¼Ó)AˆÜ�fœj×)Ñ)Ø*0¨´#°e³*°Ð'>Ð>ˆE‰K˜*ØÐØˆrV   c                óJ   • 0 U l         0 U l        0 U l        0 U l        / U l        g rn   )Úinput_buffersÚoutput_buffersÚinplace_buffersrY  Úworkspace_argsro   s    rT   rÿ   ÚKernelArgs.__init__  s)   € Ø-/ˆÔØACˆÔØMOˆÔØ/1ˆŒØ24ˆÕrV   c                ó¶   • SR                  SR                  [        [        U R                  U R
                  U R                  U R                  /5      5      5      $ )NzKernelArgs({})r�   )ÚformatrÃ   Úmaprß  rB  rC  rD  rY  ro   s    rT   Ú__repr__ÚKernelArgs.__repr__  sS   € Ø×&Ñ&Ø�I‰IÜÜà×*Ñ*Ø×+Ñ+Ø×,Ñ,ØŸ™ð	óó
ó
ð 	
rV   c                ó"   • [        U [        5      $ rn   )rd  r4  r  s    rT   Ú_buffer_is_marked_removedÚ$KernelArgs._buffer_is_marked_removed  s   € ô ˜$¤
Ó+Ð+rV   c                óT  • [         R                  R                  (       a3  [         R                  R                  R                  R	                  X5      nU[         R                  R
                  ;  d   U5       eXR                  ;   a  [        [        U R                  U   5      $ XR                  ;   a'  [        [        U R                  U   5      R                  $ UR                  S5      (       a  U R                  SU R                  U5      $ U R                  SU R                  U5      $ )NÚseedÚin_ptr)r7   r¹   rO  Úmutation_real_namer‰  r
  rC  r
   r~   rD  r+  r´   r=  r?  rB  r'  s     rT   ÚinputÚKernelArgs.input#  sÛ   € Ü�7‰7××Ü—7‘7×$Ñ$×7Ñ7×;Ñ;¸DÓGˆDØœ1Ÿ7™7×2Ñ2Ó2Ð8°DÓ8Ð2Ø×&Ñ&Ó&Üœ˜T×0Ñ0°Ñ6Ó7Ð7Ø×'Ñ'Ó'Üœ¨×(<Ñ(<¸TÑ(BÓC×NÑNÐNØ�?‰?˜6×"Ñ"Ø—<‘< ¨×(:Ñ(:¸DÓAÐAØ�|‰|˜H d×&8Ñ&8¸$Ó?Ð?rV   c                ó–  • [         R                  R                  (       a3  [         R                  R                  R                  R	                  X5      nU[         R                  R
                  ;  d   U5       eXR                  ;   a'  [        [        U R                  U   5      R                  $ U R                  SU R                  U5      $ )NÚout_ptr)r7   r¹   rO  rR  r‰  r
  rD  r
   r+  r´   r?  rC  r'  s     rT   r8  ÚKernelArgs.output/  s�   € Ü�7‰7××Ü—7‘7×$Ñ$×7Ñ7×;Ñ;¸DÓGˆDØœ1Ÿ7™7×2Ñ2Ó2Ð8°DÓ8Ð2Ø×'Ñ'Ó'Üœ¨×(<Ñ(<¸TÑ(BÓC×NÑNÐNØ�|‰|˜I t×':Ñ':¸DÓAÐArV   c                ó,  • U[         R                  R                  ;   a)  [         R                  R                  R                  U5        X R                  ;  d   U5       eXR                  ;   aP  U R                  U   n[        U[        5      (       a   eUR                  R                  U5        X0R                  U'   g U R                  R                  5        Vs/ s H  n[        U[        5      (       a  M  UPM     nnU R                  R                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     nn[        [        U5      5      [        U5      -   n[        SU 3X/5      nX0R                  U'   X0R                  U'   g s  snf s  snf )NÚ
in_out_ptr)r7   r¹   Úunaligned_buffersr™  rD  rd  r4  r,  Úappendr$  r  r0   r+  )ri   Ú
input_nameÚoutput_nameÚbufÚvalÚalive_buffersr
  Úinplace_buffer_idxs           rT   Úmake_inplaceÚKernelArgs.make_inplace7  sh  € ØœŸ™×2Ñ2Ó2Ü�G‰G×%Ñ%×)Ñ)¨+Ô6Ø×"6Ñ"6Ó6ÐC¸ÓCÐ6Ø×-Ñ-Ó-Ø×&Ñ& zÑ2ˆCÜ! #¤z×2Ñ2Ð2Ð2Ø�O‰O×"Ñ" ;Ô/Ø03× Ñ  Ò-ð  ×/Ñ/×6Ñ6Ô8óâ8�CÜ! #¤z×2÷ Ù8ð ð ð  ×/Ñ/×6Ñ6Ô8óâ8�CÜ˜c¤:×.÷ Ù8ð ð ô
 "%¤V¨MÓ%:Ó!;¼cÀ/Ó>RÑ!RÐÜ ØÐ/Ð0Ð1ØÐ)óˆCð 03× Ñ  Ñ,Ø03× Ñ  Ò-ùò!ùò
s   ÃFÃ6FÄFÄ7Fc                ó~  • [        U[        R                  U5      [        R                  R                  5       [         R                  5       US9n[        U R                  5       H£  u  pV[         R                  Xd5      (       aI  UR                  n[         R                  Xd5      U R                  U'   UR                  UR                  U4s  $ UR                  UR                  :w  a  UR                  UR                  :w  a  Mž   U5       e   U R                  R                  U5        UR                  UR                  S4$ )aº  
Allocate or extend a workspace buffer of nelem elements.

This function manages the allocation of a workspace buffer. It either creates
a new WorkspaceArg or extends an existing one.

Note:
- Calling this function will in-place mutate the args by adding or updating
a WorkspaceArg.
- The codegen for generating the Python argdefs and call_defs will check
this field and allocate the buffer accordingly.
- A new argument "ws_ptr" will be present in the generated code.

Args:
    nelem (sympy.Expr): The number of elements to allocate.
    zero_fill (bool): Whether to initialize the buffer to zero.
    dtype (torch.dtype): the dtype of the workspace tensor

Returns:
    Tuple[str, str, int]: A tuple containing:
        - "ws_ptr": A string identifier for the workspace pointer.
        - "workspace_{i}": agraph level unique identifier for
            the workspace tensor.
        - offset: An integer representing the item offset in the workspace.
)r®   r¯   r±   r²   r¶   r   )r«   rŠ   r™   r7   r¹   Úget_current_device_or_throwr¼   rÑ  rE  r¿   r®   rÃ   r´   r²   r[  )ri   Únelemr˜   r¶   ÚargrÓ  Úexisting_argr  s           rT   r\  ÚKernelArgs.workspaceS  s
  € ô8 ØÜ'×1Ñ1°)Ó<Ü—7‘7×6Ñ6Ó8Ü#×/Ñ/Ó1Øñ
ˆô  )¨×)<Ñ)<Ö=‰OˆAÜ×$Ñ$ \×7Ñ7Ø%×+Ñ+�Ü)5×):Ñ):¸<Ó)M�×#Ñ# AÑ&Ø#×.Ñ.°×0GÑ0GÈÐOÒOà×'Ñ'¨3¯>©>Ó9Ø ×+Ñ+¨s¯~©~Õ=ðð óð>ñ  >ð 	×Ñ×"Ñ" 3Ô'Ø�~‰~˜sŸ~™~¨qÐ0Ð0rV   c           
     óŒ  • [         R                  R                  5       n[        U[        R
                  [        R                  SSUR                   SUR                   3US9nU R                   H,  nUR                  UR                  :X  d  M  X4:X  a  M&   X445       e   U R                  R                  U5        UR                  $ )a„  
Lazily allocate a graph-wide semaphores buffer with at least min_size.  This is a single buffer shared by
all kernels and zero initialized once at graph start.  Each kernel must leave the buffer zeroed on exit.

Warning: multiple calls to this function will return the same buffer.

Args:
    min_size: the number of int32 semaphores required

Returns:
    name of the semaphores buffer
Úsem_ptrÚsemaphores_r"  )r®   r¯   r¶   r´   r²   r±   )r7   r¹   re  r«   rŠ   rœ   rô   Úuint32rz  rÆ  rE  r´   r[  )ri   Úmin_sizeÚcurrent_devicerg  rh  s        rT   Ú
semaphoresÚKernelArgs.semaphores‚  s¯   € ô Ÿ™×<Ñ<Ó>ˆÜØÜ'×6Ñ6Ü—,‘,Ø Ø$ ^×%8Ñ%8Ð$9¸¸>×;OÑ;OÐ:PÐQØ!ñ
ˆð !×/Ô/ˆLØ×&Ñ&¨#¯.©.Õ8ØÕ*Ð?¨SÐ,?Ó?Ð*ñ 0ð 	×Ñ×"Ñ" 3Ô'Ø�~‰~ÐrV   c                óz  ^• [        U[        5      (       d   [        U5      U45       e[        R                  " U5      nX R
                  ;   a  U R
                  U   $ TU R
                  R                  5       ;   a1  T [        U4S jU R
                  R                  5        5       5       3mTU R
                  U'   T$ )Nc              3  óV   >#   • U  H  oR                  T5      (       d  M  S v •  M      g7f)rH   N)r=  )r   r  rf   s     €rT   r  Ú)KernelArgs.seed_offset.<locals>.<genexpr>¦  s   øé € ÐUÒ(> 1Ç,Á,Èt×BTŸQ™QÒ(>ùs   ƒ) 	))rd  r  rz  rÆ   rþ  rY  r$  Úsum)ri   rf   rh   s    ` rT   Úseed_offsetÚKernelArgs.seed_offsetž  sŸ   ø€ Ü˜%¤×%Ñ%Ð;¬¨U«°UÐ';Ó;Ð%ä—’˜eÓ$ˆØ—M‘MÓ!Ø—=‘= Ñ'Ð'Ø�4—=‘=×'Ñ'Ó)Ó)à�&œÔU¨¯©×(<Ñ(<Ô(>ÓUÓUÐVÐWð ð  $ˆ�‰�eÑØˆrV   c                óÞ   • [        U[        R                  5      (       d   [        U5      U45       eUR                  S:X  a  SU R
                  U'   gU R                  SU R
                  U5      $ )NrP  Úks)rd  rÆ   ÚSymbolrz  rf   rY  r?  r'  s     rT   rÖ   ÚKernelArgs.size«  s[   € Ü˜$¤§¡×-Ñ-ÐA´°T³
¸DÐ/AÓAÐ-Ø�9‰9˜ÓØ"(ˆD�M‰M˜$ÑØØ�|‰|˜D $§-¡-°Ó6Ð6rV   c                ó¬   • [        U R                  R                  5       U R                  R                  5       U R                  R                  5       5      $ rn   )r   rB  ÚkeysrC  rY  ro   s    rT   Ú
call_namesÚKernelArgs.call_names²  sA   € ÜØ×Ñ×#Ñ#Ó% t×':Ñ':×'?Ñ'?Ó'AÀ4Ç=Á=×CUÑCUÓCWó
ð 	
rV   c                ó&  • U R                   R                  US5      nUb!  [        U[        5      (       d  UR                  $ U R
                  R                  US5      nUb  [        U[        5      (       d  U$ U R                  R                  US5      $ )z+
Returns inner name of a given outer name.
N)rD  r‰  rd  r4  r´   rC  rB  )ri   rf   Úinplacedr]  s       rT   Úarg_nameÚKernelArgs.arg_name·  sƒ   € ð ×'Ñ'×+Ñ+¨D°$Ó7ˆØÑ¬
°8¼Z×(HÑ(HØ×&Ñ&Ð&Ø×)Ñ)×-Ñ-¨d°DÓ9ˆØÑ"¬:°kÄ:×+NÑ+NØÐØ×!Ñ!×%Ñ% d¨DÓ1Ð1rV   c                ó   • U$ rn   rˆ   )ri   r^  r¶   s      rT   Úwrap_ptr_argÚKernelArgs.wrap_ptr_argÃ  s   € Øˆ
rV   c                ó   • [        U5      $ rn   rÿ  )ri   rÖ   s     rT   Úwrap_size_argÚKernelArgs.wrap_size_argÆ  s   € Ü�4‹yÐrV   Nc                óæ  • SSK Jn  Uc  SSK Jn  Un/ n/ n/ n[        U R                  R                  5       5       H¢  n[        U[        5      (       a  M  UR                  S   nUR                  n	[        R                  R                  U5      n
X   nUR                  U SU	 35        UR                  U R                  XŠ5      5        UR                  U S35        M¤     U R                  R!                  5        H…  u  p‰X€R                  ;   a  M  [        R                  R                  U5      n
X   nUR                  SU SU	 35        UR                  U R                  XŠ5      5        UR                  SU S35        M‡     U R"                  R!                  5        H˜  u  pŒX€R                  ;   d  [        U[        5      (       a  M+  [        R                  R                  U5      n
X   nUR                  U SU 35        UR                  U R                  XŠ5      5        UR                  U S35        Mš     U R$                  R!                  5        Hÿ  u  p‰[        U[&        R(                  5      (       aE  [+        U[,        R.                  5      (       a&  UR                  SU	 35        UR                  S	5        O+UR                  SU S
U	 35        UR                  SU 35        UR                  U R1                  U5      5        [        R                  R2                  (       d  MÕ  [        R                  R2                  R5                  U5        GM     U R6                  (       a   S5       eXTU4$ )NrH   )Ú
INDEX_TYPE)rð  rÙ  z* Ú*zconst zconst float zconst floatÚ zWorkspace not supported on CPU )rö  r‹  rð  r0   rD  r$  rd  r4  r,  r´   r7   r¹   rÐ   r[  r…  rB  r  rC  rY  rÆ   rz  r   r   ÚUNBACKED_FLOATrˆ  Úwrapper_codeÚensure_size_computedrE  )ri   Údtype_to_cpp_typer‹  rð  Ú	call_argsÚarg_defsÚ	arg_typesr�  ÚouterÚinnerr¶   Ú	cpp_dtypeÚmaybe_inners                rT   Úcpp_argdefsÚKernelArgs.cpp_argdefsÉ  sï  € õ 	*àÑ$Ý/à ,Ðàˆ	ØˆØˆ	Ü˜t×3Ñ3×:Ñ:Ó<Ö=ˆHÜ˜(¤J×/Ñ/ÙØ×(Ñ(¨Ñ,ˆEØ×'Ñ'ˆEÜ—G‘G×%Ñ% eÓ,ˆEØ)Ñ0ˆIØ�O‰O˜y˜k¨¨E¨7Ð3Ô4Ø×Ñ˜T×.Ñ.¨uÓ<Ô=Ø×Ñ 	˜{¨!˜_Ö-ñ >ð !×.Ñ.×4Ñ4Ö6‰LˆEØ×,Ñ,Ó,ÙÜ—G‘G×%Ñ% eÓ,ˆEØ)Ñ0ˆIØ�O‰O˜f Y K¨r°%°Ð9Ô:Ø×Ñ˜T×.Ñ.¨uÓ<Ô=Ø×Ñ˜v i [°Ð2Ö3ñ 7ð #'×"5Ñ"5×";Ñ";Ö"=ÑˆEØ×,Ñ,Ó,´
¸;Ì
×0SÑ0SÙÜ—G‘G×%Ñ% eÓ,ˆEØ)Ñ0ˆIØ�O‰O˜y˜k¨¨K¨=Ð9Ô:Ø×Ñ˜T×.Ñ.¨uÓ<Ô=Ø×Ñ 	˜{¨!˜_Ö-ñ #>ð !ŸM™M×/Ñ/Ö1‰LˆEÜ˜%¤§¡×.Ñ.´>Øœ×+Ñ+÷4ñ 4ð —‘ ,¨u¨gÐ 6Ô7Ø× Ñ  Õ/à—‘ &¨¨°A°e°WÐ =Ô>Ø× Ñ  6¨*¨Ð!6Ô7Ø×Ñ˜T×/Ñ/°Ó6Ô7Ü�w‰w×#×#Ñ#Ü—‘×$Ñ$×9Ñ9¸%×@ñ 2ð ×&×&ÐIÐ(IÓIÐ&Ø IÐ-Ð-rV   c                óÖ  • / n/ n/ n/ n[        U R                  R                  5       5       Hò  n[        U[        5      (       a  M  UR                  [        UR                  5      5        UR                  UR                  S   5        UR                  [        R                  R                  UR                  S   5      5        UR                  [        UR                  UR                  S   [        R                  R                  UR                  S   5      S95        Mô     [        U R                  R                  5       U R                   R                  5       5       H»  u  pgX`R                  ;   d  [        U[        5      (       a  M+  UR                  [        U5      5        UR                  U5        UR                  [        R                  R                  U5      5        UR                  [        UU[        R                  R                  U5      S95        M½     U R"                  R                  5        H®  u  pgUR                  [        U5      5        UR                  U5        UR                  [%        U5      5        UR                  ['        Xv5      5        [        R                  R(                  (       d  M…  [        R                  R(                  R+                  U5        M°     U R,                   Hn  nUR                  [        UR                  5      5        UR                  UR.                  5        UR                  U5        UR                  UR0                  5        Mp     XXC4$ )NrÙ  )rf   r  r¶   )r0   rD  r$  rd  r4  r[  r.  r´   r,  r7   r¹   rÐ   r  r   rB  r  rC  rY  rz  r  r�  r�  rE  r²   r¶   )	ri   r“  r’  r”  Úprecompile_argsr�  r•  r–  rg  s	            rT   Úpython_argdefsÚKernelArgs.python_argdefsÿ  s‘  € ð #%ˆØ!ˆ	Ø!ˆ	Ø/1ˆÜ˜t×3Ñ3×:Ñ:Ó<Ö=ˆHÜ˜(¤J×/Ñ/ÙØ�O‰OœG H×$7Ñ$7Ó8Ô9Ø×Ñ˜X×1Ñ1°"Ñ5Ô6Ø×ÑœQŸW™W×.Ñ.¨x×/CÑ/CÀBÑ/GÓHÔIØ×"Ñ"ÜØ!×,Ñ,Ø#×/Ñ/°Ñ3ÜŸ'™'×+Ñ+¨H×,@Ñ,@ÀÑ,DÓEñöñ >ô "Ø×Ñ×$Ñ$Ó&à×Ñ×%Ñ%Ó'ö
‰LˆEð
 ×,Ñ,Ó,´
¸5Ä*×0MÑ0MÙØ�O‰OœG E›NÔ+Ø×Ñ˜UÔ#Ø×ÑœQŸW™W×.Ñ.¨uÓ5Ô6Ø×"Ñ"ÜØØ ÜŸ'™'×+Ñ+¨EÓ2ñöñ
ð" !ŸM™M×/Ñ/Ö1‰LˆEØ�O‰OœG E›NÔ+Ø×Ñ˜UÔ#Ø×ÑœT %›[Ô)Ø×"Ñ"¤7¨5Ó#8Ô9Ü�w‰w×#×#Ñ#Ü—‘×$Ñ$×9Ñ9¸%Ö@ñ 2ð ×&Ô&ˆCØ�O‰OœG C§N¡NÓ3Ô4Ø×Ñ˜SŸ^™^Ô,Ø×"Ñ" 3Ô'Ø×Ñ˜SŸY™YÖ'ñ	 'ð
  OÐ>Ð>rV   c              #  ó   #   • [        U R                  R                  5       5       HÓ  n[        U[        5      (       a  M  UR
                   H©  nU[        R                  R                  ;   d  U[        R                  R                  ;   a  MA  X R                  ;   a  U R                  U   UR                  4v •  X R                  ;   d  M~  [        [        U R                  U   5      UR                  4v •  M«     MÕ     g 7frn   )r0   rD  r$  rd  r4  r,  r7   r¹   r  r  rB  r´   rC  r
   r~   )ri   r�  Úothers      rT   ÚaliasesÚKernelArgs.aliases2  sÁ   é € Ü˜t×3Ñ3×:Ñ:Ó<Ö=ˆHÜ˜(¤J×/Ñ/ÙØ!×-Ô-�àœQŸW™W×7Ñ7Ó7Ø¤§¡× ;Ñ ;Ó;áØ×.Ñ.Ó.Ø×,Ñ,¨UÑ3°X×5HÑ5HÐHÒHØ×/Ñ/Õ/Üœs D×$7Ñ$7¸Ñ$>Ó?À×ATÑATÐTÔTó .ò >ùs   ‚CC>Ã
4C>c                óÈ   • [        U R                  R                  U[        5      [        5      =(       a.    [        U R
                  R                  U[        5      [        5      $ rn   )rd  rC  r‰  r6  r4  rD  r'  s     rT   Ú
is_removedÚKernelArgs.is_removedA  sK   € ÜØ×Ñ×#Ñ# D¬'Ó2´Jó
÷ Nä˜×-Ñ-×1Ñ1°$¼Ó@Ä*ÓMð	NrV   c                óŒ  • [        5       n[        U R                  R                  5       5       H8  n[	        U[
        5      (       a  M  UR                  UR                  S   5        M:     U R                  R                  5        H<  u  p4X0R                  ;   d  [	        U[
        5      (       a  M+  UR                  U5        M>     U$ )NrÙ  )
r   r0   rD  r$  rd  r4  r™  r,  rC  r  )ri   Ú	live_outsr�  r•  r–  s        rT   Úlive_output_buffersÚKernelArgs.live_output_buffersI  sš   € Ü%/£\ˆ	Ü˜t×3Ñ3×:Ñ:Ó<Ö=ˆHÜ˜(¤J×/Ñ/ÙØ�M‰M˜(×.Ñ.¨rÑ2Ö3ñ >ð !×/Ñ/×5Ñ5Ö7‰LˆEØ×,Ñ,Ó,´
¸5Ä*×0MÑ0MÙØ�M‰M˜%Ö ñ 8ð ÐrV   )rD  rB  rC  rY  rE  )r»   r~   r<  z6Union[dict[_T, Union[str, RemovedArg]], dict[_T, str]]rf   rK   r{   r~   rz   r}   )rf   r	   r{   r›   r_  )r\  r~   r]  r~   r{   r|   )rf  r­   r˜   r›   r¶   rµ   r{   ztuple[str, str, int])rn  r­   r{   r~   )rf   r~   rh   r  r{   r~   )rf   rd  r{   r~   )r{   zIterator[str])rf   r~   r{   r	  )r^  r~   r¶   rµ   r{   r~   )rÖ   Ú
SymbolLiker{   r~   rn   )r‘  z Optional[dict[torch.dtype, str]]r{   z&tuple[list[str], list[str], list[str]])r{   z?tuple[list[ArgName], list[str], list[KernelArgType], list[Any]])r{   zIterator[tuple[str, str]]rm  )r{   zOrderedSet[str])r€   r�   r‚   rƒ   r�   r?  rÿ   rJ  rM  rS  r8  rb  rô   rõ   r\  rp  rv  rÖ   r~  r‚  r…  rˆ  r™  r�  r¡  r¤  r¨  r‡   rˆ   rV   rT   r:  r:  û  s÷   † Øð	Øð	àEð	ð ð	ð 
ó		ó ð	ô5ô
ð ó,ó ð,ô
@ôBô4ð: HMÇ{Á{ð-1Øð-1Ø,0ð-1Ø9Dð-1à	õ-1ô^ô8ô7ô
ô

2ôôð EIð4.Ø!Að4.à	/õ4.ðl1?à	Hô1?ôfUôN÷
rV   r:  c                  óx   ^ • \ rS rSrSr  S
       SU 4S jjjrSS jrSS jrSS jrSS jr	SS jr
S	rU =r$ )rÙ  iV  a4  A CSEVariable is just a name for an expression but it is useful to be able to annotate them on a backend dependent basis.
To do so, the backends can simply overload `Kernel.create_cse_var`
The "CSEVariable.update_on_args" method gives you a hook for annotations
See example of TritonCSEVariable in triton.py
c                óª   >• [         TU ]  5         [        U[        5      (       d   [	        U5      5       eXl        X l        SU l        X0l        X@l	        g rr  )
r\  rÿ   rd  r   rz  rf   ÚboundsÚ	use_countr¶   r  )ri   rf   r­  r¶   r  r^  s        €rT   rÿ   ÚCSEVariable.__init__]  sG   ø€ ô 	‰ÑÔÜ˜&¤+×.Ñ.Ð<´°V³Ó<Ð.ØŒ	ØŒØˆŒØŒ
Ø�
rV   c                ó   • U R                   $ rn   r  ro   s    rT   r7  ÚCSEVariable.__str__l  s   € Ø�y‰yÐrV   c                ó,   • [        U R                  5      $ rn   )Úhashrf   ro   s    rT   Ú__hash__ÚCSEVariable.__hash__o  s   € Ü�D—I‘I‹ÐrV   c                ób   • [        U[        5      =(       a    UR                  U R                  :H  $ rn   )rd  rÙ  rf   )ri   r   s     rT   Ú__eq__ÚCSEVariable.__eq__r  s!   € Ü˜%¤Ó-×I°%·*±*ÀÇ	Á	Ñ2IÐIrV   c                ó   • g rn   rˆ   )ri   rf   rt   ré  s       rT   Úupdate_on_argsÚCSEVariable.update_on_argsu  s   € ØrV   c                óP   • U R                   R                   SU R                  < S3$ ra  )r^  r€   rf   ro   s    rT   rJ  ÚCSEVariable.__repr__x  s$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯I©I©=¸Ð:Ð:rV   )r­  r¶   rf   r  r®  rj  )rf   r~   r­  úValueRanges[Any]r¶   r  r  rG   r}   )r{   r  )r   Úobjectr{   r›   )rf   r~   rt   r	   ré  r	   r{   r|   )r€   r�   r‚   rƒ   r„   rÿ   r7  r´  r·  rº  rJ  r‡   rj  rk  s   @rT   rÙ  rÙ  V  s_   ø† ñð (,Ø $ðàðð !ðð %ð	ð
 ÷ð ôôôJô÷;ò ;rV   rÙ  ÚAugmentedKeyT)Údefault)ÚboundrÁ  .c                  óx  • \ rS rSrSr       S             SS jjrSS jrSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jr\R                  " 5       SSSSS.               SS jjr\R                  " 5       SS4       SS jjr\R                  " 5       SS4         SS jjrSrg)ÚCSEi‡  z Common subexpression eliminationNc                óú   • Xl         X l        0 U l        X0l        U=(       d    0 U l        U=(       d    0 U l        U=(       d    [        R                  " 5       U l        [        5       U l
        U=(       d    0 U l        g rn   )r»   r^   Ú_cacheÚname_prefixÚstore_cacheÚreduction_cacheÚ	itertoolsr®   Úiter_buffer_idsr   Úinvalidated_storesÚvarname_map)ri   r»   r^   rÇ  Úiter_buffersrÈ  rÉ  rÍ  s           rT   rÿ   ÚCSE.__init__Š  sg   € ð ŒØŒØFHˆŒØ&ÔØAL×ARÐPRˆÔà×!˜rð 	Ôð 6B×5VÄYÇ_Â_ÓEVˆÔÜ3=³<ˆÔØ7B×7HÀbˆÕrV   c                óL  • / U R                   R                  5       Q H4  u  p#X1;  d  M  U R                   U	 U R                  R                  U5        M6     U(       a<  U R                  R                  5        VVs0 s H  u  pEXQ;   d  M  XE_M     snnU l        g 0 U l        g s  snnf rn   )rÈ  r  rÌ  r™  rÆ  )ri   Ú	keep_varsrf   Útmpr  r  s         rT   Ú
invalidateÚCSE.invalidate¢  s‹   € Ø4˜4×+Ñ+×1Ñ1Ó3Ó4‰IˆDØÕ#Ø×$Ñ$ TÐ*Ø×'Ñ'×+Ñ+¨DÖ1ñ 5ö Ø,0¯K©K×,=Ñ,=Ô,?ÔRÒ,?¡D AÀ1Á>›4˜1š4Ñ,?ÒRˆD�KàˆD�Kùó Ss   Á9B ÂB c           
     ó¸   • [        U 5      " U R                  U R                  U R                  U R                  U R
                  U R                  U R                  S9$ )N)r»   r^   rÇ  rÎ  rÈ  rÍ  rÉ  )rz  r»   r^   rÇ  rË  rÈ  rÍ  rÉ  ro   s    rT   ÚcloneÚ	CSE.clone¬  sN   € Ü�DŒzØ—;‘;Ø—;‘;Ø×(Ñ(Ø×-Ñ-Ø×(Ñ(Ø×(Ñ(Ø ×0Ñ0ñ
ð 	
rV   c                óÂ   • U R                  5       n[        U R                  5      Ul        [        U R                  5      Ul        [        U R                  5      Ul        U$ )zNReturn a copy of using ScopedDict so changes to *_cache aren't visible in self)rÖ  r+   rÆ  rÉ  rÈ  )ri   Únew_cses     rT   Úscoped_copyÚCSE.scoped_copy·  sH   € à—*‘*“,ˆÜ# D§K¡KÓ0ˆŒÜ",¨T×-AÑ-AÓ"BˆÔÜ(¨×)9Ñ)9Ó:ˆÔØˆrV   c                ó"   • [        [        U5      $ )z@Override this method to augment cache key with backend specifics)r
   rÀ  ©ri   Ú	cache_keys     rT   Úaugment_keyÚCSE.augment_key¿  s   € ä”M 9Ó-Ð-rV   c                ó>   • X R                   U R                  U5      '   g rn   ©rÆ  rß  )ri   rÞ  r_  s      rT   ÚputÚCSE.putÃ  s   € Ø36�‰�D×$Ñ$ YÓ/Ò0rV   c                ó>   • U R                  U5      U R                  ;   $ rn   )rß  rÆ  rÝ  s     rT   ÚcontainsÚCSE.containsÆ  s   € Ø×Ñ 	Ó*¨d¯k©kÑ9Ð9rV   c                óX   • U R                   R                  U R                  U5      S 5      $ rn   )rÆ  r‰  rß  rÝ  s     rT   Útry_getÚCSE.try_getÉ  s"   € Ø�{‰{�‰˜t×/Ñ/°	Ó:¸DÓAÐArV   c                ó>   • U R                   U R                  U5         $ rn   râ  rÝ  s     rT   r‰  ÚCSE.getÌ  s   € Ø�{‰{˜4×+Ñ+¨IÓ6Ñ7Ð7rV   T)r­  rg   Ú
assignmentr¶   r  c          	     óp  • [        U[        5      (       a  UR                  nU(       d	  U(       d   e[        U[        5      (       aE  UR                  R                  U5      Ul        U=R                  S-  sl        [        [        U5      $ [        U[        5      (       a  UR                  5       nO;[        U[        5      (       a  UR                  nO[        U[        5      (       d   eUnU R                  U5      n	Uc	  U(       d  SnU	(       Gdï  U R                  X6U5      n	U R!                  X‰5        U(       GaÂ  ["        R$                  R&                  (       a(  ["        R$                  R&                  R)                  USS9  [        U[        5      (       aU  U(       a   UR+                  U R,                   U	 S35        UR/                  U5        UR+                  U R0                  5        U	$ [        U[        5      (       aR  U(       d   eUR+                  UR3                  U R,                   U	 SUR                   U R0                   35      5        U	$ U(       a   U R,                   U	 SU U R0                   3n
OU U R0                   3n
UR+                  U
5        U(       a[  [4        R6                  R8                  (       d  [4        R6                  R:                  (       a  Ub  [=        5       S:w  a  [?        XU5        U	$ U	R                  R                  U5      U	l        U	=R                  S-  sl        U	$ )NrH   rˆ   T)Ú	only_oncez =z = r›  ) rd  r4   rh   rÙ  r­  Útightenr®  r
   rì  r)   Úgetvaluer&   r  r~   ré  Únewvarrã  r7   r  Úcurrent_nodeÚcodegen_originating_inforô  r»   Úsplicer^   r  r   rò  ró  rõ  r(   rü  )ri   r  r  r­  rg   rí  r¶   r  rÞ  rø  r  s              rT   ÚgenerateÚCSE.generateÏ  s{  € ô �dœH×%Ñ%Ø—:‘:ˆDæž
Ð"Ð"Ü�dœK×(Ñ(ð Ÿ+™+×-Ñ-¨fÓ5ˆDŒKØ�NŠN˜aÑ�NÜœ¨Ó.Ð.Ü˜œn×-Ñ-ØŸ™›‰IÜ˜Ô.×/Ñ/ØŸ	™	‰Iä˜d¤C×(Ñ(Ð(Ð(ØˆIØ�l‰l˜9Ó%ˆØ‰=¦ð ˆEßØ—+‘+˜f¨UÓ3ˆCØ�H‰H�YÔ$ßÜ—8‘8×(×(Ü—H‘H×)Ñ)×BÑBØ¨$ð Cñ ô ˜d¤N×3Ñ3Þ!Ø×(Ñ(¨D¯K©K¨=¸¸¸RÐ)@ÔAØ—M‘M $Ô'Ø×$Ñ$ T§[¡[Ô1ð: ˆ
ô9   Ô&6×7Ñ7Þ%Ð%˜:Ø×$Ñ$ØŸ™¨$¯+©+¨°s°e¸3¸t¿y¹y¸kÈ$Ï+É+ÈÐ'WÓXôð4 ˆ
ö- "Ø"&§+¡+ ¨s¨e°3°t°f¸T¿[¹[¸MÐJ™à"& ¨¯© }Ð5˜Ø×$Ñ$ TÔ*ö #ä"×/Ñ/×K×KÜ%×2Ñ2×J×Jà!Ñ-Ü/Ó1°UÓ:ä# F°Ô7ð ˆ
ð Ÿ™×+Ñ+¨FÓ3ˆCŒJØ�MŠM˜QÑ�Màˆ
rV   c                ó¨   • U R                    [        U R                  5       3n[        R                  R                  XAX#5      nXPR                  U'   U$ rn   )rÇ  r¸   rË  r7   r  Úcreate_cse_varrÍ  )ri   r­  r¶   r  Úvar_namerø  s         rT   rò  Ú
CSE.newvar  sN   € ð ×&Ñ&Ð'¬¨T×-AÑ-AÓ(BÐ'CÐDˆÜ�h‰h×%Ñ% h¸ÓEˆØ%(×Ñ˜Ñ"Øˆ
rV   c                ó¶   ^• [         R                  " TU R                  ;  U4S j5        [        R                  R                  TX#U5      nXPR                  T'   U$ )Nc                 ó   >• ST  3$ )Nzduplicate name: rˆ   r  s   €rT   r¢  ÚCSE.namedvar.<locals>.<lambda>/  s   ø€ Ð4DÀTÀFÑ2KrV   )rô   Ú_check_valuerÍ  r7   r  rù  )ri   rf   r­  r¶   r  rø  s    `    rT   ÚnamedvarÚCSE.namedvar'  sQ   ø€ ô 	×ÒØ˜×(Ñ(Ñ(Ô*Kô	
ô �h‰h×%Ñ% d¨F¸5ÓAˆØ!$×Ñ˜ÑØˆ
rV   )	rÆ  rÌ  rË  rÇ  r»   rÉ  rÈ  r^   rÍ  )rÑ  rÑ  rÒ  NNNN)r»   r~   r^   r~   rÇ  r~   rÎ  zOptional[itertools.count[int]]rÈ  z.Optional[MutableMapping[str, CSEVariableType]]rÉ  z<Optional[MutableMapping[ReductionCacheKey, CSEVariableType]]rÍ  z$Optional[dict[str, CSEVariableType]])rÑ  zOrderedSet[CSEVariable]r{   r|   ©r{   r   )rÞ  r~   r{   rÀ  )rÞ  r~   r_  rì  r{   r|   )rÞ  r~   r{   r›   )rÞ  r~   r{   zOptional[CSEVariableType])rÞ  r~   r{   rì  )r  r)   r  zCUnion[str, CSEVariable, OpsValue, IndentedBuffer, DeferredLineBase]r­  r¾  rg   r›   rí  r›   r¶   r  r  rG   r{   rì  )r­  r¾  r¶   r  r  rG   r{   rì  )
rf   r~   r­  r¾  r¶   r  r  rG   r{   rì  )r€   r�   r‚   rƒ   r„   rÿ   rÓ  rÖ  rÚ  rß  rã  ræ  ré  r‰  r   Úunknownrö  rò  r   r‡   rˆ   rV   rT   rÄ  rÄ  ‡  sž  † Ù*ð ØØ Ø7;ØFJð Ø<@ðIàðIð ðIð ð	Ið
 5ðIð DðIð
ðIð :õIô0ô	
ôô.ô7ô:ôBô8ð $/×#6Ò#6Ó#8ØØØ'+Ø $ñKàðKð RðKð
 !ðKð ðKð ðKð %ðKð ðKð 
õKð^ $/×#6Ò#6Ó#8Ø'+Ø $ð		à ð	ð %ð	ð ð		ð
 
õ	ð $/×#6Ò#6Ó#8Ø'+Ø $ðàðð !ðð %ð	ð
 ðð 
÷ð rV   rÄ  c                  ó@   ^ • \ rS rSrSU 4S jjrSS jrSS jrSrU =r$ )	ÚCodeGeni6  c                óV   >• [         TU ]  5         [        R                  " 5       U l        g rn   )r\  rÿ   r&  Ú	ExitStackÚ
exit_stack©ri   r^  s    €rT   rÿ   ÚCodeGen.__init__7  s   ø€ Ü‰ÑÔÜ$×.Ò.Ó0ˆ�rV   c                ó:   • U R                   R                  5         U $ rn   )r  Ú	__enter__ro   s    rT   r  ÚCodeGen.__enter__;  s   € Ø�‰×!Ñ!Ô#ØˆrV   c                ó<   • U R                   R                  XU5        g rn   )r  Ú__exit__)ri   Úexc_typeÚexc_valÚexc_tbs       rT   r  ÚCodeGen.__exit__?  s   € Ø�‰× Ñ  °FÕ;rV   )r  rz   r  ©r  r	   r  r	   r  r	   r{   r|   )	r€   r�   r‚   rƒ   rÿ   r  r  r‡   rj  rk  s   @rT   r  r  6  s   ø† ÷1ô÷<ò <rV   r  c                  ó¢  ^ • \ rS rSr% SrS\S'   SrS\S'   SrS\S'    S%     S&U 4S	 jjjr\	R                  S'S
 j5       r\	R                    S(       S)S jj5       r        S*S jrS+S jrS+S jrS,S jr S-         S.S jjrS/S jr          S0S jr          S1S jr        S2S jr          S3S jrS4S jr  S(               S5S jjr\S6S j5       r S-         S7S jjr          S8S jrS9S jrS:U 4S jjrS;U 4S jjrS<S jr S=S jr!S=S  jr"    S>S! jr#S?S" jr$S@S# jr%S$r&U =r'$ )AÚKerneliC  rÑ  r~   Únewvar_prefixr^   Nz'Optional[Callable[[], OpsHandler[Any]]]Ú	overridesc                óH  >• [         TU ]  5         U(       a  [        =R                  S-  sl        U=(       d
    [	        5       U l        [        5       U l        [        5       U l        [        5       U l	        SU l
        SU l        SU l        SU l        [        U R                  U R                   5      U l        [%        5       U l        [%        5       U l        S U l        S U l        S U l        S U l        [%        5       U l        [%        5       U l        0 U l        SU l        S U l        g )NrH   Fr   )r\  rÿ   r    Úgenerated_kernel_countr:  rt   r)   ÚloadsÚcomputeÚstoresÚatomic_add_foundÚnum_loadÚ	num_storeÚnum_reductionrÄ  r  r^   Úcser   Úmust_keep_buffersÚstore_buffer_namesÚ
_load_maskÚ_load_otherró  Únode_to_boundsr
  r  Úinplace_update_buffersÚmin_elem_per_threadÚkernel_name)ri   rt   Úincrease_kernel_countr^  s      €rT   rÿ   ÚKernel.__init__H  sç   ø€ ô 	‰ÑÔÞ ä×*Ò*¨aÑ/Õ*Ø×(œJ›LˆŒ	Ü#Ó%ˆŒ
Ü%Ó'ˆŒÜ$Ó&ˆŒà %ˆÔØˆŒØˆŒØˆÔä.1°$×2DÑ2DÀdÇkÁkÓ.RˆŒÜ2<³,ˆÔÜ3=³<ˆÔØ)-ˆŒØ48ˆÔà59ˆÔØOSˆÔä0:³ˆÔÜ3=³<ˆÔð
 79ˆÔ#à#$ˆÔ Ø*.ˆÕrV   c              #  ó¶   #   • U R                   nXl         UR                  R                  5       R                  5       U l         S v •  X l         g ! X l         f = f7frn   )ró  rP  r­  Ú
get_boundsr'  )ri   r+  Úpriors      rT   Úset_current_nodeÚKernel.set_current_nodem  sH   é € à×!Ñ!ˆØ ÔØ"Ÿj™j×/Ñ/Ó1×<Ñ<Ó>ˆÔð	&Ûà %Õø Õüs   ‚A AÁA ÁAÁAÁAc              #  óº  #   • Uc  UnUS L =n(       a
  [        5       nU R                  nU R                  nU R                  nU R                  nXl        X l        X0l        UR                  5       U l         S v •  XPl        X`l        Xpl        X€l        U(       a  U(       a   S5       eg g ! XPl        X`l        Xpl        X€l        U(       a  U(       a   S5       ef f = f7f)Nz$unexpected store inside swap_buffers)r)   r  r  r  r"  rÚ  )	ri   ÚlbÚcbÚsbÚdisallow_storesr  r  r  r"  s	            rT   Úswap_buffersÚKernel.swap_buffersw  sÍ   é € ð ‰:ØˆBØ  D˜jÐ(ˆ?Õ(ÜÓ!ˆBØ—
‘
ˆØ—,‘,ˆØ—‘ˆØ�h‰hˆØŒ
ØŒØŒØ—?‘?Ó$ˆŒð		FÛàŒJØ"ŒLØ ŒKØŒHæÞÐEÐEÓE�v˜2ð øð ŒJØ"ŒLØ ŒKØŒHæÞÐEÐEÓE�v˜2ð üs   ‚A2CÁ5B( Á9/CÂ(0CÃCc                ó   • g)zÂOverride kernel emission. Return True if overridden, False to use default.

External template handlers (e.g. Helion) can override this method
to implement custom kernel emission to the wrapper.
Frˆ   )ri   rº  Úsrc_coder*  Únode_scheduleÚkernel_pathÚget_kernel_metadatas          rT   Úemit_kernel_overrideÚKernel.emit_kernel_override•  s   € ð rV   c                ó   • [         ern   r&  r  s      rT   rá  ÚKernel.load¥  r*  rV   c                ó‚   • U R                   n U R                  U l         U R                  X5      X0l         $ ! X0l         f = f)z+A load the depends on an index we have read)r  r  rá  )ri   rf   rÆ  r/  s       rT   Úindirect_loadÚKernel.indirect_load¨  s2   € à—
‘
ˆð	àŸ™ˆDŒJØ—9‘9˜TÓ)à�Jø˜�Jús   Ž!6 ¶>c                ó   • [         ern   r&  r  s       rT   rã  ÚKernel.store_reduction²  r*  rV   c                ó   • [         ern   r&  r  s        rT   râ  ÚKernel.storeµ  ó
   € ô "Ð!rV   c                óD   • [        [        U 5      R                   S35      er  r  r  s      rT   r  ÚKernel.device_assert_asyncº  r  rV   c                ó   • [         ern   r&  r  s        rT   rß  ÚKernel.reduction¿  ó
   € ô "Ð!rV   c                ó   • [         ern   r&  )ri   rf   r  rh   Ú
extra_metas        rT   Úpartial_accumulateÚKernel.partial_accumulateÈ  rN  rV   c                ó   • [         ern   r&  r!  s       rT   r%  ÚKernel.scanÑ  s
   € ô "Ð!rV   c                ó   • [         ern   r&  r(  s        rT   r+  ÚKernel.sortÛ  rN  rV   c                ó   • [         ern   r&  ro   s    rT   Ú
var_rangesÚKernel.var_rangesä  r*  rV   c                ó   • [         e)z#
See [Note: Inductor bucketize op]
r&  r.  s           rT   r5  ÚKernel.bucketizeç  s
   € ô "Ð!rV   c                ó   • [         ern   r&  ro   s    rT   Úassert_functionÚKernel.assert_functionö  s   € ä!Ð!rV   c           	     óÔ  • [        U[        5      (       a  [        U5      n[        U[        5      (       d   [        U5      5       eUb  [        U[        5      (       d   eUb  [        U[        5      (       d   eU(       a!  U(       a  SU SU SU SU S3	nU SU SU 3nO#U(       a
  U SU 3nUnOU(       d   eU SU 3nUnU(       a	  SU SU S3nU R                   SU SU S3$ )	Nrb  z <= r  z < rŽ   z) | ~(z, "index out of bounds: z"))rd  rÙ  r~   rz  r]  )ri   rø  r  r	  ÚmaskrÄ  Ú
cond_prints          rT   Úindirect_assertÚKernel.indirect_assertú  s  € ô �cœ;×'Ñ'Ü�c“(ˆCÜ˜#œs×#Ñ#Ð.¤T¨#£YÓ.Ð#Ø‰}¤
¨5´#× 6Ñ 6Ð6Ð6Ø‰}¤
¨5´#× 6Ñ 6Ð6Ð6Þ–Uð �u�g˜T #  e¨C¨5°°E°7¸!Ð<ˆDØ!˜7 $ s e¨3¨u¨gÐ6‰JÞØ�W˜D  Ð&ˆDØ‰JæˆL�5Ø�U˜#˜e˜WÐ%ˆDØˆJæØ�t�f˜F 4 &¨Ð*ˆDà×&Ñ&Ð' q¨¨Ð.FÀzÀlÐRTÐUÐUrV   c                ó   • [         ern   r&  r  s        rT   r
  ÚKernel.check_bounds	  rI  rV   c                ó   • [         ern   r&  rI  s     rT   Úindex_to_strÚKernel.index_to_str	  r*  rV   c           	     ó4  >• [         TU ]  5         U R                  (       d   eU R                  R	                  [
        R                  " [        X R                  5       5      5      5        U R                  R	                  [
        R                  " U 5      5        U $ rn   )	r\  r  r  r  Úenter_contextr7   Úset_ops_handlerÚCSEProxyÚset_kernel_handlerr	  s    €rT   r  ÚKernel.__enter__ 	  sj   ø€ Ü‰ÑÔØ�~�~Ðˆ~Ø�‰×%Ñ%Ü×Òœh t¯^©^Ó-=Ó>Ó?ô	
ð 	�‰×%Ñ%¤a×&:Ò&:¸4Ó&@ÔAØˆrV   c                óF   >• U R                  5         [        TU ]	  XU5        g rn   )Úremove_kernel_local_buffersr\  r  )ri   r  r  r  r^  s       €rT   r  ÚKernel.__exit__)	  s   ø€ Ø×(Ñ(Ô*Ü‰Ñ˜¨FÕ3rV   c                ó  ^^• [         R                  R                  mT(       d  g[        U4S jU R                   5       5      n[        5       mU R                   Hm  nX R
                  ;  d  M  X R                  R                  ;  d  M/  TR                  X!5      (       d  MG  U =R                  S-  sl	        TR                  U5        Mo     T H±  nX R                  R                  ;   a„  U R                  R                  U   n[        U[        5      (       a  ML  [        U4S jUR                   5       5      nU(       a  U R!                  U5        U R"                  R                  U5        M   U R%                  U5        M³     g)z¬
Any buffers that are both created and have a last use in the
same kernel can be removed.

Note that V.graph.scheduler can be None when codegening triton template
kernels.
Nc              3  ó‚   >#   • U  H4  nUTR                   ;   d  M  TR                   U   R                  5       v •  M6     g 7frn   )Úname_to_bufÚdefining_op_name)r   r^  rO  s     €rT   r  Ú5Kernel.remove_kernel_local_buffers.<locals>.<genexpr>8	  s?   øé € ð &
â.�Ø�i×+Ñ+Ñ+ó :ˆI×!Ñ! #Ñ&×7Ñ7×9Ð9Ú.ùs   ƒ?›$?rH   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7frn   rˆ   )r   r!  Únames_to_removes     €rT   r  rv  N	  s   øé € ÐKº?°a /Ö1º?ùs   ƒ)r7   r¹   rO  r   r$  r#  rt   rB  Ú$can_buffer_be_removed_through_fusionr   r™  rD  rd  r4  r'  r,  Úremove_inplace_bufferr  Úremove_buffer)ri   Úfused_node_namesrf   r^  re   rx  rO  s        @@rT   rp  Ú"Kernel.remove_kernel_local_buffers-	  s(  ù€ ô —G‘G×%Ñ%ˆ	ÞØÜ%ô &
à×.Ò.ó&
ó 
Ðô
 ,6«<ˆØ×+Ô+ˆDà×2Ñ2Õ2Ø§	¡	× 7Ñ 7Õ7Ø×BÑBØ÷ó ð —’ !Ñ#•Ø×#Ñ# DÖ)ñ ,ó $ˆDØ—y‘y×0Ñ0Ó0Ø—i‘i×/Ñ/°Ñ5�Ü˜c¤:×.Ñ.ÙÜÔK¸3¿?º?ÓKÓK�ÞØ×.Ñ.¨tÔ4Ø×'Ñ'×+Ñ+¨DÖ1à×"Ñ" 4Ö(ò $rV   c                ó    • [         R                  SU5        [        U R                  R                  U'   U R
                  R                  U5        g )Nzremove_buffer(%r))rŽ  rR   r6  rt   rC  r
  r™  r'  s     rT   r{  ÚKernel.remove_bufferU	  s;   € ô 	�	‰	Ð% tÔ,Ü)0ˆ�	‰	× Ñ  Ñ&Ø×Ñ× Ñ  Õ&rV   c                ó    • [         R                  SU5        [        U R                  R                  U'   U R
                  R                  U5        g )Nzremoving_inplace_buffer(%r))rŽ  rR   r6  rt   rD  r
  r™  r'  s     rT   rz  ÚKernel.remove_inplace_buffer]	  s9   € Ü�	‰	Ð/°Ô6Ü*1ˆ�	‰	×!Ñ! $Ñ'Ø×Ñ× Ñ  Õ&rV   c           
     ó  • [        U[        [        45      (       a!  U Vs/ s H  o R                  U5      PM     sn$ [        R
                  R                  R                  U5      n[        UR                  S S9nU Vs0 s Hm  n[        U[        R                  [        R                  [        R                  [        R                  45      (       d  MR  X R                   R#                  U5      _Mo     nn[%        X5      $ s  snf s  snf )Nc                ó   • U R                   $ rn   r  )Úss    rT   r¢  Ú(Kernel.rename_indexing.<locals>.<lambda>j	  s   € À!Ç&Â&rV   )r  )rd  ÚlistÚtupleÚrename_indexingr7   r¹   rY  rV  ÚsortedÚfree_symbolsr   r   ÚUNBACKED_INTÚSIZEÚPRECOMPUTED_SIZErŽ  rt   rÖ   r.   )ri   rÆ  rv  Úsorted_symbolsÚreplacementss        rT   rˆ  ÚKernel.rename_indexingb	  sÝ   € ô
 �eœd¤E˜]×+Ñ+Ù5:Ó;²U°×(Ñ(¨Ö+±UÑ;Ð;Ü—‘× Ñ ×)Ñ)¨%Ó0ˆÜ × 2Ñ 2Ñ8HÑIˆñ $ó
â#�ÜØä×%Ñ%Ü—I‘IÜ×)Ñ)Ü×'Ñ'ð	÷ó !ˆA�y‰y�~‰~˜aÓ Ò Ù#ð 	ð 
ô ˜%Ó.Ð.ùò! <ùò
s    D Á?ADÃDc                ó   • [        U0 UD6$ rn   )rÙ  )ri   rt   ré  s      rT   rù  ÚKernel.create_cse_varz	  s   € Ü˜DÐ+ FÑ+Ð+rV   c                ó\   • Uc  gU R                   R                  UR                  5       5      $ )z3
Returns arg name of a given input or output node.
N)rt   r‚  r¢   )ri   r+  s     rT   r‚  ÚKernel.arg_name}	  s'   € ð ‰<ØØ�y‰y×!Ñ! $§-¡-£/Ó2Ð2rV   )r%  r&  rt   r  r  r"  ró  r(  r  r*  r  r)  r#  r'  r  r!  r   r
  r$  r  )NT)rt   zOptional[KernelArgs]r+  r›   r{   r|   )r+  rF   r{   r%  rj  )r3  r)   r4  úOptional[IndentedBuffer]r5  r•  r{   r%  )r:  r~   r*  r~   r<  r~   r{   r›   ©rf   r~   rÆ  r­   r{   rÙ  ©rf   r~   rÆ  r­   rh   rÙ  r{   r|   rn   ©
rf   r~   rÆ  r­   rh   rÙ  r]   r6   r{   r|   rf  ©
r¶   rµ   r  rµ   r  r5   rh   ú+Union[CSEVariable, tuple[CSEVariable, ...]]r{   rš  )
rf   r~   r  r5   rh   rÙ  rP  údict[str, Any]r{   r|   ©r"  rh  r#  zUCallable[[tuple[CSEVariable, ...], tuple[CSEVariable, ...]], tuple[CSEVariable, ...]]r$  útuple[CSEVariable, ...]r{   r�  ©
r"  rh  r$  r�  r)  r›   r*  r›   r{   r�  )r{   zdict[sympy.Symbol, sympy.Expr]©r$  rÙ  r/  rk  r0  rÙ  r1  rµ   r2  r›   r3  rl  r4  zOptional[CSEVariable]r{   rÙ  r}   )
rø  zUnion[CSEVariable, str]r  r	  r	  r	  r`  z!Optional[Union[CSEVariable, str]]r{   r~   re  )rÆ  r­   r{   r~   r  r  rz   )rf   r~   r{   r|   )rÆ  z;Union[list[sympy.Expr], tuple[sympy.Expr, ...], sympy.Expr]r{   r­   )rt   r	   ré  r	   r{   rÙ  )r+  rA   r{   r	  )(r€   r�   r‚   rƒ   r  r…   r^   r  rÿ   r&  r'  r0  r7  r>  rá  rC  rã  râ  r  rß  rQ  r%  r+  rX  r5  r†   r]  rb  r
  rg  r  r  rp  r{  rz  rˆ  rù  r‚  r‡   rj  rk  s   @rT   r  r  C  s  ø‡ Ø€M�3ÓØ€FˆCÓØ9=€IÐ6Ó=ð PTð#/Ø(ð#/ØHLð#/à	÷#/ð #/ðJ ×Ñó&ó ð&ð ×Ñð (,Ø'+ð	FàðFð %ðFð %ð	Fð
 
ôFó ðFð:ð ðð ð	ð ðð 
ôô "ôô"ð SWð"Øð"Ø *ð"Ø3>ð"ØFOð"à	õ"ô

ð
"àð"ð ð"ð &ð	"ð
 ;ð"ð 
5ô"ð"àð"ð &ð"ð ð	"ð
 #ð"ð 
ô"ð"à'ð"ð
ð"ð (ð"ð 
!ô"ð"à'ð"ð (ð"ð ð	"ð
 ð"ð 
!ô"ô"ð 48Ø04ð"àð"ð Cð"ð &ð	"ð
 $ð"ð ð"ð 1ð"ð .ð"ð 
õ"ð ó"ó ð"ð 37ðVà$ðVð ðVð ð	Vð
 0ðVð 
õVð<"Øð"Ø&0ð"Ø9=ð"ØFJð"à	ô"ô
"÷÷4ô&)ôP'ô'ð
/ØPð/à	ô/ô0,÷3ò 3rV   r  c                  ó@   • \ rS rSr% SrS\S'   SrS\S'   SrS	\S
'   Srg)r  i†	  rD  zClassVar[str]r  Nr  r¶   rÑ  r~   Úops_namerˆ   )	r€   r�   r‚   rƒ   r  r…   r¶   r¡  r‡   rˆ   rV   rT   r  r  †	  s!   ‡ à"€CˆÓ"à#'€EÐ Ó'Ø€HˆcÖrV   r  c                 ó^   •  SS K n U R                  U R                  S9$ ! [         a     g f = f)Nr   )Ú	undefined)Újinja2ÚEnvironmentÚStrictUndefinedÚImportError)r¤  s    rT   Ú
jinja2_envr¨  Ž	  s?   € ðÛà×!Ñ!Ø×,Ñ,ð "ð 
ð 	
øô ó Ùðús   ‚ Ÿ
,«,c                  óÐ   • \ rS rSrSr\ S       SS jj5       r\SS j5       r\    SS j5       rSSS jjr	\
SS j5       r\
SS	 j5       rSS
 jr      SS jrSS jrSrg)ÚKernelTemplateiš	  z^
Base class for defining kernel templates.

Children classes: TritonTemplate, CUTLASSTemplate
c                ó²   • U R                  S5      n[        U5      S:”  a"  USS   Vs/ s H  nSU-  U-  U-   PM     snUSS & SR                  U5      $ s  snf )NTrH   r�  rÑ  )Ú
splitlinesr  rÃ   )ÚsourceÚnum_indentsÚindents_spacingÚlinesr  s        rT   Úindent_except_firstÚ"KernelTemplate.indent_except_first¡	  sh   € ð ×!Ñ! $Ó'ˆÜˆu‹:˜‹>àINÈqÈrÉóÚIRÀ��Ñ&¨Ñ4¸Ô<ÉñˆE�!�"ˆIð �w‰w�u‹~Ðùòs   ¨Ac                óÌ   • [        5       nUc  g [        R                  UR                  S'   SSKJn   UR                  U 5      $ ! U a  n " S SU5      nU" U5      UeS nAff = f)Nr±  r   )ÚTemplateSyntaxErrorc                  ó6   ^ • \ rS rSrSU 4S jjrSS jrSrU =r$ )ÚIKernelTemplate._template_from_string.<locals>.DetailedTemplateSyntaxErrori¸	  c                ó†   >• [         TU ]  UR                  UR                  UR                  UR
                  5        Xl        g rn   )r\  rÿ   ÚmessageÚlinenorf   ÚfilenameÚoriginal_error)ri   r»  r^  s     €rT   rÿ   ÚRKernelTemplate._template_from_string.<locals>.DetailedTemplateSyntaxError.__init__¹	  s<   ø€ Ü‘GÑ$Ø&×.Ñ.Ø&×-Ñ-Ø&×+Ñ+Ø&×/Ñ/ô	ð +9Õ'rV   c                óX  • SU R                    S3nUSU R                   S3-  n[        U R                  S5      (       aë  U R                  R                  R                  S5      nUS-  n[        SU R                   S-
  5      n[        [        U5      U R                   S-   5      n[        X45       Hw  nXPR                   S-
  :X  aS  XS-    S	X%    S3-  n[        U R                  S
5      (       a'  USSU R                  R                  S-
  -  -   S-   -  nMf  Mh  XS-    SX%    S3-  nMy     U$ )NzError in template at line Ú
zError message: r­  z	Context:
r   r   rH   z: --> Úcolumnz     r�  z^
z:     )r¹  r¸  r[  r»  r­  ÚsplitÚmaxÚminr  r   r¿  )ri   Ú
error_infor°  ÚstartÚendrÓ  s         rT   r7  ÚQKernelTemplate._template_from_string.<locals>.DetailedTemplateSyntaxError.__str__Â	  s:  € Ø#=¸d¿k¹k¸]È"Ð!M�JØ O°D·L±L°>ÀÐ"DÑD�JÜ˜t×2Ñ2°H×=Ñ=Ø $× 3Ñ 3× :Ñ :× @Ñ @ÀÓ F˜Ø" lÑ2˜
Ü # A t§{¡{°Q¡Ó 7˜Ü!¤# e£*¨d¯k©k¸A©oÓ>˜Ü!& uÖ!2˜AØ §K¡K°!¡OÓ3Ø *°Q±°°v¸e¹h¸ZÀrÐ.JÑ J 
Ü#*¨4×+>Ñ+>À×#IÑ#IØ$.Ø(/Ø*-°×1DÑ1D×1KÑ1KÈaÑ1OÑ*Pñ)Qà*/ñ)0ñ%&¢Jñ $Jð !+°Q±°°v¸e¹h¸ZÀrÐ.JÑ J¢
ñ "3ð &Ð%rV   )r»  )r»  r´  r{   r|   r}   )r€   r�   r‚   rƒ   rÿ   r7  r‡   rj  rk  s   @rT   ÚDetailedTemplateSyntaxErrorr¶  ¸	  s   ø† ÷9÷&ò &rV   rÇ  )r¨  rª  r±  Úfiltersr¤  r´  Úfrom_string)r­  Úenvr´  ÚerÇ  s        rT   Ú_template_from_stringÚ$KernelTemplate._template_from_string¬	  sj   € ä‹lˆØ‰;ØÜ-;×-OÑ-Oˆ�‰Ð)Ñ*Ý.ð#	8Ø—?‘? 6Ó*Ð*øØ"ó !	8ô&Ð.Aô &ñ> .¨aÓ0°aÐ7ûðC!	8ús   ³A ÁA#Á
AÁA#c                ó0  ^^• [         R                  R                  m[        U [        [
        45      (       a0  U  Vs0 s H!  oR                  5       UR                  5       _M#     snmO U R                  5       U R                  5       0mSUU4S jjnU$ s  snf )Nc                ó@   >• TR                  U 5      nUb  U$ T" U 5      $ rn   )r‰  )rf   r=  Ú_get_dtype_realÚlookups     €€rT   rÐ   Ú1KernelTemplate._fake_get_dtype.<locals>.get_dtypeã	  s'   ø€ Ø—Z‘Z Ó%ˆFØÑ!Ø�Ù" 4Ó(Ð(rV   )rf   r~   r{   rµ   )r7   r¹   rÐ   rd  r†  r‡  r¢   )Ú	fake_outsr^  rÐ   rÐ  rÑ  s      @@rT   Ú_fake_get_dtypeÚKernelTemplate._fake_get_dtypeÙ	  s|   ù€ ô Ÿ'™'×+Ñ+ˆÜ�i¤$¬ ×/Ñ/ÙAJÓKÂ¸#—l‘l“n c§m¡m£oÒ5ÁÑK‰Fà×(Ñ(Ó*¨I×,?Ñ,?Ó,AÐBˆF÷	)ð 	)ð Ðùò Ls   ¼(BNc                ó   • Xl         X l        g rn   )rf   Ú_hash)ri   rf   r³  s      rT   rÿ   ÚKernelTemplate.__init__ë	  s   € ØŒ	Ø�
rV   c                ó   • U R                   $ )zí
entry point to override for templates to ensure a uid e.g. through a prefix

the purpose of this is that every KernelTemplate/ExternKernelChoice is unique
in the system, but reproducible e.g. restarting pytorch should yield the same id
r  ro   s    rT   ÚuidÚKernelTemplate.uidï	  s   € ð �y‰yÐrV   c                ó   • U R                   $ )zó
source hash for a Template.

Templates can optionally provide a src hash to make it easier to cache/validate that
a template has not changed from one version to another. Override this if that detection
is different for your specific Template
)r×  ro   s    rT   Úsrc_hashÚKernelTemplate.src_hashú	  s   € ð �z‰zÐrV   c                ó\   • / nU R                   " U40 UD6nUc  [        U5      S:X  a  US   $ g)z¬
Maybe generates a new ChoiceCaller and returns it, or None if generation fails.

kwargs: Additional kwargs to be passed to self.generate() to generate a new ChoiceCaller.
NrH   r   )Úmaybe_append_choicer  )ri   ré  Útemp_choicesr=  s       rT   Úchoice_or_noneÚKernelTemplate.choice_or_none
  s<   € ð #%ˆØ×)Ò)¨,ÑA¸&ÑAˆØ‰>œc ,Ó/°1Ó4Ø ‘?Ð"ØrV   c                óþ   •  UR                  U R                  " S0 UD65        g! [         aN  n[        R	                  SU[        U 5      [        R                  5       [        R                  :  S9  Us SnA$ SnAff = f)zý
Maybe generates a new ChoiceCaller and appends it into existing choices.
Returns None if success, otherwise returns the error.

choices: A list of ChoiceCallers.
kwargs: Additional kwargs to be passed to self.generate() to generate a new ChoiceCaller.
Nz3Cannot Append Choice: %s. KernelTemplate type is %s)Ú
stack_inforˆ   )	r[  rö  r�   rŽ  Úinforz  ÚgetEffectiveLevelrP   ÚINFO)ri   Úchoicesré  rË  s       rT   rà  Ú"KernelTemplate.maybe_append_choice
  sl   € ð
	Ø�N‰N˜4Ÿ=š=Ñ2¨6Ñ2Ô3ØøÜ"ó 	Ü�H‰HØEØÜ�T“
Ü×0Ñ0Ó2´W·\±\ÑAð	 ñ ð �Hûð	ús   ‚!$ ¤
A<®AA7Á1A<Á7A<c                ó   • [         e)z=
Generates a ChoiceCaller instance from the given arguments.
r&  )ri   ré  s     rT   rö  ÚKernelTemplate.generate(
  s
   € ô
 "Ð!rV   )r×  rf   )é   )r­  r~   r®  r  r¯  r  r{   r~   )r­  r~   r{   r	   )rÓ  zUnion[list[Buffer], Buffer]r{   zCallable[[str], torch.dtype]rn   )rf   r~   r³  r	  r{   r|   r}   )r{   zUnion[str, None])ré  r	   r{   zOptional[ChoiceCaller])ré  r   ré  r	   r{   zOptional[NotImplementedError])ré  r	   r{   r?   )r€   r�   r‚   rƒ   r„   r�   r±  rÌ  rÔ  rÿ   r†   rÚ  rÝ  râ  rà  rö  r‡   rˆ   rV   rT   rª  rª  š	  sË   † ñð à>?ðØðØ"%ðØ8;ðà	ôó ðð ó*8ó ð*8ðX ðØ.ðà	%óó ðö"ð óó ðð óó ðô
ðØ ðØ,/ðà	&ô÷."rV   rª  c                  ód  ^ • \ rS rSrSrS rSU 4S jjrSS jrSS jr  S         SS jjr	          SS jr
SS jrSS	 jr S         SS
 jjrSS jrSS jrSS jr          S S jr        S!S jr          S"S jr  S#               S$S jjrSrU =r$ )%rl  i0
  zvA ops handler that proxies calls to `kernel` and its
handler and returns `CSEVariable`s with correct shape and dtype.
c                ó^   >• [         TU ]  5         SSKJn  U" 5       U l        Xl        X l        g )Nr   ©ÚValueRangeAnalysis)r\  rÿ   r­  rñ  Úvr_analysisr  Úparent_handler)ri   r  ró  rñ  r^  s       €rT   rÿ   ÚCSEProxy.__init__7
  s'   ø€ Ü‰ÑÔÝ/á-Ó/ˆÔØŒØ,ÕrV   c           	     óz  ^^^^
^^^^• U R                   " T/TQ70 TD6m[        U R                  T5      " T0 TD6n[        5       n[	        5       n[        5       m
[        UT5      nS mS mTS:X  a  T
S:X  a  UR                  mUR                  mO}TS:X  aU  T
S:X  aO  [        R                  R                  R                  R                  [        R                  S 5      R                  mS mO"T
S;   a  [        UT5      nU" T0 TD6mU" T0 TD6mT
S;   a  Tc   eSmSUU
UUUUUU4S jjn	[        R                   " X”5      $ )	NÚmaskedr�  r›  )r�  r›  r®  )r�  r›  r   c                óô  >• [        T	[        [        45      (       a  T	T
   OT	n[        T[        [        45      (       a2  [        T5      S:”  a#  [        TS   [        [        45      (       a  TT
   OTnT
S-  m
[        U [        5      (       a,  TS:X  a  U R
                  c  Xl        U R                  c  X l        [        R                  R                  R                  [        R                  R                  U TT	TS9nUR                  TTT5        [        R                  R                  (       d  [        R                  R                   (       a)  Uc   e[#        [        R                  R                  X15        [        R                  R$                  (       a*  Tc   e['        [        R                  R                  UT5        [        R(                  (       a$  [+        [        R                  R                  U5        U$ )Nr   rH   r›  ©r­  r¶   r  )rd  r†  r‡  r  rÙ  r¶   r  r7   r  r"  rö  r  rº  r   rò  ró  rõ  rü  r  r
  Úruntime_triton_nan_assertsr  )r  Ú	var_dtypeÚ	var_shapeÚcsevarrt   rù  r­  ré  rf   r?  Ú
output_idxÚoutput_shapes       €€€€€€€€rT   Údo_cseÚ!CSEProxy._default.<locals>.do_cse`
  s‹  ø€ ô
 ˜l¬T´5¨M×:Ñ:ð ˜ZÒ(à!ð ô ˜l¬T´5¨M×:Ñ:Ü˜Ó%¨Ó)Ü˜|¨A™´´u°×>Ñ>ð ˜ZÒ(ð "ð ð ˜!‰OˆJô ˜!œ[×)Ñ)Ø˜eÓ#¨¯©©Ø'”GØ—7‘7‘?Ø'”Gä—X‘X—\‘\×*Ñ*Ü—‘× Ñ ØØØ"Ø"ð +ð ˆFð ×!Ñ! $¨¨fÔ5ô ×#Ñ#×?×?Ü×&Ñ&×>×>à Ñ,Ð,Ð,ÜœAŸH™H×,Ñ,¨fÔ@ä×"Ñ"×>×>Ø#Ñ/Ð/Ð/ÜœAŸH™H×,Ñ,¨f°lÔCä×0×0Üœ!Ÿ(™(×*Ñ*¨FÔ3àˆMrV   )r  zUnion[str, CSEVariable]r{   rÙ  )Ú_bound_variablerS  ró  r!   r$   r(   r¶   r  r7   Úinterpreterró  r   r‰  r  r  ÚpytreeÚtree_map)ri   rf   rt   ré  rh   Údtype_handlerÚshape_handlerÚshape_opÚdtype_oprÿ  rù  r­  r?  rý  rþ  s    ```      @@@@@rT   Ú_defaultÚCSEProxy._default?
  s:  ÿ€ Ø×%Ò% dÐ<¨TÒ<°VÑ<ˆä˜×+Ñ+¨TÔ2°DÐC¸FÑCˆÜ2Ó4ˆÜ2Ó4ˆä%Ó'ˆä˜=¨$Ó/ˆØˆØˆà�8Ó ¨8Ó 3Ø Ÿ;™;ˆLØ Ÿ;™;‰LØ�XÓ '¨UÓ"2ÜŸ=™=×5Ñ5×:Ñ:×>Ñ>Ü#×'Ñ'¨óç‰eð ð  ‰LØÐ0Ó0Ü˜}¨dÓ3ˆHÙ# TÐ4¨VÑ4ˆLÙ# TÐ4¨VÑ4ˆLàÐ'Ó'àÑ+Ð+Ð+àˆ
÷0	ö 0	ôd �Š˜vÓ-Ð-rV   c                ó>  ^	• SSK Jn  SSKJn  SSKJn  [        [        R                  U5      (       a  [        R                  " 5       $ [        [        R                  U5      (       a  [        R                  " 5       $ [        [        R                  [        5      (       a  [        R                  " 5       $ [        R                  R                  m	T	R                  U:X  a�  U R                  R                  b†  [        U R                  R                  [         5      (       d$   [#        U R                  R                  5      5       eU R                  R                  R%                  T	[        R                  " 5       5      $ [&        R(                  (       az  [+        XA5      (       aj  [-        U	4S jS 5       5      (       a  [        R                  " 5       $ U(       a   eS	S jn[/        [1        Xr5      5      n[3        U R4                  U5      " U6 $ [        R                  " 5       $ )
z¦
If the variable comes from an FX node, we forward the bound we have already computed
Else, if the variable when codegen'ing another op, we try to compute its bounds
r   rð  )ÚTritonTemplateKernelrH   )ÚCUTLASSTemplateKernelc              3  ó@   >#   • U  H  oTR                   ;   v •  M     g 7frn   )r2  )r   r„  Úfx_nodes     €rT   r  Ú+CSEProxy._bound_variable.<locals>.<genexpr>¯
  s   øé € ÐVÒ0U¨1˜Ÿ™Ö&Ò0Uùs   ƒ)Úset_indirectrß  r%  c                óœ   • [        U [        5      (       a  U R                  $ [        U [        R                  5      (       a  [        U 5      $ U $ rn   )rd  rÙ  r­  rÆ   rZ  r   ru  s    rT   Úarg_to_boundÚ.CSEProxy._bound_variable.<locals>.arg_to_bound¸
  s8   € Ü˜a¤×-Ñ-ØŸ8™8�OÜ ¤5§:¡:×.Ñ.Ü& q›>Ð)à�HrV   )rv  r	   r{   r	   )r­  rñ  Úselect_algorithmr  Úcutlass.kernelr  rd  r7   r  r   r  r  r1   ró  r2  r'  Údictrz  r‰  r   Úcompute_all_boundsr[  r	  r†  rI  rS  rò  )
ri   rf   rt   ré  rñ  r  r  r  Ú
arg_boundsr  s
            @rT   r  ÚCSEProxy._bound_variable”
  sy  ø€ õ
 	0Ý;Ý9ä”a—h‘hÐ 4×5Ñ5Ü×&Ò&Ó(Ð(ä”a—h‘hÐ 5×6Ñ6Ü×&Ò&Ó(Ð(ä”a—m‘m¤[×1Ñ1Ü×&Ò&Ó(Ð(ä—-‘-×,Ñ,ˆØ�>‰>˜TÓ! d§k¡k×&@Ñ&@Ñ&LÜ˜dŸk™k×8Ñ8¼$×?Ñ?ð ÄØ—‘×*Ñ*óBó Ð?ð —;‘;×-Ñ-×1Ñ1°'¼;×;NÒ;NÓ;PÓQÐQÜ×&×&¬7Ð3E×+LÑ+Lô ÔVÑ0UÓV×VÑVÜ"×*Ò*Ó,Ð,ö Ð�:ôô œc ,Ó5Ó6ˆJÜ˜4×+Ñ+¨TÔ2°JÐ?Ð?Ü×"Ò"Ó$Ð$rV   c                óš  • [        U[        5      (       a  [        R                  " U5      n[        U[        R                  5      (       d   [        U5      U45       eUR                  R                  S:  Ga±  U(       aƒ  [        R                  " U[        R                  " U[        R                  5      5      nUR                  R                  S:¼  a.  [        R                  " US5      n[        R                  " XeU5      nOUn[         R"                  " 5       nUR                  [         R"                  " 5       :w  až  [        U[        R$                  5      (       a  UR                  [!        [&        * S5      -  n[!        UR                  U-   UR                  U-   5      nUR                  R                  S:¼  a!  UR                  [!        S[&        5      -  n	Xy-  nU R(                  R*                  R-                  U R(                  R.                  UUUR0                  UR2                  S9nU R4                  R7                  XU5      n
[9        U5      (       av  UR                  R                  S:¼  + n[        U[        R$                  5      (       + =(       d    UR                  R                  U:  + nU R(                  R;                  X¢X¼5        U
$ )Nr   rÙ  rø  )rd  r  rÆ   rþ  rZ  rz  r­  r  r2   r™  rØ  rô   Úlongr	  ÚltrÂ  r   r  ÚNumberr   r  r"  rö  r  r¶   r  ró  r  r'   r
  )ri   rø  rÖ   r  r  Ústmr  Ú
new_boundsÚ
neg_boundsÚposÚ	sympy_varÚassert_lowerÚassert_uppers                rT   r  ÚCSEProxy.indirect_indexingÄ
  s  € ô �dœC× Ñ Ü—=’= Ó&ˆDÜ˜$¤§
¡
×+Ñ+Ð?¬d°4«j¸$Ð-?Ó?Ð+ð �:‰:×Ñ˜aÔÞÜ—g’g˜c¤3§>¢>°$¼¿
¹
Ó#CÓD�à—:‘:×#Ñ# qÓ(ÜŸš  Q›�BÜŸ)š) B¨SÓ1�Cøà�ô %×,Ò,Ó.ˆJØ�z‰zœ[×0Ò0Ó2Ó2´zÀ$ÌÏÉ×7UÑ7Uð !ŸZ™Z¬+´v°g¸rÓ*BÑB�
Ü(Ø×$Ñ$ tÑ+¨Z×-=Ñ-=ÀÑ-Dó�
ð —:‘:×#Ñ# qÓ(ØŸ*™*¤{°1´fÓ'=Ñ=�CØ!+Ñ!1�Jà—+‘+—/‘/×*Ñ*Ø—‘×#Ñ#ØØ!Ø—i‘iØ—i‘ið +ð ˆCð ×'Ñ'×9Ñ9¸#ÀUÓKˆ	Ü˜5×!Ñ!Ø #§
¡
× 0Ñ 0°AÒ6ˆLä)¨$´·±Ó=Ô=÷ Ø—
‘
× Ñ  4òBˆLð �K‰K×$Ñ$ Y°lÔQØÐrV   c                ó:   • U R                   R                  XX45      $ rn   )r  r
  r  s        rT   r
  ÚCSEProxy.check_boundsû
  s   € ð �{‰{×'Ñ'¨°EÓAÐArV   c                óø  • XR                   R                  R                  ;   a)  [        R                   R                  R                  U5        [        U[        R                  5      (       a  U R                   R                  X5      $ U R                   R                  R                  nX;   a  X1   $ U R                   R                  X5      nUR                  S:X  a  U R                   =R                  S-  sl        U$ rr  )r  r"  rÌ  r7   r#  r™  r   r   ÚTMPrC  rÈ  rá  r®  r  )ri   rf   rÆ  rÈ  Úouts        rT   rá  ÚCSEProxy.load   s´   € Ø—;‘;—?‘?×5Ñ5Ó5ô �H‰H×&Ñ&×*Ñ*¨4Ô0Ü˜u¤d§h¡h×/Ñ/Ø—;‘;×,Ñ,¨TÓ9Ð9Ø—k‘k—o‘o×1Ñ1ˆØÓØÑ$Ð$Ø�k‰k×Ñ˜tÓ+ˆð �=‰=˜AÓØ�K‰K× Ò  AÑ%Õ Øˆ
rV   c                óz  • X R                   R                  R                  U'   U R                   R                  (       a~  U[        R
                  R                  ;   a_  U R                   R                  R                  U5      nUR                  5        H%  nX R                   R                  R                  U'   M'     g g g rn   )	r  r"  rÈ  ró  r7   r¹   Úname_to_bufferÚ
get_outputÚget_mutations)ri   rf   rh   r^  Ú
other_names        rT   Ú_update_store_cacheÚCSEProxy._update_store_cache  s‚   € Ø,1�‰�‰×#Ñ# DÑ)Ø�;‰;×#×#¨´·±×0FÑ0FÓ(FØ—+‘+×*Ñ*×5Ñ5°dÓ;ˆCØ!×/Ñ/Ö1�
Ø:?—‘—‘×+Ñ+¨JÓ7ò 2ð )GÐ#rV   c                ó&  • U R                   R                  R                  U5        Uc  U R                  X5        U[        R
                  R                  ;  a:  U R                   R                  XX4S9  U R                   =R                  S-  sl        g g )N)r]   rH   )	r  r$  r™  r2  r7   r¹   r
  râ  r   r  s        rT   râ  ÚCSEProxy.store  sr   € ð 	�‰×&Ñ&×*Ñ*¨4Ô0Ø‰<Ø×$Ñ$ TÔ1Ø”q—w‘w×.Ñ.Ó.Ø�K‰K×Ñ˜d¨5ÐÑ<Ø�K‰K×!Ò! QÑ&Ö!ð /rV   c                ó:   • U R                   R                  X5        g rn   )r  r  r  s      rT   r  ÚCSEProxy.device_assert_async"  s   € Ø�‰×'Ñ'¨Õ2rV   c                ó6   • U R                   R                  " U6   g rn   )r  rQ  rs   s     rT   rQ  ÚCSEProxy.partial_accumulate&  s   € Ø�‰×&Ò&¨Ò-rV   c                ó"  • U R                   R                  R                  U5        U R                  X5        U[        R
                  R                  ;  a;  U R                   =R                  S-  sl        U R                   R                  XU5      $ g rr  )	r  r$  r™  r2  r7   r¹   r
  r   rã  r  s       rT   rã  ÚCSEProxy.store_reduction)  sk   € Ø�‰×&Ñ&×*Ñ*¨4Ô0Ø× Ñ  Ô-à”q—w‘w×.Ñ.Ó.Ø�K‰K×!Ò! QÑ&Õ!Ø—;‘;×.Ñ.¨t¸EÓBÐBð /rV   c                óx   • U R                   =R                  S-  sl        U R                   R                  XX45      $ rr  )r  r!  rß  r  s        rT   rß  ÚCSEProxy.reduction1  s0   € ð 	�‰×!Ò! QÑ&Õ!Ø�{‰{×$Ñ$ U°~ÓMÐMrV   c                ó:   • U R                   R                  XU5      $ rn   )r  r%  r!  s       rT   r%  ÚCSEProxy.scan;  s   € ð �{‰{×Ñ °FÓ;Ð;rV   c                ó:   • U R                   R                  XX45      $ rn   )r  r+  r(  s        rT   r+  ÚCSEProxy.sortF  s   € ð �{‰{×Ñ °ÓCÐCrV   c           	     óD   • U R                   R                  UUUUUUU5      $ )a
  
[Note: Inductor bucketize op]

Inputs:
-------
values: the values to be bucketized.
boundaries: a tuple containing
  (a) the name of the boundaries tensor (which must be sorted, unless
  the sorting tensor is present),
  (b) the length of the tensor in the last dimension (i.e. the length of
  one set of boundaries),
  (c) the number of elements in the underlying storage (i.e. the length
  of the flattened tensor, ignoring striding), and
  (d) the stride of the tensor in the last dimension.
boundary_indices: indices into a flattened version of the boundaries
tensor, of the same size and shape as "values".  Each index points to
the first element in the set of boundaries to be used for the
corresponding value.
indexing_dtype: the dtype to use when indexing into the boundaries
tensor.  This must be int64 or int32.  This additionally specifies the
dtype of the return value.
right: see "Details" below.
sorter: an optional tuple containing
  (a) the name of an optional sorting tensor, used to access unsorted
  boundaries without reordering the boundaries tensor, and
  (b) the stride of the tensor in the last dimension.
The values in the sorting tensor are used as indices into the *last*
dimension of the boundaries tensor, with all other indices matching.
The size of the sorting and boundaries tensors must be equivalent.
sorter_indices: must be present if the sorting array is present; see
"boundary_indices" for the equivalent definition for the boundaries
tensor.

Output:
-------
The buckets each value belongs in, within a given set of boundaries.  0
indicates a position before the first boundary, and len(boundaries_set)
represents a position after the last boundary.

Details:
--------
Given a value and a set of boundaries, calculate the bucket that each
value belongs to.  This works differently in 1-D and N-D cases.

for values [[-1, 0, 1, 2], [3, 4, 5, 9]], boundaries [0, 4, 4, 8], right=True
return =   [[ 0, 1, 1, 1], [1, 3, 3, 4]].

for values [[-1, 0, 1, 2], [3, 4, 5, 9]], boundaries [[0, 4], [4, 8]], right=True
return =   [[ 0, 1, 1, 1], [0, 1, 1, 2]]

Note that in the N-D boundaries case, the shape of "values" and
"boundaries" must match in every dimension _except_ the last.

When right == False, bucket i refers to range (boundaries[i], boundaries[i+1]].
When right == True,  bucket i refers to range [boundaries[i], boundaries[i+1]).

Boundaries must be non-decreasing, or a sorter must be provided which
would re-index offsets in a non-decreasing order (e.g. the second output
of torch.sort(offsets)).  Otherwise, the result is undefined.
)r  r5  r.  s           rT   r5  ÚCSEProxy.bucketizeO  s1   € ðL �{‰{×$Ñ$ØØØØØØØó
ð 	
rV   )r  ró  rò  )r  zKernel[Any]ró  zOpsHandler[Any])rf   r~   rt   ztuple[Any, ...]ré  r›  r{   r	   )rf   r~   rt   r	   ré  r	   r{   r¾  rb  )
rø  rÙ  rÖ   rc  r  r›   r  r›   r{   rd  re  r–  )rf   r~   rh   rÙ  r{   r|   rn   r˜  rf  )rt   r	   r{   r|   r—  r™  rœ  rž  rj  rŸ  )r€   r�   r‚   rƒ   r„   rf   rÿ   r	  r  r  r
  rá  r2  râ  r  rQ  rã  rß  r%  r+  r5  r‡   rj  rk  s   @rT   rl  rl  0
  sí  ø† ñð €D÷-ôS.ôj.%ðh Øð5àð5ð %ð5ð ð	5ð
 ð5ð 
õ5ðnBØðBØ&0ðBØ9=ðBØFJðBà	ôBô
ô"@ð SWð'Øð'Ø *ð'Ø3>ð'ØFOð'à	õ'ô3ô.ôCðNàðNð ðNð &ð	Nð
 ;ðNð 
5ôNð	<à'ð	<ð
ð	<ð (ð	<ð 
!ô	<ðDà'ðDð (ðDð ð	Dð
 ðDð 
!ôDð  48Ø04ðN
àðN
ð CðN
ð &ð	N
ð
 $ðN
ð ðN
ð 1ðN
ð .ðN
ð 
÷N
ó N
rV   rl  )rS   r~   r{   r|   )NNNN)r±   r~   re  r  rf  r  rg  r  rh  r  ri  úOptional[CustomGraphModulePass]rj  úOptional[ConfigModule]r{   r|   )r±   úUnion[torch.device, str, None]r{   zOrderedSet[BackendFeature])r±   rF  r€  rm  r{   r›   )r±   r~   r{   zOptional[SchedulingConstructor])FF)r±   r~   r„  r›   r…  r›   r{   r  )r±   r~   r{   rD  )r±   r~   r{   rE  rz   )rÆ  úSequence[sympy.Expr]rÇ  rG  rÈ  rG  r{   rò   )r±   r~   rË  r$  r{   r|   )r±   r~   r{   r$  )rè  r~   rt   r	   ré  r	   r{   r  )r  r)   rø  rì  r¶   rµ   r{   r|   )r  r)   rø  rì  r  rG   r{   r|   )r  r)   rø  rì  r{   r|   )rÒ  r~   r{   r›   rˆ   rm  )r{   r	   )ÏÚ
__future__r   rb   r&  ÚdataclassesÚenumr(  rÊ  rP   r�  r:  rd   Úrer`   Úabcr   r   r   r   r   Útypingr	   r
   r   r   r   r   r   r   Útyping_extensionsr   r   rÆ   rô   Útorch.fxÚtorch._prims_commonr   Útorch.utilsr   r  Útorch.utils._config_moduler   Útorch.utils._ordered_setr   Útorch.utils._sympy.numbersr   Útorch.utils._sympy.printersr   Ú_PythonPrinterÚtorch.utils._sympy.symbolr   r   r   Útorch.utils._sympy.value_rangesr   r   rÑ  r   r    Údtype_propagationr!   Úops_handlerr"   r#   Úshape_propagationr$   Úutilsr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Úvirtualizedr1   r2   r3   r4   r5   r6   r7   Úcollections.abcr8   r9   r:   r;   r<   Úcustom_graph_passr=   rØ   r>   r?   r@   rA   rN  rC   rO  rD   rE   rF   rG   rº  rJ   rK   r  rz  r  r~   rz  rª  rË  Ú_loggingÚgetArtifactLoggerr€   rN   Ú	getLoggerrŽ  rU   Ú	dataclassrX   rŠ   rŸ   r«   rû   r  r  r  r  r  ÚKernelArgTyper"  r…   r$  r`  ra  rb  rk  rm  r|  r�  r{  r‡  rŠ  rŒ  Úcachery  rÉ  rÌ  rÔ  Úbfloat16ræ  Úfloat16r›   r€  Úfloat64Úint8Úint16rt  rç  rõ   Úuint16rm  Úuint64rÕ  rë  rü  r
  r  r  rm  ÚcompileÚ
IGNORECASErÚ  rÕ  r×  ro  r  ÚINT_TO_FLOATrq  rZ  r  r  r  r+  r.  r4  r6  r:  rÙ  rÀ  rì  r‡  r¶   ÚReductionCacheKeyrÄ  r  r  r  r¨  rª  rl  rÏ   s   0rT   Ú<module>rq     s[  ðÞ "ã Û Û Û Û Û Û Û Û Û 	Û 	Û ß #ß Ý ÷	÷ 	ó 	÷ ,ã ã Û Ý ?Ý )Ý 3Ý /Ý -Ý Gß OÑ Oß Dç Ý :ß ;Ý :÷÷ ÷ ó ÷÷ ñ ö ßLÓLå$å9ß>Ó>Ý$ßDÑDÝ2Ý-á	�‹€BØ$ h¨yÑ&9Ð%:¸NÐ%JÑKÐØÐ2Ñ3ÐØ�s˜EŸL™LÐ(Ñ)€Jð €Fà�~‰~×/Ñ/°¸*ÓE€Ø×Ò˜Ó!€õ=ð
 ×Ñ÷ð ó ðô>/˜Ÿ	™	ô /ô(�Cô ñ �TÑôd�=ó dó ðd÷N*ñ *ð ×Ñ÷#ð #ó ð#ð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷!ð !ó ð!ð ×Ñ÷<ð <ó ð<ð �l I¨wÐ8HÈ,ÐVÑW€à,.€Ð)Ó .÷5"ñ 5"ðp :<Ð Ð6Ó ;ØDFÐ ÐAÓ FØDFÐ Ð AÓ Fð8 @DØ>BØ:>Ø37ñBØðBà,ðBð /ðBð !=ð	Bð
  <ðBð 8ðBð 1ðBð 
öBô4
&�Tô 
&ð3Ø*ð3àõ3ð$3Ø*ð3Ø5Cð3à	õ3õUð
 @EñØðØ"ðØ8<ðà!öõ-õ6ð ‡‚ômó ðmð`UØðUà$ðUð  ðUð õ	Uð;Øð;Ø&7ð;à	õ;õ,ð& 
‡N‚N�E—K’KØ	‡M‚M�5—;’;ð>ð �JŠJØ�MŠMØ�MŠMØ�JŠJØ�KŠKØ�KŠKØ�KŠKØ�KŠKØ�LŠLØ�LŠLØ�LŠLñ
óò
ˆEð 	Šñ
ñð>Ð Ð:ó ð,'Øð'àð'ð ð'ð õ	'ðT:Øð:Ø!0ð:Ø9Dð:à	õ:ð2	LØð	LØ!0ð	LØ9Gð	Là	õ	Lõ
÷aBñ aBôH=�Nô =÷&X1ñ X1ðv —z“zÐ";À2Ç=Â=ÑQÐ õô O;Ð#Ð%5°zÀ#±ô O;ðd ×Ñ÷-ð -ó ð-ñ  6:ó r6ÙØ;×HÒHÙ-Øòðr6ñ Ø;×HÒHÙ/Ù-Ø ò	ðr6ñ Ø;×HÒHÙ/Ù-Ø ò	ðr6ñ$ Ø;×HÒHÙ/Ù-Ø ò	ð%r6ñ0 Ø;×HÒHÙ/Ù-Ø ò	ð1r6ñ< Ø;×HÒHÙ*Ù)Øò	ð=r6ñL Ø;×HÒHÙ(Ù0Øò	ðMr6ñX 	Ø;×HÒHÙ6Ù6ñ
 8Øò
	ðYr6ñz Ø;×CÒCÙ)ñ+ð òð{r6ñL Ø;×HÒHÙ1ØòðMr6ñV Ø;×HÒHÙ2ØòðWr6ñ` Ø;×HÒHÙ1Øòðar6ñj Ø;×HÒHÙ2Ø òðkr6ñt Ø;×HÒHÙ%Ù8Ù$Øòður6ñB 	Ø;×HÒHÙ&Ù%Øò		ðCr6ñN Ø;×HÒHÙ%Ù8Øò	ðOr6ñZ 	Ø;×HÒHÙ&Øò	ð[r6ñd Ø;×HÒHÙ+Øòðer6ñp %Ø;×HÒHÙ8Ù8Ø)ò	ðqr6ñ| %Ø;×HÒHÙ8Ù8Ø)ò	ð}r6ñH %Ø;×HÒHÙ8Ø)òðIr6ñR %Ø;×HÒHÙ8Ø)òðSr6ñ^ 
Ø;×HÒHÙ'Øò
ð_r6ñh Ø;×HÒHÙ(Øòðir6ñr Ø;×HÒHñcàò	ðsr6ñB ,Ø;×HÒHÙ?Ø0òðCr6ñL ,Ø;×HÒHÙ?Ø0òðMr6ñX &Ø;×HÒHÙ9Ø*òðYr6ñb 
Ø;×HÒHÙ*Øò
ðcr6ñl )Ø;×HÒHÙDØ-òðmr6ñv )Ø;×HÒHÙDØ-òðwr6ñ@ )Ø;×HÒHÙDØ-òðAr6ñJ )Ø;×HÒHÙDØ-òðKr6ñT (Ø;×HÒHÙCØ,òðUr6ñ^ $1Ø;×HÒHÙLØ5ò$ð_r6ñh $1Ø;×HÒHÙLØ5ò$ðir6ñr $1Ø;×HÒHÙLØ5ò$ðsr6ñ| $1Ø;×HÒHÙLØ5ò$ð}r6ñF 'Ø;×HÒHÙBØ+òðGr6ñP (Ø;×HÒHÙCØ,òðQr6ñZ (Ø;×HÒHÙCØ,òð[r6Ð Ð2ó rõj	ô-Ð#ô -ô"�>ô ô*�Zô ð
 ×Ñ÷Nð Nó ðN÷ñ ñ
 ‹,€÷Xñ X÷v
#;ñ #;ñL ˜°Ñ5€ÙÐ+°;ÈÑT€æØØ�ŠØØˆk˜5 ©cÐ!1Ñ2Ð2Ñ3ð	5ñÐölˆ'�/ =Ð0Ñ
1ô l÷^
<ó 
<ö@3ˆW�g˜oÑ.ô @3ðF
 ×Ñ÷ò ó ðð ‡‚õó ð÷S"ó S"ölm
ˆ~õ m
ùòM=s   Ï/d: