Ë
    ÄÓ^jC§ ã                  ój  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlZd dlZd dl Zd dl!m"Z" d d	l#m$Z% d d
l&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQmRZRmSZSmTZTmUZUmVZV erid dlWmXZXmYZYmZZZm[Z[ d dl m\Z\ ddl]m^Z^ ddl_m`Z`maZambZbmcZc ddldmeZe ddlfmgZgmhZhmiZi ddl@mjZj dd lkmlZl  ed!«      ZmeXehdz  gegf   Zneoel   Zpeqejä                  z  ZseqZtejê                  jí                  ewd"«      Zx ejò                  ew«      Zz�dd#„Z{ejø                   G d$„ d%«      «       Z} G d&„ d'ej$                  «      Z~ G d(„ d)e«      Z eHd*¬+«       G d,„ d-e«      «       Z€ G d.„ d/«      Z�ejø                   G d0„ d1«      «       Z‚ejø                   G d2„ d3«      «       Zƒejø                   G d4„ d5«      «       Z„ejø                   G d6„ d7«      «       Z…ejø                   G d8„ d9«      «       Z†e€e‚z  eƒz  e…z  e„z  Z‡i Zˆd:e‰d;<    G d<„ d=«      ZŠi Z‹d>e‰d?<   d@aŒi Z�dAe‰dB<   i ZŽdCe‰dD<   	 	 	 	 �d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 �ddE„Z� G dF„ dGe«      Z�	 	 	 	 �ddH„Z‘	 	 	 	 	 	 �ddI„Z’�ddJ„Z“	 �d	 	 	 	 	 	 	 �ddK„Z”�ddL„Z•�ddM„Z–e�j.                  �ddN„«       Z˜	 	 	 	 	 	 	 	 �ddO„Z™	 	 	 	 	 	 �ddP„ZšdQ„ Z›�ddR„Zœe�j:                  e�j<                  e�j>                  e�j<                  ie�j@                  e�jB                  e�jD                  e�jF                  e�jH                  e�jJ                  e�jL                  e�jN                  e�jP                  e�jR                  e�jT                  fD � ci c]  } | | “Œ c} ¥Z«dSe‰dT<   	 	 	 	 	 	 	 	 �d dU„Z¬�d!dV„Z­	 	 	 	 	 	 	 	 �d"dX„Z®	 	 	 	 	 	 	 	 �d#dY„Z¯�d$dZ„Z° G d[„ d\«      Z± G d]„ d^e0«      Z/ G d_„ d`«      Z² e�jf                  dae�jh                  ¬b«      Zµ�d%dc„Z¶ G dd„ dee>e²eRe   «      Z·ejø                   G df„ dg«      «       Z¸ e¹�d&i dh e¸e"�jt                  di„ dj¬k«      “dl e¸e"�jt                  dm„ dn„ do¬p«      “dq e¸e"�jt                  dr„ ds„ dt¬p«      “du e¸e"�jt                  dv„ dw„ dx¬p«      “dy e¸e"�jt                  dz„ d{„ d|¬p«      “d} e¸e"�jt                  d~„ d„ d}¬€«      “d� e¸e"�jt                  d‚„ dƒ„ d„¬p«      “d… e¸e"�jt                  d†„ d‡„ dˆ„ d…¬‰«      “dŠ e¸e"�jv                  d‹„ dŒ„ dŠ¬p«      “d� e¸e"�jt                  dŽ„ d�¬k«      “d� e¸e"�jt                  d�„ d�¬k«      “d‘ e¸e"�jt                  d’„ d“¬k«      “d” e¸e"�jt                  d•„ d–¬k«      “d— e¸e"�jt                  d˜„ d™„ dš„ d—¬›«      “dœ e¸e"�jt                  d�„ dž„ dŸ¬€«      “d  e¸e"�jt                  d¡„ d¢„ d£¬p«      “d¤ e¸e"�jt                  d¥„ d¦¬k«      “d§ e¸e"�jt                  d¨„ d©¬k«      “dª e¸e"�jt                  d«„ d¬„ d­¬p«      “d® e¸e"�jt                  d¯„ d°„ d±¬p«      “d² e¸e"�jt                  d³„ d´¬k«      “dµ e¸e"�jt                  d¶„ d·¬k«      “d¸ e¸e"�jt                  d¹„ dº¬k«      “d» e¸e"�jt                  d¼„ d½¬k«      “d¾ e¸e"�jt                  d¿„ d¾¬k«      “dÀ e¸e"�jt                  dÁ„ dÂ¬k«      “dÃ e¸e"�jt                  dÄ„ dÅ¬k«      “dÆ e¸e"�jt                  dÇ„ dÈ¬k«      “dÉ e¸e"�jt                  dÊ„ dË¬k«      “dÌ e¸e"�jt                  dÍ„ dÎ¬k«      “dÏ e¸e"�jt                  dÐ„ dÑ¬k«      “dÒ e¸e"�jt                  dÓ„ dÔ¬k«      “dÕ e¸e"�jt                  dÖ„ d×¬k«      “dØ e¸e"�jt                  dÙ„ dÚ¬k«      “dÛ e¸e"�jt                  dÜ„ dÝ¬k«      “dÞ e¸e"�jt                  dß„ dà¬k«      “dá e¸e"�jt                  dâ„ dã¬k«      “dä e¸e"�jt                  då„ dæ¬k«      “dç e¸e"�jt                  dè„ dé¬k«      “dê e¸e"�jt                  dë„ dì¬k«      “dí e¸e"�jt                  dî„ dï¬k«      “ŽZ¼dðe‰dñ<   �d'dò„Z½ G dó„ dôeD«      Z¾ G dõ„ döeG«      Z¿ G d÷„ døe«      ZÀejø                   G dù„ dú«      «       ZÁ G dû„ dü«      ZÂ eÂ«       ZÃ G dý„ dþ«      ZÄ G dÿ„ �d «      ZÅ e�deq�¬«      ZÆ edWeÅeÅ�¬«      ZÇereÈe�j’                  eTeÅeÈeÅ�df   z  f   ZÊ G �d„ �deeÇeÆf   «      ZË G �d„ �d«      ZÌ G �d	„ �d
eÌeeÇ   «      ZÍejø                   G �d„ �d«      «       ZÎe�j.                  �d(�d„«       ZÏ G �d„ �d«      ZÐ G �d„ �de?«      ZÑyc c} w ()  é    )ÚannotationsN)ÚABCÚabstractmethod)ÚautoÚEnum)Úchain)ÚAnyÚcastÚClassVarÚGenericÚ
NamedTupleÚTYPE_CHECKING)ÚSelfÚTypeVar)ÚELEMENTWISE_TYPE_PROMOTION_KIND)Ú_pytree)ÚConfigModule)Ú
OrderedSet)ÚMax)Ú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                óx   — t         j                  t        j                  «      rt         j	                  d| «       y y )NzData type propagation: %s)Úschedule_logÚisEnabledForÚloggingÚDEBUGÚdebug)Úmsgs    úi/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/codegen/common.pyÚdata_type_loggerrT   Y   s*   € Ü× Ñ ¤§¡Ô/Ü×ÑÐ6¸Õ<ð 0ó    c                  óZ   — e Zd ZU dZded<   ded<   dd„Zedd„«       Zdd„Zedd	„«       Z	y
)ÚFileBackedGraphModulez‘
    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                ó&  — t        j                  ddd¬«      | _         t        j                  t        j
                  | j                   j                  «       | j                   5 }|j                  | j                  «       d d d «       y # 1 sw Y   y xY w)Nzw+z.pyF)ÚmodeÚsuffixÚdelete)	ÚtempfileÚNamedTemporaryFileÚatexitÚregisterÚosÚremoveÚnameÚwriteÚvalue)ÚselfÚfs     rS   Ú__post_init__z#FileBackedGraphModule.__post_init__h   si   € ô !×3Ñ3Ø˜e¨Eô
ˆŒô 	�‰œŸ	™	 4§=¡=×#5Ñ#5Ô6Ø�]‰]ð 	 ˜aØ�G‰G�D—J‘JÔ÷	 ÷ 	 ñ 	 ús   Á"BÂBc                ó.   — | j                   j                  S ©N)r^   rd   ©rg   s    rS   Ú__file__zFileBackedGraphModule.__file__r   s   € à�}‰}×!Ñ!Ð!rU   c                ó    —  | j                   |Ž S rk   )rY   ©rg   Úargss     rS   ÚcallzFileBackedGraphModule.callv   s   € Øˆt×Ñ Ð&Ð&rU   c                ó.   — | j                   j                  S rk   )rX   Úcoderl   s    rS   rf   zFileBackedGraphModule.valuey   s   € à�w‰w�|‰|ÐrU   N©ÚreturnÚNone©ru   Ústr)rp   ú	list[Any]ru   r	   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__ri   Úpropertyrm   rq   rf   © rU   rS   rW   rW   ^   sF   … ñð
 	ƒOØ#Ó#ó ð ò"ó ð"ó'ð òó ñrU   rW   c                  ó<   — e Zd ZdZdZdZedd„«       Zedd„«       Zy)	ÚWorkspaceZeroModer   rG   r   c                ó„   — | |k(  s|t         j                  k(  r| S | t         j                  k(  r|S t        d| ›d|›d�«      ‚)NzWorkspaceZeroMode.combine(ú, ú))r‚   ÚUNINITIALIZEDÚNotImplementedError©ÚaÚbs     rS   ÚcombinezWorkspaceZeroMode.combineƒ   sK   € à�Š6�QÔ+×9Ñ9Ò9ØˆHØÔ!×/Ñ/Ò/ØˆHÜ!Ð$>¸q¸eÀ2ÀaÀUÈ!Ð"LÓMÐMrU   c                óF   — | rt         j                  S t         j                  S rk   )r‚   ÚZERO_ON_CALLr†   )Ú	zero_fills    rS   Ú	from_boolzWorkspaceZeroMode.from_bool‹   s   € áÜ$×1Ñ1Ð1Ü ×.Ñ.Ð.rU   N)r‰   r‚   rŠ   r‚   ru   r‚   )rŽ   Úboolru   r‚   )	rz   r{   r|   r†   r�   ÚZERO_PER_GRAPHÚstaticmethodr‹   r�   r€   rU   rS   r‚   r‚   ~   s9   „ Ø€MØ€LØ€NàòNó ðNð ò/ó ñ/rU   r‚   c                  ó4   — e Zd ZdZedd„«       Zedd„«       Zy)ÚCodegenSymbolzP
    An IR object possibly corresponding to a variable in the wrapper code.
    c                 ó   — y rk   r€   rl   s    rS   Úget_namezCodegenSymbol.get_name—   ó   € àrU   c                 ó   — y rk   r€   rl   s    rS   Úget_examplezCodegenSymbol.get_example›   r—   rU   Nrw   ©ru   ztorch.Tensor | sympy.Symbol)rz   r{   r|   r}   r   r–   r™   r€   rU   rS   r”   r”   ’   s/   „ ñð òó ðð òó ñrU   r”   T)Úfrozenc                  ó&  — e Zd ZU dZded<   ded<   ded<   ded	<   d
Zded<   ej                  Zded<   e	ddd„«       Z
e	d d„«       Ze	d!d„«       Ze	d!d„«       Zd"d„ZeZd#d„Zd$d„Zd%d„Zed%d„«       ZeZeZeZd&d„Zd'd„Zd'd„Zd(d„Zd)d„Zd*d„Zy)+ÚWorkspaceArga2  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Údevicerx   Ú
outer_nameÚws_ptrÚ
inner_nameútorch.dtypeÚdtypec                óP   — | › t        t        j                  j                  «      › �S rk   )Únextr6   ÚgraphÚworkspace_id)Úprefixs    rS   Úunique_namezWorkspaceArg.unique_name´   s!   € à�œ$œqŸw™w×3Ñ3Ó4Ð5Ð6Ð6rU   c                ó    — | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rk   )r¥   r§   r¢   rˆ   s     rS   Úcan_joinzWorkspaceArg.can_join¸   s@   € ð �L‰L˜AŸL™LÑ(ÒX¨Q¯W©W¸¿¹Ñ-?ÒXÀAÇHÁHÐPQ×PXÑPXÑDXð	
rU   c                óò   — t        | j                  |j                  z   t        j                  | j                  |j                  «      | j
                  | j                  | j                  | j                  ¬«      S ©N)rŸ   r    r§   r¢   r¥   r£   )	r�   rŸ   r‚   r‹   r    r§   r¢   r¥   r£   rˆ   s     rS   ÚjoinzWorkspaceArg.join¾   sS   € äØ—'‘'˜AŸG™GÑ#Ü'×/Ñ/°·±¸Q¿[¹[ÓIØ—'‘'Ø—8‘8Ø—|‘|Ø—|‘|ô
ð 	
rU   c                óš  — | j                   |j                   k(  r2| j                  |j                  k(  r| j                  |j                  k(  sJ ‚t        t	        | j
                  |j
                  «      t        j                  | j                  |j                  «      | j                   | j                  | j                  | j                  ¬«      S r±   )
r§   r¢   r¥   r�   r   rŸ   r‚   r‹   r    r£   rˆ   s     rS   Úmaximumz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Ø—|‘|Ø—|‘|ô
ð 	
rU   c                ó   — | j                   S rk   ©r¢   rl   s    rS   Ú
get_devicezWorkspaceArg.get_deviceØ   s   € Ø�{‰{ÐrU   c                ó   — | j                   S rk   ©r§   rl   s    rS   Ú	get_dtypezWorkspaceArg.get_dtypeÝ   s   € Ø�z‰zÐrU   c                ó>   — | j                  «       j                  «       S rk   )Ú
get_layoutr™   rl   s    rS   r™   zWorkspaceArg.get_exampleà   s   € Ø�‰Ó ×,Ñ,Ó.Ð.rU   c                óf   — ddl m}  || j                  | j                  | j                  gdg¬«      S )Nr   )r?   rG   )r¢   r§   ÚsizeÚstride)Úirr?   r¢   r§   rŸ   )rg   r?   s     rS   r¼   zWorkspaceArg.get_layoutã   s.   € Ý$áØ—;‘;Ø—*‘*Ø—*‘*�Ø�3ô	
ð 	
rU   c                ó"   — | j                  «       S rk   )r¼   rl   s    rS   ÚlayoutzWorkspaceArg.layoutí   s   € à�‰Ó Ð rU   c                ó6   — t         j                  j                  S rk   )ÚsympyÚSÚZerorl   s    rS   Ú
get_offsetzWorkspaceArg.get_offsetõ   s   € Ü�w‰w�|‰|ÐrU   c                ó   — | j                   gS rk   )rŸ   rl   s    rS   Úget_sizezWorkspaceArg.get_sizeø   s   € Ø—
‘
ˆ|ÐrU   c                ó8   — t         j                  j                  gS rk   )rÄ   rÅ   ÚOnerl   s    rS   Ú
get_stridezWorkspaceArg.get_strideû   s   € Ü—‘—‘ˆ}ÐrU   c                ó   — | j                   S rk   )r£   rl   s    rS   r–   zWorkspaceArg.get_nameþ   s   € Ø�‰ÐrU   c                 ó   — y)NFr€   rl   s    rS   Úget_is_pinnedzWorkspaceArg.get_is_pinned  s   € ØrU   c                ó   — g S rk   r€   rl   s    rS   Úget_inputs_that_alias_outputz)WorkspaceArg.get_inputs_that_alias_output  s   € Øˆ	rU   N)Ú
workspace_)r¬   rx   ru   rx   )r‰   r�   rŠ   r�   ru   r�   )r‰   r�   rŠ   r�   ru   r�   )ru   r¡   )ru   r¦   rš   )ru   r?   )ru   rž   )ru   úlist[sympy.Expr]rw   ©ru   r�   )ru   ú	list[str])rz   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€   rU   rS   r�   r�       sç   … ñ	ð ÓØ Ó ØÓØƒOØ€J�ÓØŸ™€Eˆ;Ó$àó7ó ð7ð ò
ó ð
ð
 ò
ó ð
ð ò
ó ð
óð %Ðóó/ó
ð ò!ó ð!ð !€OØ&ÐØ!ÐóóóóóôrU   r�   c                  ó   — e Zd Zdd„Zdd„Zy)ÚTritonScratchWorkspacec                ó    — || _         || _        y rk   )r¾   Ú_generate_dtype_str)rg   r¾   Úgenerate_dtype_strs      rS   Ú__init__zTritonScratchWorkspace.__init__	  s   € ØˆŒ	Ø#5ˆÕ rU   c                ó"   — | j                  «       S rk   )rß   rl   s    rS   rà   z)TritonScratchWorkspace.generate_dtype_str  s   € Ø×'Ñ'Ó)Ð)rU   N)r¾   Úintrà   úCallable[..., str]rw   )rz   r{   r|   rá   rà   r€   rU   rS   rÝ   rÝ     s   „ ó6ô*rU   rÝ   c                  óp   — e Zd ZU ded<   ded<   ded<   ej
                  j                  Zded<   dZd	ed
<   y)Ú	TensorArgrx   rd   Úbufferr¦   r§   rž   ÚoffsetNú
str | NoneÚalias_of)	rz   r{   r|   r~   rÄ   rÅ   rÆ   rè   rê   r€   rU   rS   ræ   ræ     s.   … à
ƒIØƒKØÓØŸ™Ÿ™€FˆJÓ%Ø€HˆjÔrU   ræ   c                  ó4   — e Zd ZU ded<   ded<   edd„«       Zy)ÚSizeArgrx   rd   rž   Úexprc                 ó   — y rk   r€   rl   s    rS   rê   zSizeArg.alias_of  s   € àrU   N©ru   ré   )rz   r{   r|   r~   r   rê   r€   rU   rS   rì   rì     s   … à
ƒIØ
Óàòó ñrU   rì   c                  ó   — e Zd ZU ded<   y)ÚConstexprArgrx   rd   N©rz   r{   r|   r~   r€   rU   rS   rñ   rñ   $  s   … à
„IrU   rñ   c                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)	ÚTMADescriptorArgrx   rd   Úapi_typezlist[sympy.Expr] | NoneÚblock_shapeútorch.dtype | Noner§   Nrò   r€   rU   rS   rô   rô   )  s   … à
ƒIØƒMØ(Ó(ØÔrU   rô   c                  ó>   — e Zd ZU ded<   ded<   dZded<   dZded<   y)	ÚDeviceCodegenÚSchedulingConstructorÚ
schedulingÚWrapperConstructorÚwrapper_codegenNúWrapperConstructor | NoneÚcpp_wrapper_codegenÚfx_wrapper_codegen)rz   r{   r|   r~   rÿ   r   r€   rU   rS   rù   rù   1  s&   … à%Ó%Ø'Ó'Ø59ÐÐ2Ó9Ø48ÐÐ1Ô8rU   rù   zdict[str, DeviceCodegen]Údevice_codegensc                  ó¶   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	 d	 	 	 	 	 	 	 dd„Zy)ÚDeviceOpOverridesc                ó   — t         ‚rk   ©r‡   ©rg   rd   s     rS   Úimport_get_raw_stream_asz*DeviceOpOverrides.import_get_raw_stream_as?  ó   € Ü!Ð!rU   c                ó   — t         ‚rk   r  ©rg   Ú
device_idxs     rS   Ú
set_devicezDeviceOpOverrides.set_deviceB  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   ÚsynchronizezDeviceOpOverrides.synchronizeE  r  rU   c                ó   — t         ‚rk   r  r
  s     rS   Údevice_guardzDeviceOpOverrides.device_guardH  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcurrent_streamz DeviceOpOverrides.current_streamK  r  rU   c                ó   — |› d�S )Nz.native_handler€   )rg   Ústream_names     rS   Ústream_handlezDeviceOpOverrides.stream_handleN  s   € Ø�˜nÐ-Ð-rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_device_guardz"DeviceOpOverrides.cpp_device_guardQ  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_aoti_device_guardz'DeviceOpOverrides.cpp_aoti_device_guardT  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_stream_guardz"DeviceOpOverrides.cpp_stream_guardW  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_aoti_stream_guardz'DeviceOpOverrides.cpp_aoti_stream_guardZ  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_getStreamFromExternalz+DeviceOpOverrides.cpp_getStreamFromExternal]  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úkernel_headerzDeviceOpOverrides.kernel_header`  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úkernel_driverzDeviceOpOverrides.kernel_driverc  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_stream_typez!DeviceOpOverrides.cpp_stream_typef  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úaoti_get_streamz!DeviceOpOverrides.aoti_get_streami  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_kernel_typez!DeviceOpOverrides.cpp_kernel_typel  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Úcpp_device_ptrz DeviceOpOverrides.cpp_device_ptro  r  rU   c                ó   — t         ‚rk   r  rl   s    rS   Útma_descriptor_helpersz(DeviceOpOverrides.tma_descriptor_helpersr  r  rU   Nc                ó   — t         ‚rk   r  )rg   ÚidxÚ	workspacer¬   s       rS   Úcpp_scratchzDeviceOpOverrides.cpp_scratchu  s
   € ô "Ð!rU   ©rd   rx   ru   rx   )r  rã   ru   rx   rw   )r  rx   ru   rx   rk   )r/  rã   r0  rÝ   r¬   ré   ru   ztuple[list[str], str] | None)rz   r{   r|   r  r  r  r  r  r  r  r  r  r  r  r!  r#  r%  r'  r)  r+  r-  r1  r€   rU   rS   r  r  >  sˆ   „ ó"ó"ó"ó"ó"ó.ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ð QUð"Øð"Ø#9ð"ØCMð"à	%ô"rU   r  zdict[str, DeviceOpOverrides]Údevice_op_overrides_dictFz'dict[str, CustomGraphModulePass | None]Úcustom_backend_passeszdict[str, ConfigModule | None]Úcustom_backend_codegen_configsc                ó¨   — t        ||||«      t        | <   |t        | <   |r)t        |t        «      r|t
        usJ d|›dt
        ›�«       ‚|t        | <   y )Nzdevice_custom_config=z: cannot be the same as the default inductor config config=)rù   r  r4  Ú
isinstancer   r   r5  )r¢   Údevice_schedulingÚdevice_wrapper_codegenÚdevice_cpp_wrapper_codegenÚdevice_fx_wrapper_codegenÚdevice_custom_passÚdevice_custom_configs          rS   Úregister_backend_for_devicer>  —  sv   € ô ,ØØØ"Ø!ó	„O�FÑð %7Ô˜&Ñ!ÙäÐ+¬\Ô:Ø$¬FÑ2ð	
ð %Ð#Ð%Ð%`ÔY_ÐXaÐbó		
ð3ð
 .BÔ" 6Ò*rU   c                  ó˜   — e Zd Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z	 e«       Z
 e«       Z e«       Z e«       Zy)ÚBackendFeatureN)rz   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€   rU   rS   r@  r@  ±  sL   „ Ù‹f€GÙ“€IÙ“f€OÙ $£ÐÙ‹6€DÙ‹6€DÙ“f€OÙ"›fÐÙ“vÐÙ#›vÑrU   r@  c                ó:  — | €
t        «       S t        «        t        | t        j                  «      r| j
                  }n7t        | t        «      sJ t        | «      «       ‚| }t        j                  |«      } t        |«      }|sJ ‚ |d «      }|j                  | «      S rk   )	r   Úinit_backend_registrationr7  rÖ   r¢   Útyperx   Úget_scheduling_for_deviceÚget_backend_features)r¢   Údevice_typeÚscheduling_ctorrû   s       rS   rO  rO  ¾  s‡   € ð €~Ü‹|ÐÜÔÜ�&œ%Ÿ,™,Ô'Ø—k‘k‰ä˜&¤#Ô&Ð4¬¨V«Ó4Ð&ØˆÜ—‘˜kÓ*ˆÜ/°Ó<€OÙÐˆ?Ù  Ó&€JØ×*Ñ*¨6Ó2Ð2rU   c                ó@   — t        |t        «      sJ ‚|t        | «      v S )zSee also V.graph.has_feature)r7  r@  rO  )r¢   Úfeatures     rS   Úhas_backend_featurerT  Ð  s%   € ô �gœ~Ô.Ð.Ð.ØÔ*¨6Ó2Ð2Ð2rU   c                ó<   — | t         v rt         |    j                  S d S rk   )r  rû   r¶   s    rS   rN  rN  Ø  s    € Ø17¼?Ñ1JŒ?˜6Ñ"×-Ñ-ÐTÐPTÐTrU   c                óv   — | t         v r1t         |    }|r|j                  S |r|j                  S |j                  S y rk   )r  r   rÿ   rý   )r¢   Úcpp_wrapperÚ
fx_wrapperÚwrapper_codegen_objs       rS   Úget_wrapper_codegen_for_devicerZ  Ü  sD   € ð ”Ñ Ü-<¸VÑ-DÐÙØ&×9Ñ9Ð9ÙØ&×:Ñ:Ð:à&×6Ñ6Ð6ØrU   c                ó,   — t         j                  | «      S rk   )r4  Úgetr¶   s    rS   Ú"get_custom_backend_pass_for_devicer]  ê  s   € Ü ×$Ñ$ VÓ,Ð,rU   c                ó,   — t         j                  | «      S rk   )r5  r\  r¶   s    rS   Ú$get_custom_backend_config_for_devicer_  î  s   € Ü)×-Ñ-¨fÓ5Ð5rU   c                 ó~  ‡‡‡— ddl m}  ddlm} ddlm} ddlm} ddlm	} ddl
m} ddlm} dd	lm} dd
lm} ddlm}	 ddlm}
 ddlm} ddlm} ddlm} t9        d«      €5| ||
|dœŠt;        dˆfd„|t<        j>                  j@                  r|n||«       t9        d«      €|||dœŠt;        dˆfd„|||«       t9        d«      €t;        d||«       t9        d«      €t;        d||||«       t9        d«      €d|iŠt;        dˆfd„|«       t9        d«      €t;        d||||«       t9        d«      €t;        d|
|	||«       tB        jD                  jG                  «       }|dk7  rLt9        |«      €@ddl$m%} 	  |d «      } |d!«      } |d"«      } |d#«      }|r|r|rt;        |||||«       yyyyyy# tL        $ r Y yw xY w)$z˜
    Register the backend for different devices, including the scheduling
    for kernel code generation and the host side wrapper code generation.
    rG   )ÚCppScheduling)ÚCppWrapperCpu)ÚCppWrapperCpuArrayRef)ÚCppWrapperGpu)ÚCppWrapperMps)ÚCUDACombinedScheduling)ÚHalideScheduling)ÚMetalScheduling)ÚPallasScheduling)ÚPythonWrapperMtia)ÚTritonSchedulingrH   )ÚWrapperFxCodegen)ÚXPUCombinedSchedulingÚcpuN)ÚcppÚhalideÚtritonÚpallasc                ó6   •—  ‰t         j                     | «      S rk   )r   Úcpu_backend)rû   Úcpu_backendss    €rS   ú<lambda>z+init_backend_registration.<locals>.<lambda>  ó   ø€ Ð?˜|¬F×,>Ñ,>Ñ?À
ÓK€ rU   Úcuda)rq  rp  rr  c                ó6   •—  ‰t         j                     | «      S rk   )r   Úcuda_backend)rû   Úcuda_backendss    €rS   rv  z+init_backend_registration.<locals>.<lambda>!  s   ø€ ÐA˜}¬V×-@Ñ-@ÑAÀ*ÓM€ rU   ÚtpuÚxpurr  c                ó6   •—  ‰t         j                     | «      S rk   )r   Útpu_backend)rû   Útpu_backendss    €rS   rv  z+init_backend_registration.<locals>.<lambda>?  rw  rU   ÚmpsÚmtiaÚprivateuseoner   )Ú_get_custom_mod_funcÚ
SchedulingrI   ÚCppWrapperCodegenrl  )'ro  ra  Úcpp_wrapper_cpurb  Úcpp_wrapper_cpu_array_refrc  Úcpp_wrapper_gpurd  Úcpp_wrapper_mpsre  Úcuda_combined_schedulingrf  rp  rg  r�  rh  rr  ri  Úpython_wrapper_mtiarj  rq  rk  ÚwrapperrI   Úwrapper_fxirrl  Úxpu.xpu_combined_schedulingrm  rN  r>  r   Úaot_inductorÚallow_stack_allocationrÖ   Ú_CÚ_get_privateuse1_backend_nameÚ torch.utils.backend_registrationr„  ÚRuntimeError)ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rI   rl  rm  Úprivate_backendr„  r8  rý   rÿ   r   ru  r{  r€  s                       @@@rS   rL  rL  ò  s  ú€ õ #Ý.Ý@Ý.Ý.Ý@Ý(Ý$Ý(Ý6Ý(Ý-Ý.ÝBä  Ó'Ð/à Ø&Ø&Ø&ñ	
ˆô 	$ØÛ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   Å55F0 Æ0	F<Æ;F<c                óL   — ddl m} g | ¢t        ||j                  |«      «      ‘S )Nr   )ÚFlexibleLayout)rÀ   r˜  r+   Úcontiguous_strides)ÚindexÚ
index_varsÚsizesr˜  s       rS   Úindex_prevent_reorderingr�  m  s,   € õ
 $ð UˆUÐT”I˜j¨.×*KÑ*KÈEÓ*RÓSÐTÐTrU   c                ó   — |t         | <   y rk   )r3  )r¢   Údevice_op_overridess     rS   Úregister_device_op_overridesr   x  s   € ð (;Ô˜VÒ$rU   c                 ót   — t         ry ddlm}  ddlm} ddlm} ddlm} ddlm} t        d |«       «       da y )NrG   )Úmps_device_op_overrides)ÚCpuDeviceOpOverrides)rŸ  r|  T)
Ú _device_op_overrides_initializedÚ r¢  Úcpu_device_op_overridesr£  rx  rŸ  r‚  r}  r   )r¢  r£  rŸ  Úmtia_op_overridesÚxpu_op_overridess        rS   Ú_initialize_device_op_overridesr©  ~  s/   € õ (Øå)Ý=Ý)Ý>Ý<ô ! Ñ(<Ó(>Ô?à'+Ñ$rU   c                óh   — t        | t        «      sJ t        | «      «       ‚t        «        t        |    S rk   )r7  rx   rM  r©  r3  r¶   s    rS   Úget_device_op_overridesr«  ‘  s,   € Ü�fœcÔ"Ð0¤D¨£LÓ0Ð"Ü#Ô%Ü# FÑ+Ð+rU   zdict[torch.dtype, torch.dtype]ÚDTYPE_TO_COMPUTATION_DTYPEc                ór  — | t        «       v rt        j                  S | dv rd|v r|d   S |d   S | dv rt        j                  S | dv rt        j                  S | dk(  rd|v r|d   S |d   S | dk(  rd|v r|d   S |d   S | d	v r$|d   }t
        j                  j                  |«      S | d
k(  rd|v r|d   S |d   S y)zK
    Given op name and a list of input dtypes, deduce the output dtype
    )Úto_dtypeÚ
index_exprÚ
value_exprr§   éÿÿÿÿ)ÚrandÚrandn)Ú	get_indexÚ	randint64Ú	load_seedÚ	reductionrG   Úconstant)ÚloadÚstoreÚstore_reductionÚto_dtype_bitcastéþÿÿÿN)r$   rÖ   r�   ÚfloatÚint64r6   rª   rº   )Úop_namerp   ÚkwargsÚbuf_names       rS   Ú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ØrU   c                 ó®   — t        «       dk(  xrG t        j                  j                  «       j                  dk7  xr t        t        j                  d«      S )Nrq  rn  Útriton_tensor_ndim)r'   r6   rª   Úget_current_device_or_throwrM  ÚhasattrÚkernelr€   rU   rS   Ú _is_runtime_triton_assert_targetrÉ  Ø  sF   € äÓ Ñ)ò 	4Ü�G‰G×/Ñ/Ó1×6Ñ6¸%Ñ?ò	4ä”A—H‘HÐ2Ó3ðrU   ÚCSEVariableTypec                ó   — t        «       }t        j                  j                  r,t	        «       r"| j                  d|› dt        |«      › d�«       y t        j                  j                  r”|dk(  rŽddlm	}m
} t        ||«      sJ t        |«      «       ‚|t        j                  k(  r|j                  rd|› d�}n.d	|› d
|› d�}n$d|› d�}|j                  rd|› d�}d|› d||   › d�}| j                  d|› d�«       y y y )Nútl.static_assert(z
.dtype == r…   ro  rG   )Ú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_assertrÉ  Ú	writeliner.   Ústatic_cpp_dtype_assertÚ	cpp_utilsrÍ  rÎ  r7  rM  rÖ   r�   Úis_vec)rç   Úvarr§   ÚbackendrÍ  rÎ  Ú
is_same_dtÚ
c_var_types           rS   Úcheck_dtyperÚ  à  s  € ô "Ó#€Gä×Ñ×7Ò7Ü,Ô.à×ÑÐ,¨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¸ÀeÑ9LÐ8MÈQÐOˆJà×Ñ˜>¨*¨°RÐ8Õ9ð! :JÐ	4rU   c                óä   — |€J ‚t         j                  j                  rRt        «       rGt	        |«      dk7  rdj                  d„ |D «       «      n|d   › d�}| j                  d|› d|› d�«       y y y )	NrG   r„   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrk   ©rx   )Ú.0Úds     rS   ú	<genexpr>zcheck_shape.<locals>.<genexpr>  s   è ø€ Ò, ”c˜!—fÑ,ùs   ‚r   ú,rÌ  z.shape == (ú)))r   rÐ  Úruntime_triton_shape_assertrÉ  Úlenr²   rÒ  )rç   rÖ  ÚshapeÚ	shape_strs       rS   Úcheck_shaperç  ü  s   € ð ÐÐÐä×Ñ×7Ò7Ü,Ô.ô 14°E³
¸a²ˆD�I‰IÑ, eÔ,Ô,ÈÈaÉÀzÐQRÀ^ð 	ð 	×ÑÐ,¨S¨E°¸Y¸KÀrÐJÕKð /ð 	8rU   c                ój   — t        «       }|dk(  r$d}| j                  d|› d|› d|› d|› d|› d�«       y y )	Nrq  zNaN or Inf foundztl.device_assert((z == ú) & (z != float('inf')) & (z != float('-inf')), 'z'))r'   rÒ  )rç   rÖ  r×  rR   s       rS   Ú	check_nanrê  
  sS   € Ü!Ó#€GØ�(ÒØ ˆØ×ÑØ    T¨#¨¨e°C°5Ð8MÈcÈUÐRgÐhkÐglÐlnÐoõ	
ð rU   c                  ó`   — e Zd Zd
d„Zdd„Zdd„Zdd„Zdd„Zdd„Ze	dd„«       Z
e	dd„«       Zy	)ÚDataTypePropagationc                óÂ   — || _         d|j                  j                  i| _        |j                  j                  «       D ]  \  }}|j                  | j                  |<   Œ  y ©NÚroot)ÚbodyÚ
root_blockrª   ÚgraphsÚ	subblocksÚitems)rg   rð  ÚkÚvs       rS   rá   zDataTypePropagation.__init__  sT   € ØˆŒ	à�D—O‘O×)Ñ)ð<
ˆŒð —N‘N×(Ñ(Ó*ò 	%‰DˆAˆqØŸW™WˆD�K‰K˜ŠNñ	%rU   c                ó¬  — |j                   }|D �cg c]9  }t        |t        j                  j                  «      sŒ(|j
                  dk7  sŒ8|‘Œ; }}t        |«      dk(  ry t        d„ |D «       «      }|sy t        j                  t        j                  |D �cg c])  }|j                  t        j                     j                  ‘Œ+ c}«      S c c}w c c}w )NÚplaceholderr   c              3  óª   K  — | ]K  }t         j                  |j                  v xr) |j                  t         j                     j                  d u–— ŒM y ­wrk   )ÚOptimizationContextÚkeyÚmetar§   )rÞ  Úns     rS   rà  zBDataTypePropagation.deduce_node_dtype_by_inputs.<locals>.<genexpr>$  sS   è ø€ ò )
ð ô  ×#Ñ# q§v¡vÐ-ò BØ—‘Ô*×.Ñ.Ñ/×5Ñ5¸TÐAóBñ)
ùs   ‚AA)Úall_input_nodesr7  rÖ   ÚfxÚNodeÚoprä  ÚallÚ	functoolsÚreduceÚpromote_typesrü  rú  rû  r§   )rg   ÚnodeÚinputsrý  Úinput_nodesÚall_input_nodes_propagateds         rS   Údeduce_node_dtype_by_inputsz/DataTypePropagation.deduce_node_dtype_by_inputs  sÂ   € Ø×%Ñ%ˆàö
Ø¤¨A¬u¯x©x¯}©}Õ!=À!Ç$Á$È-ÓBWŠAð
ˆð 
ô ˆ{Ó˜qÒ Øä%(ñ )
ð !ô)
ó &
Ð"ñ
 *Øä×ÑÜ×ÑØ<GÖH°qˆQ�V‰VÔ'×+Ñ+Ñ,×2Ó2ÒHó
ð 	
ùò
ùò  Is   ‘)C»CÁCÂ.C
c                ób   — | j                   |j                     }| j                  |«      }|sJ ‚|S rk   )rò  ÚtargetÚpropagate_graph)rg   r  Ú	sub_graphr§   s       rS   Údeduce_node_dtype_by_subgraphz1DataTypePropagation.deduce_node_dtype_by_subgraph1  s0   € Ø—K‘K §¡Ñ,ˆ	Ø×$Ñ$ YÓ/ˆÙˆˆuØˆrU   c                ó˜  — |j                   dk(  ry |j                  dk(  rt        |j                  «      dk7  ry |j                  t        j
                  u rT|j                  d   }t        |t        j                  j                  «      sJ t        |«      «       ‚| j                  |«      S t        |j                  t        «      sJ t        |j                  «      «       ‚|j                  j                  d«      r| j                  |«      S t        |j                  g|j                  ¢­i |j                   ¤Žx}	 �|S | j#                  |«      S )Nrø  ÚoutputrG   r   Úmasked_subblock)r  r  rä  rp   ÚoperatorÚgetitemr7  rÖ   rÿ  r   rM  Údeduce_node_dtyperx   Ú
startswithr  rÃ  rÁ  r
  )rg   r  Únode_argÚoutput_dtypes       rS   r  z%DataTypePropagation.deduce_node_dtype7  s  € Ø�7‰7�mÒ#Øà�;‰;˜(Ò"¤s¨4¯9©9£~¸Ò':àà�;‰;œ(×*Ñ*Ñ*Ø—y‘y ‘|ˆHÜ˜h¬¯©¯©Ô6ÐF¼¸X»ÓFÐ6Ø×)Ñ)¨(Ó3Ð3ä˜$Ÿ+™+¤sÔ+Ð>¬T°$·+±+Ó->Ó>Ð+à�;‰;×!Ñ!Ð"3Ô4Ø×5Ñ5°dÓ;Ð;ô 8Ø—‘ðà—‘òð —+‘+ñð ˆLð
 ðð  Ðà×/Ñ/°Ó5Ð5rU   c                ón  — |j                   sJ ‚d }|j                   D ]•  }t        j                  |j                  v r|j                  t        j                     }n
t        «       }| j	                  |«      |_        ||j                  t        j                  <   |j                  dk(  sŒŠ|j
                  }Œ— |S )Nr  )Únodesrú  rû  rü  r  r§   r  )rg   rª   Úgraph_dtyper  Úopt_ctxs        rS   r  z#DataTypePropagation.propagate_graphT  s›   € Ø�{Š{Ðˆ{Ø*.ˆð —K‘Kò 		,ˆDÜ"×&Ñ&¨$¯)©)Ñ3ØŸ)™)Ô$7×$;Ñ$;Ñ<‘ä-Ó/�à ×2Ñ2°4Ó8ˆGŒMØ18ˆD�I‰IÔ)×-Ñ-Ñ.Ø�{‰{˜hÓ&Ø%Ÿm™m‘ð		,ð ÐrU   c                ó>   — | j                  | j                  d   «      S rî  )r  rò  rl   s    rS   Ú	propagatezDataTypePropagation.propagatef  s   € Ø×#Ñ# D§K¡K°Ñ$7Ó8Ð8rU   c                ó.   —  | |«      j                  «       S rk   )r  )Úclsrð  s     rS   Úpropagate_loopbodyz&DataTypePropagation.propagate_loopbodyi  s   € á�4‹y×"Ñ"Ó$Ð$rU   c                óð   — ddl m} ddlm} t	        ||«      sJ t        |«      «       ‚t	        |j                  |«      sJ t        |j                  «      «       ‚t        j                  |j                  «      S )Nr   rA   )rE   )	Ú	loop_bodyrB   Ú	schedulerrE   r7  rM  Ú_bodyrì  r!  )r   r  rB   rE   s       rS   Úpropagate_scheduler_nodez,DataTypePropagation.propagate_scheduler_nodem  sX   € å(Ý-ä˜$ Ô.Ð:´°T³
Ó:Ð.Ü˜$Ÿ*™* hÔ/ÐA´°d·j±jÓ1AÓAÐ/Ü"×5Ñ5°d·j±jÓAÐArU   N)rð  rB   ru   rv   )r  útorch.fx.Noderu   r÷   )r  r'  ru   r¦   )rª   ztorch.fx.Graphru   r÷   )ru   r÷   )rð  rB   ru   r÷   )r  rE   ru   r÷   )rz   r{   r|   rá   r
  r  r  r  r  Úclassmethodr!  r&  r€   rU   rS   rì  rì    sJ   „ ó%ó
ó*ó6ó:ó$9ð ò%ó ð%ð òBó ñBrU   rì  c                  óD   ‡ — e Zd Zdddœ	 	 	 	 	 	 	 dˆ fd„Zddˆ fd„Zˆ xZS )r   T)ÚsimplifyÚpc               óà   •— |r]t        |t        j                  «      rCt        t        j
                  d«      r)t        j
                  j                  j                  |«      }t        ‰| �%  |«      S )NÚsizevars)
r7  rÄ   ÚExprrÇ  r6   rª   r-  r*  ÚsuperÚdoprint)rg   rí   r*  r+  Ú	__class__s       €rS   r0  zPythonPrinter.doprintx  sK   ø€ ñ œ
 4¬¯©Ô4¼ÄÇÁÈ*Ô9UÜ—7‘7×#Ñ#×,Ñ,¨TÓ2ˆDÜ‰w‰˜tÓ$Ð$rU   c                ó„   •— t        |t        j                  «      rd| j                  |«      › d�S t        ‰| �  |||«      S ©Nú(r…   )r7  rÄ   ÚModÚ_printr/  Úparenthesize)rg   ÚitemÚlevelÚstrictr1  s       €rS   r7  zPythonPrinter.parenthesize€  s@   ø€ Ü�dœEŸI™IÔ&ð �t—{‘{ 4Ó(Ð)¨Ð+Ð+ä‘7Ñ'¨¨e°VÓ<Ð<rU   )rí   rž   r*  r�   r+  r�   ru   rx   )F)r8  rž   r9  rã   r:  r�   ru   rx   )rz   r{   r|   r0  r7  Ú__classcell__©r1  s   @rS   r   r   w  s7   ø„ à48ÀDñ%Øð%Ø-1ð%Ø=Að%à	õ%÷=ò =rU   r   c                  óx  — e Zd ZdZedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Z	edd„«       Z
edd„«       Zedd	„«       Zedd
„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zy)ÚOpDecompositionsz!
    Decomposes inductor ops
    c                ó   — | S rk   r€   )rf   s    rS   ÚidentityzOpDecompositions.identity�  s	   € ð ˆrU   c                ór   — t        j                  t        j                  dt        j                  «      | «      S )Ng      ð?)r1   Útruedivr¸  rÖ   Úfloat32©Úxs    rS   Ú
reciprocalzOpDecompositions.reciprocal”  s$   € ô �{‰{œ3Ÿ<™<¨¬U¯]©]Ó;¸QÓ?Ð?rU   c                ó.   — t        j                  | | «      S rk   ©r1   ÚmulrD  s    rS   ÚsquarezOpDecompositions.squareš  s   € ä�w‰w�q˜!‹}ÐrU   c                ó˜   — t        j                  t        j                  dt        j                  «      t        j
                  | «      «      S ©NrG   )r1   Úsubr¸  rÖ   rC  ÚerfrD  s    rS   ÚerfczOpDecompositions.erfcž  s*   € ä�w‰w”s—|‘| A¤u§}¡}Ó5´s·w±w¸q³zÓBÐBrU   c                ó    — t        j                  t        j                  t        j                  | «      «      t        j                  | «      «      S rk   )r1   rI  ÚexprJ  rO  rD  s    rS   ÚerfcxzOpDecompositions.erfcx¢  s,   € ä�w‰w”s—w‘wœsŸz™z¨!›}Ó-¬s¯x©x¸«{Ó;Ð;rU   c                ó˜   — t        j                  t        j                  | «      t        j                  dt        j
                  «      «      S rL  )r1   rM  rQ  r¸  rÖ   rC  rD  s    rS   Úexpm1zOpDecompositions.expm1¦  s*   € ä�w‰w”s—w‘w˜q“z¤3§<¡<°´5·=±=Ó#AÓBÐBrU   c           	     óÄ   — t        j                  t        j                  | «      t        j                  dt	        j                  d«      z  t
        j                  «      «      S )NrG   é
   ©r1   rI  Úlogr¸  ÚmathrÖ   rC  rD  s    rS   Úlog10zOpDecompositions.log10ª  s7   € ä�w‰w”s—w‘w˜q“z¤3§<¡<°´D·H±H¸R³LÑ0@Ä%Ç-Á-Ó#PÓQÐQrU   c           	     óÄ   — t        j                  t        j                  | «      t        j                  dt	        j                  d«      z  t
        j                  «      «      S )NrG   r   rW  rD  s    rS   Úlog2zOpDecompositions.log2®  s6   € ä�w‰w”s—w‘w˜q“z¤3§<¡<°´D·H±H¸Q³K±ÄÇÁÓ#OÓPÐPrU   c           
     ó¾   — t        j                  t        j                  | t        j                  t	        j
                  d«      t        j                  «      «      «      S )Nr   )r1   rQ  rI  r¸  rY  rX  rÖ   rC  rD  s    rS   Úexp2zOpDecompositions.exp2²  s3   € ä�w‰w”s—w‘w˜q¤#§,¡,¬t¯x©x¸«{¼E¿M¹MÓ"JÓKÓLÐLrU   c           	     ó˜   — t        j                  t        j                  | t        j                  dt        j
                  «      «      «      S rL  )r1   rX  Úaddr¸  rÖ   Úint32rD  s    rS   Úlog1pzOpDecompositions.log1p¶  s+   € ä�w‰w”s—w‘w˜q¤#§,¡,¨q´%·+±+Ó">Ó?Ó@Ð@rU   c                óê   — t        j                  dt        j                  «      }t        j                  |t        j
                  |t        j                  t        j                  | «      «      «      «      S rL  )r1   r¸  rÖ   ra  rB  r`  rQ  Úneg)rE  Úones     rS   ÚsigmoidzOpDecompositions.sigmoidº  sC   € ä�l‰l˜1œeŸk™kÓ*ˆÜ�{‰{˜3¤§¡¨¬S¯W©W´S·W±W¸Q³ZÓ-@Ó AÓBÐBrU   c                ór   — t        j                  | t        j                  dt        j                  «      «      S ©Nr   )r1   r´   r¸  rÖ   ra  rD  s    rS   ÚreluzOpDecompositions.relu¿  s"   € ä�{‰{˜1œcŸl™l¨1¬e¯k©kÓ:Ó;Ð;rU   c                óV   — t        j                  t        j                  | |«      |«      S rk   )r1   r`  rI  ©rE  ÚyÚzs      rS   ÚfmazOpDecompositions.fmaÃ  s   € ô �w‰w”s—w‘w˜q !“} aÓ(Ð(rU   c                ó.   — t        j                  | |«      S rk   rH  ©rE  rl  s     rS   Úmul_rnzOpDecompositions.mul_rnÈ  s   € ô �w‰w�q˜!‹}ÐrU   c                ó.   — t        j                  | |«      S rk   ©r1   rB  rp  s     rS   Údiv_rnzOpDecompositions.div_rnÍ  s   € ô �{‰{˜1˜aÓ Ð rU   c                óT   — t        j                  t        j                  | «      |«      S rk   )r1   r®  Úfloor©r‰   r§   s     rS   Úfloor_to_intzOpDecompositions.floor_to_intÒ  ó   € ä�|‰|œCŸI™I a›L¨%Ó0Ð0rU   c                óT   — t        j                  t        j                  | «      |«      S rk   )r1   r®  Úceilrw  s     rS   Úceil_to_intzOpDecompositions.ceil_to_intÖ  s   € ä�|‰|œCŸH™H Q›K¨Ó/Ð/rU   c                óT   — t        j                  t        j                  | «      |«      S rk   )r1   r®  Útruncrw  s     rS   Útrunc_to_intzOpDecompositions.trunc_to_intÚ  ry  rU   c           	     ó�  — t        j                  | |«      }t        j                  t        j                  |t        j                  dt
        j                  «      «      t        j                  t        j                  |«      t        j                  |«      «      «      }t        j                  |t        j                  ||«      |«      S rh  )
r1   ÚmodÚand_Úner¸  rÖ   ra  ÚsignbitÚwherer`  )r‰   rŠ   ÚrÚconds       rS   Ú	remainderzOpDecompositions.remainderÞ  sy   € ä�G‰G�A�q‹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Ð0rU   c                óT   — t        j                  t        j                  | «      |«      S rk   )r1   r®  Úroundrw  s     rS   Úround_to_intzOpDecompositions.round_to_intç  ry  rU   N)rf   ÚOpVarTru   rŒ  ©rE  rŒ  ru   rŒ  )rE  rŒ  rl  rŒ  rm  rŒ  ru   rŒ  ©rE  rŒ  rl  rŒ  ru   rŒ  )r‰   rŒ  r§   r¦   ru   rŒ  ©r‰   rŒ  rŠ   rŒ  ru   rŒ  )rz   r{   r|   r}   r’   r@  rF  rJ  rO  rR  rT  rZ  r\  r^  rb  rf  ri  rn  rq  rt  rx  r|  r  rˆ  r‹  r€   rU   rS   r>  r>  Š  s§  „ ñð òó ðð ò@ó ð@ð
 òó ðð òCó ðCð ò<ó ð<ð òCó ðCð òRó ðRð òQó ðQð òMó ðMð òAó ðAð òCó ðCð ò<ó ð<ð ò)ó ð)ð òó ðð ò!ó ð!ð ò1ó ð1ð ò0ó ð0ð ò1ó ð1ð ò1ó ð1ð ò1ó ñ1rU   r>  z[a-z0-9_.]+|\([^)]*\)|)Úflagsc                óÌ   — | d   dk7  st        | «      dk  ryd}t        | dd  «      D ]3  \  }}|dk(  r|dz  }n
|dk(  r|dz  }|dk(  sŒ!|t        | «      dz
  k7  sŒ3 y |dk(  sJ ‚y)Nr   r4  r   FrG   r…   T)rä  Ú	enumerate)ÚstringrŸ   ÚiÚchars       rS   Ú_all_in_parensr–  ï  sˆ   € Øˆa�y�CÒœ3˜v›;¨š?ØØ€EÜ˜V A B˜ZÓ(ò ‰ˆˆ4Ø�3Š;Ø�Q‰J‰EØ�SŠ[Ø�Q‰JˆEØ�A‹:˜!œs 6›{¨Q™Ó.Ùðð �AŠ:Ðˆ:ØrU   c                  ó^  — e Zd Zed"d„«       Zed#d„«       Zed$d„«       Zed%d„«       Zed&d„«       Zed&d„«       Z	ed&d„«       Z
ed&d„«       Zed&d	„«       Zed'd
„«       Zed(d„«       Z	 	 d)	 	 	 	 	 	 	 	 	 d*d„Z	 	 	 	 	 	 	 	 	 	 d+d„Zd,d„Z	 d-	 	 	 	 	 	 	 	 	 d.d„Zd/d„Zd0d„Z	 	 	 	 	 	 	 	 	 	 d1d„Z	 	 	 	 	 	 	 	 d2d„Z	 	 	 	 	 	 	 	 	 	 d3d„Z	 	 d4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d„Zd6d„Zd&d„Zdej8                  ddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d7d„Zd8d„Zd9d„Zed:d„«       Z e!d;d „«       Z"e!d<d!„«       Z#y)=ÚOpOverridesc                ór   — t        | t        «      s t        j                  | «      st	        | «      r| S d| › d�S r3  )r7  ÚCSEVariableÚ_RE_PAREN_NOT_NEEDEDÚ	fullmatchr–  )r“  s    rS   ÚparenzOpOverrides.paren   s9   € ô �vœ{Ô+Ü#×-Ñ-¨fÔ5Ü˜fÔ%ð ˆMØ�6�(˜!ˆ}ÐrU   c                ó   — t        | «      S rk   )Úrepr)rf   r§   s     rS   r¸  zOpOverrides.constant  s   € ä�E‹{ÐrU   c                ó2   — dt         j                  | «      › �S )Nú~©r˜  r�  rD  s    rS   Úbitwise_notzOpOverrides.bitwise_not  s   € ð ”;×$Ñ$ QÓ'Ð(Ð)Ð)rU   c                ó2   — t         j                  | «      › d�S )Nz == 0r¢  )r‰   s    rS   Úlogical_notzOpOverrides.logical_not  s   € ô ×#Ñ# AÓ&Ð' uÐ-Ð-rU   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz & r¢  rp  s     rS   Úbitwise_andzOpOverrides.bitwise_and  ó-   € ô ×#Ñ# AÓ&Ð' s¬;×+<Ñ+<¸QÓ+?Ð*@ÐAÐArU   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz | r¢  rp  s     rS   Ú
bitwise_orzOpOverrides.bitwise_or  r¨  rU   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz ^ r¢  rp  s     rS   Úbitwise_xorzOpOverrides.bitwise_xor$  r¨  rU   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz << r¢  rp  s     rS   Úbitwise_left_shiftzOpOverrides.bitwise_left_shift)  ó-   € ô ×#Ñ# AÓ&Ð' t¬K×,=Ñ,=¸aÓ,@Ð+AÐBÐBrU   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz >> r¢  rp  s     rS   Úbitwise_right_shiftzOpOverrides.bitwise_right_shift.  r¯  rU   c                ó.   — t        j                  | |«      S rk   rs  rˆ   s     rS   Úint_truedivzOpOverrides.int_truediv3  s   € ô �{‰{˜1˜aÓ Ð rU   c                óT   — t        j                  | t        j                  |«      «      S rk   )r1   r¹  rÄ   ÚInteger)rd   rè   s     rS   r¶  zOpOverrides.load_seed;  s   € ä�x‰x˜œeŸm™m¨FÓ3Ó4Ð4rU   Tc                ó*   — t        t        |«      «      S rk   )r,   rx   )rg   rÖ  r¾   ÚcheckÚwrap_negs        rS   Úindirect_indexingzOpOverrides.indirect_indexing?  s   € ô "¤# c£(Ó+Ð+rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz,: check_bounds should be handled by CSEProxy©r‡   rM  rz   ©rg   rí   r¾   ÚlowerÚuppers        rS   Úcheck_boundszOpOverrides.check_boundsH  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#OÐPó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz$: load should be handled by CSEProxyr»  ©rg   rd   rš  s      rS   r¹  zOpOverrides.loadO  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rU   Nc                óD   — t        t        | «      j                  › d�«      ‚)Nz%: store should be handled by CSEProxyr»  ©rg   rd   rš  rf   r[   s        rS   rº  zOpOverrides.storeT  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#HÐIó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚©Nz3: device_assert_async should be handled by CSEProxyr»  ©rg   r‡  rR   s      rS   Údevice_assert_asynczOpOverrides.device_assert_async[  ó%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#VÐWó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz/: store_reduction should be handled by CSEProxyr»  ©rg   rd   rš  rf   s       rS   r»  zOpOverrides.store_reduction`  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#RÐSó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz): reduction should be handled by CSEProxyr»  ©rg   r§   Ú	src_dtypeÚreduction_typerf   s        rS   r·  zOpOverrides.reductione  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz$: scan should be handled by CSEProxyr»  ©rg   ÚdtypesÚ
combine_fnÚvaluess       rS   ÚscanzOpOverrides.scanp  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz$: sort should be handled by CSEProxyr»  ©rg   rÑ  rÓ  ÚstableÚ
descendings        rS   ÚsortzOpOverrides.sort}  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz): bucketize should be handled by CSEProxyr»  ©rg   rÓ  Ú
boundariesÚboundary_indicesÚindexing_dtypeÚrightÚsorterÚsorter_indicess           rS   Ú	bucketizezOpOverrides.bucketizeˆ  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz2: halide_clamp only implemented for Halide backendr»  )rg   rf   r¾   r·  s       rS   Úhalide_clampzOpOverrides.halide_clamp–  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#UÐVó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz): dot only implemented for Triton backendr»  )rg   rE  rl  s      rS   ÚdotzOpOverrides.dot›  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rU   rG   )Úconstraintsr§   Úis_pureÚpackÚinput_dtypesc               óD   — t        t        | «      j                  › d�«      ‚)Nz<: inline_asm_elementwise only implemented for Triton backendr»  )rg   Úasmrç  r§   rè  ré  rê  r  s           rS   Úinline_asm_elementwisez"OpOverrides.inline_asm_elementwise   s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#_Ð`ó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz.: ops.output should not appear at codegen time©ÚAssertionErrorrM  rz   ro   s     rS   r  zOpOverrides.output®  s%   € ÜÜ�D‹z×"Ñ"Ð#Ð#QÐRó
ð 	
rU   c                óD   — t        t        | «      j                  › d�«      ‚)Nz3: ops.placeholder should not appear at codegen timerï  ©rg   rš  s     rS   rø  zOpOverrides.placeholder³  s%   € ÜÜ�D‹z×"Ñ"Ð#Ð#VÐWó
ð 	
rU   c                ó0   ‡ — dˆ fd„}‰ |_         d|_        |S )Nc                óJ   •— t        t        | «      j                  › d‰› �«      ‚)Nz does not implement ops.r»  )rg   rp   rÁ  rd   s      €rS   Úunimplementedz1OpOverrides._unimplemented.<locals>.unimplementedº  s*   ø€ Ü%Ü˜“:×&Ñ&Ð'Ð'?À¸vÐFóð rU   T)rg   r˜  rp   r	   rÁ  r	   ru   rŒ  )rz   Úis_unimplemented)rd   rõ  s   ` rS   Ú_unimplementedzOpOverrides._unimplemented¸  s    ø€ õ	ð
 "&ˆÔØ)-ˆÔ&ØÐrU   c                óp   — t        | |d «      }t        t        |d «      }| xs ||k(  xs t        |dd«      S )Nrö  F)Úgetattrr2   )r   rd   ÚfnÚ
default_fns       rS   Ú_is_unimplementedzOpOverrides._is_unimplementedÃ  s?   € ä�S˜$ Ó%ˆÜœZ¨¨tÓ4ˆ
ØˆvÒS˜˜zÑ)ÒS¬W°RÐ9KÈUÓ-SÐSrU   c                óP  — |dv sJ |«       ‚t         j                  «       D ]„  \  }}t        ||«      }|€/| j                  |«      sŒ&t	        | || j                  |«      «       ŒC|| j                  vsJ d|› d| j                  › �«       ‚||_        t	        | |t        |«      «       Œ† y )N)rq  ro  Úcppvecrp  r�  zmultiple definitions of z on )	Úpointwise_overrides_datarô  rù  rü  Úsetattrr÷  Ú__dict__rz   r’   )r   r  ÚfuncnameÚdataÚimpls        rS   Ú_initialize_pointwise_overridesz+OpOverrides._initialize_pointwise_overridesÉ  s¯   € àÐEÑEÐMÀvÓMÐEä6×<Ñ<Ó>ò 
	;‰NˆH�dÜ˜4 Ó(ˆDØˆ|Ø×(Ñ(¨Õ2Ü˜C ¨3×+=Ñ+=¸hÓ+GÕHà s§|¡|Ñ3ð Ø.¨x¨j¸¸S¿\¹\¸NÐKóÐ3ð !)�”Ü˜˜X¤|°DÓ'9Õ:ñ
	;rU   )r“  rŒ  ru   rŒ  )rf   zbool | float | intr§   r¦   ru   rŒ  r�  )r‰   rŒ  ru   rŒ  rŽ  r�  )rd   rx   rè   rŒ  ru   rŒ  ©TT)
rÖ  rŒ  r¾   úsympy.Expr | intr·  r�   r¸  r�   ru   úsympy.Symbol©
rí   rž   r¾   rž   r½  r�   r¾  r�   ru   rv   )rd   rx   rš  rž   ru   rŒ  rk   )
rd   rx   rš  rž   rf   rŒ  r[   r5   ru   rv   ©r‡  rš  rR   rx   ru   rv   )rd   rx   rš  rž   rf   rŒ  ru   rv   )
r§   r¦   rÍ  r¦   rÎ  r4   rf   úOpVarT | tuple[OpVarT, ...]ru   r  )rÑ  útuple[torch.dtype, ...]rÒ  zFCallable[[tuple[OpVarT, ...], tuple[OpVarT, ...]], tuple[OpVarT, ...]]rÓ  útuple[OpVarT, ...]ru   r  )
rÑ  r  rÓ  r  r×  r�   rØ  r�   ru   r  ©NN)rÓ  rŒ  rÜ  ú.tuple[str, sympy.Expr, sympy.Expr, sympy.Expr]rÝ  rŒ  rÞ  r¦   rß  r�   rà  útuple[str, sympy.Expr] | Nonerá  zOpVarT | Noneru   rŒ  )rf   rŒ  r¾   rž   r·  r�   ru   rŒ  )r  rŒ  rì  rx   rç  ré   r§   r¦   rè  r�   ré  rã   rê  ztuple[torch.dtype, ...] | Noneru   rŒ  )rp   rŒ  ru   rv   )rš  rã   ru   rŒ  )rd   rx   ru   zCallable[..., OpVarT]©rd   rx   ru   r�   )r  rx   ru   rv   )$rz   r{   r|   r’   r�  r¸  r£  r¥  r§  rª  r¬  r®  r±  r³  r¶  r¹  r¿  r¹  rº  rÇ  r»  r·  rÔ  rÙ  râ  rä  ræ  rÖ   rC  rí  r  rø  r÷  r(  rü  r  r€   rU   rS   r˜  r˜  ÿ  s>  „ Øò	ó ð	ð òó ðð ò*ó ð*ð ò.ó ð.ð òBó ðBð òBó ðBð òBó ðBð òCó ðCð òCó ðCð ò!ó ð!ð ò5ó ð5ð Øð,àð,ð ð,ð ð	,ð
 ð,ð 
ó,ð
Øð
Ø&0ð
Ø9=ð
ØFJð
à	ó
ó
ð NRð
Øð
Ø *ð
Ø39ð
ØAJð
à	ó
ó
ó

ð
	
àð	
ð ð	
ð &ð		
ð
 +ð	
ð 
%ó	
ð
à'ð
ð
ð
ð #ð
ð 
ó
ð	
à'ð	
ð #ð	
ð ð		
ð
 ð	
ð 
ó	
ð$ 15Ø(,ð
àð
ð Cð
ð !ð	
ð
 $ð
ð ð
ð .ð
ð &ð
ð 
ó
ó
ó

ð #'Ø"Ÿ]™]ØØØ7;ñ
àð
ð ð
ð  ð	
ð
 ð
ð ð
ð ð
ð 5ð
ð 
ó
ó
ó

ð
 òó ðð òTó ðTð
 ò;ó ñ;rU   r˜  c                  ó|   — e Zd ZU ded<   ded<   dZded<   dZded<   ej                  Zd	ed
<   dZ	ded<   dZ
ded<   y)ÚOverridesDatarx   rd   rä   ro  NzCallable[..., str] | Nonerq  rþ  r   Útype_promotion_kindrp  r�  )rz   r{   r|   r~   rq  rþ  r   ÚDEFAULTr  rp  r�  r€   rU   rS   r  r  Ú  sQ   … à
ƒIØ	Óà(,€FÐ%Ó,à(,€FÐ%Ó,à'×/Ñ/ð Ð8ó ð )-€FÐ%Ó,Ø%)€CÐ	"Ô)rU   r  Úairy_aic                ó   — d| › d�S )Nzairy_ai_forward(r…   r€   rD  s    rS   rv  rv  î  s   € Ð(¨¨¨1Ð-€ rU   Úspecial_airy_ai)r  ro  rd   Ú	bessel_j0c                ó   — d| › d�S )Nzbessel_j0_forward(r…   r€   rD  s    rS   rv  rv  ó  ó   € Ð*¨1¨#¨QÐ/€ rU   c                ó   — d| › d�S )Nzlibdevice.j0(r…   r€   rD  s    rS   rv  rv  ô  ó   € ˜=¨¨¨1Ð-€ rU   Úspecial_bessel_j0)r  ro  rq  rd   Ú	bessel_j1c                ó   — d| › d�S )Nzbessel_j1_forward(r…   r€   rD  s    rS   rv  rv  ù  r  rU   c                ó   — d| › d�S )Nzlibdevice.j1(r…   r€   rD  s    rS   rv  rv  ú  r  rU   Úspecial_bessel_j1Ú	bessel_y0c                ó   — d| › d�S )Nzbessel_y0_forward(r…   r€   rD  s    rS   rv  rv  ÿ  r  rU   c                ó   — d| › d�S )Nzlibdevice.y0(r…   r€   rD  s    rS   rv  rv     r  rU   Úspecial_bessel_y0Ú	bessel_y1c                ó   — d| › d�S )Nzbessel_y1_forward(r…   r€   rD  s    rS   rv  rv    r  rU   c                ó   — d| › d�S )Nzlibdevice.y1(r…   r€   rD  s    rS   rv  rv    r  rU   Úspecial_bessel_y1Údigammac                ó   — d| › d�S )Nzcalc_digamma(r…   r€   rD  s    rS   rv  rv    s   € ˜ a S¨Ð*€ rU   c                ó   — | › d�S )Nz
.digamma()r€   rD  s    rS   rv  rv    s   € ˜A˜3˜jÐ)€ rU   )r  ro  rþ  rd   rR  c                ó   — d| › d�S )Nzcalc_erfcx(r…   r€   rD  s    rS   rv  rv    ó   € ˜ A 3 aÐ(€ rU   c                ó   — d| › d�S )Nzlibdevice.erfcx(r…   r€   rD  s    rS   rv  rv    s   € Ð+¨A¨3¨aÐ0€ rU   Úspecial_erfcxrn  c                ó   — d| › d|› d|› d�S )Nz	std::fma(r„   r…   r€   rk  s      rS   rv  rv    s   € ˜i¨ s¨"¨Q¨C¨r°!°°AÐ6€ rU   c                ó   — d| › d|› d|› d�S )Nzfmadd(r„   r…   r€   rk  s      rS   rv  rv    s   €  ¨ s¨"¨Q¨C¨r°!°°AÐ6€ rU   c                ó   — d| › d|› d|› d�S )Nztl.fma(r„   r…   r€   rk  s      rS   rv  rv    s   €  ¨¨¨2¨a¨S°°1°#°QÐ7€ rU   )r  ro  rþ  rq  rd   rq  c                ó   — d| › d|› d�S )Nr4  ú) * (r…   r€   rp  s     rS   rv  rv  *  s   € ˜1˜Q˜C˜u Q C qÐ)€ rU   c                óZ   — t         j                  j                  r	d| › d|› d�S d| › d|› d�S )Nr4  r6  r…   zlibdevice.mul_rn(r„   )rÖ   ÚversionÚhiprp  s     rS   rv  rv  +  s<   € Ü�=‰=×Òð   ˜s %¨ s¨!Ð,€ à    2 a S¨Ð*ð rU   Úigammac                ó   — d| › d|› d�S ©Nzcalc_igamma(r„   r…   r€   rp  s     rS   rv  rv  3  ó   € ˜<¨ s¨"¨Q¨C¨qÐ1€ rU   Úigammacc                ó   — d| › d|› d�S ©Nzcalc_igammac(r„   r…   r€   rp  s     rS   rv  rv  8  ó   € ˜=¨¨¨2¨a¨S°Ð2€ rU   Úgammaincc                ó   — d| › d|› d�S r<  r€   rp  s     rS   rv  rv  =  r=  rU   Úspecial_gammaincÚ	gammainccc                ó   — d| › d|› d�S r@  r€   rp  s     rS   rv  rv  B  rA  rU   Úspecial_gammainccÚi0c                ó   — d| › d�S )Nzcalc_i0(r…   r€   rD  s    rS   rv  rv  G  ó   € ˜   1�o€ rU   c                ó   — d| › d�S ©Nzlibdevice.cyl_bessel_i0(r…   r€   rD  s    rS   rv  rv  H  ó   € Ð3°A°3°aÐ8€ rU   c                ó   — | › d�S )Nz.i0()r€   rD  s    rS   rv  rv  I  s   € ˜A˜3˜e˜€ rU   )r  ro  rq  rþ  rd   Úi0ec                ó   — d| › d�S )Nz	calc_i0e(r…   r€   rD  s    rS   rv  rv  N  ó   € ˜	 !  AÐ&€ rU   c                ó   — | › d�S )Nz.i0e()r€   rD  s    rS   rv  rv  O  s   € ˜A˜3˜f˜€ rU   Úspecial_i0eÚi1c                ó   — d| › d�S )Nzcalc_i1(r…   r€   rD  s    rS   rv  rv  T  rJ  rU   c                ó   — d| › d�S ©Nzlibdevice.cyl_bessel_i1(r…   r€   rD  s    rS   rv  rv  U  rM  rU   Ú
special_i1Úi1ec                ó   — d| › d�S )Nz	calc_i1e(r…   r€   rD  s    rS   rv  rv  Z  rQ  rU   Úspecial_i1eÚlog_ndtrc                ó   — d| › d�S )Nzcalc_log_ndtr(r…   r€   rD  s    rS   rv  rv  _  s   € ˜ q c¨Ð+€ rU   Úspecial_log_ndtrÚmodified_bessel_i0c                ó   — d| › d�S )Nzmodified_bessel_i0_forward(r…   r€   rD  s    rS   rv  rv  e  ó   € Ð3°A°3°aÐ8€ rU   c                ó   — d| › d�S rL  r€   rD  s    rS   rv  rv  f  rM  rU   Úspecial_modified_bessel_i0Úmodified_bessel_i1c                ó   — d| › d�S )Nzmodified_bessel_i1_forward(r…   r€   rD  s    rS   rv  rv  k  ra  rU   c                ó   — d| › d�S rW  r€   rD  s    rS   rv  rv  l  rM  rU   Úspecial_modified_bessel_i1Úmodified_bessel_k0c                ó   — d| › d�S )Nzmodified_bessel_k0_forward(r…   r€   rD  s    rS   rv  rv  q  ra  rU   Úspecial_modified_bessel_k0Úmodified_bessel_k1c                ó   — d| › d�S )Nzmodified_bessel_k1_forward(r…   r€   rD  s    rS   rv  rv  v  ra  rU   Úspecial_modified_bessel_k1Úndtrc                ó   — d| › d�S )Nz
calc_ndtr(r…   r€   rD  s    rS   rv  rv  |  s   € ˜
 1 # QÐ'€ rU   Úspecial_ndtrÚndtric                ó   — d| › d�S )Nzcalc_ndtri(r…   r€   rD  s    rS   rv  rv  �  r/  rU   Úspecial_ndtriÚ	polygammac                ó*   — | › d|› d| › d|› d|› d| › d�S )Nz == 0 ? calc_digamma(z) : (z == 1 ? trigamma(z) : calc_polygamma(r„   râ  r€   rp  s     rS   rv  rv  †  s8   € ØˆSÐ% a S¨¨a¨SÐ0AÀ!ÀÐDWÐXYÐWZÐZ\Ð]^Ð\_Ð_aÐbð rU   Úscaled_modified_bessel_k0c                ó   — d| › d�S )Nz"scaled_modified_bessel_k0_forward(r…   r€   rD  s    rS   rv  rv  Ž  ó   € Ð:¸1¸#¸QÐ?€ rU   Ú!special_scaled_modified_bessel_k0Úscaled_modified_bessel_k1c                ó   — d| › d�S )Nz"scaled_modified_bessel_k1_forward(r…   r€   rD  s    rS   rv  rv  “  rx  rU   Ú!special_scaled_modified_bessel_k1Úspherical_bessel_j0c                ó   — d| › d�S )Nzspherical_bessel_j0_forward(r…   r€   rD  s    rS   rv  rv  ™  s   € Ð4°Q°C°qÐ9€ rU   Úspecial_spherical_bessel_j0Úzetac                ó   — d| › d|› d�S )Nzzeta(r„   r…   r€   rp  s     rS   rv  rv  ž  s   € ˜5   2 a S¨Ð*€ rU   Úspecial_zetaÚchebyshev_polynomial_tc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_t_forward(r„   r…   r€   rp  s     rS   rv  rv  £  ó   € Ð:¸1¸#¸RÀ¸sÀ!ÐD€ rU   Úspecial_chebyshev_polynomial_tÚchebyshev_polynomial_uc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_u_forward(r„   r…   r€   rp  s     rS   rv  rv  ¨  r…  rU   Úspecial_chebyshev_polynomial_uÚchebyshev_polynomial_vc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_v_forward(r„   r…   r€   rp  s     rS   rv  rv  ­  r…  rU   Úspecial_chebyshev_polynomial_vÚchebyshev_polynomial_wc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_w_forward(r„   r…   r€   rp  s     rS   rv  rv  ²  r…  rU   Úspecial_chebyshev_polynomial_wÚlegendre_polynomial_pc                ó   — d| › d|› d�S )Nzlegendre_polynomial_p_forward(r„   r…   r€   rp  s     rS   rv  rv  ·  ó   € Ð9¸!¸¸B¸q¸cÀÐC€ rU   Úspecial_legendre_polynomial_pÚshifted_chebyshev_polynomial_tc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_t_forward(r„   r…   r€   rp  s     rS   rv  rv  ¼  ó   € ÐBÀ1À#ÀRÈÀsÈ!ÐL€ rU   Ú&special_shifted_chebyshev_polynomial_tÚshifted_chebyshev_polynomial_uc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_u_forward(r„   r…   r€   rp  s     rS   rv  rv  Á  r–  rU   Ú&special_shifted_chebyshev_polynomial_uÚshifted_chebyshev_polynomial_vc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_v_forward(r„   r…   r€   rp  s     rS   rv  rv  Æ  r–  rU   Ú&special_shifted_chebyshev_polynomial_vÚshifted_chebyshev_polynomial_wc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_w_forward(r„   r…   r€   rp  s     rS   rv  rv  Ë  r–  rU   Ú&special_shifted_chebyshev_polynomial_wÚhermite_polynomial_hc                ó   — d| › d|› d�S )Nzhermite_polynomial_h_forward(r„   r…   r€   rp  s     rS   rv  rv  Ð  s   € Ð8¸¸¸2¸a¸SÀÐB€ rU   Úspecial_hermite_polynomial_hÚhermite_polynomial_hec                ó   — d| › d|› d�S )Nzhermite_polynomial_he_forward(r„   r…   r€   rp  s     rS   rv  rv  Õ  r’  rU   Úspecial_hermite_polynomial_heÚlaguerre_polynomial_lc                ó   — d| › d|› d�S )Nzlaguerre_polynomial_l_forward(r„   r…   r€   rp  s     rS   rv  rv  Ú  r’  rU   Úspecial_laguerre_polynomial_lzdict[str, OverridesData]rÿ  c                óô   ‡ — t        ˆ fd„t        j                  j                  t        j                  j                  t        j                  j
                  t        j                  j
                  fD «       «      S )Nc              3  ó&   •K  — | ]  }‰|v –— Œ
 y ­wrk   r€   )rÞ  rE  rd   s     €rS   rà  z$is_buffer_removed.<locals>.<genexpr>á  s   øè ø€ ò àð 	�Œ	ñùó   ƒ)Úanyr6   rª   Úremoved_buffersrÈ  Úinplaced_to_remove©rd   s   `rS   Úis_buffer_removedr±  à  sU   ø€ Üó ô �G‰G×#Ñ#Ü�H‰H×$Ñ$Ü�G‰G×&Ñ&Ü�H‰H×'Ñ'ð	
ôó ð rU   c                  ó4   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zˆ xZS )ÚDeferredLinezHA line that can be 'unwritten' by adding name to V.graph.removed_buffersc                óV   •— t         ‰| �  |«       || _        t        |t        «      rJ ‚y rk   )r/  rá   rd   r7  r%   )rg   rd   Úliner1  s      €rS   rá   zDeferredLine.__init__ï  s+   ø€ Ü‰Ñ˜ÔØˆŒ	Ü˜dÔ$4Ô5Ð5Ð5Ð5rU   c                óF   — t        | j                  «      s| j                  S y rk   )r±  rd   rµ  rl   s    rS   Ú__call__zDeferredLine.__call__ô  s   € Ü  §¡Ô+Ø—9‘9ÐØrU   c                ó.   — t        | j                  |«      S rk   )r³  rd   )rg   rµ  s     rS   Ú	_new_linezDeferredLine._new_lineù  s   € Ü˜DŸI™I tÓ,Ð,rU   )rd   rx   rµ  rx   rï   )rµ  rx   ru   r³  )rz   r{   r|   r}   rá   r·  r¹  r;  r<  s   @rS   r³  r³  ì  s   ø„ ÙRõ6ó
÷
-rU   r³  c                  ó   — e Zd Zddd„Zy)ÚBracesBufferc                óH   ‡ ‡— t         j                  dˆˆ fd„«       } |«       S )Nc               3  óÊ  •K  — t        ‰«      D ](  } ‰j                  d«       ‰xj                  dz  c_        Œ* t        ‰ «      D ](  } ‰xj                  dz  c_        ‰j                  d«       Œ* d –— t        ‰ «      D ](  } ‰j                  d«       ‰xj                  dz  c_        Œ* t        ‰«      D ](  } ‰xj                  dz  c_        ‰j                  d«       Œ* y ­w)Nú{rG   ú})ÚrangerÒ  Ú_indent)Ú_rè   rg   s    €€rS   Úctxz BracesBuffer.indent.<locals>.ctxÿ  sÈ   øè ø€ ä˜6“]ò "�Ø—‘˜sÔ#Ø—’ Ñ!–ð"ô ˜F˜7“^ò $�Ø—’ Ñ!•Ø—‘˜sÕ#ð$ó Ü˜F˜7“^ò "�Ø—‘˜sÔ#Ø—’ Ñ!–ð"ô ˜6“]ò $�Ø—’ Ñ!•Ø—‘˜sÕ#ñ$ùs   ƒC C#)ru   úIterator[None])Ú
contextlibÚcontextmanager)rg   rè   rÃ  s   `` rS   ÚindentzBracesBuffer.indentþ  s$   ù€ Ü	×	"Ñ	"õ	$ó 
#ð	$ñ ‹uˆrU   N)rG   )rè   rã   ru   z'contextlib.AbstractContextManager[None])rz   r{   r|   rÇ  r€   rU   rS   r»  r»  ý  s   „ õrU   r»  c                  ó"   — e Zd ZU ded<   ded<   y)ÚInplacedBufferrx   r¥   rÕ   Úother_namesNrò   r€   rU   rS   rÉ  rÉ    s   … ØƒOØÔrU   rÉ  c                  ó.   — e Zd ZU ded<   dZded<   dd„Zy)	ÚArgNamerx   rd   Fr�   Úis_constexprc                óB   — | j                   › | j                  rd› �S d› �S )Nz : tl.constexprr¥  )rd   rÍ  rl   s    rS   Ú	full_namezArgName.full_name  s*   € Ø—)‘)�°$×2CÒ2CÐ.ÐLÐMÐMÈÐLÐMÐMrU   Nrw   )rz   r{   r|   r~   rÍ  rÏ  r€   rU   rS   rÌ  rÌ    s   … à
ƒIà€L�$ÓôNrU   rÌ  c                  ó   — e Zd Zdd„Zy)Ú
RemovedArgc                 ó   — y)NÚREMOVEDr€   rl   s    rS   Ú__str__zRemovedArg.__str__"  s   € ØrU   Nrw   )rz   r{   r|   rÔ  r€   rU   rS   rÑ  rÑ  !  s   „ ôrU   rÑ  c                  ó  — e Zd Ze	 	 	 	 	 	 	 	 dd„«       Zdd„Zdd„Zedd„«       Zdd„Zdd„Z	dd„Z
ej                  f	 	 	 	 	 	 	 dd„Zdd	„Zdd
„Zdd„Zd d„Zd!d„Zd"d„Zd#d„Z	 d$	 	 	 d%d„Z	 	 d&d„Zd'd„Zd(d„Zd)d„Zy)*Ú
KernelArgsc                ó~   — |j                  |t        «      }t        |t        «      r| › t	        |«      › �x||<   }|S |S rk   )r\  rÓ  r7  rÑ  rä  )r¬   Úodictrd   ÚresultÚ
new_results        rS   Ú_lookupzKernelArgs._lookup*  sD   € ð $)§9¡9¨T´7Ó#;ˆÜ�fœjÔ)Ø*0¨´#°e³*°Ð'>Ð>ˆE�$‰K˜*ØÐØˆrU   c                óJ   — i | _         i | _        i | _        i | _        g | _        y rk   )Úinput_buffersÚoutput_buffersÚinplace_buffersr-  Úworkspace_argsrl   s    rS   rá   zKernelArgs.__init__6  s)   € Ø-/ˆÔØ;=ˆÔØGIˆÔØ/1ˆŒØ24ˆÕrU   c                ó¶   — dj                  dj                  t        t        | j                  | j
                  | j                  | j                  g«      «      «      S )NzKernelArgs({})r„   )Úformatr²   ÚmaprŸ  rÝ  rÞ  rß  r-  rl   s    rS   Ú__repr__zKernelArgs.__repr__=  sS   € Ø×&Ñ&Ø�I‰IÜÜà×*Ñ*Ø×+Ñ+Ø×,Ñ,ØŸ™ð	óó
ó
ð 	
rU   c                ó"   — t        | t        «      S rk   )r7  rÑ  r°  s    rS   Ú_buffer_is_marked_removedz$KernelArgs._buffer_is_marked_removedL  s   € ô ˜$¤
Ó+Ð+rU   c                ó:  — t         j                  j                  r4t         j                  j                  j                  j	                  ||«      }|t         j                  j
                  vsJ |«       ‚|| j                  v rt        t        | j                  |   «      S || j                  v r't        t        | j                  |   «      j                  S |j                  d«      r| j                  d| j                  |«      S | j                  d| j                  |«      S )NÚseedÚin_ptr)r6   rª   r$  Úmutation_real_namer\  r®  rÞ  r
   rx   rß  rÉ  r¥   r  rÛ  rÝ  r  s     rS   ÚinputzKernelArgs.inputQ  sÞ   € Ü�7‰7×ÒÜ—7‘7×$Ñ$×7Ñ7×;Ñ;¸DÀ$ÓGˆDØœ1Ÿ7™7×2Ñ2Ñ2Ð8°DÓ8Ð2Ø�4×&Ñ&Ñ&Üœ˜T×0Ñ0°Ñ6Ó7Ð7Ø�4×'Ñ'Ñ'Üœ¨×(<Ñ(<¸TÑ(BÓC×NÑNÐNØ�?‰?˜6Ô"Ø—<‘< ¨×(:Ñ(:¸DÓAÐAØ�|‰|˜H d×&8Ñ&8¸$Ó?Ð?rU   c                óˆ  — t         j                  j                  r4t         j                  j                  j                  j	                  ||«      }|t         j                  j
                  vsJ |«       ‚|| j                  v r't        t        | j                  |   «      j                  S | j                  d| j                  |«      S )NÚout_ptr)r6   rª   r$  rê  r\  r®  rß  r
   rÉ  r¥   rÛ  rÞ  r  s     rS   r  zKernelArgs.output]  s“   € Ü�7‰7×ÒÜ—7‘7×$Ñ$×7Ñ7×;Ñ;¸DÀ$ÓGˆDØœ1Ÿ7™7×2Ñ2Ñ2Ð8°DÓ8Ð2Ø�4×'Ñ'Ñ'Üœ¨×(<Ñ(<¸TÑ(BÓC×NÑNÐNØ�|‰|˜I t×':Ñ':¸DÓAÐArU   c                óú  — |t         j                  j                  v r)t         j                  j                  j                  |«       || j                  vsJ |«       ‚|| j                  v rL| j                  |   }t        |t        «      rJ ‚|j                  j                  |«       || j                  |<   y | j                  j                  «       D �cg c]  }t        |t        «      s|‘Œ }}| j                  j                  «       D �cg c]  }t        |t        «      r|‘Œ }}t        t        |«      «      t        |«      z   }t        d|› �||g«      }|| j                  |<   || j                  |<   y c c}w c c}w )NÚ
in_out_ptr)r6   rª   Úunaligned_buffersr`  rß  r7  rÑ  rÊ  ÚappendrÓ  rä  r/   rÉ  )rg   Ú
input_nameÚoutput_nameÚbufÚvalÚalive_buffersr®  Úinplace_buffer_idxs           rS   Úmake_inplacezKernelArgs.make_inplacee  sk  € ØœŸ™×2Ñ2Ñ2Ü�G‰G×%Ñ%×)Ñ)¨+Ô6Ø $×"6Ñ"6Ñ6ÐC¸ÓCÐ6Ø˜×-Ñ-Ñ-Ø×&Ñ& zÑ2ˆCÜ! #¤zÔ2Ð2Ð2Ø�O‰O×"Ñ" ;Ô/Ø03ˆD× Ñ  Ò-ð  ×/Ñ/×6Ñ6Ó8öàÜ! #¤zÔ2ò ðˆMð ð  ×/Ñ/×6Ñ6Ó8öàÜ˜c¤:Ô.ò ðˆOð ô
 "%¤V¨MÓ%:Ó!;¼cÀ/Ó>RÑ!RÐÜ ØÐ/Ð0Ð1Ø˜[Ð)óˆCð 03ˆD× Ñ  Ñ,Ø03ˆD× Ñ  Ò-ùò!ùò
s   ÃE3ÄE8c                óx  — t        |t        j                  |«      t        j                  j                  «       t         j                  «       |¬«      }t        | j                  «      D ]ž  \  }}t         j                  ||«      rJ|j                  }t         j                  ||«      | j                  |<   |j                  |j                  |fc S |j                  |j                  k7  r|j                  |j                  k7  rŒ™J |«       ‚ | j                  j                  |«       |j                  |j                  dfS )aZ  
        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�   r6   rª   rÆ  r­   r’  rà  r¯   rŸ   r²   r¥   r£   rñ  )rg   ÚnelemrŽ   r§   Úargr”  Úexisting_argrè   s           rS   r0  zKernelArgs.workspace�  s  € ô8 ØÜ'×1Ñ1°)Ó<Ü—7‘7×6Ñ6Ó8Ü#×/Ñ/Ó1Øô
ˆô  )¨×)<Ñ)<Ó=ò 	‰OˆAˆ|Ü×$Ñ$ \°3Ô7Ø%×+Ñ+�Ü)5×):Ñ):¸<ÈÓ)M�×#Ñ# AÑ&Ø#×.Ñ.°×0GÑ0GÈÐOÒOà×'Ñ'¨3¯>©>Ò9Ø ×+Ñ+¨s¯~©~Ó=ðð óð>ð	ð 	×Ñ×"Ñ" 3Ô'Ø�~‰~˜sŸ~™~¨qÐ0Ð0rU   c           
     óŒ  — t         j                  j                  «       }t        |t        j
                  t        j                  dd|j                  › d|j                  › �|¬«      }| j                  D ]*  }|j                  |j                  k(  sŒ||k(  rŒ#J ||f«       ‚ | j                  j                  |«       |j                  S )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¢   )r6   rª   rÆ  r�   r‚   r‘   rÖ   Úuint32rM  rš  rà  r¥   rñ  )rg   Úmin_sizeÚcurrent_devicerû  rü  s        rS   Ú
semaphoreszKernelArgs.semaphores°  sº   € ô Ÿ™×<Ñ<Ó>ˆÜØÜ'×6Ñ6Ü—,‘,Ø Ø$ ^×%8Ñ%8Ð$9¸¸>×;OÑ;OÐ:PÐQØ!ô
ˆð !×/Ñ/ò 	@ˆLØ×&Ñ&¨#¯.©.Ó8Ø˜lÓ*Ð?¨S°,Ð,?Ó?Ð*ð	@ð 	×Ñ×"Ñ" 3Ô'Ø�~‰~ÐrU   c                óf  ‡— t        |t        «      sJ t        |«      |f«       ‚t        j                  |«      }|| j
                  v r| j
                  |   S ‰| j
                  j                  «       v r0‰› t        ˆfd„| j
                  j                  «       D «       «      › �Š‰| j
                  |<   ‰S )Nc              3  óF   •K  — | ]  }|j                  ‰«      sŒd –— Œ y­w)rG   N)r  )rÞ  rö  rd   s     €rS   rà  z)KernelArgs.seed_offset.<locals>.<genexpr>Ô  s   øè ø€ ÒU 1À!Ç,Á,ÈtÕBTœQÑUùs   ƒ!š!)r7  rã   rM  rÄ   rµ  r-  rÓ  Úsum)rg   rd   rf   s    ` rS   Úseed_offsetzKernelArgs.seed_offsetÌ  sž   ø€ Ü˜%¤Ô%Ð;¬¨U«°UÐ';Ó;Ð%ä—‘˜eÓ$ˆØ�D—M‘MÑ!Ø—=‘= Ñ'Ð'Ø�4—=‘=×'Ñ'Ó)Ñ)à�&œÓU¨¯©×(<Ñ(<Ó(>ÔUÓUÐVÐWð ð  $ˆ�‰�eÑØˆrU   c                óÒ   — t        |t        j                  «      sJ t        |«      |f«       ‚|j                  dk(  rd| j
                  |<   y| j                  d| j
                  |«      S )Nrè  Úks)r7  rÄ   ÚSymbolrM  rd   r-  rÛ  r  s     rS   r¾   zKernelArgs.sizeÙ  sX   € Ü˜$¤§¡Ô-ÐA´°T³
¸DÐ/AÓAÐ-Ø�9‰9˜ÒØ"(ˆD�M‰M˜$ÑØØ�|‰|˜D $§-¡-°Ó6Ð6rU   c                ó¬   — t        | j                  j                  «       | j                  j                  «       | j                  j                  «       «      S rk   )r   rÝ  ÚkeysrÞ  r-  rl   s    rS   Ú
call_nameszKernelArgs.call_namesà  sA   € ÜØ×Ñ×#Ñ#Ó% t×':Ñ':×'?Ñ'?Ó'AÀ4Ç=Á=×CUÑCUÓCWó
ð 	
rU   c                ó  — | j                   j                  |d«      }|�t        |t        «      s|j                  S | j
                  j                  |d«      }|�t        |t        «      s|S | j                  j                  |d«      S )z;
        Returns inner name of a given outer name.
        N)rß  r\  r7  rÑ  r¥   rÞ  rÝ  )rg   rd   Úinplacedró  s       rS   Úarg_namezKernelArgs.arg_nameå  s}   € ð ×'Ñ'×+Ñ+¨D°$Ó7ˆØÐ¬
°8¼ZÔ(HØ×&Ñ&Ð&Ø×)Ñ)×-Ñ-¨d°DÓ9ˆØÐ"¬:°kÄ:Ô+NØÐØ×!Ñ!×%Ñ% d¨DÓ1Ð1rU   c                ó   — |S rk   r€   )rg   rô  r§   s      rS   Úwrap_ptr_argzKernelArgs.wrap_ptr_argñ  s   € Øˆ
rU   c                ó   — t        |«      S rk   rÝ  )rg   r¾   s     rS   Úwrap_size_argzKernelArgs.wrap_size_argô  s   € Ü�4‹yÐrU   Nc                óž  — ddl m} |€ddl m} |}g }g }g }t        | j                  j                  «       «      D ]�  }t        |t        «      rŒ|j                  d   }|j                  }	t        j                  j                  |«      }
||
   }|j                  |› d|	› �«       |j                  | j                  ||
«      «       |j                  |› d�«       ŒŸ | j                  j!                  «       D ]…  \  }}	|| j                  v rŒt        j                  j                  |«      }
||
   }|j                  d|› d|	› �«       |j                  | j                  ||
«      «       |j                  d|› d�«       Œ‡ | j"                  j!                  «       D ]“  \  }}|| j                  v st        |t        «      rŒ%t        j                  j                  |«      }
||
   }|j                  |› d|› �«       |j                  | j                  ||
«      «       |j                  |› d�«       Œ• | j$                  j!                  «       D ]î  \  }}	t        |t&        j(                  «      r@t+        |t,        j.                  «      r&|j                  d|	› �«       |j                  d	«       n+|j                  d|› d
|	› �«       |j                  d|› �«       |j                  | j1                  |«      «       t        j                  j2                  sŒÆt        j                  j2                  j5                  |«       Œð | j6                  rJ d«       ‚|||fS )NrG   )Ú
INDEX_TYPE)rÎ  r±  z* Ú*zconst zconst float zconst floatú zWorkspace not supported on CPU )rÔ  r  rÎ  r/   rß  rÓ  r7  rÑ  rÊ  r¥   r6   rª   rº   rñ  r  rÝ  rô  rÞ  r-  rÄ   r
  r   r   ÚUNBACKED_FLOATr  Úwrapper_codeÚensure_size_computedrà  )rg   Údtype_to_cpp_typer  rÎ  Ú	call_argsÚarg_defsÚ	arg_typesr  ÚouterÚinnerr§   Ú	cpp_dtypeÚmaybe_inners                rS   Úcpp_argdefsz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°eÓ<Ô=Ø×Ñ 	˜{¨!˜_Õ-ð		.ð !×.Ñ.×4Ñ4Ó6ò 	4‰LˆE�5Ø˜×,Ñ,Ñ,ØÜ—G‘G×%Ñ% eÓ,ˆEØ)¨%Ñ0ˆIØ�O‰O˜f Y K¨r°%°Ð9Ô:Ø×Ñ˜T×.Ñ.¨u°eÓ<Ô=Ø×Ñ˜v i [°Ð2Õ3ð	4ð #'×"5Ñ"5×";Ñ";Ó"=ò 	.ÑˆE�;Ø˜×,Ñ,Ñ,´
¸;Ì
Ô0SØÜ—G‘G×%Ñ% eÓ,ˆEØ)¨%Ñ0ˆIØ�O‰O˜y˜k¨¨K¨=Ð9Ô:Ø×Ñ˜T×.Ñ.¨u°eÓ<Ô=Ø×Ñ 	˜{¨!˜_Õ-ð	.ð !ŸM™M×/Ñ/Ó1ò 	A‰LˆE�5Ü˜%¤§¡Ô.´>Øœ×+Ñ+ô4ð —‘ ,¨u¨gÐ 6Ô7Ø× Ñ  Õ/à—‘ &¨¨°A°e°WÐ =Ô>Ø× Ñ  6¨*¨Ð!6Ô7Ø×Ñ˜T×/Ñ/°Ó6Ô7Ü�w‰w×#Ó#Ü—‘×$Ñ$×9Ñ9¸%Õ@ð	Að ×&Ò&ÐIÐ(IÓIÐ&Ø˜ IÐ-Ð-rU   c                ó¶  — g }g }g }g }t        | j                  j                  «       «      D ]î  }t        |t        «      rŒ|j                  t        |j                  «      «       |j                  |j                  d   «       |j                  t        j                  j                  |j                  d   «      «       |j                  t        |j                  |j                  d   t        j                  j                  |j                  d   «      ¬«      «       Œð t        | j                  j                  «       | j                   j                  «       «      D ]·  \  }}|| j                  v st        |t        «      rŒ%|j                  t        |«      «       |j                  |«       |j                  t        j                  j                  |«      «       |j                  t        ||t        j                  j                  |«      ¬«      «       Œ¹ | j"                  j                  «       D ]©  \  }}|j                  t        |«      «       |j                  |«       |j                  t%        |«      «       |j                  t'        ||«      «       t        j                  j(                  sŒ�t        j                  j(                  j+                  |«       Œ« | j,                  D ]m  }|j                  t        |j                  «      «       |j                  |j.                  «       |j                  |«       |j                  |j0                  «       Œo ||||fS )Nr±  )rd   rç   r§   )r/   rß  rÓ  r7  rÑ  rñ  rÌ  r¥   rÊ  r6   rª   rº   ræ   r   rÝ  rô  rÞ  r-  rM  rì   r  r  rà  r£   r§   )	rg   r  r  r  Úprecompile_argsr  r   r!  rû  s	            rS   Úpython_argdefsz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ð
 ˜×,Ñ,Ñ,´
¸5Ä*Ô0MØØ�O‰OœG E›NÔ+Ø×Ñ˜UÔ#Ø×ÑœQŸW™W×.Ñ.¨uÓ5Ô6Ø×"Ñ"ÜØØ ÜŸ'™'×+Ñ+¨EÓ2ôõð	ð" !ŸM™M×/Ñ/Ó1ò 	A‰LˆE�5Ø�O‰OœG E›NÔ+Ø×Ñ˜UÔ#Ø×ÑœT %›[Ô)Ø×"Ñ"¤7¨5°%Ó#8Ô9Ü�w‰w×#Ó#Ü—‘×$Ñ$×9Ñ9¸%Õ@ð	Að ×&Ñ&ò 	(ˆCØ�O‰OœG C§N¡NÓ3Ô4Ø×Ñ˜SŸ^™^Ô,Ø×"Ñ" 3Ô'Ø×Ñ˜SŸY™YÕ'ð		(ð
 ˜ O°YÐ>Ð>rU   c              #  óÜ  K  — t        | j                  j                  «       «      D ]Â  }t        |t        «      rŒ|j
                  D ]   }|t        j                  j                  v s|t        j                  j                  v rŒ<|| j                  v r| j                  |   |j                  f–— || j                  v sŒvt        t        | j                  |   «      |j                  f–— Œ¢ ŒÄ y ­wrk   )r/   rß  rÓ  r7  rÑ  rÊ  r6   rª   r¯  rÈ  rÝ  r¥   rÞ  r
   rx   )rg   r  Úothers      rS   ÚaliaseszKernelArgs.aliases`  sÑ   è ø€ Ü˜t×3Ñ3×:Ñ:Ó<Ó=ò 	UˆHÜ˜(¤JÔ/ØØ!×-Ñ-ò 	U�àœQŸW™W×7Ñ7Ñ7Ø¤§¡× ;Ñ ;Ñ;àØ˜D×.Ñ.Ñ.Ø×,Ñ,¨UÑ3°X×5HÑ5HÐHÒHØ˜D×/Ñ/Ò/Üœs D×$7Ñ$7¸Ñ$>Ó?À×ATÑATÐTÓTñ	Uñ	Uùs   ‚B9C,Â<0C,c                ó¾   — t        | j                  j                  |t        «      t        «      xr. t        | j
                  j                  |t        «      t        «      S rk   )r7  rÞ  r\  rÓ  rÑ  rß  r  s     rS   Ú
is_removedzKernelArgs.is_removedo  sK   € ÜØ×Ñ×#Ñ# D¬'Ó2´Jó
ò Nä˜×-Ñ-×1Ñ1°$¼Ó@Ä*ÓMð	NrU   c                ól  — t        «       }t        | j                  j                  «       «      D ]1  }t	        |t
        «      rŒ|j                  |j                  d   «       Œ3 | j                  j                  «       D ]5  \  }}|| j                  v st	        |t
        «      rŒ%|j                  |«       Œ7 |S )Nr±  )
r   r/   rß  rÓ  r7  rÑ  r`  rÊ  rÞ  rô  )rg   Ú	live_outsr  r   r!  s        rS   Úlive_output_bufferszKernelArgs.live_output_buffersw  s¢   € Ü%/£\ˆ	Ü˜t×3Ñ3×:Ñ:Ó<Ó=ò 	4ˆHÜ˜(¤JÔ/ØØ�M‰M˜(×.Ñ.¨rÑ2Õ3ð	4ð !×/Ñ/×5Ñ5Ó7ò 	!‰LˆE�5Ø˜×,Ñ,Ñ,´
¸5Ä*Ô0MØØ�M‰M˜%Õ ð	!ð ÐrU   )r¬   rx   rØ  z*dict[_T, str | RemovedArg] | dict[_T, str]rd   rJ   ru   rx   rt   rw   )rd   r	   ru   r�   r2  )rò  rx   ró  rx   ru   rv   )rú  rž   rŽ   r�   r§   r¦   ru   ztuple[str, str, int])r  rž   ru   rx   )rd   rx   rf   rã   ru   rx   )rd   r  ru   rx   )ru   zIterator[str])rd   rx   ru   ré   )rô  rx   r§   r¦   ru   rx   )r¾   Ú
SymbolLikeru   rx   rk   )r  zdict[torch.dtype, str] | Noneru   z&tuple[list[str], list[str], list[str]])ru   z?tuple[list[ArgName], list[str], list[KernelArgType], list[Any]])ru   zIterator[tuple[str, str]]r  )ru   zOrderedSet[str])rz   r{   r|   r’   rÛ  rá   rä  ræ  rë  r  rø  rÖ   r×   r0  r  r  r¾   r  r  r  r  r$  r'  r*  r,  r/  r€   rU   rS   rÖ  rÖ  )  s÷   „ Øð	Øð	à9ð	ð ð	ð 
ò		ó ð	ó5ó
ð ò,ó ð,ó
@óBó4ð: HMÇ{Á{ð-1Øð-1Ø,0ð-1Ø9Dð-1à	ó-1ó^ó8ó7ó
ó

2óóð BFð4.Ø!>ð4.à	/ó4.ðl1?à	Hó1?ófUóNô
rU   rÖ  c                  ó`   ‡ — e Zd ZdZ	 	 d	 	 	 	 	 	 	 d	ˆ fd„Zd
d„Zdd„Zdd„Zdd„Zd
d„Z	ˆ xZ
S )rš  aD  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         ‰| �  «        t        |t        «      sJ t	        |«      «       ‚|| _        || _        d| _        || _        || _	        y rL  )
r/  rá   r7  r   rM  rd   ÚboundsÚ	use_countr§   rå  )rg   rd   r3  r§   rå  r1  s        €rS   rá   zCSEVariable.__init__‹  sL   ø€ ô 	‰ÑÔÜ˜&¤+Ô.Ð<´°V³Ó<Ð.ØˆŒ	ØˆŒØˆŒØˆŒ
Øˆ�
rU   c                ó   — | j                   S rk   r°  rl   s    rS   rÔ  zCSEVariable.__str__š  s   € Ø�y‰yÐrU   c                ó,   — t        | j                  «      S rk   )Úhashrd   rl   s    rS   Ú__hash__zCSEVariable.__hash__�  s   € Ü�D—I‘I‹ÐrU   c                óX   — t        |t        «      xr |j                  | j                  k(  S rk   )r7  rš  rd   )rg   r)  s     rS   Ú__eq__zCSEVariable.__eq__   s!   € Ü˜%¤Ó-ÒI°%·*±*ÀÇ	Á	Ñ2IÐIrU   c                 ó   — y rk   r€   )rg   rd   rp   rÁ  s       rS   Úupdate_on_argszCSEVariable.update_on_args£  s   € ØrU   c                óN   — | j                   j                  › d| j                  ›d�S r3  )r1  rz   rd   rl   s    rS   rä  zCSEVariable.__repr__¦  s$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯I©I¨=¸Ð:Ð:rU   r  )rd   rx   r3  úValueRanges[Any]r§   r÷   rå  rF   rw   )ru   rã   )r)  Úobjectru   r�   )rd   rx   rp   r	   rÁ  r	   ru   rv   )rz   r{   r|   r}   rá   rÔ  r8  r:  r<  rä  r;  r<  s   @rS   rš  rš  „  sU   ø„ ñð %)Ø $ðàðð !ðð "ð	ð
 õóóóJó÷;rU   rš  ÚAugmentedKeyT)Údefault)ÚboundrA  .c                  óP  — e Zd ZdZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
dd
„Zdd„Z ej                  «       dddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z ej                  «       ddf	 	 	 	 	 	 	 dd„Z ej                  «       ddf	 	 	 	 	 	 	 	 	 dd„Zy)ÚCSEz Common subexpression eliminationNc                óÖ   — || _         || _        i | _        || _        |xs i | _        |xs i | _        |xs t        j                  «       | _        t        «       | _
        |xs i | _        y rk   )r¬   r\   Ú_cacheÚname_prefixÚstore_cacheÚreduction_cacheÚ	itertoolsrŸ   Úiter_buffer_idsr   Úinvalidated_storesÚvarname_map)rg   r¬   r\   rG  Úiter_buffersrH  rI  rM  s           rS   rá   zCSE.__init__¸  sm   € ð ˆŒØˆŒØFHˆŒØ&ˆÔØALÒARÐPRˆÔàÒ!˜rð 	Ôð 6BÒ5VÄYÇ_Á_ÓEVˆÔÜ3=³<ˆÔØ7BÒ7HÀbˆÕrU   c                ó6  — g | j                   j                  «       ¢D ]2  \  }}||vsŒ| j                   |= | j                  j                  |«       Œ4 |r9| j                  j                  «       D ��ci c]  \  }}||v sŒ||“Œ c}}| _        y i | _        y c c}}w rk   )rH  rô  rL  r`  rF  )rg   Ú	keep_varsrd   Útmprõ  rö  s         rS   Ú
invalidatezCSE.invalidateÏ  s’   € Ø4˜4×+Ñ+×1Ñ1Ó3Ð4ò 	2‰IˆD�#Ø˜)Ò#Ø×$Ñ$ TÐ*Ø×'Ñ'×+Ñ+¨DÕ1ð	2ñ Ø,0¯K©K×,=Ñ,=Ó,?×R¡D A qÀ1È	Â>˜1˜a™4ÓRˆD�KàˆD�Kùó Ss   Á1BÁ>Bc           	     ó¾   —  t        | «      | j                  | j                  | j                  | j                  | j
                  | j                  | j                  ¬«      S )N)r¬   r\   rG  rN  rH  rM  rI  )rM  r¬   r\   rG  rK  rH  rM  rI  rl   s    rS   Úclonez	CSE.cloneÙ  sP   € ØŒt�D‹zØ—;‘;Ø—;‘;Ø×(Ñ(Ø×-Ñ-Ø×(Ñ(Ø×(Ñ(Ø ×0Ñ0ô
ð 	
rU   c                óÂ   — | j                  «       }t        | j                  «      |_        t        | j                  «      |_        t        | j                  «      |_        |S )zNReturn a copy of using ScopedDict so changes to *_cache aren't visible in self)rT  r*   rF  rI  rH  )rg   Únew_cses     rS   Úscoped_copyzCSE.scoped_copyä  sH   € à—*‘*“,ˆÜ# D§K¡KÓ0ˆŒÜ",¨T×-AÑ-AÓ"BˆÔÜ(¨×)9Ñ)9Ó:ˆÔØˆrU   c                ó"   — t        t        |«      S )z@Override this method to augment cache key with backend specifics)r
   r@  ©rg   Ú	cache_keys     rS   Úaugment_keyzCSE.augment_keyì  s   € ä”M 9Ó-Ð-rU   c                ó@   — || j                   | j                  |«      <   y rk   ©rF  r[  )rg   rZ  rõ  s      rS   ÚputzCSE.putð  s   € Ø36ˆ�‰�D×$Ñ$ YÓ/Ò0rU   c                ó<   — | j                  |«      | j                  v S rk   )r[  rF  rY  s     rS   ÚcontainszCSE.containsó  s   € Ø×Ñ 	Ó*¨d¯k©kÐ9Ð9rU   c                óX   — | j                   j                  | j                  |«      d «      S rk   )rF  r\  r[  rY  s     rS   Útry_getzCSE.try_getö  s"   € Ø�{‰{�‰˜t×/Ñ/°	Ó:¸DÓAÐArU   c                ó>   — | j                   | j                  |«         S rk   r]  rY  s     rS   r\  zCSE.getù  s   € Ø�{‰{˜4×+Ñ+¨IÓ6Ñ7Ð7rU   T)r3  re   Ú
assignmentr§   rå  c          	     ó¸  — t        |t        «      r|j                  }|s|sJ ‚t        |t        «      rE|j                  j                  |«      |_        |xj                  dz  c_        t        t        |«      S t        |t        «      r|j                  «       }n1t        |t        «      r|j                  }nt        |t        «      sJ ‚|}| j                  |«      }	|€|sd}|	�sÁ| j                  |||«      }	| j!                  ||	«       |�r—t"        j$                  j&                  r+t"        j$                  j&                  j)                  |d¬«       t        |t        «      rP|r |j+                  | j,                  › |	› d�«       |j/                  |«       |j+                  | j0                  «       |	S t        |t        «      rM|sJ ‚|j+                  |j3                  | j,                  › |	› d|j                  › | j0                  › �«      «       |	S |r | j,                  › |	› d|› | j0                  › �}
n|› | j0                  › �}
|j+                  |
«       |rPt4        j6                  j8                  st4        j6                  j:                  r|�t=        «       dk7  rt?        ||	|«       |	S |	j                  j                  |«      |	_        |	xj                  dz  c_        |	S )NrG   r€   T)Ú	only_oncez =z = ro  ) r7  r3   rf   rš  r3  Útightenr4  r
   rÊ  r(   Úgetvaluer%   rµ  rx   rb  Únewvarr^  r6   rÈ  Úcurrent_nodeÚcodegen_originating_inforÒ  r¬   Úsplicer\   r¹  r   rÐ  rÑ  rÓ  r'   rÚ  )rg   rç   rí   r3  re   rd  r§   rå  rZ  rÖ  rµ  s              rS   ÚgeneratezCSE.generateü  sl  € ô �dœHÔ%Ø—:‘:ˆDá™
Ð"Ð"Ü�dœKÔ(ð Ÿ+™+×-Ñ-¨fÓ5ˆDŒKØ�NŠN˜aÑ�NÜœ¨Ó.Ð.Ü˜œnÔ-ØŸ™›‰IÜ˜Ô.Ô/ØŸ	™	‰Iä˜d¤CÔ(Ð(Ð(ØˆIØ�l‰l˜9Ó%ˆØˆ=¡ð ˆEÚØ—+‘+˜f e¨UÓ3ˆCØ�H‰H�Y Ô$ÚÜ—8‘8×(Ò(Ü—H‘H×)Ñ)×BÑBØ¨$ð Cô ô ˜d¤NÔ3Ù!Ø×(Ñ(¨D¯K©K¨=¸¸¸RÐ)@ÔAØ—M‘M $Ô'Ø×$Ñ$ T§[¡[Ô1ð: ˆ
ô9   Ô&6Ô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¨C°Ô7ð ˆ
ð Ÿ™×+Ñ+¨FÓ3ˆCŒJØ�MŠM˜QÑ�Màˆ
rU   c                ó®   — | j                   › t        | j                  «      › �}t        j                  j                  ||||«      }|| j                  |<   |S rk   )rG  r©   rK  r6   rÈ  Úcreate_cse_varrM  )rg   r3  r§   rå  Úvar_namerÖ  s         rS   ri  z
CSE.newvarI  sT   € ð ×&Ñ&Ð'¬¨T×-AÑ-AÓ(BÐ'CÐDˆÜ�h‰h×%Ñ% h°¸¸uÓEˆØ%(ˆ×Ñ˜Ñ"Øˆ
rU   c                ó´   ‡— t        j                  ‰| j                  vˆfd„«       t        j                  j                  ‰|||«      }|| j                  ‰<   |S )Nc                 ó   •— d‰ › �S )Nzduplicate name: r€   r°  s   €rS   rv  zCSE.namedvar.<locals>.<lambda>\  s   ø€ Ð4DÀTÀFÐ2K€ rU   )rÖ   Ú_check_valuerM  r6   rÈ  ro  )rg   rd   r3  r§   rå  rÖ  s    `    rS   ÚnamedvarzCSE.namedvarT  sU   ø€ ô 	×ÑØ˜×(Ñ(Ð(Ó*Kô	
ô �h‰h×%Ñ% d¨F°E¸5ÓAˆØ!$ˆ×Ñ˜ÑØˆ
rU   )r¥  r¥  rQ  NNNN)r¬   rx   r\   rx   rG  rx   rN  zitertools.count[int] | NonerH  z+MutableMapping[str, CSEVariableType] | NonerI  z9MutableMapping[ReductionCacheKey, CSEVariableType] | NonerM  z!dict[str, CSEVariableType] | None)rP  zOrderedSet[CSEVariable]ru   rv   ©ru   r   )rZ  rx   ru   r@  )rZ  rx   rõ  rÊ  ru   rv   )rZ  rx   ru   r�   )rZ  rx   ru   zCSEVariableType | None)rZ  rx   ru   rÊ  )rç   r(   rí   z@str | CSEVariable | OpsValue | IndentedBuffer | DeferredLineBaser3  r>  re   r�   rd  r�   r§   r÷   rå  rF   ru   rÊ  )r3  r>  r§   r÷   rå  rF   ru   rÊ  )
rd   rx   r3  r>  r§   r÷   rå  rF   ru   rÊ  )rz   r{   r|   r}   rá   rR  rT  rW  r[  r^  r`  rb  r\  r   Úunknownrm  ri  rt  r€   rU   rS   rD  rD  µ  s�  „ Ù*ð ØØ Ø48ØCGàØ9=ðIàðIð ðIð ð	Ið
 2ðIð AðIððIð 7óIó.ó	
óó.ó7ó:óBó8ð $7 ;×#6Ñ#6Ó#8ØØØ$(Ø $ñKàðKð OðKð
 !ðKð ðKð ðKð "ðKð ðKð 
óKð^ $7 ;×#6Ñ#6Ó#8Ø$(Ø $ð		à ð	ð "ð	ð ð		ð
 
ó	ð $7 ;×#6Ñ#6Ó#8Ø$(Ø $ðàðð !ðð "ð	ð
 ðð 
ôrU   rD  c                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Zˆ xZS )ÚCodeGenc                óT   •— t         ‰| �  «        t        j                  «       | _        y rk   )r/  rá   rÅ  Ú	ExitStackÚ
exit_stack©rg   r1  s    €rS   rá   zCodeGen.__init__d  s   ø€ Ü‰ÑÔÜ$×.Ñ.Ó0ˆ�rU   c                ó:   — | j                   j                  «        | S rk   )r{  Ú	__enter__rl   s    rS   r~  zCodeGen.__enter__h  s   € Ø�‰×!Ñ!Ô#ØˆrU   c                ó>   — | j                   j                  |||«       y rk   )r{  Ú__exit__)rg   Úexc_typeÚexc_valÚexc_tbs       rS   r€  zCodeGen.__exit__l  s   € Ø�‰× Ñ  ¨7°FÕ;rU   rt   ru  ©r�  r	   r‚  r	   rƒ  r	   ru   rv   )rz   r{   r|   rá   r~  r€  r;  r<  s   @rS   rx  rx  c  s   ø„ õ1ó÷<rU   rx  c                  óT  ‡ — e Zd ZU dZded<   dZded<   dZded<   	 d#	 	 	 	 	 d$ˆ fd„Zej                  d%d	„«       Z
ej                  	 	 d&	 	 	 	 	 	 	 d'd
„«       Z	 	 	 	 	 	 	 	 d(d„Zd)d„Zd)d„Zd*d„Z	 d+	 	 	 	 	 	 	 	 	 d,d„Zd-d„Z	 	 	 	 	 	 	 	 	 	 d.d„Z	 	 	 	 	 	 	 	 	 	 d/d„Z	 	 	 	 	 	 	 	 d0d„Z	 	 	 	 	 	 	 	 	 	 d1d„Zd2d„Z	 	 d&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d„Zed4d„«       Z	 d+	 	 	 	 	 	 	 	 	 d5d„Z	 	 	 	 	 	 	 	 	 	 d6d„Zd7d„Zd8ˆ fd„Zd9ˆ fd„Zd:d„Zd;d„Z d;d„Z!	 	 	 	 d<d „Z"d=d!„Z#d>d"„Z$ˆ xZ%S )?ÚKernelr¥  rx   Únewvar_prefixr\   Nz$Callable[[], OpsHandler[Any]] | NoneÚ	overridesc                ó4  •— t         ‰| �  «        |rt        xj                  dz  c_        |xs
 t	        «       | _        t        «       | _        t        «       | _        t        «       | _	        d| _
        d| _        d| _        d| _        t        | j                  | j                   «      | _        t%        «       | _        t%        «       | _        d | _        d | _        d | _        d | _        t%        «       | _        t%        «       | _        i | _        d| _        d | _        y )NrG   Fr   )r/  rá   r   Úgenerated_kernel_countrÖ  rp   r(   ÚloadsÚcomputeÚstoresÚatomic_add_foundÚnum_loadÚ	num_storeÚnum_reductionrD  r‡  r\   Úcser   Úmust_keep_buffersÚstore_buffer_namesÚ
_load_maskÚ_load_otherrj  Únode_to_boundsr®  r¯  Úinplace_update_buffersÚmin_elem_per_threadÚkernel_name)rg   rp   Úincrease_kernel_countr1  s      €rS   rá   zKernel.__init__u  sç   ø€ ô 	‰ÑÔÙ ä×*Ò*¨aÑ/Õ*ØÒ(œJ›LˆŒ	Ü#Ó%ˆŒ
Ü%Ó'ˆŒÜ$Ó&ˆŒà %ˆÔØˆŒØˆŒØˆÔä.1°$×2DÑ2DÀdÇkÁkÓ.RˆŒÜ2<³,ˆÔÜ3=³<ˆÔØ&*ˆŒØ/3ˆÔà26ˆÔØLPˆÔä0:³ˆÔÜ3=³<ˆÔð
 79ˆÔ#à#$ˆÔ Ø'+ˆÕrU   c              #  ó¼   K  — | j                   }|| _         |j                  j                  «       j                  «       | _        	 d –— || _         y # || _         w xY w­wrk   )rj  r%  r3  Ú
get_boundsr—  )rg   r  Úpriors      rS   Úset_current_nodezKernel.set_current_nodeš  sO   è ø€ à×!Ñ!ˆØ ˆÔØ"Ÿj™j×/Ñ/Ó1×<Ñ<Ó>ˆÔð	&Ûà %ˆDÕø ˆDÕüs   ‚AAÁA ÁAÁ	AÁAc              #  óœ  K  — |€|}|d u x}r
t        «       }| j                  }| j                  }| j                  }| j                  }|| _        || _        || _        |j                  «       | _        	 d –— || _        || _        || _        || _        |r
|rJ d«       ‚y y # || _        || _        || _        || _        |r
|rJ d«       ‚w w xY w­w)Nz$unexpected store inside swap_buffers)r(   r‹  rŒ  r�  r’  rW  )	rg   ÚlbÚcbÚsbÚdisallow_storesr‹  rŒ  r�  r’  s	            rS   Úswap_bufferszKernel.swap_buffers¤  sä   è ø€ ð ˆ:ØˆBØ  D˜jÐ(ˆ?Ð(ÜÓ!ˆBØ—
‘
ˆØ—,‘,ˆØ—‘ˆØ�h‰hˆØˆŒ
ØˆŒØˆŒØ—?‘?Ó$ˆŒð		FÛàˆDŒJØ"ˆDŒLØ ˆDŒKØˆDŒHáÙÐEÐEÓE�v˜2ð øð ˆDŒJØ"ˆDŒLØ ˆDŒKØˆDŒHáÙÐEÐEÓE�v˜2ð üs   ‚A/CÁ2B Á6)CÂ*C	Ã	Cc                 ó   — y)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€   )rg   r�  Úsrc_coderš  Únode_scheduleÚkernel_pathÚget_kernel_metadatas          rS   Úemit_kernel_overridezKernel.emit_kernel_overrideÂ  s   € ð rU   c                ó   — t         ‚rk   r  rÁ  s      rS   r¹  zKernel.loadÒ  r  rU   c                óˆ   — | j                   }	 | j                  | _         | j                  ||«      || _         S # || _         w xY w)z+A load the depends on an index we have read)r‹  rŒ  r¹  )rg   rd   rš  rž  s       rS   Úindirect_loadzKernel.indirect_loadÕ  s8   € à—
‘
ˆð	àŸ™ˆDŒJØ—9‘9˜T 5Ó)àˆD�Jø˜ˆD�Jús	   Ž"8 ¸	Ac                ó   — t         ‚rk   r  rÊ  s       rS   r»  zKernel.store_reductionß  r  rU   c                ó   — t         ‚rk   r  rÃ  s        rS   rº  zKernel.storeâ  ó
   € ô "Ð!rU   c                óD   — t        t        | «      j                  › d�«      ‚rÅ  r»  rÆ  s      rS   rÇ  zKernel.device_assert_asyncç  rÈ  rU   c                ó   — t         ‚rk   r  rÌ  s        rS   r·  zKernel.reductionì  ó
   € ô "Ð!rU   c                ó   — t         ‚rk   r  )rg   rd   rÎ  rf   Ú
extra_metas        rS   Úpartial_accumulatezKernel.partial_accumulateõ  r´  rU   c                ó   — t         ‚rk   r  rÐ  s       rS   rÔ  zKernel.scanþ  s
   € ô "Ð!rU   c                ó   — t         ‚rk   r  rÖ  s        rS   rÙ  zKernel.sort	  r´  rU   c                ó   — t         ‚rk   r  rl   s    rS   Ú
var_rangeszKernel.var_ranges	  r  rU   c                ó   — t         ‚)z3
        See [Note: Inductor bucketize op]
        r  rÛ  s           rS   râ  zKernel.bucketize	  s
   € ô "Ð!rU   c                ó   — t         ‚rk   r  rl   s    rS   Úassert_functionzKernel.assert_function#	  s   € ä!Ð!rU   c           	     óv  — t        |t        «      rt        |«      }t        |t        «      sJ t        |«      «       ‚|�t        |t        «      sJ ‚|�t        |t        «      sJ ‚|r|rd|› d|› d|› d|› d�	}|› d|› d|› �}n|r
|› d|› �}|}n|sJ ‚|› d|› �}|}|r	d|› d|› d�}| j                  › d|› d|› d�S )	Nr4  z <= ré  z < r…   z) | ~(z, "index out of bounds: z"))r7  rš  rx   rM  r¾  )rg   rÖ  r½  r¾  Úmaskr‡  Ú
cond_prints          rS   Úindirect_assertzKernel.indirect_assert'	  s  € ô �cœ;Ô'Ü�c“(ˆCÜ˜#œsÔ#Ð.¤T¨#£YÓ.Ð#Øˆ}¤
¨5´#Ô 6Ð6Ð6Øˆ}¤
¨5´#Ô 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ÐUrU   c                ó   — t         ‚rk   r  r¼  s        rS   r¿  zKernel.check_boundsE	  r±  rU   c                ó   — t         ‚rk   r  rò  s     rS   Úindex_to_strzKernel.index_to_strJ	  r  rU   c           	     ó(  •— t         ‰| �  «        | j                  sJ ‚| j                  j	                  t        j                  t        | | j                  «       «      «      «       | j                  j	                  t        j                  | «      «       | S rk   )	r/  r~  rˆ  r{  Úenter_contextr6   Úset_ops_handlerÚCSEProxyÚset_kernel_handlerr|  s    €rS   r~  zKernel.__enter__M	  sl   ø€ Ü‰ÑÔØ�~Š~Ðˆ~Ø�‰×%Ñ%Ü×Ñœh t¨T¯^©^Ó-=Ó>Ó?ô	
ð 	�‰×%Ñ%¤a×&:Ñ&:¸4Ó&@ÔAØˆrU   c                óH   •— | j                  «        t        ‰| �	  |||«       y rk   )Úremove_kernel_local_buffersr/  r€  )rg   r�  r‚  rƒ  r1  s       €rS   r€  zKernel.__exit__V	  s    ø€ Ø×(Ñ(Ô*Ü‰Ñ˜ 7¨FÕ3rU   c                óÄ  ‡‡— t         j                  j                  Š‰syt        ˆfd„| j                  D «       «      }t        «       Š| j                  D ]c  }|| j
                  vsŒ|| j                  j                  vsŒ+‰j                  ||«      sŒ>| xj                  dz  c_	        ‰j                  |«       Œe ‰D ]¢  }|| j                  j                  v rw| j                  j                  |   }t        |t        «      rŒEt        ˆfd„|j                  D «       «      }|r| j!                  |«       | j"                  j                  |«       Œ’| j%                  |«       Œ¤ y)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  ót   •K  — | ]/  }|‰j                   v r‰j                   |   j                  «       –— Œ1 y ­wrk   )Úname_to_bufÚdefining_op_name)rÞ  rô  r$  s     €rS   rà  z5Kernel.remove_kernel_local_buffers.<locals>.<genexpr>e	  s;   øè ø€ ò &
àØ�i×+Ñ+Ñ+ð ×!Ñ! #Ñ&×7Ñ7×9ñ&
ùs   ƒ58rG   c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wrk   r€   )rÞ  rý  Únames_to_removes     €rS   rà  z5Kernel.remove_kernel_local_buffers.<locals>.<genexpr>{	  s   øè ø€ ÒK°a˜Q /Ô1ÑKùr¬  )r6   rª   r$  r   r”  r“  rp   rÝ  Ú$can_buffer_be_removed_through_fusionr�  r`  rß  r7  rÑ  r  rÊ  Úremove_inplace_bufferr¯  Úremove_buffer)rg   Úfused_node_namesrd   rô  rc   rÒ  r$  s        @@rS   rÌ  z"Kernel.remove_kernel_local_buffersZ	  s3  ù€ ô —G‘G×%Ñ%ˆ	ÙØÜ%ó &
à×.Ñ.ô&
ó 
Ðô
 ,6«<ˆØ×+Ñ+ò 		*ˆDà˜D×2Ñ2Ò2Ø §	¡	× 7Ñ 7Ò7Ø×BÑBØÐ*õð —’ !Ñ#•Ø×#Ñ# DÕ)ð		*ð $ò 
	)ˆDØ�t—y‘y×0Ñ0Ñ0Ø—i‘i×/Ñ/°Ñ5�Ü˜c¤:Ô.ØÜÓK¸3¿?¹?ÔKÓK�ÙØ×.Ñ.¨tÔ4Ø×'Ñ'×+Ñ+¨DÕ1à×"Ñ" 4Õ(ñ
	)rU   c                ó    — t         j                  d|«       t        | j                  j                  |<   | j
                  j                  |«       y )Nzremove_buffer(%r))rX  rQ   rÓ  rp   rÞ  r®  r`  r  s     rS   rÕ  zKernel.remove_buffer‚	  s;   € ô 	�	‰	Ð% tÔ,Ü)0ˆ�	‰	× Ñ  Ñ&Ø×Ñ× Ñ  Õ&rU   c                ó    — t         j                  d|«       t        | j                  j                  |<   | j
                  j                  |«       y )Nzremoving_inplace_buffer(%r))rX  rQ   rÓ  rp   rß  r®  r`  r  s     rS   rÔ  zKernel.remove_inplace_bufferŠ	  s9   € Ü�	‰	Ð/°Ô6Ü*1ˆ�	‰	×!Ñ! $Ñ'Ø×Ñ× Ñ  Õ&rU   c           
     óü  — t        |t        t        f«      r|D �cg c]  }| j                  |«      ‘Œ c}S t        j
                  j                  j                  |«      }t        |j                  d„ ¬«      }|D �ci c]f  }t        |t        j                  t        j                  t        j                  t        j                  f«      r|| j                   j#                  |«      “Œh }}t%        ||«      S c c}w c c}w )Nc                ó   — | j                   S rk   r°  )Úss    rS   rv  z(Kernel.rename_indexing.<locals>.<lambda>—	  s
   € À!Ç&Á&€ rU   )rû  )r7  ÚlistÚtupleÚrename_indexingr6   rª   r-  r*  ÚsortedÚfree_symbolsr   r   ÚUNBACKED_INTÚSIZEÚPRECOMPUTED_SIZEr  rp   r¾   r-   )rg   rš  rE  Úsorted_symbolsÚreplacementss        rS   rÞ  zKernel.rename_indexing�	  s×   € ô
 �eœd¤E˜]Ô+Ø5:Ö;°�D×(Ñ(¨Õ+Ò;Ð;Ü—‘× Ñ ×)Ñ)¨%Ó0ˆÜ × 2Ñ 2Ñ8HÔIˆð $ö
àÜØä×%Ñ%Ü—I‘IÜ×)Ñ)Ü×'Ñ'ð	ôð ˆt�y‰y�~‰~˜aÓ Ñ ð
ˆð 
ô ˜% Ó.Ð.ùò! <ùò
s   ›C4Á;A+C9c                ó   — t        |i |¤ŽS rk   )rš  )rg   rp   rÁ  s      rS   ro  zKernel.create_cse_var§	  s   € Ü˜DÐ+ FÑ+Ð+rU   c                óZ   — |€y| j                   j                  |j                  «       «      S )zC
        Returns arg name of a given input or output node.
        N)rp   r  r–   )rg   r  s     rS   r  zKernel.arg_nameª	  s'   € ð ˆ<ØØ�y‰y×!Ñ! $§-¡-£/Ó2Ð2rU   )NT)rp   zKernelArgs | Noner›  r�   ru   rv   )r  rE   ru   rÄ  r  )r¡  r(   r¢  úIndentedBuffer | Noner£  rè  ru   rÄ  )r§  rx   rš  rx   r©  rx   ru   r�   ©rd   rx   rš  rž   ru   rš  ©rd   rx   rš  rž   rf   rš  ru   rv   rk   ©
rd   rx   rš  rž   rf   rš  r[   r5   ru   rv   r
  ©
r§   r¦   rÍ  r¦   rÎ  r4   rf   ú%CSEVariable | tuple[CSEVariable, ...]ru   rí  )
rd   rx   rÎ  r4   rf   rš  r¶  údict[str, Any]ru   rv   ©rÑ  r  rÒ  zUCallable[[tuple[CSEVariable, ...], tuple[CSEVariable, ...]], tuple[CSEVariable, ...]]rÓ  útuple[CSEVariable, ...]ru   rð  ©
rÑ  r  rÓ  rð  r×  r�   rØ  r�   ru   rð  )ru   zdict[sympy.Symbol, sympy.Expr]©rÓ  rš  rÜ  r  rÝ  rš  rÞ  r¦   rß  r�   rà  r  rá  zCSEVariable | Noneru   rš  rw   )
rÖ  zCSEVariable | strr½  ré   r¾  ré   rÀ  zCSEVariable | str | Noneru   rx   r	  )rš  rž   ru   rx   ru  r„  rt   )rd   rx   ru   rv   )rš  z6list[sympy.Expr] | tuple[sympy.Expr, ...] | sympy.Exprru   rž   )rp   r	   rÁ  r	   ru   rš  )r  r@   ru   ré   )&rz   r{   r|   r‡  r~   r\   rˆ  rá   rÅ  rÆ  rŸ  r¥  r«  r¹  r®  r»  rº  rÇ  r·  r·  rÔ  rÙ  r»  râ  r   r¾  rÂ  r¿  rÅ  r~  r€  rÌ  rÕ  rÔ  rÞ  ro  r  r;  r<  s   @rS   r†  r†  p  s  ø… Ø€M�3ÓØ€FˆCÓØ6:€IÐ3Ó:ð MQð#,Ø%ð#,ØEIð#,à	õ#,ðJ ×Ñò&ó ð&ð ×Ñð %)Ø$(ð	FàðFð "ðFð "ð	Fð
 
òFó ðFð:ð ðð ð	ð ðð 
óó "óó"ð SWð"Øð"Ø *ð"Ø3>ð"ØFOð"à	ó"ó

ð
"àð"ð ð"ð &ð	"ð
 5ð"ð 
/ó"ð"àð"ð &ð"ð ð	"ð
 #ð"ð 
ó"ð"à'ð"ð
ð"ð (ð"ð 
!ó"ð"à'ð"ð (ð"ð ð	"ð
 ð"ð 
!ó"ó"ð 15Ø-1ð"àð"ð Cð"ð &ð	"ð
 $ð"ð ð"ð .ð"ð +ð"ð 
ó"ð ò"ó ð"ð *.ðVàðVð ðVð ð	Vð
 'ðVð 
óVð<"Øð"Ø&0ð"Ø9=ð"ØFJð"à	ó"ó
"õõ4ó&)óP'ó'ð
/ØKð/à	ó/ó0,÷3rU   r†  c                  ó8   — e Zd ZU dZded<   dZded<   dZded	<   y)
rú  r  zClassVar[str]rû  Nr÷   r§   r¥  rx   Úops_name)rz   r{   r|   rû  r~   r§   rô  r€   rU   rS   rú  rú  ³	  s!   … à"€CˆÓ"à $€EÐÓ$Ø€HˆcÔrU   rú  c                 ób   — 	 dd l } | j                  | j                  ¬«      S # t        $ r Y y w xY w)Nr   )Ú	undefined)Újinja2ÚEnvironmentÚStrictUndefinedÚImportError)r÷  s    rS   Ú
jinja2_envrû  »	  s?   € ðÛà×!Ñ!Ø×,Ñ,ð "ó 
ð 	
øô ò Ùðús   ‚" ¢	.­.c                  ó²   — e Zd ZdZe	 d	 	 	 	 	 	 	 dd„«       Zedd„«       Ze	 	 	 	 dd„«       Zddd„Ze	dd„«       Z
e	dd„«       Zdd	„Z	 	 	 	 	 	 dd
„Zdd„Zy)ÚKernelTemplatezj
    Base class for defining kernel templates.

    Children classes: TritonTemplate, CUTLASSTemplate
    c                óª   — | j                  d«      }t        |«      dkD  r|dd  D �cg c]  }d|z  |z  |z   ‘Œ c}|dd  dj                  |«      S c c}w )NTrG   r  r¥  )Ú
splitlinesrä  r²   )ÚsourceÚnum_indentsÚindents_spacingÚlinesrµ  s        rS   Úindent_except_firstz"KernelTemplate.indent_except_firstÎ	  sd   € ð ×!Ñ! $Ó'ˆÜˆu‹:˜Š>àINÈqÈrÈöØAE��Ñ&¨Ñ4¸Ó<òˆE�!�"ˆIð �w‰w�u‹~Ðùòs   §Ac                óÈ   — t        «       }|€y t        j                  |j                  d<   ddlm} 	 |j                  | «      S # |$ r} G d„ d|«      } ||«      |‚d }~ww xY w)Nr  r   )ÚTemplateSyntaxErrorc                  ó(   ‡ — e Zd Zdˆ fd„Zdd„Zˆ xZS )úIKernelTemplate._template_from_string.<locals>.DetailedTemplateSyntaxErrorc                óˆ   •— t         ‰| �  |j                  |j                  |j                  |j
                  «       || _        y rk   )r/  rá   ÚmessageÚlinenord   ÚfilenameÚoriginal_error)rg   r  r1  s     €rS   rá   zRKernelTemplate._template_from_string.<locals>.DetailedTemplateSyntaxError.__init__æ	  s>   ø€ Ü‘GÑ$Ø&×.Ñ.Ø&×-Ñ-Ø&×+Ñ+Ø&×/Ñ/ô	ð +9�DÕ'rU   c                óF  — d| j                   › d�}|d| j                  › d�z  }t        | j                  d«      rç| j                  j                  j                  d«      }|dz  }t        d| j                   dz
  «      }t        t        |«      | j                   dz   «      }t        ||«      D ]s  }|| j                   dz
  k(  rN||dz   › d	||   › d�z  }t        | j                  d
«      sŒ=|dd| j                  j                  dz
  z  z   dz   z  }Œc||dz   › d||   › d�z  }Œu |S )NzError in template at line ú
zError message: r   z	Context:
r   r   rG   z: --> Úcolumnz     r  z^
z:     )r  r
  rÇ  r  r   ÚsplitÚmaxÚminrä  rÀ  r  )rg   Ú
error_infor  ÚstartÚendr”  s         rS   rÔ  zQKernelTemplate._template_from_string.<locals>.DetailedTemplateSyntaxError.__str__ï	  sA  € Ø#=¸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¨cÓ!2ò 
K˜AØ  D§K¡K°!¡OÒ3Ø *°°Q±°°v¸eÀA¹h¸ZÀrÐ.JÑ J 
Ü#*¨4×+>Ñ+>ÀÕ#IØ$.Ø(/Ø*-°×1DÑ1D×1KÑ1KÈaÑ1OÑ*Pñ)Qà*/ñ)0ñ%&¡Jð !+°°Q±°°v¸eÀA¹h¸ZÀrÐ.JÑ J¡
ð
Kð &Ð%rU   )r  r  ru   rv   rw   )rz   r{   r|   rá   rÔ  r;  r<  s   @rS   ÚDetailedTemplateSyntaxErrorr  å	  s   ø„ õ9÷&rU   r  )rû  rý  r  Úfiltersr÷  r  Úfrom_string)r   Úenvr  Úer  s        rS   Ú_template_from_stringz$KernelTemplate._template_from_stringÙ	  sj   € ä‹lˆØˆ;ØÜ-;×-OÑ-Oˆ�‰Ð)Ñ*Ý.ð#	8Ø—?‘? 6Ó*Ð*øØ"ò !	8ô&Ð.Aô &ñ> .¨aÓ0°aÐ7ûðC!	8ús   ²A ÁA!ÁAÁA!c                ó  ‡‡— t         j                  j                  Št        | t        t
        f«      r.| D �ci c]!  }|j                  «       |j                  «       “Œ# c}Šn | j                  «       | j                  «       iŠdˆˆfd„}|S c c}w )Nc                ó>   •— ‰j                  | «      }|�|S  ‰| «      S rk   )r\  )rd   rÙ  Ú_get_dtype_realÚlookups     €€rS   rº   z1KernelTemplate._fake_get_dtype.<locals>.get_dtype
  s'   ø€ Ø—Z‘Z Ó%ˆFØÐ!Ø�Ù" 4Ó(Ð(rU   )rd   rx   ru   r¦   )r6   rª   rº   r7  rÜ  rÝ  r–   )Ú	fake_outsrô  rº   r  r   s      @@rS   Ú_fake_get_dtypezKernelTemplate._fake_get_dtype
  sr   ù€ ô Ÿ'™'×+Ñ+ˆÜ�i¤$¬ Ô/ØAJÖK¸#�c—l‘l“n c§m¡m£oÑ5ÒK‰Fà×(Ñ(Ó*¨I×,?Ñ,?Ó,AÐBˆFö	)ð Ðùò Ls   ·&B
Nc                ó    — || _         || _        y rk   )rd   Ú_hash)rg   rd   r7  s      rS   rá   zKernelTemplate.__init__
  s   € ØˆŒ	Øˆ�
rU   c                ó   — | j                   S )a  
        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°  rl   s    rS   ÚuidzKernelTemplate.uid
  s   € ð �y‰yÐrU   c                ó   — | j                   S )a  
        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$  rl   s    rS   Úsrc_hashzKernelTemplate.src_hash'
  s   € ð �z‰zÐrU   c                óX   — g } | j                   |fi |¤Ž}|€t        |«      dk(  r|d   S y)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.
        NrG   r   )Úmaybe_append_choicerä  )rg   rÁ  Útemp_choicesrÙ  s       rS   Úchoice_or_nonezKernelTemplate.choice_or_none2
  s>   € ð #%ˆØ)�×)Ñ)¨,ÑA¸&ÑAˆØˆ>œc ,Ó/°1Ò4Ø ‘?Ð"ØrU   c                ó  — 	 |j                   | j                  di |¤Ž«       y# t        $ rQ}t        j	                  d|t        | «      t        j                  «       t        j                  k  ¬«       |cY d}~S d}~ww xY w)a%  
        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ñ  rm  r‡   rX  ÚinforM  ÚgetEffectiveLevelrO   ÚINFO)rg   ÚchoicesrÁ  r  s       rS   r*  z"KernelTemplate.maybe_append_choice>
  sn   € ð
	Ø�N‰N˜=˜4Ÿ=™=Ñ2¨6Ñ2Ô3ØøÜ"ò 	Ü�H‰HØEØÜ�T“
Ü×0Ñ0Ó2´W·\±\ÑAð	 ô ð �Hûð	ús   ‚!$ ¤	A>­AA9Á3A>Á9A>c                ó   — t         ‚)zM
        Generates a ChoiceCaller instance from the given arguments.
        r  )rg   rÁ  s     rS   rm  zKernelTemplate.generateU
  s
   € ô
 "Ð!rU   )é   )r   rx   r  rã   r  rã   ru   rx   )r   rx   ru   r	   )r!  zlist[Buffer] | Bufferru   zCallable[[str], torch.dtype]rk   )rd   rx   r7  ré   ru   rv   rw   rï   )rÁ  r	   ru   zChoiceCaller | None)r2  ry   rÁ  r	   ru   zNotImplementedError | None)rÁ  r	   ru   r>   )rz   r{   r|   r}   r’   r  r  r"  rá   r   r&  r(  r,  r*  rm  r€   rU   rS   rý  rý  Ç	  sË   „ ñð à>?ðØðØ"%ðØ8;ðà	òó ðð ò*8ó ð*8ðX ðØ(ðà	%òó ðô"ð òó ðð òó ðó
ðØ ðØ,/ðà	#óô."rU   rý  c                  ó6  ‡ — e Zd ZdZd Zdˆ fd„Zdd„Zdd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	dd„Z
dd„Z	 d	 	 	 	 	 	 	 	 	 dd	„Zdd
„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 d d„Z	 	 d!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d"d„Zˆ xZS )#rÉ  z~A ops handler that proxies calls to `kernel` and its
    handler and returns `CSEVariable`s with correct shape and dtype.
    c                ób   •— t         ‰| �  «        ddlm}  |«       | _        || _        || _        y )Nr   ©ÚValueRangeAnalysis)r/  rá   r3  r8  Úvr_analysisrÈ  Úparent_handler)rg   rÈ  r:  r8  r1  s       €rS   rá   zCSEProxy.__init__d
  s+   ø€ Ü‰ÑÔÝ/á-Ó/ˆÔØˆŒØ,ˆÕrU   c           	     ód  ‡‡‡‡
‡‡‡‡—  | j                   ‰g‰¢­i ‰¤ŽŠ t        | j                  ‰«      ‰i ‰¤Ž}t        «       }t	        «       }t        «       Š
t        |‰«      }d Šd Š‰dk(  r‰
dk(  r|j                  Š|j                  Šny‰dk(  rT‰
dk(  rOt        j                  j                  j                  j                  t        j                  d «      j                  Šd Šn ‰
dv rt        |‰«      } |‰i ‰¤ŽŠ |‰i ‰¤ŽŠ‰
dv r‰€J ‚dŠdˆˆ
ˆˆˆˆˆˆfd„}	t        j                   |	|«      S )	NÚmaskedrq  ro  )rq  ro  r�  )rq  ro  r   c                óä  •— t        ‰
t        t        f«      r‰
‰   n‰
}t        ‰t        t        f«      r,t        ‰«      dkD  rt        ‰d   t        t        f«      r‰‰   n‰}‰dz  Št        | t        «      r+‰dk(  r| j
                  €|| _        | j                  €|| _        t        j                  j                  j                  t        j                  j                  | ‰‰
‰¬«      }|j                  ‰	‰‰«       t        j                  j                  st        j                  j                   r'|�%t#        t        j                  j                  ||«       t        j                  j$                  rKt'        «       rA|j                  �|j                  n|}|�%t)        t        j                  j                  ||«       t        j*                  r$t-        t        j                  j                  |«       |S )Nr   rG   ro  ©r3  r§   rå  )r7  rÜ  rÝ  rä  rš  r§   rå  r6   rÈ  r’  rm  rŒ  r<  r   rÐ  rÑ  rÓ  rÚ  rã  rÉ  rç  Úruntime_triton_nan_assertsrê  )rö  Ú	var_dtypeÚ	var_shapeÚcsevarÚshape_to_checkrp   r×  r3  rÁ  rd   r  Ú
output_idxÚoutput_shapes        €€€€€€€€rS   Údo_csez!CSEProxy._default.<locals>.do_cse�
  s•  ø€ ô
 ˜l¬T´5¨MÔ:ð ˜ZÒ(à!ð ô ˜l¬T´5¨MÔ:Ü˜Ó%¨Ò)Ü˜|¨A™´´u°Ô>ð ˜ZÒ(ð "ð ð ˜!‰OˆJô ˜!œ[Ô)Ø˜eÒ#¨¯©¨Ø'�A”GØ—7‘7�?Ø'�A”Gä—X‘X—\‘\×*Ñ*Ü—‘× Ñ ØØØ"Ø"ð +ó ˆFð ×!Ñ! $¨¨fÔ5ô ×#Ñ#×?Ò?Ü×&Ñ&×>Ò>ØÐ'ÜœAŸH™H×,Ñ,¨f°iÔ@ô ×#Ñ#×?Ò?Ü4Ô6à17·±Ð1I §¢Èy�Ø!Ð-Ü¤§¡× 0Ñ 0°&¸.ÔIä×0Ò0Üœ!Ÿ(™(×*Ñ*¨FÔ3àˆMrU   )rö  zstr | CSEVariableru   rš  )Ú_bound_variablerù  r:  r    r#   r'   r§   rå  r6   Úinterpreterrj  rü  r\  rú  rû  ÚpytreeÚtree_map)rg   rd   rp   rÁ  rf   Údtype_handlerÚshape_handlerÚshape_opÚdtype_oprF  r×  r3  r  rD  rE  s    ```      @@@@@rS   Ú_defaultzCSEProxy._defaultl
  s@  ÿ€ Ø%�×%Ñ% dÐ<¨TÒ<°VÑ<ˆà2”˜×+Ñ+¨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àÐ'Ñ'àÐ+Ð+Ð+àˆ
÷3	ô 3	ôj �‰˜v uÓ-Ð-rU   c                óÞ  ‡	— ddl m} ddlm} ddlm} t        t        j                  |«      rt        j                  «       S t        t        j                  |«      rt        j                  «       S t        t        j                  t        «      rt        j                  «       S t        j                  j                  Š	‰	j                  |k(  r–| j                  j                  �€t        | j                  j                  t         «      s$J t#        | j                  j                  «      «       ‚| j                  j                  j%                  ‰	t        j                  «       «      S t&        j(                  rjt+        ||«      r^t-        ˆ	fd„dD «       «      rt        j                  «       S |rJ ‚d	d„}t/        t1        ||«      «      } t3        | j4                  |«      |Ž S t        j                  «       S )
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   r7  )ÚTritonTemplateKernelrG   )ÚCUTLASSTemplateKernelc              3  ó:   •K  — | ]  }|‰j                   v –— Œ y ­wrk   )r  )rÞ  rÛ  Úfx_nodes     €rS   rà  z+CSEProxy._bound_variable.<locals>.<genexpr>ß
  s   øè ø€ ÒV¨1�1˜Ÿ™Ô&ÑVùs   ƒ)Úset_indirectr·  rÔ  c                óˆ   — t        | t        «      r| j                  S t        | t        j                  «      rt        | «      S | S rk   )r7  rš  r3  rÄ   r.  r   rD  s    rS   Úarg_to_boundz.CSEProxy._bound_variable.<locals>.arg_to_boundè
  s2   € Ü˜a¤Ô-ØŸ8™8�OÜ ¤5§:¡:Ô.Ü& q›>Ð)à�HrU   )rE  r	   ru   r	   )r3  r8  Úselect_algorithmrQ  Úcutlass.kernelrR  r7  r6   rÈ  r   rv  rH  r0   rj  r  r—  ÚdictrM  r\  r   Úcompute_all_boundsrÇ  r­  rÜ  rã  rù  r9  )
rg   rd   rp   rÁ  r8  rQ  rR  rW  Ú
arg_boundsrT  s
            @rS   rG  zCSEProxy._bound_variableÄ
  sm  ø€ õ
 	0Ý;Ý9ä”a—h‘hÐ 4Ô5Ü×&Ñ&Ó(Ð(ä”a—h‘hÐ 5Ô6Ü×&Ñ&Ó(Ð(ä”a—m‘m¤[Ô1Ü×&Ñ&Ó(Ð(ä—-‘-×,Ñ,ˆØ�>‰>˜TÒ! d§k¡k×&@Ñ&@Ð&LÜ˜dŸk™k×8Ñ8¼$Ô?ð ÄØ—‘×*Ñ*óBó Ð?ð —;‘;×-Ñ-×1Ñ1°'¼;×;NÑ;NÓ;PÓQÐQÜ×&Ò&¬7Ð3EÀtÔ+Lô ÓVÐ0UÔVÔVÜ"×*Ñ*Ó,Ð,ñ Ð�:óô œc ,°Ó5Ó6ˆJØ2”7˜4×+Ñ+¨TÓ2°JÐ?Ð?Ü×"Ñ"Ó$Ð$rU   c                óp  — t        |t        «      rt        j                  |«      }t        |t        j                  «      sJ t        |«      |f«       ‚|j                  j                  dk  �r³|rt        j                  |t        j                  |t        j                  «      «      }|j                  j                  dk\  r0t        j                  |d«      }t        j                  |||«      }n|}|s|j                  nt!        j"                  «       }|rº|j                  t!        j"                  «       k7  r™t        |t        j$                  «      r|j                  t!        t&         d«      z  }t!        |j                  |z   |j                  |z   «      }|j                  j                  dk\  r"|j                  t!        dt&        «      z  }	||	z  }| j(                  j*                  j-                  | j(                  j.                  |||j0                  |j2                  ¬«      }| j4                  j7                  |||«      }
t9        |«      ro|j                  j                  dk\   }t        |t        j$                  «       xs |j                  j                  |k   }| j(                  j;                  |
|||«       |
S )Nr   r±  r>  )r7  rã   rÄ   rµ  r.  rM  r3  r½  r1   r`  r¯  rÖ   Úlongr¾  Últr…  r   rv  ÚNumberr   rÈ  r’  rm  rŒ  r§   rå  r:  r¹  r&   r¿  )rg   rÖ  r¾   r·  r¸  Ústmr_  Ú
new_boundsÚ
neg_boundsÚposÚ	sympy_varÚassert_lowerÚassert_uppers                rS   r¹  zCSEProxy.indirect_indexingô
  s$  € ô �dœCÔ Ü—=‘= Ó&ˆDÜ˜$¤§
¡
Ô+Ð?¬d°4«j¸$Ð-?Ó?Ð+ð �:‰:×Ñ˜aÓÙÜ—g‘g˜c¤3§>¡>°$¼¿
¹
Ó#CÓD�à—:‘:×#Ñ# qÒ(ÜŸ™  Q›�BÜŸ)™) B¨¨SÓ1‘Cà�ñ
 ,4˜Ÿš¼×9LÑ9LÓ9NˆJáØ—J‘J¤+×"5Ñ"5Ó"7Ò7Ü˜t¤U§\¡\Ô2ð
 !ŸZ™Z¬+´v°g¸rÓ*BÑB�
Ü(Ø×$Ñ$ tÑ+¨Z×-=Ñ-=ÀÑ-Dó�
ð —:‘:×#Ñ# qÒ(ØŸ*™*¤{°1´fÓ'=Ñ=�CØ!+¨cÑ!1�Jà—+‘+—/‘/×*Ñ*Ø—‘×#Ñ#ØØ!Ø—i‘iØ—i‘ið +ó ˆCð ×'Ñ'×9Ñ9¸#¸tÀUÓKˆ	Ü˜5Ô!Ø #§
¡
× 0Ñ 0°AÑ 5Ð6ˆLä)¨$´·±Ó=Ð=ò Ø—
‘
× Ñ  4Ñ'ðBˆLð �K‰K×$Ñ$ Y°°lÀLÔQØÐrU   c                ó>   — | j                   j                  ||||«      S rk   )rÈ  r¿  r¼  s        rS   r¿  zCSEProxy.check_bounds1  s   € ð �{‰{×'Ñ'¨¨d°E¸5ÓAÐArU   c                óî  — || j                   j                  j                  v r)t        j                   j                  j                  |«       t        |t        j                  «      r| j                   j                  ||«      S | j                   j                  j                  }||v r||   S | j                   j                  ||«      }|j                  dk(  r| j                   xj                  dz  c_        |S rL  )rÈ  r’  rL  r6   r“  r`  r   r   ÚTMPr®  rH  r¹  r4  r�  )rg   rd   rš  rH  Úouts        rS   r¹  zCSEProxy.load6  s»   € Ø�4—;‘;—?‘?×5Ñ5Ñ5ô �H‰H×&Ñ&×*Ñ*¨4Ô0Ü˜u¤d§h¡hÔ/Ø—;‘;×,Ñ,¨T°5Ó9Ð9Ø—k‘k—o‘o×1Ñ1ˆØ�;ÑØ˜tÑ$Ð$Ø�k‰k×Ñ˜t UÓ+ˆð �=‰=˜AÒØ�K‰K× Ò  AÑ%Õ Øˆ
rU   c                ól  — || j                   j                  j                  |<   | j                   j                  r{|t        j
                  j                  v r^| j                   j                  j                  |«      }|j                  «       D ]%  }|| j                   j                  j                  |<   Œ' y y y rk   )	rÈ  r’  rH  rj  r6   rª   Úname_to_bufferÚ
get_outputÚget_mutations)rg   rd   rf   rô  Ú
other_names        rS   Ú_update_store_cachezCSEProxy._update_store_cacheG  s�   € Ø,1ˆ�‰�‰×#Ñ# DÑ)Ø�;‰;×#Ò#¨´·±×0FÑ0FÑ(FØ—+‘+×*Ñ*×5Ñ5°dÓ;ˆCØ!×/Ñ/Ó1ò @�
Ø:?�—‘—‘×+Ñ+¨JÒ7ñ@ð )GÐ#rU   c                ó2  — | j                   j                  j                  |«       |dk7  r| j                  ||«       |t        j
                  j                  vr?| j                   j                  ||||¬«       | j                   xj                  dz  c_        y y )NÚ
atomic_add)r[   rG   )	rÈ  r”  r`  rq  r6   rª   r®  rº  r�  rÃ  s        rS   rº  zCSEProxy.storeN  s{   € ð 	�‰×&Ñ&×*Ñ*¨4Ô0à�<ÒØ×$Ñ$ T¨5Ô1Ø”q—w‘w×.Ñ.Ñ.Ø�K‰K×Ñ˜d E¨5°tÐÔ<Ø�K‰K×!Ò! QÑ&Ö!ð /rU   c                ó<   — | j                   j                  ||«       y rk   )rÈ  rÇ  rÆ  s      rS   rÇ  zCSEProxy.device_assert_asyncY  s   € Ø�‰×'Ñ'¨¨cÕ2rU   c                ó6   —  | j                   j                  |Ž  y rk   )rÈ  r·  ro   s     rS   r·  zCSEProxy.partial_accumulate]  s   € Ø&ˆ�‰×&Ñ&¨Ò-rU   c                ó"  — | j                   j                  j                  |«       | j                  ||«       |t        j
                  j                  vr<| j                   xj                  dz  c_        | j                   j                  |||«      S y rL  )	rÈ  r”  r`  rq  r6   rª   r®  r�  r»  rÊ  s       rS   r»  zCSEProxy.store_reduction`  so   € Ø�‰×&Ñ&×*Ñ*¨4Ô0Ø× Ñ   uÔ-à”q—w‘w×.Ñ.Ñ.Ø�K‰K×!Ò! QÑ&Õ!Ø—;‘;×.Ñ.¨t°U¸EÓBÐBð /rU   c                ó|   — | j                   xj                  dz  c_        | j                   j                  ||||«      S rL  )rÈ  r‘  r·  rÌ  s        rS   r·  zCSEProxy.reductionh  s4   € ð 	�‰×!Ò! QÑ&Õ!Ø�{‰{×$Ñ$ U¨I°~ÀuÓMÐMrU   c                ó<   — | j                   j                  |||«      S rk   )rÈ  rÔ  rÐ  s       rS   rÔ  zCSEProxy.scanr  s   € ð �{‰{×Ñ ¨
°FÓ;Ð;rU   c                ó>   — | j                   j                  ||||«      S rk   )rÈ  rÙ  rÖ  s        rS   rÙ  zCSEProxy.sort}  s   € ð �{‰{×Ñ ¨°¸
ÓCÐCrU   c           	     óD   — | j                   j                  |||||||«      S )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È  râ  rÛ  s           rS   râ  zCSEProxy.bucketize†  s1   € ðL �{‰{×$Ñ$ØØØØØØØó
ð 	
rU   )rÈ  zKernel[Any]r:  zOpsHandler[Any])rd   rx   rp   ztuple[Any, ...]rÁ  rî  ru   r	   )rd   rx   rp   r	   rÁ  r	   ru   r>  r  )
rÖ  rš  r¾   r  r·  r�   r¸  r�   ru   r  r	  ré  )rd   rx   rf   rš  ru   rv   rk   rë  r
  )rp   r	   ru   rv   rê  rì  rï  rñ  r  rò  )rz   r{   r|   r}   rd   rá   rO  rG  r¹  r¿  r¹  rq  rº  rÇ  r·  r»  r·  rÔ  rÙ  râ  r;  r<  s   @rS   rÉ  rÉ  ]
  sç  ø„ ñð €Dõ-óV.óp.%ðh Øð;àð;ð ð;ð ð	;ð
 ð;ð 
ó;ðzBØðBØ&0ðBØ9=ðBØFJðBà	óBó
ó"@ð SWð	'Øð	'Ø *ð	'Ø3>ð	'ØFOð	'à	ó	'ó3ó.óCðNàðNð ðNð &ð	Nð
 5ðNð 
/óNð	<à'ð	<ð
ð	<ð (ð	<ð 
!ó	<ðDà'ðDð (ðDð ð	Dð
 ðDð 
!óDð  15Ø-1ðN
àðN
ð CðN
ð &ð	N
ð
 $ðN
ð ðN
ð .ðN
ð +ðN
ð 
÷N
rU   rÉ  )rR   rx   ru   rv   )NNNN)r¢   rx   r8  rú   r9  rü   r:  rþ   r;  rþ   r<  úCustomGraphModulePass | Noner=  úConfigModule | Noneru   rv   )r¢   útorch.device | str | Noneru   zOrderedSet[BackendFeature])r¢   r}  rS  r@  ru   r�   )r¢   rx   ru   zSchedulingConstructor | None)FF)r¢   rx   rW  r�   rX  r�   ru   rþ   )r¢   rx   ru   r{  )r¢   rx   ru   r|  rt   )rš  úSequence[sympy.Expr]r›  r~  rœ  r~  ru   rÓ   )r¢   rx   rŸ  r  ru   rv   )r¢   rx   ru   r  )rÀ  rx   rp   r	   rÁ  r	   ru   r÷   rÔ   )rç   r(   rÖ  rÊ  r§   r¦   ru   rv   )rç   r(   rÖ  rÊ  rå  rF   ru   rv   )rç   r(   rÖ  rÊ  ru   rv   )r“  rx   ru   r�   r€   r  )ru   r	   )ÒÚ
__future__r   r`   rÅ  ÚdataclassesÚenumr  rJ  rO   rY  r  rb   Úrer^   Úabcr   r   r   r   r   Útypingr	   r
   r   r   r   r   Útyping_extensionsr   r   rÄ   rÖ   Útorch.fxÚtorch._prims_commonr   Útorch.utilsr   rI  Útorch.utils._config_moduler   Útorch.utils._ordered_setr   Útorch.utils._sympy.functionsr   Ú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.   r/   Úvirtualizedr0   r1   r2   r3   r4   r5   r6   Úcollections.abcr7   r8   r9   r:   r;   Úcustom_graph_passr<   rÀ   r=   r>   r?   r@   r#  rB   r$  rC   rD   rE   rF   r�  rI   rJ   rú   rM  rü   rx   r
  r0  rŒ  Ú_loggingÚgetArtifactLoggerrz   rM   Ú	getLoggerrX  rT   Ú	dataclassrW   r‚   r”   r�   rÝ   ræ   rì   rñ   rô   rù   ÚKernelArgTyper  r~   r  r3  r¤  r4  r5  r>  r@  rO  rT  rN  rZ  r]  r_  ÚcacherL  r�  r   r©  r«  Úbfloat16r¾  Úfloat16r�   rC  Úfloat64Úint8Úint16ra  r¿  r×   Úuint16r   Úuint64r¬  rÃ  rÉ  rÚ  rç  rê  rì  r>  ÚcompileÚ
IGNORECASEr›  r–  r˜  r  rZ  ÚINT_TO_FLOATr  rÿ  r±  r³  r»  rÉ  rÌ  rÑ  rÓ  rÖ  rš  r@  rÊ  rÝ  r§   ÚReductionCacheKeyrD  rx  r†  rú  rû  rý  rÉ  r¹   s   0rS   ú<module>r©     sY  ðÞ "ã Û Û Û Û Û Û Û Û Û 	Û 	Û ß #ß Ý ß J× Jß +ã ã Û Ý ?Ý )Ý 3Ý /Ý ,Ý -Ý Gß OÑ Oß Dç Ý :ß ;Ý :÷÷ ÷ ó ÷÷ ñ ñ ßLÓLå$å9ß>Ó>Ý$ßDÑDÝ2Ý-á	�‹€BØ$ i°$Ñ&6Ð%7¸Ð%GÑHÐØÐ2Ñ3ÐØ�u—|‘|Ñ#€Jð €Fà�~‰~×/Ñ/°¸*ÓE€Ø€g×Ñ˜Ó!€ô=ð
 ×Ñ÷ð ó ðô>/˜Ÿ	™	ô /ô(�Cô ñ �TÔôd�=ó dó ðd÷N*ñ *ð ×Ñ÷ ð  ó ð ð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷9ð 9ó ð9ð ˜yÑ(¨7Ñ2Ð5EÑEÈÑT€à,.€Ð)Ó .÷;"ñ ;"ð| :<Ð Ð6Ó ;Ø#(Ð  ØACÐ Ð>Ó CØACÐ Ð >Ó Cð8 =AØ;?Ø7;Ø04ñBØðBà,ðBð /ðBð !:ð	Bð
  9ðBð 5ðBð .ðBð 
ôBô4
&�Tô 
&ð3Ø%ð3àô3ð$3Ø%ð3Ø0>ð3à	ô3ôUð
 @EñØðØ"ðØ8<ðàôô-ô6ð ‡‚ówó ðwðt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ð
öàð 	ˆu‰òð>Ð Ð:ó ð,(Øð(àð(ð ð(ð ô	(ôVð:Øð:Ø!0ð:Ø9Dð:à	ô:ð8LØðLØ!0ðLØ9GðLà	ôLô
÷aBñ aBôH=�Nô =÷&_1ñ _1ðD "�r—z’zÐ";À2Ç=Â=ÔQÐ ôô X;Ð#Ð%5°zÀ#±ô X;ðv ×Ñ÷*ð *ó ð*ñ  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€áØØ�ŠØØ�e˜K©Ð,Ñ-Ñ-ð	/ñÐökˆ'�/ =Ð0Ñ
1ô k÷\
<ó 
<ö@3ˆW�g˜oÑ.ô @3ðF
 ×Ñ÷ò ó ðð ‡‚ôó ð÷S"ó S"ölw
ˆ~õ w
ùòG>s   Ï(
f0