Ë
    g^(hÅh ã                  ó°  — 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mZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dl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*m+Z+m,Z, d dl-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZEmFZFmGZGmHZHmIZImJZJ erWd dlKmLZLmMZMmNZN ddlOmPZPmQZQmRZRmSZS ddlTmUZU ddlVmWZWmXZXmYZY ddlZm[Z[  ed«      Z\eeeX   geWf   Z]e^e[   Z_ee`ejÂ                  f   Zbe`ZcejÈ                  jË                  efd«      Zg ejÐ                  ef«      Zidöd„Zj G d„ dej                  «      Zk e=d¬ «       G d!„ d"«      «       ZlejÚ                   G d#„ d$«      «       ZnejÚ                   G d%„ d&«      «       ZoejÚ                   G d'„ d(«      «       ZpejÚ                   G d)„ d*«      «       ZqejÚ                   G d+„ d,«      «       Zreeleneoeqepf   Zsi Ztd-eud.<    G d/„ d0«      Zvi Zwd1eud2<   	 d÷	 	 	 	 	 	 	 	 	 død3„Zx G d4„ d5e«      Zy	 	 	 	 dùd6„Zz	 	 	 	 	 	 dúd7„Z{dûd8„Z|	 dü	 	 	 	 	 dýd9„Z} ejü                  d«      dþd:„«       Z	 	 	 	 	 	 	 	 dÿd;„Z€	 	 	 	 	 	 �d d<„Z��dd=„Z‚e�j                  e�j                  e�j
                  e�j                  ie�j                  e�j                  e�j                  e�j                  e�j                  e�j                  e�j                  e�j                  e�j                  e�j                  e�j                   fD � ci c]  } | | “Œ c} ¥Z‘d>eud?<   	 	 	 	 	 	 	 	 �dd@„Z’ G dA„ dB«      Z“ G dC„ dDe(«      Z' G dE„ dF«      Z” e
�j*                  dGe
�j,                  ¬H«      Z—�ddI„Z˜ G dJ„ dKe6e”eFe   «      Z™ejÚ                   G dL„ dM«      «       Zš e›�di dN eše�j8                  dO„ dP¬Q«      “dR eše�j8                  dS„ dT„ dU¬V«      “dW eše�j8                  dX„ dY„ dZ¬V«      “d[ eše�j8                  d\„ d]„ d^¬V«      “d_ eše�j8                  d`„ da„ db¬V«      “dc eše�j8                  dd„ de„ dc¬f«      “dg eše�j8                  dh„ di„ dj¬V«      “dk eše�j8                  dl„ dm„ dn„ dk¬o«      “dp eše�j8                  dq„ dp¬Q«      “dr eše�j8                  ds„ dr¬Q«      “dt eše�j8                  du„ dv¬Q«      “dw eše�j8                  dx„ dy¬Q«      “dz eše�j8                  d{„ d|„ d}„ dz¬~«      “d eše�j8                  d€„ d�„ d‚¬f«      “dƒ eše�j8                  d„„ d…„ d†¬V«      “d‡ eše�j8                  dˆ„ d‰¬Q«      “dŠ eše�j8                  d‹„ dŒ¬Q«      “d� eše�j8                  dŽ„ d�„ d�¬V«      “d‘ eše�j8                  d’„ d“„ d”¬V«      “d• eše�j8                  d–„ d—¬Q«      “d˜ eše�j8                  d™„ dš¬Q«      “d› eše�j8                  dœ„ d�¬Q«      “dž eše�j8                  dŸ„ d ¬Q«      “d¡ eše�j8                  d¢„ d¡¬Q«      “d£ eše�j8                  d¤„ d¥¬Q«      “d¦ eše�j8                  d§„ d¨¬Q«      “d© eše�j8                  dª„ d«¬Q«      “d¬ eše�j8                  d­„ d®¬Q«      “d¯ eše�j8                  d°„ d±¬Q«      “d² eše�j8                  d³„ d´¬Q«      “dµ eše�j8                  d¶„ d·¬Q«      “d¸ eše�j8                  d¹„ dº¬Q«      “d» eše�j8                  d¼„ d½¬Q«      “d¾ eše�j8                  d¿„ dÀ¬Q«      “dÁ eše�j8                  dÂ„ dÃ¬Q«      “dÄ eše�j8                  dÅ„ dÆ¬Q«      “dÇ eše�j8                  dÈ„ dÉ¬Q«      “dÊ eše�j8                  dË„ dÌ¬Q«      “dÍ eše�j8                  dÎ„ dÏ¬Q«      “dÐ eše�j8                  dÑ„ dÒ¬Q«      “ŽZ�dÓeudÔ<   �ddÕ„Zž G dÖ„ d×e:«      ZŸ G dØ„ dÙe<«      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äe`¬å«      Z§ edæe¦e¦¬ç«      Z¨ere©e�jT                  eHee¦e©e¦dèf   f   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dñ„«       Z° G dò„ dó«      Z± G dô„ dõe7«      Z²yc c} w (  é    )ÚannotationsN)ÚautoÚEnum)Úchain)	ÚAnyÚCallableÚcastÚClassVarÚGenericÚ
NamedTupleÚOptionalÚTYPE_CHECKINGÚUnion)ÚTypeVar)ÚELEMENTWISE_TYPE_PROMOTION_KIND)Ú_pytree)Ú
OrderedSet)Úint_oo)ÚPythonPrinter)Úfree_symbol_is_typeÚsymbol_is_typeÚSymT)Úbound_sympyÚValueRangesé   )ÚconfigÚmetrics)ÚDtypePropagationOpsHandler)ÚBasicMathOpsMixinÚDefaultHandler)Úboolean_opsÚDeferredLineBaseÚgenerate_assertÚIndentedBufferÚir_dataclassÚ
ScopedDictÚ	sympy_dotÚsympy_index_symbolÚ
sympy_subsÚtriton_typeÚunique)ÚopsÚ
OpsHandlerÚOpsValueÚReductionTypeÚ	StoreModeÚV)ÚIteratorÚMutableMappingÚSequence)ÚBufferÚChoiceCallerÚFixedLayoutÚIRNode©ÚLoopBody)ÚBaseSchedulingÚ	SchedulerÚSchedulerNodeé   ©Ú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    ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/codegen/common.pyÚdata_type_loggerrK   P   s*   € Ü× Ñ ¤§¡Ô/Ü×ÑÐ6¸Õ<ð 0ó    c                  ó<   — e Zd ZdZdZdZedd„«       Zedd„«       Zy)	ÚWorkspaceZeroModer   r>   r   c                ó„   — | |k(  s|t         j                  k(  r| S | t         j                  k(  r|S t        d| ›d|›d�«      ‚)NzWorkspaceZeroMode.combine(ú, ú))rN   ÚUNINITIALIZEDÚNotImplementedError©ÚaÚbs     rJ   ÚcombinezWorkspaceZeroMode.combineZ   sK   € à�Š6�QÔ+×9Ñ9Ò9ØˆHØÔ!×/Ñ/Ò/ØˆHÜ!Ð$>¸q¸eÀ2ÀaÀUÈ!Ð"LÓMÐMrL   c                óF   — | rt         j                  S t         j                  S ©N)rN   ÚZERO_ON_CALLrR   )Ú	zero_fills    rJ   Ú	from_boolzWorkspaceZeroMode.from_boolb   s   € áÜ$×1Ñ1Ð1Ü ×.Ñ.Ð.rL   N)rU   rN   rV   rN   ÚreturnrN   )r[   Úboolr]   rN   )	Ú__name__Ú
__module__Ú__qualname__rR   rZ   ÚZERO_PER_GRAPHÚstaticmethodrW   r\   © rL   rJ   rN   rN   U   s9   „ Ø€MØ€LØ€NàòNó ðNð ò/ó ñ/rL   rN   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ed!d„«       ZeZeZe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ÚcountrN   Ú	zero_modeútorch.deviceÚdeviceÚstrÚ
outer_nameÚws_ptrÚ
inner_nameútorch.dtypeÚdtypec                óP   — | › t        t        j                  j                  «      › �S rY   )Únextr1   ÚgraphÚworkspace_id)Úprefixs    rJ   Úunique_namezWorkspaceArg.unique_name}   s!   € à�œ$œqŸw™w×3Ñ3Ó4Ð5Ð6Ð6rL   c                ó    — | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rY   )rp   rr   rl   rT   s     rJ   Úcan_joinzWorkspaceArg.can_join�   s@   € ð �L‰L˜AŸL™LÑ(ÒX¨Q¯W©W¸¿¹Ñ-?ÒXÀAÇHÁHÐPQ×PXÑPXÑDXð	
rL   c                óò   — t        | j                  |j                  z   t        j                  | j                  |j                  «      | j
                  | j                  | j                  | j                  ¬«      S ©N)ri   rj   rr   rl   rp   rn   )	rg   ri   rN   rW   rj   rr   rl   rp   rn   rT   s     rJ   ÚjoinzWorkspaceArg.join‡   sS   € äØ—'‘'˜AŸG™GÑ#Ü'×/Ñ/°·±¸Q¿[¹[ÓIØ—'‘'Ø—8‘8Ø—|‘|Ø—|‘|ô
ð 	
rL   c                ó®  — | j                   |j                   k(  r2| j                  |j                  k(  r| j                  |j                  k(  sJ ‚t        t	        j
                  | j                  |j                  «      t        j                  | j                  |j                  «      | j                   | j                  | j                  | j                  ¬«      S r|   )rr   rl   rp   rg   ÚsympyÚMaxri   rN   rW   rj   rn   rT   s     rJ   Ú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Ø—|‘|Ø—|‘|ô
ð 	
rL   c                ó   — | j                   S rY   ©rl   ©Úselfs    rJ   Ú
get_devicezWorkspaceArg.get_device¡   s   € Ø�{‰{ÐrL   c                ó   — | j                   S rY   ©rr   r„   s    rJ   Ú	get_dtypezWorkspaceArg.get_dtype¦   s   € Ø�z‰zÐrL   c                óf   — ddl m}  || j                  | j                  | j                  gdg¬«      S )Nr   )r7   r>   )rl   rr   ÚsizeÚstride)Úirr7   rl   rr   ri   )r…   r7   s     rJ   Ú
get_layoutzWorkspaceArg.get_layout©   s.   € Ý$áØ—;‘;Ø—*‘*Ø—*‘*�Ø�3ô	
ð 	
rL   c                ó"   — | j                  «       S rY   )rŽ   r„   s    rJ   ÚlayoutzWorkspaceArg.layout³   s   € à�‰Ó Ð rL   c                ó   — | j                   gS rY   )ri   r„   s    rJ   Úget_sizezWorkspaceArg.get_size»   s   € Ø—
‘
ˆ|ÐrL   c                ó8   — t         j                  j                  gS rY   )r   ÚSÚOner„   s    rJ   Ú
get_stridezWorkspaceArg.get_stride¾   s   € Ü—‘—‘ˆ}ÐrL   c                ó   — | j                   S rY   )rn   r„   s    rJ   Úget_namezWorkspaceArg.get_nameÁ   s   € Ø�‰ÐrL   c                ó   — g S rY   rd   r„   s    rJ   Úget_inputs_that_alias_outputz)WorkspaceArg.get_inputs_that_alias_outputÄ   s   € Øˆ	rL   N)Ú
workspace_)rw   rm   r]   rm   )rU   rg   rV   rg   r]   r^   )rU   rg   rV   rg   r]   rg   )r]   rk   )r]   rq   )r]   r7   )r]   úlist[sympy.Expr]©r]   rm   )r]   ú	list[str])r_   r`   ra   Ú__doc__Ú__annotations__rp   ÚtorchÚuint8rr   rc   rx   rz   r}   r�   r†   Úget_device_or_errorr‰   rŽ   Úpropertyr�   Úget_output_specÚmaybe_get_output_specÚmaybe_get_layoutr’   r–   r˜   rš   rd   rL   rJ   rg   rg   i   sØ   … ñ	ð ÓØ Ó ØÓØƒOØ€J�ÓØŸ™€Eˆ;Ó$àó7ó ð7ð ò
ó ð
ð
 ò
ó ð
ð ò
ó ð
óð %Ðóó
ð ò!ó ð!ð !€OØ&ÐØ!ÐóóóôrL   rg   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)Ú	TensorArgrm   ÚnameÚbufferrq   rr   rh   ÚoffsetNúOptional[str]Úalias_of)	r_   r`   ra   r    r   r”   ÚZeror¬   r®   rd   rL   rJ   r©   r©   È   s.   … à
ƒIØƒKØÓØŸ™Ÿ™€FˆJÓ%Ø"€HˆmÔ"rL   r©   c                  ó4   — e Zd ZU ded<   ded<   edd„«       Zy)ÚSizeArgrm   rª   rh   Úexprc                 ó   — y rY   rd   r„   s    rJ   r®   zSizeArg.alias_ofÖ   s   € àrL   N©r]   r­   )r_   r`   ra   r    r¤   r®   rd   rL   rJ   r±   r±   Ñ   s   … à
ƒIØ
Óàòó ñrL   r±   c                  ó   — e Zd ZU ded<   y)ÚConstexprArgrm   rª   N©r_   r`   ra   r    rd   rL   rJ   r¶   r¶   Û   ó   … à
„IrL   r¶   c                  ó   — e Zd ZU ded<   y)ÚTMADescriptorArgrm   rª   Nr·   rd   rL   rJ   rº   rº   à   r¸   rL   rº   c                  ó0   — e Zd ZU ded<   ded<   dZded<   y)ÚDeviceCodegenÚSchedulingConstructorÚ
schedulingÚWrapperConstructorÚwrapper_codegenNúOptional[WrapperConstructor]Úcpp_wrapper_codegen)r_   r`   ra   r    rÂ   rd   rL   rJ   r¼   r¼   å   s   … à%Ó%Ø'Ó'Ø8<ÐÐ5Ô<rL   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y)ÚDeviceOpOverridesc                ó   — t         ‚rY   ©rS   ©r…   rª   s     rJ   Úimport_get_raw_stream_asz*DeviceOpOverrides.import_get_raw_stream_asò   ó   € Ü!Ð!rL   c                ó   — t         ‚rY   rÇ   ©r…   Ú
device_idxs     rJ   Ú
set_devicezDeviceOpOverrides.set_deviceõ   rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   ÚsynchronizezDeviceOpOverrides.synchronizeø   rÊ   rL   c                ó   — t         ‚rY   rÇ   rÌ   s     rJ   Údevice_guardzDeviceOpOverrides.device_guardû   rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_device_guardz"DeviceOpOverrides.cpp_device_guardþ   rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_aoti_device_guardz'DeviceOpOverrides.cpp_aoti_device_guard  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_stream_guardz"DeviceOpOverrides.cpp_stream_guard  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_aoti_stream_guardz'DeviceOpOverrides.cpp_aoti_stream_guard  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_getStreamFromExternalz+DeviceOpOverrides.cpp_getStreamFromExternal
  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úkernel_headerzDeviceOpOverrides.kernel_header  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úkernel_driverzDeviceOpOverrides.kernel_driver  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_stream_typez!DeviceOpOverrides.cpp_stream_type  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úaoti_get_streamz!DeviceOpOverrides.aoti_get_stream  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_kernel_typez!DeviceOpOverrides.cpp_kernel_type  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úcpp_device_ptrz DeviceOpOverrides.cpp_device_ptr  rÊ   rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Útma_descriptor_helpersz(DeviceOpOverrides.tma_descriptor_helpers  rÊ   rL   c                ó   — t         ‚rY   rÇ   )r…   Úidxs     rJ   Úcpp_global_scratchz$DeviceOpOverrides.cpp_global_scratch"  ó   € ä!Ð!rL   N©rª   rm   r]   rm   )rÍ   Úintr]   rm   r�   )rì   rð   r]   zOptional[tuple[str, str]])r_   r`   ra   rÉ   rÎ   rÐ   rÒ   rÔ   rÖ   rØ   rÚ   rÜ   rÞ   rà   râ   rä   ræ   rè   rê   rí   rd   rL   rJ   rÅ   rÅ   ñ   sW   „ ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ó"ô"rL   rÅ   zdict[str, DeviceOpOverrides]Údevice_op_overrides_dictc                ó,   — t        |||«      t        | <   y rY   )r¼   rÃ   )rl   Údevice_schedulingÚdevice_wrapper_codegenÚdevice_cpp_wrapper_codegens       rJ   Úregister_backend_for_devicerö   ?  s   € ô ,ØÐ1Ð3Mó„O�FÒrL   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)r_   r`   ra   r   ÚFOREACHÚ	BUCKETIZEÚINPLACE_BUFFERSÚMASKED_SCATTER_WITH_INDEXÚSCANÚSORTÚTUPLE_REDUCTIONÚPREFER_STORE_LOOP_ORDERÚTRITON_TEMPLATESÚREDUCE_TO_SINGLE_ELEMENTrd   rL   rJ   rø   rø   J  sL   „ Ù‹f€GÙ“€IÙ“f€OÙ $£ÐÙ‹6€DÙ‹6€DÙ“f€OÙ"›fÐÙ“vÐÙ#›vÑrL   rø   c                ó  — | €
t        «       S t        «        t        | t        j                  «      r| j
                  }n)t        | t        «      sJ ‚| }t        j                  |«      } t        |«      }|sJ ‚ |d «      }|j                  | «      S rY   )	r   Úinit_backend_registrationÚ
isinstancer¡   rl   Útyperm   Úget_scheduling_for_deviceÚget_backend_features)rl   Údevice_typeÚscheduling_ctorr¾   s       rJ   r  r  W  s~   € ð €~Ü‹|ÐÜÔÜ�&œ%Ÿ,™,Ô'Ø—k‘k‰ä˜&¤#Ô&Ð&Ð&ØˆÜ—‘˜kÓ*ˆÜ/°Ó<€OÙÐˆ?Ù  Ó&€JØ×*Ñ*¨6Ó2Ð2rL   c                ó@   — t        |t        «      sJ ‚|t        | «      v S )zSee also V.graph.has_feature)r  rø   r  )rl   Úfeatures     rJ   Úhas_backend_featurer  i  s%   € ô �gœ~Ô.Ð.Ð.ØÔ*¨6Ó2Ð2Ð2rL   c                ó<   — | t         v rt         |    j                  S d S rY   )rÃ   r¾   rƒ   s    rJ   r  r  q  s    € Ø17¼?Ñ1JŒ?˜6Ñ"×-Ñ-ÐTÐPTÐTrL   c                óZ   — | t         v r#t         |    }|r|j                  S |j                  S y rY   )rÃ   rÂ   rÀ   )rl   Úcpp_wrapperÚwrapper_codegen_objs      rJ   Úget_wrapper_codegen_for_devicer  u  sA   € ð ”Ñ Ü-<¸VÑ-DÐñ ð  ×3Ñ3ð	
ð %×4Ñ4ð	
ð
 rL   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} t%        d«      €3| ||dœŠt'        dˆfd„|t(        j*                  j,                  r|n|«       t%        d«      €||dœŠt'        dˆfd„||«       t%        d«      €t'        d|||«       t%        d«      €t'        d|||«       t.        j0                  j3                  «       }	|	dk7  rCt%        |	«      €7ddlm}
 	  |
d«      } |
d«      } |
d«      }|r|r|rt'        |	|||«       y y y y y y # t8        $ r Y y w xY w)Nr>   )ÚCppScheduling)ÚCppWrapperCpu)ÚCppWrapperCpuArrayRef)ÚCppWrapperGpu)ÚCUDACombinedScheduling)ÚHalideScheduling)ÚMetalScheduling)ÚTritonSchedulingr?   Úcpu)ÚcppÚhalideÚtritonc                ó6   •—  ‰t         j                     | «      S rY   )r   Úcpu_backend)r¾   Úcpu_backendss    €rJ   ú<lambda>z+init_backend_registration.<locals>.<lambda>–  s   ø€ Ð?˜|¬F×,>Ñ,>Ñ?À
ÓK€ rL   Úcuda)r  r  c                ó6   •—  ‰t         j                     | «      S rY   )r   Úcuda_backend)r¾   Úcuda_backendss    €rJ   r#  z+init_backend_registration.<locals>.<lambda>¥  s   ø€ ÐA˜}¬V×-@Ñ-@ÑAÀ*ÓM€ rL   ÚxpuÚmpsÚprivateuseoner   )Ú_get_custom_mod_funcÚ
Schedulingr@   ÚCppWrapperCodegen)r  r  Úcpp_wrapper_cpur  Úcpp_wrapper_cpu_array_refr  Úcpp_wrapper_gpur  Úcuda_combined_schedulingr  r  r  r)  r  r  r  Úwrapperr@   r  rö   r   Úaot_inductorÚallow_stack_allocationr¡   Ú_CÚ_get_privateuse1_backend_nameÚ torch.utils.backend_registrationr+  ÚRuntimeError)r  r  r  r  r  r  r  r  r@   Úprivate_backendr+  ró   rÀ   rÂ   r"  r'  s                 @@rJ   r  r  ‚  sm  ù€ å"Ý.Ý@Ý.Ý@Ý(Ý$Ý(Ý-ä  Ó'Ð/à Ø&Ø&ñ
ˆô
 	$ØÛKØ ä×"Ñ"×9Ò9ñ "àô	
ô ! Ó(Ð0ð -Ø&ñ
ˆô 	$ØÛMØ Øô		
ô ! Ó'Ð/Ü#ØØØ Øô		
ô ! Ó'Ð/Ü#ØØØ Øô		
ô —h‘h×<Ñ<Ó>€Oà˜?Ò*Ü% oÓ6Ð>åIð	Ù 4°\Ó BÐÙ2Ð3IÓJˆOÙ"6Ð7JÓ"KÐÙ ¡_Ñ9LÜ+Ø#Ø%Ø#Ø'õ	ð :M _Ð ð ?ð 	+øô  ò 	Ùð	ús   Ã?,D1 Ä1	D=Ä<D=c                óL   — ddl m} g | ¢t        ||j                  |«      «      ‘S )Nr   )ÚFlexibleLayout)r�   r;  r'   Úcontiguous_strides)ÚindexÚ
index_varsÚsizesr;  s       rJ   Úindex_prevent_reorderingr@  Ð  s,   € õ
 $ð UˆUÐT”I˜j¨.×*KÑ*KÈEÓ*RÓSÐTÐTrL   c                ó   — |t         | <   y rY   )rñ   )rl   Údevice_op_overridess     rJ   Úregister_device_op_overridesrC  Û  s   € ð (;Ô˜VÒ$rL   c                ól   — t        | t        «      sJ ‚t        sddlm}m} ddlm} ddlm} t        |    S )Nr>   )Úcpu_device_op_overridesÚmps_device_op_overrides)rB  )	r  rm   rñ   Ú rE  rF  r$  rB  r(  )rl   rE  rF  rB  Úxpu_op_overridess        rJ   Úget_device_op_overridesrI  á  s)   € Ü�fœcÔ"Ð"Ð"å#ßFÝ-Ý@ä# FÑ+Ð+rL   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_exprrr   éÿÿÿÿ)ÚrandÚrandn)Ú	get_indexÚ	randint64Ú	load_seedÚ	reductionr>   Úconstant)ÚloadÚstoreÚstore_reductionÚto_dtype_bitcastéþÿÿÿN)r!   r¡   r^   ÚfloatÚint64r1   ru   r‰   )Úop_nameÚargsÚkwargsÚbuf_names       rJ   Údeduce_output_dtype_by_namera    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ØrL   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_blockru   ÚgraphsÚ	subblocksÚitems)r…   rg  ÚkÚvs       rJ   Ú__init__zDataTypePropagation.__init__-  sU   € ØˆŒ	à�D—O‘O×)Ñ)ðB
ˆŒð —N‘N×(Ñ(Ó*ò 	%‰DˆAˆqØŸW™WˆD�K‰K˜ŠNñ	%rL   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rY   )ÚOptimizationContextÚkeyÚmetarr   )Ú.0Úns     rJ   ú	<genexpr>zBDataTypePropagation.deduce_node_dtype_by_inputs.<locals>.<genexpr>=  sS   è ø€ ò )
ð ô  ×#Ñ# q§v¡vÐ-ò BØ—‘Ô*×.Ñ.Ñ/×5Ñ5¸TÐAóBñ)
ùs   ‚AA)Úall_input_nodesr  r¡   ÚfxÚNodeÚopÚlenÚallÚ	functoolsÚreduceÚpromote_typesrt  rr  rs  rr   )r…   ÚnodeÚinputsrv  Úinput_nodesÚall_input_nodes_propagateds         rJ   Údeduce_node_dtype_by_inputsz/DataTypePropagation.deduce_node_dtype_by_inputs5  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 rY   )ri  ÚtargetÚpropagate_graph)r…   r�  Ú	sub_graphrr   s       rJ   Údeduce_node_dtype_by_subgraphz1DataTypePropagation.deduce_node_dtype_by_subgraphJ  s0   € Ø—K‘K §¡Ñ,ˆ	Ø×$Ñ$ YÓ/ˆÙˆˆuØˆrL   c                óþ  — |j                   dk(  ry |j                  dk(  rt        |j                  «      dk7  ry |j                  t        j
                  k(  r| j                  |j                  d   «      S t        |j                  t        «      sJ ‚|j                  j                  d«      r| j                  |«      S t        |j                  g|j                  ¢­i |j                  ¤Žx}	 �|S | j                  |«      S )Nrp  Úoutputr>   r   Úmasked_subblock)r{  r‡  r|  r^  ÚoperatorÚgetitemÚdeduce_node_dtyper  rm   Ú
startswithrŠ  ra  r_  r…  )r…   r�  Úoutput_dtypes      rJ   r�  z%DataTypePropagation.deduce_node_dtypeP  sç   € Ø�7‰7�mÒ#Øà�;‰;˜(Ò"¤s¨4¯9©9£~¸Ò':àà�;‰;œ(×*Ñ*Ò*Ø×)Ñ)¨$¯)©)°A©,Ó7Ð7ä˜$Ÿ+™+¤sÔ+Ð+Ð+à�;‰;×!Ñ!Ð"3Ô4Ø×5Ñ5°dÓ;Ð;ô 8Ø—‘ðà—‘òð —+‘+ñð ˆLð
 ðð  Ðà×/Ñ/°Ó5Ð5rL   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Œ  )Únodesrr  rs  rt  r�  rr   r‡  )r…   ru   Úgraph_dtyper�  Úopt_ctxs        rJ   rˆ  z#DataTypePropagation.propagate_graphk  s›   € Ø�{Š{Ðˆ{Ø-1ˆð —K‘Kò 		,ˆDÜ"×&Ñ&¨$¯)©)Ñ3ØŸ)™)Ô$7×$;Ñ$;Ñ<‘ä-Ó/�à ×2Ñ2°4Ó8ˆGŒMØ18ˆD�I‰IÔ)×-Ñ-Ñ.Ø�{‰{˜hÓ&Ø%Ÿm™m‘ð		,ð ÐrL   c                ó>   — | j                  | j                  d   «      S re  )rˆ  ri  r„   s    rJ   Ú	propagatezDataTypePropagation.propagate}  s   € Ø×#Ñ# D§K¡K°Ñ$7Ó8Ð8rL   c                ó.   —  | |«      j                  «       S rY   )r˜  )Úclsrg  s     rJ   Úpropagate_loopbodyz&DataTypePropagation.propagate_loopbody€  s   € á�4‹y×"Ñ"Ó$Ð$rL   c                ó¤   — ddl m} ddlm} t	        ||«      sJ ‚t	        |j
                  |«      sJ ‚t        j                  |j
                  «      S )Nr   r9   )r=   )Ú	loop_bodyr:   Ú	schedulerr=   r  Ú_bodyrc  r›  )rš  r�  r:   r=   s       rJ   Úpropagate_scheduler_nodez,DataTypePropagation.propagate_scheduler_node„  sA   € å(Ý-ä˜$ Ô.Ð.Ð.Ü˜$Ÿ*™* hÔ/Ð/Ð/Ü"×5Ñ5°d·j±jÓAÐArL   N)rg  r:   r]   ÚNone)r�  útorch.fx.Noder]   úOptional[torch.dtype])r�  r¢  r]   rq   )ru   ztorch.fx.Graphr]   r£  )r]   r£  )rg  r:   r]   r£  )r�  r=   r]   r£  )r_   r`   ra   rn  r…  rŠ  r�  rˆ  r˜  Úclassmethodr›  r   rd   rL   rJ   rc  rc  ,  sJ   „ ó%ó
ó*ó6ó6ó$9ð ò%ó ð%ð òBó ñBrL   rc  c                  ó6   ‡ — e Zd Zdd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)
r  r   ÚExprÚhasattrr1   ru   r©  r¦  ÚsuperÚdoprint)r…   r²   r¦  r§  Ú	__class__s       €rJ   r­  zPythonPrinter.doprint�  sK   ø€ ñ œ
 4¬¯©Ô4¼ÄÇÁÈ*Ô9UÜ—7‘7×#Ñ#×,Ñ,¨TÓ2ˆDÜ‰w‰˜tÓ$Ð$rL   )r²   rh   r¦  r^   r§  r^   r]   rm   )r_   r`   ra   r­  Ú__classcell__©r®  s   @rJ   r   r   Ž  s2   ø„ à48ÀDñ%Øð%Ø-1ð%Ø=Að%à	÷%ñ %rL   r   c                  óT  — 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y)ÚOpDecompositionsz!
    Decomposes inductor ops
    c                ó   — | S rY   rd   )Úvalues    rJ   ÚidentityzOpDecompositions.identity�  s	   € ð ˆrL   c                ór   — t        j                  t        j                  dt        j                  «      | «      S ©Nr>   )r,   ÚtruedivrU  r¡   Úint32©Úxs    rJ   Ú
reciprocalzOpDecompositions.reciprocal¢  s"   € ä�{‰{œ3Ÿ<™<¨¬5¯;©;Ó7¸Ó;Ð;rL   c                ó.   — t        j                  | | «      S rY   )r,   Úmulrº  s    rJ   ÚsquarezOpDecompositions.square¦  s   € ä�w‰w�q˜!‹}ÐrL   c                ó˜   — t        j                  t        j                  dt        j                  «      t        j
                  | «      «      S r·  )r,   ÚsubrU  r¡   Úfloat32Úerfrº  s    rJ   ÚerfczOpDecompositions.erfcª  s*   € ä�w‰w”s—|‘| A¤u§}¡}Ó5´s·w±w¸q³zÓBÐBrL   c                ó    — t        j                  t        j                  t        j                  | «      «      t        j                  | «      «      S rY   )r,   r¾  Úexpr¿  rÄ  rº  s    rJ   ÚerfcxzOpDecompositions.erfcx®  s,   € ä�w‰w”s—w‘wœsŸz™z¨!›}Ó-¬s¯x©x¸«{Ó;Ð;rL   c                ó˜   — t        j                  t        j                  | «      t        j                  dt        j
                  «      «      S r·  )r,   rÁ  rÆ  rU  r¡   rÂ  rº  s    rJ   Úexpm1zOpDecompositions.expm1²  s*   € ä�w‰w”s—w‘w˜q“z¤3§<¡<°´5·=±=Ó#AÓBÐBrL   c           	     óÄ   — t        j                  t        j                  | «      t        j                  dt	        j                  d«      z  t
        j                  «      «      S )Nr>   é
   ©r,   r¾  ÚlogrU  Úmathr¡   rÂ  rº  s    rJ   Úlog10zOpDecompositions.log10¶  s7   € ä�w‰w”s—w‘w˜q“z¤3§<¡<°´D·H±H¸R³LÑ0@Ä%Ç-Á-Ó#PÓQÐQrL   c           	     óÄ   — t        j                  t        j                  | «      t        j                  dt	        j                  d«      z  t
        j                  «      «      S )Nr>   r   rÌ  rº  s    rJ   Úlog2zOpDecompositions.log2º  s6   € ä�w‰w”s—w‘w˜q“z¤3§<¡<°´D·H±H¸Q³K±ÄÇÁÓ#OÓPÐPrL   c           
     ó¾   — t        j                  t        j                  | t        j                  t	        j
                  d«      t        j                  «      «      «      S )Nr   )r,   rÆ  r¾  rU  rÎ  rÍ  r¡   rÂ  rº  s    rJ   Úexp2zOpDecompositions.exp2¾  s3   € ä�w‰w”s—w‘w˜q¤#§,¡,¬t¯x©x¸«{¼E¿M¹MÓ"JÓKÓLÐLrL   c           	     ó˜   — t        j                  t        j                  | t        j                  dt        j
                  «      «      «      S r·  )r,   rÍ  ÚaddrU  r¡   r¹  rº  s    rJ   Úlog1pzOpDecompositions.log1pÂ  s+   € ä�w‰w”s—w‘w˜q¤#§,¡,¨q´%·+±+Ó">Ó?Ó@Ð@rL   c                óê   — t        j                  dt        j                  «      }t        j                  |t        j
                  |t        j                  t        j                  | «      «      «      «      S r·  )r,   rU  r¡   r¹  r¸  rÕ  rÆ  Úneg©r»  Úones     rJ   ÚsigmoidzOpDecompositions.sigmoidÆ  sC   € ä�l‰l˜1œeŸk™kÓ*ˆÜ�{‰{˜3¤§¡¨¬S¯W©W´S·W±W¸Q³ZÓ-@Ó AÓBÐBrL   c                ór   — t        j                  | t        j                  dt        j                  «      «      S ©Nr   )r,   r�   rU  r¡   r¹  rº  s    rJ   ÚreluzOpDecompositions.reluË  s"   € ä�{‰{˜1œcŸl™l¨1¬e¯k©kÓ:Ó;Ð;rL   c                óV   — t        j                  t        j                  | |«      |«      S rY   )r,   rÕ  r¾  ©r»  ÚyÚzs      rJ   ÚfmazOpDecompositions.fmaÏ  s   € ô �w‰w”s—w‘w˜q !“} aÓ(Ð(rL   c                óT   — t        j                  t        j                  | «      |«      S rY   )r,   rL  Úfloor©rU   rr   s     rJ   Úfloor_to_intzOpDecompositions.floor_to_intÔ  ó   € ä�|‰|œCŸI™I a›L¨%Ó0Ð0rL   c                óT   — t        j                  t        j                  | «      |«      S rY   )r,   rL  Úceilræ  s     rJ   Úceil_to_intzOpDecompositions.ceil_to_intØ  s   € ä�|‰|œCŸH™H Q›K¨Ó/Ð/rL   c                óT   — t        j                  t        j                  | «      |«      S rY   )r,   rL  Útruncræ  s     rJ   Útrunc_to_intzOpDecompositions.trunc_to_intÜ  rè  rL   c           	     ó�  — t        j                  | |«      }t        j                  t        j                  |t        j                  dt
        j                  «      «      t        j                  t        j                  |«      t        j                  |«      «      «      }t        j                  |t        j                  ||«      |«      S rÝ  )
r,   ÚmodÚand_ÚnerU  r¡   r¹  ÚsignbitÚwhererÕ  )rU   rV   ÚrÚconds       rJ   Ú	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Ð0rL   c                óT   — t        j                  t        j                  | «      |«      S rY   )r,   rL  Úroundræ  s     rJ   Úround_to_intzOpDecompositions.round_to_inté  rè  rL   N)r´  ÚOpVarTr]   rû  ©r»  rû  r]   rû  )r»  rû  rá  rû  râ  rû  r]   rû  )rU   rû  rr   rq   r]   rû  ©rU   rû  rV   rû  r]   rû  )r_   r`   ra   rŸ   rc   rµ  r¼  r¿  rÄ  rÇ  rÉ  rÏ  rÑ  rÓ  rÖ  rÛ  rÞ  rã  rç  rë  rî  r÷  rú  rd   rL   rJ   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ó ñ1rL   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   ú(r   Fr>   rQ   T)r|  Ú	enumerate)Ústringri   ÚiÚchars       rJ   Ú_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Š:Ðˆ:ØrL   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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	 	 	 	 	 	 	 	 	 	 d0d„Zd1d„Z	 d2	 	 	 	 	 	 	 	 	 d3d„Zd4d„Z	 	 	 	 	 	 	 	 	 	 d5d„Z	 	 	 	 	 	 	 	 d6d„Z	 	 	 	 	 	 	 	 	 	 d7d„Z	 	 d8	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9d„Zd:d„Zde jB                  ddd œ	 	 	 	 	 	 	 	 	 	 	 	 	 d;d!„Z"d<d"„Z#d=d#„Z$ed>d$„«       Z%e&d?d%„«       Z'e&d@d&„«       Z(y)AÚOpOverridesc                ór   — t        | t        «      s t        j                  | «      st	        | «      r| S d| › d�S ©Nr   rQ   )r  ÚCSEVariableÚ_RE_PAREN_NOT_NEEDEDÚ	fullmatchr  )r  s    rJ   ÚparenzOpOverrides.paren  s9   € ô �vœ{Ô+Ü#×-Ñ-¨fÔ5Ü˜fÔ%ð ˆMØ�6�(˜!ˆ}ÐrL   c                ó   — t        | «      S rY   )Úrepr)r´  rr   s     rJ   rU  zOpOverrides.constant  s   € ä�E‹{ÐrL   c                óê   — t        j                  dt        j                  «      }t        j                  |t        j
                  |t        j                  t        j                  | «      «      «      «      S r·  )r,   rU  r¡   r¹  r¸  rÕ  Úlibdevice_exprØ  rÙ  s     rJ   Úlibdevice_sigmoidzOpOverrides.libdevice_sigmoid  sE   € ä�l‰l˜1œeŸk™kÓ*ˆÜ�{‰{˜3¤§¡¨¬S×->Ñ->¼s¿w¹wÀq»zÓ-JÓ KÓLÐLrL   c                ó,   — t        j                  | «      S rY   )r,   Úabsrº  s    rJ   Úlibdevice_abszOpOverrides.libdevice_abs  ó   € ä�w‰w�q‹zÐrL   c                ó,   — t        j                  | «      S rY   )r,   Úsqrtrº  s    rJ   Úlibdevice_sqrtzOpOverrides.libdevice_sqrt  s   € ä�x‰x˜‹{ÐrL   c                ó,   — t        j                  | «      S rY   )r,   Úcosrº  s    rJ   Úlibdevice_coszOpOverrides.libdevice_cos  r  rL   c                ó,   — t        j                  | «      S rY   )r,   Úsinrº  s    rJ   Úlibdevice_sinzOpOverrides.libdevice_sin!  r  rL   c                ó,   — t        j                  | «      S rY   )r,   rÍ  rº  s    rJ   Úlibdevice_logzOpOverrides.libdevice_log%  r  rL   c                ó,   — t        j                  | «      S rY   )r,   rÆ  rº  s    rJ   r  zOpOverrides.libdevice_exp)  r  rL   c                ó2   — dt         j                  | «      › �S )Nú~©r  r  rº  s    rJ   Úbitwise_notzOpOverrides.bitwise_not-  s   € à”;×$Ñ$ QÓ'Ð(Ð)Ð)rL   c                ó2   — t         j                  | «      › d�S )Nz == 0r%  )rU   s    rJ   Úlogical_notzOpOverrides.logical_not1  s   € ä×#Ñ# AÓ&Ð' uÐ-Ð-rL   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz & r%  ©r»  rá  s     rJ   Úbitwise_andzOpOverrides.bitwise_and5  ó+   € ä×#Ñ# AÓ&Ð' s¬;×+<Ñ+<¸QÓ+?Ð*@ÐAÐArL   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz | r%  r*  s     rJ   Ú
bitwise_orzOpOverrides.bitwise_or9  r,  rL   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz ^ r%  r*  s     rJ   Úbitwise_xorzOpOverrides.bitwise_xor=  r,  rL   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz << r%  r*  s     rJ   Úbitwise_left_shiftzOpOverrides.bitwise_left_shiftA  ó+   € ä×#Ñ# AÓ&Ð' t¬K×,=Ñ,=¸aÓ,@Ð+AÐBÐBrL   c                ó\   — t         j                  | «      › dt         j                  |«      › �S )Nz >> r%  r*  s     rJ   Úbitwise_right_shiftzOpOverrides.bitwise_right_shiftE  r3  rL   c                ó.   — t        j                  | |«      S rY   )r,   r¸  rT   s     rJ   Úint_truedivzOpOverrides.int_truedivI  s   € ô
 �{‰{˜1˜aÓ Ð rL   c                óT   — t        j                  | t        j                  |«      «      S rY   )r,   rV  r   ÚInteger)rª   r¬   s     rJ   rS  zOpOverrides.load_seedP  s   € ä�x‰x˜œeŸm™m¨FÓ3Ó4Ð4rL   Tc                ó*   — t        t        |«      «      S rY   )r(   rm   )r…   Úvarr‹   ÚcheckÚwrap_negs        rJ   Úindirect_indexingzOpOverrides.indirect_indexingT  s   € ô "¤# c£(Ó+Ð+rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz,: check_bounds should be handled by CSEProxy©rS   r  r_   ©r…   r²   r‹   ÚlowerÚuppers        rJ   Úcheck_boundszOpOverrides.check_bounds]  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#OÐPó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz$: load should be handled by CSEProxyr@  ©r…   rª   r=  s      rJ   rV  zOpOverrides.loadd  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rL   Nc                óD   — t        t        | «      j                  › d�«      ‚)Nz%: store should be handled by CSEProxyr@  ©r…   rª   r=  r´  Úmodes        rJ   rW  zOpOverrides.storei  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#HÐIó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz/: store_reduction should be handled by CSEProxyr@  ©r…   rª   r=  r´  s       rJ   rX  zOpOverrides.store_reductionp  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#RÐSó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz): reduction should be handled by CSEProxyr@  ©r…   rr   Ú	src_dtypeÚreduction_typer´  s        rJ   rT  zOpOverrides.reductionu  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz$: scan should be handled by CSEProxyr@  ©r…   ÚdtypesÚ
combine_fnÚvaluess       rJ   ÚscanzOpOverrides.scan€  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz$: sort should be handled by CSEProxyr@  ©r…   rR  rT  ÚstableÚ
descendings        rJ   ÚsortzOpOverrides.sort�  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#GÐHó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz): bucketize should be handled by CSEProxyr@  ©r…   rT  Ú
boundariesÚboundary_indicesÚindexing_dtypeÚrightÚsorterÚsorter_indicess           rJ   Ú	bucketizezOpOverrides.bucketize˜  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#LÐMó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz2: halide_clamp only implemented for Halide backendr@  )r…   r´  r‹   r<  s       rJ   Úhalide_clampzOpOverrides.halide_clamp¦  s%   € Ü!Ü�D‹z×"Ñ"Ð#Ð#UÐVó
ð 	
rL   r>   )Úconstraintsrr   Úis_pureÚpackc               óD   — t        t        | «      j                  › d�«      ‚)Nz<: inline_asm_elementwise only implemented for Triton backendr@  )r…   Úasmrf  rr   rg  rh  r‚  s          rJ   Úinline_asm_elementwisez"OpOverrides.inline_asm_elementwise«  s'   € ô "Ü�D‹z×"Ñ"Ð#Ð#_Ð`ó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz.: ops.output should not appear at codegen time©ÚAssertionErrorr  r_   )r…   r^  s     rJ   rŒ  zOpOverrides.output¸  s%   € ÜÜ�D‹z×"Ñ"Ð#Ð#QÐRó
ð 	
rL   c                óD   — t        t        | «      j                  › d�«      ‚)Nz3: ops.placeholder should not appear at codegen timerm  ©r…   r=  s     rJ   rp  zOpOverrides.placeholder½  s%   € ÜÜ�D‹z×"Ñ"Ð#Ð#VÐWó
ð 	
rL   c                ó0   ‡ — dˆ fd„}‰ |_         d|_        |S )Nc                óJ   •— t        t        | «      j                  › d‰› �«      ‚)Nz does not implement ops.r@  )r…   r^  r_  rª   s      €rJ   Úunimplementedz1OpOverrides._unimplemented.<locals>.unimplementedÄ  s*   ø€ Ü%Ü˜“:×&Ñ&Ð'Ð'?À¸vÐFóð rL   T)r…   r  r^  r   r_  r   r]   rû  )r_   Úis_unimplemented)rª   rs  s   ` rJ   Ú_unimplementedzOpOverrides._unimplementedÂ  s    ø€ õ	ð
 "&ˆÔØ)-ˆÔ&ØÐrL   c                óp   — t        | |d «      }t        t        |d «      }| xs ||k(  xs t        |dd«      S )Nrt  F)Úgetattrr-   )rš  rª   ÚfnÚ
default_fns       rJ   Ú_is_unimplementedzOpOverrides._is_unimplementedÍ  s?   € ä�S˜$ Ó%ˆÜœZ¨¨tÓ4ˆ
ØˆvÒS˜˜zÑ)ÒS¬W°RÐ9KÈUÓ-SÐSrL   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)r  r  Úcppvecr  r)  zmultiple definitions of z on )	Úpointwise_overrides_datark  rw  rz  Úsetattrru  Ú__dict__r_   rc   )rš  r‡  ÚfuncnameÚdataÚimpls        rJ   Ú_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Õ:ñ
	;rL   )r  rû  r]   rû  )r´  zUnion[bool, float, int]rr   rq   r]   rû  rü  )rU   rû  r]   rû  )r»  rû  rá  rû  r]   rû  rý  )rª   rm   r¬   rû  r]   rû  ©TT)
r;  rû  r‹   úUnion[sympy.Expr, int]r<  r^   r=  r^   r]   úsympy.Symbol©
r²   rh   r‹   rh   rB  r^   rC  r^   r]   r¡  )rª   rm   r=  rh   r]   rû  rY   )
rª   rm   r=  rh   r´  rû  rI  r0   r]   r¡  )rª   rm   r=  rh   r´  rû  r]   r¡  )
rr   rq   rN  rq   rO  r/   r´  ú!Union[OpVarT, tuple[OpVarT, ...]]r]   rˆ  )rR  útuple[torch.dtype, ...]rS  zFCallable[[tuple[OpVarT, ...], tuple[OpVarT, ...]], tuple[OpVarT, ...]]rT  útuple[OpVarT, ...]r]   rŠ  )
rR  r‰  rT  rŠ  rX  r^   rY  r^   r]   rŠ  ©NN)rT  rû  r]  ú.tuple[str, sympy.Expr, sympy.Expr, sympy.Expr]r^  rû  r_  rq   r`  r^   ra  ú Optional[tuple[str, sympy.Expr]]rb  zOptional[OpVarT]r]   rû  )r´  rû  r‹   rh   r<  r^   r]   rû  )r‚  rû  rj  rm   rf  r­   rr   rq   rg  r^   rh  rð   r]   rû  )r^  rû  r]   r¡  )r=  rð   r]   rû  )rª   rm   r]   zCallable[..., OpVarT]©rª   rm   r]   r^   )r‡  rm   r]   r¡  ))r_   r`   ra   rc   r  rU  r  r  r  r  r  r!  r  r&  r(  r+  r.  r0  r2  r5  r7  rS  r>  rD  rV  rW  rX  rT  rU  rZ  rc  re  r¡   rÂ  rk  rŒ  rp  ru  r¤  rz  rƒ  rd   rL   rJ   r  r     sµ  „ Øòó ðð òó ðð òMó ðMð òó ðð òó ðð òó ðð òó ðð òó ðð òó ðð ò*ó ð*ð ò.ó ð.ð òBó ðBð òBó ðBð òBó ðBð òCó ðCð òCó ðCð ò!ó ð!ð ò5ó ð5ð Øð,àð,ð %ð,ð ð	,ð
 ð,ð 
ó,ð
Øð
Ø&0ð
Ø9=ð
ØFJð
à	ó
ó
ð NRð
Øð
Ø *ð
Ø39ð
ØAJð
à	ó
ó
ð
	
àð	
ð ð	
ð &ð		
ð
 1ð	
ð 
+ó	
ð
à'ð
ð
ð
ð #ð
ð 
ó
ð	
à'ð	
ð #ð	
ð ð		
ð
 ð	
ð 
ó	
ð$ 48Ø+/ð
àð
ð Cð
ð !ð	
ð
 $ð
ð ð
ð 1ð
ð )ð
ð 
ó
ó
ð &*Ø"Ÿ]™]ØØñ
àð
ð ð
ð #ð	
ð
 ð
ð ð
ð ð
ð 
ó
ó
ó

ð
 òó ðð òTó ðTð
 ò;ó ñ;rL   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)ÚOverridesDatarm   rª   zCallable[..., str]r  NzOptional[Callable[..., str]]r  r|  r   Útype_promotion_kindr  r)  )r_   r`   ra   r    r  r|  r   ÚDEFAULTr‘  r  r)  rd   rL   rJ   r�  r�  ä  sQ   … à
ƒIØ	Óà+/€FÐ(Ó/à+/€FÐ(Ó/à'×/Ñ/ð Ð8ó ð ,0€FÐ(Ó/Ø(,€CÐ	%Ô,rL   r�  Úairy_aic                ó   — d| › d�S )Nzairy_ai_forward(rQ   rd   rº  s    rJ   r#  r#  ø  s   € Ð(¨¨¨1Ð-€ rL   Úspecial_airy_ai)r‘  r  rª   Ú	bessel_j0c                ó   — d| › d�S )Nzbessel_j0_forward(rQ   rd   rº  s    rJ   r#  r#  ý  ó   € Ð*¨1¨#¨QÐ/€ rL   c                ó   — d| › d�S )Nzlibdevice.j0(rQ   rd   rº  s    rJ   r#  r#  þ  ó   € ˜=¨¨¨1Ð-€ rL   Úspecial_bessel_j0)r‘  r  r  rª   Ú	bessel_j1c                ó   — d| › d�S )Nzbessel_j1_forward(rQ   rd   rº  s    rJ   r#  r#    r˜  rL   c                ó   — d| › d�S )Nzlibdevice.j1(rQ   rd   rº  s    rJ   r#  r#    rš  rL   Úspecial_bessel_j1Ú	bessel_y0c                ó   — d| › d�S )Nzbessel_y0_forward(rQ   rd   rº  s    rJ   r#  r#  	  r˜  rL   c                ó   — d| › d�S )Nzlibdevice.y0(rQ   rd   rº  s    rJ   r#  r#  
  rš  rL   Úspecial_bessel_y0Ú	bessel_y1c                ó   — d| › d�S )Nzbessel_y1_forward(rQ   rd   rº  s    rJ   r#  r#    r˜  rL   c                ó   — d| › d�S )Nzlibdevice.y1(rQ   rd   rº  s    rJ   r#  r#    rš  rL   Úspecial_bessel_y1Údigammac                ó   — d| › d�S )Nzcalc_digamma(rQ   rd   rº  s    rJ   r#  r#    s   € ˜ a S¨Ð*€ rL   c                ó   — | › d�S )Nz
.digamma()rd   rº  s    rJ   r#  r#    s   € ˜A˜3˜jÐ)€ rL   )r‘  r  r|  rª   rÇ  c                ó   — d| › d�S )Nzcalc_erfcx(rQ   rd   rº  s    rJ   r#  r#    ó   € ˜ A 3 aÐ(€ rL   c                ó   — d| › d�S )Nzlibdevice.erfcx(rQ   rd   rº  s    rJ   r#  r#    s   € Ð+¨A¨3¨aÐ0€ rL   Úspecial_erfcxrã  c                ó   — d| › d|› d|› d�S )Nz	std::fma(rP   rQ   rd   rà  s      rJ   r#  r#  #  s   € ˜i¨ s¨"¨Q¨C¨r°!°°AÐ6€ rL   c                ó   — d| › d|› d|› d�S )Nzfmadd(rP   rQ   rd   rà  s      rJ   r#  r#  $  s   €  ¨ s¨"¨Q¨C¨r°!°°AÐ6€ rL   c                ó   — d| › d|› d|› d�S )Nzlibdevice.fma(rP   rQ   rd   rà  s      rJ   r#  r#  %  s   €  °¨s°"°Q°C°r¸!¸¸AÐ>€ rL   )r‘  r  r|  r  rª   Úigammac                ó   — d| › d|› d�S ©Nzcalc_igamma(rP   rQ   rd   r*  s     rJ   r#  r#  +  ó   € ˜<¨ s¨"¨Q¨C¨qÐ1€ rL   Úigammacc                ó   — d| › d|› d�S ©Nzcalc_igammac(rP   rQ   rd   r*  s     rJ   r#  r#  0  ó   € ˜=¨¨¨2¨a¨S°Ð2€ rL   Úgammaincc                ó   — d| › d|› d�S r´  rd   r*  s     rJ   r#  r#  5  rµ  rL   Úspecial_gammaincÚ	gammainccc                ó   — d| › d|› d�S r¸  rd   r*  s     rJ   r#  r#  :  r¹  rL   Úspecial_gammainccÚi0c                ó   — d| › d�S )Nzcalc_i0(rQ   rd   rº  s    rJ   r#  r#  ?  ó   € ˜   1�o€ rL   c                ó   — d| › d�S ©Nzlibdevice.cyl_bessel_i0(rQ   rd   rº  s    rJ   r#  r#  @  ó   € Ð3°A°3°aÐ8€ rL   c                ó   — | › d�S )Nz.i0()rd   rº  s    rJ   r#  r#  A  s   € ˜A˜3˜e˜€ rL   )r‘  r  r  r|  rª   Úi0ec                ó   — d| › d�S )Nz	calc_i0e(rQ   rd   rº  s    rJ   r#  r#  F  ó   € ˜	 !  AÐ&€ rL   c                ó   — | › d�S )Nz.i0e()rd   rº  s    rJ   r#  r#  G  s   € ˜A˜3˜f˜€ rL   Úspecial_i0eÚi1c                ó   — d| › d�S )Nzcalc_i1(rQ   rd   rº  s    rJ   r#  r#  L  rÂ  rL   c                ó   — d| › d�S ©Nzlibdevice.cyl_bessel_i1(rQ   rd   rº  s    rJ   r#  r#  M  rÅ  rL   Ú
special_i1Úi1ec                ó   — d| › d�S )Nz	calc_i1e(rQ   rd   rº  s    rJ   r#  r#  R  rÉ  rL   Úspecial_i1eÚlog_ndtrc                ó   — d| › d�S )Nzcalc_log_ndtr(rQ   rd   rº  s    rJ   r#  r#  W  s   € ˜ q c¨Ð+€ rL   Úspecial_log_ndtrÚmodified_bessel_i0c                ó   — d| › d�S )Nzmodified_bessel_i0_forward(rQ   rd   rº  s    rJ   r#  r#  ]  ó   € Ð3°A°3°aÐ8€ rL   c                ó   — d| › d�S rÄ  rd   rº  s    rJ   r#  r#  ^  rÅ  rL   Úspecial_modified_bessel_i0Úmodified_bessel_i1c                ó   — d| › d�S )Nzmodified_bessel_i1_forward(rQ   rd   rº  s    rJ   r#  r#  c  rÙ  rL   c                ó   — d| › d�S rÏ  rd   rº  s    rJ   r#  r#  d  rÅ  rL   Úspecial_modified_bessel_i1Úmodified_bessel_k0c                ó   — d| › d�S )Nzmodified_bessel_k0_forward(rQ   rd   rº  s    rJ   r#  r#  i  rÙ  rL   Úspecial_modified_bessel_k0Úmodified_bessel_k1c                ó   — d| › d�S )Nzmodified_bessel_k1_forward(rQ   rd   rº  s    rJ   r#  r#  n  rÙ  rL   Úspecial_modified_bessel_k1Úndtrc                ó   — d| › d�S )Nz
calc_ndtr(rQ   rd   rº  s    rJ   r#  r#  t  s   € ˜
 1 # QÐ'€ rL   Úspecial_ndtrÚndtric                ó   — d| › d�S )Nzcalc_ndtri(rQ   rd   rº  s    rJ   r#  r#  y  r¬  rL   Úspecial_ndtriÚ	polygammac                ó   — | › d|› d|› d| › d�S )Nz == 0 ? calc_digamma(z) : calc_polygamma(rP   rQ   rd   r*  s     rJ   r#  r#  ~  s"   € ˜A˜3Ð3°A°3Ð6IÈ!ÈÈBÈqÈcÐQRÐS€ rL   Úscaled_modified_bessel_k0c                ó   — d| › d�S )Nz"scaled_modified_bessel_k0_forward(rQ   rd   rº  s    rJ   r#  r#  …  ó   € Ð:¸1¸#¸QÐ?€ rL   Ú!special_scaled_modified_bessel_k0Úscaled_modified_bessel_k1c                ó   — d| › d�S )Nz"scaled_modified_bessel_k1_forward(rQ   rd   rº  s    rJ   r#  r#  Š  rð  rL   Ú!special_scaled_modified_bessel_k1Úspherical_bessel_j0c                ó   — d| › d�S )Nzspherical_bessel_j0_forward(rQ   rd   rº  s    rJ   r#  r#  �  s   € Ð4°Q°C°qÐ9€ rL   Úspecial_spherical_bessel_j0Úzetac                ó   — d| › d|› d�S )Nzzeta(rP   rQ   rd   r*  s     rJ   r#  r#  •  s   € ˜5   2 a S¨Ð*€ rL   Úspecial_zetaÚchebyshev_polynomial_tc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_t_forward(rP   rQ   rd   r*  s     rJ   r#  r#  š  ó   € Ð:¸1¸#¸RÀ¸sÀ!ÐD€ rL   Úspecial_chebyshev_polynomial_tÚchebyshev_polynomial_uc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_u_forward(rP   rQ   rd   r*  s     rJ   r#  r#  Ÿ  rý  rL   Úspecial_chebyshev_polynomial_uÚchebyshev_polynomial_vc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_v_forward(rP   rQ   rd   r*  s     rJ   r#  r#  ¤  rý  rL   Úspecial_chebyshev_polynomial_vÚchebyshev_polynomial_wc                ó   — d| › d|› d�S )Nzchebyshev_polynomial_w_forward(rP   rQ   rd   r*  s     rJ   r#  r#  ©  rý  rL   Úspecial_chebyshev_polynomial_wÚlegendre_polynomial_pc                ó   — d| › d|› d�S )Nzlegendre_polynomial_p_forward(rP   rQ   rd   r*  s     rJ   r#  r#  ®  ó   € Ð9¸!¸¸B¸q¸cÀÐC€ rL   Úspecial_legendre_polynomial_pÚshifted_chebyshev_polynomial_tc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_t_forward(rP   rQ   rd   r*  s     rJ   r#  r#  ³  ó   € ÐBÀ1À#ÀRÈÀsÈ!ÐL€ rL   Ú&special_shifted_chebyshev_polynomial_tÚshifted_chebyshev_polynomial_uc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_u_forward(rP   rQ   rd   r*  s     rJ   r#  r#  ¸  r  rL   Ú&special_shifted_chebyshev_polynomial_uÚshifted_chebyshev_polynomial_vc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_v_forward(rP   rQ   rd   r*  s     rJ   r#  r#  ½  r  rL   Ú&special_shifted_chebyshev_polynomial_vÚshifted_chebyshev_polynomial_wc                ó   — d| › d|› d�S )Nz'shifted_chebyshev_polynomial_w_forward(rP   rQ   rd   r*  s     rJ   r#  r#  Â  r  rL   Ú&special_shifted_chebyshev_polynomial_wÚhermite_polynomial_hc                ó   — d| › d|› d�S )Nzhermite_polynomial_h_forward(rP   rQ   rd   r*  s     rJ   r#  r#  Ç  s   € Ð8¸¸¸2¸a¸SÀÐB€ rL   Úspecial_hermite_polynomial_hÚhermite_polynomial_hec                ó   — d| › d|› d�S )Nzhermite_polynomial_he_forward(rP   rQ   rd   r*  s     rJ   r#  r#  Ì  r
  rL   Úspecial_hermite_polynomial_heÚlaguerre_polynomial_lc                ó   — d| › d|› d�S )Nzlaguerre_polynomial_l_forward(rP   rQ   rd   r*  s     rJ   r#  r#  Ñ  r
  rL   Ú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rY   rd   )ru  r»  rª   s     €rJ   rw  z$is_buffer_removed.<locals>.<genexpr>Ø  s   øè ø€ ò àð 	�Œ	ñùó   ƒ)Úanyr1   ru   Úremoved_buffersÚkernelÚinplaced_to_remove©rª   s   `rJ   Úis_buffer_removedr*  ×  sU   ø€ Üó ô �G‰G×#Ñ#Ü�H‰H×$Ñ$Ü�G‰G×&Ñ&Ü�H‰H×'Ñ'ð	
ôó ð rL   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 rY   )r¬  rn  rª   r  r"   )r…   rª   Úliner®  s      €rJ   rn  zDeferredLine.__init__æ  s+   ø€ Ü‰Ñ˜ÔØˆŒ	Ü˜dÔ$4Ô5Ð5Ð5Ð5rL   c                óF   — t        | j                  «      s| j                  S y rY   )r*  rª   r.  r„   s    rJ   Ú__call__zDeferredLine.__call__ë  s   € Ü  §¡Ô+Ø—9‘9ÐØrL   c                ó.   — t        | j                  |«      S rY   )r,  rª   )r…   r.  s     rJ   Ú	_new_linezDeferredLine._new_lineð  s   € Ü˜DŸI™I tÓ,Ð,rL   )rª   rm   r.  rm   r´   )r.  rm   r]   r,  )r_   r`   ra   rŸ   rn  r0  r2  r¯  r°  s   @rJ   r,  r,  ã  s   ø„ ÙRõ6ó
÷
-rL   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ú{r>   ú})ÚrangeÚ	writelineÚ_indent)Ú_r¬   r…   s    €€rJ   Úctxz BracesBuffer.indent.<locals>.ctxö  sÈ   øè ø€ ä˜6“]ò "�Ø—‘˜sÔ#Ø—’ Ñ!–ð"ô ˜F˜7“^ò $�Ø—’ Ñ!•Ø—‘˜sÕ#ð$ó Ü˜F˜7“^ò "�Ø—‘˜sÔ#Ø—’ Ñ!–ð"ô ˜6“]ò $�Ø—’ Ñ!•Ø—‘˜sÕ#ñ$ùs   ƒC C#)r]   úIterator[None])Ú
contextlibÚcontextmanager)r…   r¬   r=  s   `` rJ   ÚindentzBracesBuffer.indentõ  s$   ù€ Ü	×	"Ñ	"õ	$ó 
#ð	$ñ ‹uˆrL   N)r>   )r¬   rð   r]   z'contextlib.AbstractContextManager[None])r_   r`   ra   rA  rd   rL   rJ   r4  r4  ô  s   „ õrL   r4  c                  ó"   — e Zd ZU ded<   ded<   y)ÚInplacedBufferrm   rp   rž   Úother_namesNr·   rd   rL   rJ   rC  rC  	  s   … ØƒOØÔrL   rC  c                  ó.   — e Zd ZU ded<   dZded<   dd„Zy)	ÚArgNamerm   rª   Fr^   Úis_constexprc                óB   — | j                   › | j                  rd› �S d› �S )Nz : tl.constexprrG  )rª   rG  r„   s    rJ   Ú	full_namezArgName.full_name  s*   € Ø—)‘)�°$×2CÒ2CÐ.ÐLÐMÐMÈÐLÐMÐMrL   Nr�   )r_   r`   ra   r    rG  rI  rd   rL   rJ   rF  rF    s   … à
ƒIà€L�$ÓôNrL   rF  c                  ó   — e Zd Zdd„Zy)Ú
RemovedArgc                 ó   — y)NÚREMOVEDrd   r„   s    rJ   Ú__str__zRemovedArg.__str__  s   € ØrL   Nr�   )r_   r`   ra   rN  rd   rL   rJ   rK  rK    s   „ ôrL   rK  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
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y))Ú
KernelArgsc                ó~   — |j                  |t        «      }t        |t        «      r| › t	        |«      › �x||<   }|S |S rY   )ÚgetrM  r  rK  r|  )rw   Úodictrª   ÚresultÚ
new_results        rJ   Ú_lookupzKernelArgs._lookup!  sD   € ð */¯©°4¼Ó)AˆÜ�fœjÔ)Ø*0¨´#°e³*°Ð'>Ð>ˆE�$‰K˜*ØÐØˆrL   c                óJ   — i | _         i | _        i | _        i | _        g | _        y rY   )Úinput_buffersÚoutput_buffersÚinplace_buffersr©  Úworkspace_argsr„   s    rJ   rn  zKernelArgs.__init__-  s)   € Ø-/ˆÔØACˆÔØMOˆÔØ/1ˆŒØ24ˆÕrL   c                ó¶   — dj                  dj                  t        t        | j                  | j
                  | j                  | j                  g«      «      «      S )NzKernelArgs({})rP   )Úformatr}   Úmapr  rX  rY  rZ  r©  r„   s    rJ   Ú__repr__zKernelArgs.__repr__4  sS   € Ø×&Ñ&Ø�I‰IÜÜà×*Ñ*Ø×+Ñ+Ø×,Ñ,ØŸ™ð	óó
ó
ð 	
rL   c                ó"   — t        | t        «      S rY   )r  rK  r)  s    rJ   Ú_buffer_is_marked_removedz$KernelArgs._buffer_is_marked_removedC  s   € ô ˜$¤
Ó+Ð+rL   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)r1   ru   rž  Úmutation_real_namerR  r&  rY  r	   rm   rZ  rC  rp   r‘  rV  rX  rÈ   s     rJ   ÚinputzKernelArgs.inputH  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¸$Ó?Ð?rL   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)r1   ru   rž  re  rR  r&  rZ  r	   rC  rp   rV  rY  rÈ   s     rJ   rŒ  zKernelArgs.outputT  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ÐArL   c                óf  — || 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)	rZ  r  rK  rD  ÚappendrT  r|  r+   rC  )r…   Ú
input_nameÚoutput_nameÚbufÚvalÚalive_buffersr&  Úinplace_buffer_idxs           rJ   Úmake_inplacezKernelArgs.make_inplace\  s<  € Ø $×"6Ñ"6Ñ6Ð6Ð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   ÂD)Â>D.c                ó@  — t        |t        j                  |«      t        j                  j                  «       t         j                  «       ¬«      }t        | j                  «      D ]Ž  \  }}t         j                  ||«      r?|j                  }t         j                  ||«      | j                  |<   |j                  |fc S |j                  |j                  k7  r|j                  |j                  k7  rŒŽJ ‚ | j                  j                  |«       |j                  dfS )až  
        Allocate or extend a workspace buffer of nbytes bytes.

        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:
            nbytes (sympy.Expr): The number of bytes to allocate.
            zero_fill (bool): Whether to initialize the buffer to zero.

        Returns:
            Tuple[str, int]: A tuple containing:
                - "ws_ptr": A string identifier for the workspace pointer.
                - offset: An integer representing the byte offset in the workspace.
        )ri   rj   rl   rn   r   )rg   rN   r\   r1   ru   Úget_current_device_or_throwrx   r  r[  rz   ri   r}   rp   rn   rk  )r…   Únbytesr[   Úargr  Úexisting_argr¬   s          rJ   Ú	workspacezKernelArgs.workspacev  s÷   € ô. ØÜ'×1Ñ1°)Ó<Ü—7‘7×6Ñ6Ó8Ü#×/Ñ/Ó1ô	
ˆô  )¨×)<Ñ)<Ó=ò 	‰OˆAˆ|Ü×$Ñ$ \°3Ô7Ø%×+Ñ+�Ü)5×):Ñ):¸<ÈÓ)M�×#Ñ# AÑ&Ø#×.Ñ.°Ð6Ò6à×'Ñ'¨3¯>©>Ò9Ø ×+Ñ+¨s¯~©~Ó=ðð>ð	ð 	×Ñ×"Ñ" 3Ô'Ø�~‰~˜qÐ Ð rL   c           
     ó~  — t         j                  j                  «       }t        |t        j
                  t        j                  dd|j                  › d|j                  › �|¬«      }| j                  D ]#  }|j                  |j                  k(  sŒ||k(  rŒ#J ‚ | 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<  )ri   rj   rr   rp   rn   rl   )r1   ru   rt  rg   rN   rb   r¡   Úuint32r  r=  r[  rp   rk  )r…   Úmin_sizeÚcurrent_devicerv  rw  s        rJ   Ú
semaphoreszKernelArgs.semaphoresŸ  s®   € ô Ÿ™×<Ñ<Ó>ˆÜØÜ'×6Ñ6Ü—,‘,Ø Ø$ ^×%8Ñ%8Ð$9¸¸>×;OÑ;OÐ:PÐQØ!ô
ˆð !×/Ñ/ò 	+ˆLØ×&Ñ&¨#¯.©.Ó8Ø˜lÓ*Ð*Ð*ð	+ð 	×Ñ×"Ñ" 3Ô'Ø�~‰~ÐrL   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)r>   N)r‘  )ru  rm  rª   s     €rJ   rw  z)KernelArgs.seed_offset.<locals>.<genexpr>Ã  s   øè ø€ ÒU 1À!Ç,Á,ÈtÕBTœQÑUùs   ƒ!š!)r  rð   r  r   r9  r©  rT  Úsum)r…   rª   r´  s    ` rJ   Úseed_offsetzKernelArgs.seed_offset»  sž   ø€ Ü˜%¤Ô%Ð;¬¨U«°UÐ';Ó;Ð%ä—‘˜eÓ$ˆØ�D—M‘MÑ!Ø—=‘= Ñ'Ð'Ø�4—=‘=×'Ñ'Ó)Ñ)à�&œÓU¨¯©×(<Ñ(<Ó(>ÔUÓUÐVÐWð ð  $ˆ�‰�eÑØˆrL   c                óÒ   — t        |t        j                  «      sJ t        |«      |f«       ‚|j                  dk(  rd| j
                  |<   y| j                  d| j
                  |«      S )Nrc  Úks)r  r   ÚSymbolr  rª   r©  rV  rÈ   s     rJ   r‹   zKernelArgs.sizeÈ  sX   € Ü˜$¤§¡Ô-ÐA´°T³
¸DÐ/AÓAÐ-Ø�9‰9˜ÒØ"(ˆD�M‰M˜$ÑØØ�|‰|˜D $§-¡-°Ó6Ð6rL   c                ó¬   — t        | j                  j                  «       | j                  j                  «       | j                  j                  «       «      S rY   )r   rX  ÚkeysrY  r©  r„   s    rJ   Ú
call_nameszKernelArgs.call_namesÏ  sA   € ÜØ×Ñ×#Ñ#Ó% t×':Ñ':×'?Ñ'?Ó'AÀ4Ç=Á=×CUÑCUÓCWó
ð 	
rL   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)rZ  rR  r  rK  rp   rY  rX  )r…   rª   Úinplacedrm  s       rJ   Úarg_namezKernelArgs.arg_nameÔ  s}   € ð ×'Ñ'×+Ñ+¨D°$Ó7ˆØÐ¬
°8¼ZÔ(HØ×&Ñ&Ð&Ø×)Ñ)×-Ñ-¨d°DÓ9ˆØÐ"¬:°kÄ:Ô+NØÐØ×!Ñ!×%Ñ% d¨DÓ1Ð1rL   c                ó   — |S rY   rd   )r…   rn  rr   s      rJ   Úwrap_ptr_argzKernelArgs.wrap_ptr_argà  s   € Øˆ
rL   c                ó   — t        |«      S rY   )rm   )r…   r‹   s     rJ   Úwrap_size_argzKernelArgs.wrap_size_argã  s   € Ü�4‹yÐrL   c                óÚ  — ddl m}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 ]”  \  }}|j                  d|› d|› �«       |j                  | j'                  |«      «       |j                  d|› �«       t        j                  j(                  sŒlt        j                  j(                  j+                  |«       Œ– | j,                  rJ d«       ‚|||fS )	Nr>   )ÚDTYPE_TO_CPPÚ
INDEX_TYPErN  z* Ú*zconst ú zWorkspace not supported on CPU )Ú	cpp_utilsr’  r“  r+   rZ  rT  r  rK  rD  rp   r1   ru   r‰   rk  rŽ  rX  rk  rY  r©  r�  Úwrapper_codeÚensure_size_computedr[  )r…   r’  r“  Ú	call_argsÚarg_defsÚ	arg_typesr‹  ÚouterÚinnerrr   Ú	cpp_dtypeÚmaybe_inners               rJ   Úcpp_argdefszKernelArgs.cpp_argdefsæ  s¸  € ß7àˆ	ØˆØˆ	Ü˜t×3Ñ3×:Ñ:Ó<Ó=ò 		.ˆHÜ˜(¤JÔ/ØØ×(Ñ(¨Ñ,ˆEØ×'Ñ'ˆEÜ—G‘G×%Ñ% eÓ,ˆEØ$ UÑ+ˆIØ�O‰O˜y˜k¨¨E¨7Ð3Ô4Ø×Ñ˜T×.Ñ.¨u°eÓ<Ô=Ø×Ñ 	˜{¨!˜_Õ-ð		.ð !×.Ñ.×4Ñ4Ó6ò 	4‰LˆE�5Ø˜×,Ñ,Ñ,ØÜ—G‘G×%Ñ% eÓ,ˆEØ$ UÑ+ˆIØ�O‰O˜f Y K¨r°%°Ð9Ô:Ø×Ñ˜T×.Ñ.¨u°eÓ<Ô=Ø×Ñ˜v i [°Ð2Õ3ð	4ð #'×"5Ñ"5×";Ñ";Ó"=ò 	.ÑˆE�;Ø˜×,Ñ,Ñ,´
¸;Ì
Ô0SØÜ—G‘G×%Ñ% eÓ,ˆEØ$ UÑ+ˆIØ�O‰O˜y˜k¨¨K¨=Ð9Ô:Ø×Ñ˜T×.Ñ.¨u°eÓ<Ô=Ø×Ñ 	˜{¨!˜_Õ-ð	.ð !ŸM™M×/Ñ/Ó1ò 	A‰LˆE�5Ø�O‰O˜f Z L°°%°Ð9Ô:Ø×Ñ˜T×/Ñ/°Ó6Ô7Ø×Ñ˜v j \Ð2Ô3Ü�w‰w×#Ó#Ü—‘×$Ñ$×9Ñ9¸%Õ@ð	Að ×&Ò&ÐIÐ(IÓIÐ&Ø˜ IÐ-Ð-rL   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 )NrN  )rª   r«   rr   )r+   rZ  rT  r  rK  rk  rF  rp   rD  r1   ru   r‰   r©   r   rX  rk  rY  r©  r  r±   r—  r˜  r[  rn   rr   )	r…   rš  r™  r›  Úprecompile_argsr‹  rœ  r�  rv  s	            rJ   Ú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ôõð	ô "Ø×Ñ×$Ñ$Ó&¨×(;Ñ(;×(AÑ(AÓ(Có
ò 	‰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Ð>Ð>rL   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rY   )r+   rZ  rT  r  rK  rD  r1   ru   r(  r'  rX  rp   rY  r	   rm   )r…   r‹  Úothers      rJ   Ú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 rY   )r  rY  rR  rM  rK  rZ  rÈ   s     rJ   Ú
is_removedzKernelArgs.is_removedO  sK   € ÜØ×Ñ×#Ñ# D¬'Ó2´Jó
ò Nä˜×-Ñ-×1Ñ1°$¼Ó@Ä*ÓMð	NrL   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 )NrN  )
r   r+   rZ  rT  r  rK  rÕ  rD  rY  rk  )r…   Ú	live_outsr‹  rœ  r�  s        rJ   Úlive_output_bufferszKernelArgs.live_output_buffersW  s¢   € Ü“Lˆ	Ü˜t×3Ñ3×:Ñ:Ó<Ó=ò 	4ˆHÜ˜(¤JÔ/ØØ�M‰M˜(×.Ñ.¨rÑ2Õ3ð	4ð !×/Ñ/×5Ñ5Ó7ò 	!‰LˆE�5Ø˜×,Ñ,Ñ,´
¸5Ä*Ô0MØØ�M‰M˜%Õ ð	!ð ÐrL   N)rw   rm   rS  z6Union[dict[_T, Union[str, RemovedArg]], dict[_T, str]]rª   rA   r]   rm   ©r]   r¡  r�   )rª   r   r]   r^   rï   )rl  rm   rm  rm   r]   r¡  )ru  rh   r[   r^   r]   ztuple[str, int])r}  rh   r]   rm   )rª   rm   r´  rð   r]   rm   )rª   r†  r]   rm   )r]   zIterator[str])rª   rm   r]   r­   )rn  rm   rr   rq   r]   rm   )r‹   Ú
SymbolLiker]   rm   )r]   z&tuple[list[str], list[str], list[str]])r]   z?tuple[list[ArgName], list[str], list[KernelArgType], list[Any]])r]   zIterator[tuple[str, str]]rŽ  )r]   zOrderedSet[str])r_   r`   ra   rc   rV  rn  r_  ra  rf  rŒ  rr  rx  r  rƒ  r‹   r‰  rŒ  rŽ  r�  r   r£  r¦  r¨  r«  rd   rL   rJ   rP  rP     sµ   „ Øð	Øð	àEð	ð ð	ð 
ò		ó ð	ó5ó
ð ò,ó ð,ó
@óBó4ó4'!óRó8ó7ó
ó

2óóó'.ðR/?à	Hó/?óbUóNô
rL   rP  c                  óZ   ‡ — 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 ‚|| _        || _        d| _        || _        y r·  )r¬  rn  r  r   rª   ÚboundsÚ	use_countrr   )r…   rª   r°  rr   r®  s       €rJ   rn  zCSEVariable.__init__k  s<   ø€ ô 	‰ÑÔÜ˜&¤+Ô.Ð.Ð.ØˆŒ	ØˆŒØˆŒØˆ�
rL   c                ó   — | j                   S rY   r)  r„   s    rJ   rN  zCSEVariable.__str__x  s   € Ø�y‰yÐrL   c                ó,   — t        | j                  «      S rY   )Úhashrª   r„   s    rJ   Ú__hash__zCSEVariable.__hash__{  s   € Ü�D—I‘I‹ÐrL   c                óX   — t        |t        «      xr |j                  | j                  k(  S rY   )r  r
  rª   )r…   r¥  s     rJ   Ú__eq__zCSEVariable.__eq__~  s!   € Ü˜%¤Ó-ÒI°%·*±*ÀÇ	Á	Ñ2IÐIrL   c                 ó   — y rY   rd   )r…   rª   r^  r_  s       rJ   Úupdate_on_argszCSEVariable.update_on_args�  s   € ØrL   c                óN   — | j                   j                  › d| j                  ›d�S r	  )r®  r_   rª   r„   s    rJ   r_  zCSEVariable.__repr__„  s$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯I©I¨=¸Ð:Ð:rL   rY   )rª   rm   r°  úValueRanges[Any]rr   r£  r�   )r]   rð   )r¥  Úobjectr]   r^   )rª   rm   r^  r   r_  r   r]   r¡  )r_   r`   ra   rŸ   rn  rN  rµ  r·  r¹  r_  r¯  r°  s   @rJ   r
  r
  d  sH   ø„ ñð (,ð	àðð !ðð %õ	óóóJó÷;rL   r
  ÚAugmentedKeyT)ÚdefaultÚCSEVariableType)Úboundr¾  .c                  ó>  — e Zd ZdZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
dd
„Zdd„Z ej                  «       ddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z ej                  «       df	 	 	 	 	 dd„Z ej                  «       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 rY   )rw   ÚsuffixÚ_cacheÚname_prefixÚstore_cacheÚreduction_cacheÚ	itertoolsri   Úiter_buffer_idsr   Úinvalidated_storesÚvarname_map)r…   rw   rÄ  rÆ  Úiter_buffersrÇ  rÈ  rÌ  s           rJ   rn  zCSE.__init__–  sm   € ð ˆŒØˆŒØFHˆŒØ&ˆÔØALÒARÐPRˆÔàÒ!˜rð 	Ôð 6BÒ5VÄYÇ_Á_ÓEVˆÔÜ3=³<ˆÔØ7BÒ7HÀbˆÕrL   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 rY   )rÇ  rk  rË  rÕ  rÅ  )r…   Ú	keep_varsrª   Útmprl  rm  s         rJ   Ú
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)rw   rÄ  rÆ  rÍ  rÇ  rÌ  rÈ  )r  rw   rÄ  rÆ  rÊ  rÇ  rÌ  rÈ  r„   s    rJ   Úclonez	CSE.clone¸  sP   € ØŒt�D‹zØ—;‘;Ø—;‘;Ø×(Ñ(Ø×-Ñ-Ø×(Ñ(Ø×(Ñ(Ø ×0Ñ0ô
ð 	
rL   c                óÂ   — | j                  «       }t        | j                  «      |_        t        | j                  «      |_        t        | j                  «      |_        |S )zNReturn a copy of using ScopedDict so changes to *_cache aren't visible in self)rÓ  r&   rÅ  rÈ  rÇ  )r…   Únew_cses     rJ   Úscoped_copyzCSE.scoped_copyÃ  sH   € à—*‘*“,ˆÜ# D§K¡KÓ0ˆŒÜ",¨T×-AÑ-AÓ"BˆÔÜ(¨×)9Ñ)9Ó:ˆÔØˆrL   c                ó"   — t        t        |«      S )z@Override this method to augment cache key with backend specifics)r	   r½  ©r…   Ú	cache_keys     rJ   Úaugment_keyzCSE.augment_keyË  s   € ä”M 9Ó-Ð-rL   c                ó@   — || j                   | j                  |«      <   y rY   ©rÅ  rÚ  )r…   rÙ  ro  s      rJ   ÚputzCSE.putÏ  s   € Ø36ˆ�‰�D×$Ñ$ YÓ/Ò0rL   c                ó<   — | j                  |«      | j                  v S rY   )rÚ  rÅ  rØ  s     rJ   ÚcontainszCSE.containsÒ  s   € Ø×Ñ 	Ó*¨d¯k©kÐ9Ð9rL   c                óX   — | j                   j                  | j                  |«      d «      S rY   )rÅ  rR  rÚ  rØ  s     rJ   Útry_getzCSE.try_getÕ  s"   € Ø�{‰{�‰˜t×/Ñ/°	Ó:¸DÓAÐArL   c                ó>   — | j                   | j                  |«         S rY   rÜ  rØ  s     rJ   rR  zCSE.getØ  s   € Ø�{‰{˜4×+Ñ+¨IÓ6Ñ7Ð7rL   T)r°  ÚwriteÚ
assignmentrr   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»| 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+                  |	«       |rKt4        j6                  j8                  r1|�/d| j,                  › |› dt;        |«      › d�}
|j+                  |
«       |S |j                  j                  |«      |_        |xj                  dz  c_        |S )	Nr>   T)Ú	only_oncez =z = útl.static_assert(ú
.dtype == rQ   )r  r.   r´  r
  r°  Útightenr±  r	   r¿  r$   Úgetvaluer"   r.  rm   rá  ÚnewvarrÝ  r1   r'  Úcurrent_nodeÚcodegen_originating_infor:  rw   ÚsplicerÄ  r2  r   Útest_configsÚruntime_triton_dtype_assertr*   )r…   r«   r²   r°  rã  rä  rr   rÙ  r;  r.  Úassert_lines              rJ   ÚgeneratezCSE.generateÛ  si  € ô �dœHÔ%Ø—:‘:ˆDá™
Ð"Ð"Ü�dœKÔ(ð Ÿ+™+×-Ñ-¨fÓ5ˆDŒKØ�NŠN˜aÑ�NÜœ¨Ó.Ð.Ü˜œnÔ-ØŸ™›‰IÜ˜Ô.Ô/ØŸ	™	‰Iä˜d¤CÔ(Ð(Ð(ØˆIØ�l‰l˜9Ó%ˆÚØ—+‘+˜f eÓ,ˆCØ�H‰H�Y Ô$ÚÜ—8‘8×(Ò(Ü—H‘H×)Ñ)×BÑBØ¨$ð Cô ô ˜d¤NÔ3Ù!Ø×(Ñ(¨D¯K©K¨=¸¸¸RÐ)@ÔAØ—M‘M $Ô'Ø×$Ñ$ T§[¡[Ô1ð2 ˆ
ô1   Ô&6Ô7Ù%Ð%˜:Ø×$Ñ$ØŸ™¨$¯+©+¨°s°e¸3¸t¿y¹y¸kÈ$Ï+É+ÈÐ'WÓXôð, ˆ
ñ% "Ø"&§+¡+ ¨s¨e°3°t°f¸T¿[¹[¸MÐJ™à"& ¨¯© }Ð5˜Ø×$Ñ$ TÔ*ñ #Ü"×/Ñ/×KÒKØ!Ð-à(9¸$¿+¹+¸ÀsÀeÈ:ÔVaÐbgÓVhÐUiÐijÐ&k˜Ø×(Ñ(¨Ô5ð ˆ
ð Ÿ™×+Ñ+¨FÓ3ˆCŒJØ�MŠM˜QÑ�Màˆ
rL   c                ó¬   — | j                   › t        | j                  «      › �}t        j                  j                  |||«      }|| j                  |<   |S rY   )rÆ  rt   rÊ  r1   r'  Úcreate_cse_varrÌ  )r…   r°  rr   Úvar_namer;  s        rJ   rë  z
CSE.newvar  sR   € ð
 ×&Ñ&Ð'¬¨T×-AÑ-AÓ(BÐ'CÐDˆÜ�h‰h×%Ñ% h°¸Ó>ˆØ%(ˆ×Ñ˜Ñ"Øˆ
rL   c                ó²   ‡— t        j                  ‰| j                  vˆfd„«       t        j                  j                  ‰||«      }|| j                  ‰<   |S )Nc                 ó   •— d‰ › �S )Nzduplicate name: rd   r)  s   €rJ   r#  zCSE.namedvar.<locals>.<lambda>0  s   ø€ Ð4DÀTÀFÐ2K€ rL   )r¡   Ú_check_valuerÌ  r1   r'  rô  )r…   rª   r°  rr   r;  s    `   rJ   ÚnamedvarzCSE.namedvar)  sS   ø€ ô 	×ÑØ˜×(Ñ(Ð(Ó*Kô	
ô �h‰h×%Ñ% d¨F°EÓ:ˆØ!$ˆ×Ñ˜ÑØˆ
rL   )rG  rG  rÐ  NNNN)rw   rm   rÄ  rm   rÆ  rm   rÍ  zOptional[itertools.count[int]]rÇ  z.Optional[MutableMapping[str, CSEVariableType]]rÈ  z<Optional[MutableMapping[ReductionCacheKey, CSEVariableType]]rÌ  z$Optional[dict[str, CSEVariableType]])rÏ  zOrderedSet[CSEVariable]r]   r¡  ©r]   ztyping.Self)rÙ  rm   r]   r½  )rÙ  rm   ro  r¿  r]   r¡  )rÙ  rm   r]   r^   )rÙ  rm   r]   zOptional[CSEVariableType])rÙ  rm   r]   r¿  )r«   r$   r²   zCUnion[str, CSEVariable, OpsValue, IndentedBuffer, DeferredLineBase]r°  r»  rã  r^   rä  r^   rr   r£  r]   r¿  )r°  r»  rr   r£  r]   r¿  )rª   rm   r°  r»  rr   r£  r]   r¿  )r_   r`   ra   rŸ   rn  rÑ  rÓ  rÖ  rÚ  rÝ  rß  rá  rR  r   Úunknownrò  rë  rù  rd   rL   rJ   rÂ  rÂ  “  sw  „ Ù*ð ØØ Ø7;ØFJð Ø<@ðIàðIð ðIð ð	Ið
 5ðIð DðIð
ðIð :óIó0ó	
óó.ó7ó:óBó8ð $7 ;×#6Ñ#6Ó#8ØØØ'+ñBàðBð RðBð
 !ðBð ðBð ðBð %ðBð 
óBðL $7 ;×#6Ñ#6Ó#8Ø'+ðà ðð %ðð 
ó	ð $7 ;×#6Ñ#6Ó#8Ø'+ð	àðð !ðð %ð	ð
 
ôrL   rÂ  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 rY   )r¬  rn  r?  Ú	ExitStackÚ
exit_stack©r…   r®  s    €rJ   rn  zCodeGen.__init__8  s   ø€ Ü‰ÑÔÜ$×.Ñ.Ó0ˆ�rL   c                ó:   — | j                   j                  «        | S rY   )r   Ú	__enter__r„   s    rJ   r  zCodeGen.__enter__<  s   € Ø�‰×!Ñ!Ô#ØˆrL   c                ó>   — | j                   j                  |||«       y rY   )r   Ú__exit__)r…   Úexc_typeÚexc_valÚexc_tbs       rJ   r  zCodeGen.__exit__@  s   € Ø�‰× Ñ  ¨7°FÕ;rL   r¬  rú  ©r  r   r  r   r  r   r]   r¡  )r_   r`   ra   rn  r  r  r¯  r°  s   @rJ   rý  rý  7  s   ø„ õ1ó÷<rL   rý  c                  ó  ‡ — 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(d„Z	 	 	 	 	 	 	 	 	 	 d)d„Z	 	 	 	 	 	 	 	 d*d„Z	 	 	 	 	 	 	 	 	 	 d+d„Zd,d„Z	 	 d#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-d„Zed.d„«       Z	 d'	 	 	 	 	 	 	 	 	 d/d„Z	 	 	 	 	 	 	 	 	 	 d0d„Zd1d„Zd2ˆ fd„Zd3ˆ fd„Zd4d„Zd5d„Zd5d„Z	 	 	 	 d6d„Zd7d„Z d8d„Z!ˆ xZ"S )9ÚKernelrG  rm   Únewvar_prefixrÄ  Nz'Optional[Callable[[], OpsHandler[Any]]]Ú	overridesc                óP  •— t         ‰| �  «        |rt        xj                  dz  c_        |xs
 t	        «       | _        t        «       | _        t        «       | _        t        «       | _	        d| _
        d| _        t        | j                  | j                  «      | _        t!        t"           «       | _        t!        t"           «       | _        d | _        d | _        d | _        d | _        t!        t"           «       | _        t!        t"           «       | _        i | _        d| _        d | _        y )Nr>   r   )r¬  rn  r   Úgenerated_kernel_countrP  r^  r$   ÚloadsÚcomputeÚstoresÚnum_loadÚnum_reductionrÂ  r  rÄ  Úcser   rm   Úmust_keep_buffersÚstore_buffer_namesÚ
_load_maskÚ_load_otherrì  Únode_to_boundsr&  r(  Úinplace_update_buffersÚmin_elem_per_threadÚkernel_name)r…   r^  Úincrease_kernel_countr®  s      €rJ   rn  zKernel.__init__I  sì   ø€ ô 	‰ÑÔÙ Ü×*Ò*¨aÑ/Õ*ØÒ(œJ›LˆŒ	Ü#Ó%ˆŒ
Ü%Ó'ˆŒÜ$Ó&ˆŒàˆŒØˆÔä.1°$×2DÑ2DÀdÇkÁkÓ.RˆŒÜ!+¬C¡Ó!2ˆÔÜ",¬S¡/Ó"3ˆÔØ)-ˆŒØ48ˆÔà59ˆÔØOSˆÔä)¬#™Ó0ˆÔÜ",¬S¡/Ó"3ˆÔð
 79ˆÔ#à#$ˆÔ Ø*.ˆÕrL   c              #  ó¼   K  — | j                   }|| _         |j                  j                  «       j                  «       | _        	 d –— || _         y # || _         w xY w­wrY   )rì  rŸ  r°  Ú
get_boundsr  )r…   r�  Úpriors      rJ   Úset_current_nodezKernel.set_current_nodek  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  rÖ  )	r…   ÚlbÚcbÚsbÚdisallow_storesr  r  r  r  s	            rJ   Úswap_bufferszKernel.swap_buffersu  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                ó   — t         ‚rY   rÇ   rF  s      rJ   rV  zKernel.load’  rÊ   rL   c                óˆ   — | j                   }	 | j                  | _         | j                  ||«      || _         S # || _         w xY w)z+A load the depends on an index we have read)r  r  rV  )r…   rª   r=  r!  s       rJ   Úindirect_loadzKernel.indirect_load•  s8   € à—
‘
ˆð	àŸ™ˆDŒJØ—9‘9˜T 5Ó)àˆD�Jø˜ˆD�Jús	   Ž"8 ¸	Ac                ó   — t         ‚rY   rÇ   rK  s       rJ   rX  zKernel.store_reductionŸ  rÊ   rL   c                ó   — t         ‚rY   rÇ   rH  s        rJ   rW  zKernel.store¢  ó
   € ô "Ð!rL   c                ó   — t         ‚rY   rÇ   rM  s        rJ   rT  zKernel.reduction§  ó
   € ô "Ð!rL   c                ó   — t         ‚rY   rÇ   rQ  s       rJ   rU  zKernel.scan°  s
   € ô "Ð!rL   c                ó   — t         ‚rY   rÇ   rW  s        rJ   rZ  zKernel.sortº  r0  rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Ú
var_rangeszKernel.var_rangesÃ  rÊ   rL   c                ó   — t         ‚)z3
        See [Note: Inductor bucketize op]
        rÇ   r\  s           rJ   rc  zKernel.bucketizeÆ  s
   € ô "Ð!rL   c                ó   — t         ‚rY   rÇ   r„   s    rJ   Úassert_functionzKernel.assert_functionÕ  rî   rL   c           	     óZ  — t        |t        «      rt        |«      }t        |t        «      sJ ‚|�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 )	Nr   z <= z) & (z < rQ   z) | ~(z, "index out of bounds: z"))r  r
  rm   r7  )r…   r;  rB  rC  Úmaskrö  Ú
cond_prints          rJ   Úindirect_assertzKernel.indirect_assertÙ  sù   € ô �cœ;Ô'Ü�c“(ˆCÜ˜#œsÔ#Ð#Ð#Øˆ}¤
¨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ÐUrL   c                ó   — t         ‚rY   rÇ   rA  s        rJ   rD  zKernel.check_bounds÷  r.  rL   c                ó   — t         ‚rY   rÇ   rp  s     rJ   Úindex_to_strzKernel.index_to_strü  rÊ   rL   c           	     ó(  •— t         ‰| �  «        | j                  sJ ‚| j                  j	                  t        j                  t        | | j                  «       «      «      «       | j                  j	                  t        j                  | «      «       | S rY   )	r¬  r  r  r   Úenter_contextr1   Úset_ops_handlerÚCSEProxyÚset_kernel_handlerr  s    €rJ   r  zKernel.__enter__ÿ  sl   ø€ Ü‰ÑÔØ�~Š~Ðˆ~Ø�‰×%Ñ%Ü×Ñœh t¨T¯^©^Ó-=Ó>Ó?ô	
ð 	�‰×%Ñ%¤a×&:Ñ&:¸4Ó&@ÔAØˆrL   c                óH   •— | j                  «        t        ‰| �	  |||«       y rY   )Úremove_kernel_local_buffersr¬  r  )r…   r  r  r  r®  s       €rJ   r  zKernel.__exit__  s    ø€ Ø×(Ñ(Ô*Ü‰Ñ˜ 7¨FÕ3rL   c                ó¨  ‡‡— t         j                  j                  Š‰syt        ˆfd„| j                  D «       «      }t        t
           «       Š| j                  D ]N  }|| j                  vsŒ|| j                  j                  vsŒ+‰j                  ||«      sŒ>‰j                  |«       ŒP ‰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rY   )Úname_to_bufÚdefining_op_name)ru  rn  rž  s     €rJ   rw  z5Kernel.remove_kernel_local_buffers.<locals>.<genexpr>  s;   øè ø€ ò &
àØ�i×+Ñ+Ñ+ð ×!Ñ! #Ñ&×7Ñ7×9ñ&
ùs   ƒ58c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wrY   rd   )ru  rv  Únames_to_removes     €rJ   rw  z5Kernel.remove_kernel_local_buffers.<locals>.<genexpr>,  s   øè ø€ ÒK°a˜Q /Ô1ÑKùr$  )r1   ru   rž  r   r  rm   r  r^  rX  Ú$can_buffer_be_removed_through_fusionrÕ  rZ  r  rK  r}  rD  Úremove_inplace_bufferr(  Úremove_buffer)r…   Úfused_node_namesrª   rn  ÚremoverK  rž  s        @@rJ   rE  z"Kernel.remove_kernel_local_buffers  s*  ù€ ô —G‘G×%Ñ%ˆ	ÙØÜ%ó &
à×.Ñ.ô&
ó 
Ðô
 %¤S™/Ó+ˆØ×+Ñ+ò 	*ˆ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Õ(ñ
	)rL   c                ó    — t         j                  d|«       t        | j                  j                  |<   | j
                  j                  |«       y )Nzremove_buffer(%r))rÍ  rH   rM  r^  rY  r&  rÕ  rÈ   s     rJ   rN  zKernel.remove_buffer3  s;   € ô 	�	‰	Ð% tÔ,Ü)0ˆ�	‰	× Ñ  Ñ&Ø×Ñ× Ñ  Õ&rL   c                ó    — t         j                  d|«       t        | j                  j                  |<   | j
                  j                  |«       y )Nzremoving_inplace_buffer(%r))rÍ  rH   rM  r^  rZ  r&  rÕ  rÈ   s     rJ   rM  zKernel.remove_inplace_buffer;  s9   € Ü�	‰	Ð/°Ô6Ü*1ˆ�	‰	×!Ñ! $Ñ'Ø×Ñ× Ñ  Õ&rL   c           	     óÞ  — t        |t        t        f«      r|D �cg c]  }| j                  |«      ‘Œ c}S t        j
                  j                  j                  |«      }t        |j                  d„ ¬«      }|D �ci c]W  }t        |t        j                  t        j                  t        j                  f«      r|| j                  j!                  |«      “ŒY }}t#        ||«      S c c}w c c}w )Nc                ó   — | j                   S rY   r)  )Úss    rJ   r#  z(Kernel.rename_indexing.<locals>.<lambda>H  s
   € À!Ç&Á&€ rL   )rs  )r  ÚlistÚtupleÚrename_indexingr1   ru   r©  r¦  ÚsortedÚfree_symbolsr   r   ÚUNBACKED_INTÚSIZEÚPRECOMPUTED_SIZEr^  r‹   r)   )r…   r=  r»  Úsorted_symbolsÚreplacementss        rJ   rX  zKernel.rename_indexing@  sÎ   € ô
 �eœd¤E˜]Ô+Ø5:Ö;°�D×(Ñ(¨Õ+Ò;Ð;Ü—‘× Ñ ×)Ñ)¨%Ó0ˆÜ × 2Ñ 2Ñ8HÔIˆð $ö
àÜØä×%Ñ%Ü—I‘IÜ×)Ñ)ðôð ˆt�y‰y�~‰~˜aÓ Ñ ð
ˆð 
ô ˜% Ó.Ð.ùò <ùò
s   ›C%Á;AC*c                ó   — t        |i |¤ŽS rY   )r
  )r…   r^  r_  s      rJ   rô  zKernel.create_cse_varW  s   € Ü˜DÐ+ FÑ+Ð+rL   c                óZ   — |€y| j                   j                  |j                  «       «      S )zC
        Returns arg name of a given input or output node.
        N)r^  rŒ  r˜   )r…   r�  s     rJ   rŒ  zKernel.arg_nameZ  s'   € ð ˆ<ØØ�y‰y×!Ñ! $§-¡-£/Ó2Ð2rL   )NT)r^  zOptional[KernelArgs]r  r^   r]   r¡  )r�  r=   r]   r>  r‹  )r$  r$   r%  úOptional[IndentedBuffer]r&  rb  r]   r>  ©rª   rm   r=  rh   r]   r
  ©rª   rm   r=  rh   r´  r
  r]   r¡  rY   ©
rª   rm   r=  rh   r´  r
  rI  r0   r]   r¡  ©
rr   rq   rN  rq   rO  r/   r´  ú+Union[CSEVariable, tuple[CSEVariable, ...]]r]   rg  ©rR  r‰  rS  zUCallable[[tuple[CSEVariable, ...], tuple[CSEVariable, ...]], tuple[CSEVariable, ...]]rT  útuple[CSEVariable, ...]r]   ri  ©
rR  r‰  rT  ri  rX  r^   rY  r^   r]   ri  )r]   zdict[sympy.Symbol, sympy.Expr]©rT  r
  r]  rŒ  r^  r
  r_  rq   r`  r^   ra  r�  rb  zOptional[CSEVariable]r]   r
  r�   )
r;  zUnion[CSEVariable, str]rB  r­   rC  r­   r9  z!Optional[Union[CSEVariable, str]]r]   rm   r‡  )r=  rh   r]   rm   rú  r	  r¬  ©rª   rm   r]   r¡  )r=  z;Union[list[sympy.Expr], tuple[sympy.Expr, ...], sympy.Expr]r]   rh   )r^  r   r_  r   r]   r
  )r�  r8   r]   r­   )#r_   r`   ra   r  r    rÄ  r  rn  r?  r@  r"  r(  rV  r+  rX  rW  rT  rU  rZ  r4  rc  r¤   r7  r;  rD  r>  r  r  rE  rN  rM  rX  rô  rŒ  r¯  r°  s   @rJ   r  r  D  s§  ø… Ø€M�3ÓØ€FˆCÓØ9=€IÐ6Ó=ð PTð /Ø(ð /ØHLð /à	õ /ðD ×Ñò&ó ð&ð ×Ñð (,Ø'+ð	FàðFð %ðFð %ð	Fð
 
òFó ðFó8"óó"ð SWð"Øð"Ø *ð"Ø3>ð"ØFOð"à	ó"ð
"àð"ð ð"ð &ð	"ð
 ;ð"ð 
5ó"ð"à'ð"ð
ð"ð (ð"ð 
!ó"ð"à'ð"ð (ð"ð ð	"ð
 ð"ð 
!ó"ó"ð 48Ø04ð"àð"ð Cð"ð &ð	"ð
 $ð"ð ð"ð 1ð"ð .ð"ð 
ó"ð ò"ó ð"ð 37ðVà$ðVð ðVð ð	Vð
 0ðVð 
óVð<"Øð"Ø&0ð"Ø9=ð"ØFJð"à	ó"ó
"õõ4ó%)óN'ó'ð
/ØPð/à	ó/ó.,÷3rL   r  c                  ó8   — e Zd ZU dZded<   dZded<   dZded	<   y)
rr  r–  zClassVar[str]rs  Nr£  rr   rG  rm   Úops_name)r_   r`   ra   rs  r    rr   rn  rd   rL   rJ   rr  rr  c  s!   … à"€CˆÓ"à#'€EÐ Ó'Ø€HˆcÔrL   rr  c                 ób   — 	 dd l } | j                  | j                  ¬«      S # t        $ r Y y w xY w)Nr   )Ú	undefined)Újinja2ÚEnvironmentÚStrictUndefinedÚImportError)rq  s    rJ   Ú
jinja2_envru  k  s?   € ðÛà×!Ñ!Ø×,Ñ,ð "ó 
ð 	
øô ò Ùðús   ‚" ¢	.­.c                  ó„   — e Zd ZdZe	 d		 	 	 	 	 	 	 d
d„«       Zedd„«       Ze	 	 	 	 dd„«       Zdd„Z	 	 	 	 	 	 dd„Z	dd„Z
y)ÚKernelTemplatezg
    Base class for defining kernel templates.

    Children classes: TritonTemplate, CUDATemplate
    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 )NTr>   r•  rG  )Ú
splitlinesr|  r}   )ÚsourceÚnum_indentsÚindents_spacingÚlinesr.  s        rJ   Ú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 rY   )r¬  rn  ÚmessageÚlinenorª   ÚfilenameÚoriginal_error)r…   r‡  r®  s     €rJ   rn  zRKernelTemplate._template_from_string.<locals>.DetailedTemplateSyntaxError.__init__–  s>   ø€ Ü‘GÑ$Ø&×.Ñ.Ø&×-Ñ-Ø&×+Ñ+Ø&×/Ñ/ô	ð +9�DÕ'rL   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: rz  z	Context:
r   r   r>   z: --> Úcolumnz     r•  z^
z:     )r…  r„  r«  r‡  rz  ÚsplitÚmaxÚminr|  r9  rŠ  )r…   Ú
error_infor}  ÚstartÚendr  s         rJ   rN  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ð &Ð%rL   )r‡  r€  r]   r¡  r�   )r_   r`   ra   rn  rN  r¯  r°  s   @rJ   ÚDetailedTemplateSyntaxErrorr‚  •  s   ø„ õ9÷&rL   r‘  )ru  rw  r~  Úfiltersrq  r€  Úfrom_string)rz  Úenvr€  Úer‘  s        rJ   Ú_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 rY   )rR  )rª   rT  Ú_get_dtype_realÚlookups     €€rJ   r‰   z1KernelTemplate._fake_get_dtype.<locals>.get_dtypeÀ  s'   ø€ Ø—Z‘Z Ó%ˆFØÐ!Ø�Ù" 4Ó(Ð(rL   )rª   rm   r]   rq   )r1   ru   r‰   r  rV  rW  r˜   )Ú	fake_outsrn  r‰   r™  rš  s      @@rJ   Ú_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
c                ó   — || _         y rY   r)  rÈ   s     rJ   rn  zKernelTemplate.__init__È  s	   € Øˆ�	rL   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_inford   )	rk  rò  rS   rÍ  Úinfor  ÚgetEffectiveLevelrF   ÚINFO)r…   Úchoicesr_  r•  s       rJ   Úmaybe_append_choicez"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Ç   )r…   r_  s     rJ   rò  zKernelTemplate.generateâ  s
   € ô
 "Ð!rL   N)é   )rz  rm   r{  rð   r|  rð   r]   rm   )rz  rm   r]   r   )r›  zUnion[list[Buffer], Buffer]r]   zCallable[[str], torch.dtype]rl  )r£  z	list[Any]r_  r   r]   zOptional[NotImplementedError])r_  r   r]   r6   )r_   r`   ra   rŸ   rc   r~  r–  rœ  rn  r¤  rò  rd   rL   rJ   rw  rw  w  sž   „ ñð à>?ðØðØ"%ðØ8;ðà	òó ðð ò*8ó ð*8ðX ðØ.ðà	%òó ðó"ðØ ðØ,/ðà	&óô."rL   rw  c                  ó"  ‡ — e 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d„Zˆ xZS )rB  c                ób   •— t         ‰| �  «        ddlm}  |«       | _        || _        || _        y )Nr   ©ÚValueRangeAnalysis)r¬  rn  r°  rª  Úvr_analysisr'  Úparent_handler)r…   r'  r¬  rª  r®  s       €rJ   rn  zCSEProxy.__init__í  s+   ø€ Ü‰ÑÔÝ/á-Ó/ˆÔØˆŒØ,ˆÕrL   c                óÐ   ‡‡‡‡‡‡‡—  | j                   ‰g‰¢­i ‰¤ŽŠ t        | j                  ‰«      ‰i ‰¤ŽŠt        «       ŠdŠdˆˆˆˆˆˆˆfd„}t	        j
                  |‰«      S )Nr   c                óè  •— t         j                  j                  �[t         j                  j                  «       j                  }|dk(  rt
        j                  dk(  n|dk7  rt
        j                  dk(  nd}nd}|r%‰
dk(  r‰j                  }n t        ‰‰
«      ‰i ‰	¤Ž}nd }t         j                  j                  j                  t         j                  j                  | ‰|¬«      }t
        j                  j                  rY|rWddlm} t%        |t&        t(        f«      r|‰   }t         j                  j                  j+                  d	|› d
 ||«      › d�«       ‰dz  Š|j-                  ‰
‰‰	«       |S )Nr  r  r)  FÚmasked)r°  rr   r   )r*   rç  rè  rQ   r>   )r1   ru   r~  rt  r  r   r!  r&  rr   rw  r'  r  rò  r  rï  rð  Útorch._inductor.codegen.tritonr*   r  rV  rW  r:  r¹  )rm  Ú
device_strÚtriton_backendr’  Úcsevarr*   r^  r°  Údtype_handlerr_  rª   Ú
output_idxr´  s         €€€€€€€rJ   Údo_csez!CSEProxy._default.<locals>.do_cseý  si  ø€ ä�w‰w×%Ñ%Ð1ÜŸW™W×@Ñ@ÓB×GÑG�
ð " UÒ*ô ×&Ñ&¨(Ò2ð " UÒ*ô  ×,Ñ,°Ò8àñ ð "'�ñ Ø˜8Ò#Ø#(§;¡;‘Lð$¤7Ø%Øó$ð ð$'ð  &ñ$'‘Lð  $�ä—X‘X—\‘\×*Ñ*Ü—‘× Ñ ØØØ"ð	 +ó ˆFô ×"Ñ"×>Ò>Á>ÝFô ˜l¬T´5¨MÔ:Ø#/°
Ñ#;�Lä—‘× Ñ ×*Ñ*Ø'¨ x¨z¹+ÀlÓ:SÐ9TÐTUÐVôð ˜!‰OˆJà×!Ñ! $¨¨fÔ5àˆMrL   )rm  rm   r]   r
  )Ú_bound_variablerw  r¬  r   ÚpytreeÚtree_map)	r…   rª   r^  r_  r¶  r°  r´  rµ  r´  s	    ``` @@@@rJ   Ú_defaultzCSEProxy._defaultõ  sh   þ€ Ø%�×%Ñ% dÐ<¨TÒ<°VÑ<ˆà2”˜×+Ñ+¨TÓ2°DÐC¸FÑCˆÜ2Ó4ˆàˆ
÷1	ó 1	ôf �‰˜v uÓ-Ð-rL   c                óÎ  ‡— ddl m} ddlm} t	        t
        j                  |«      rt        j                  «       S t
        j                  j                  Š‰j                  |k(  rt| j                  j                  �^t	        | j                  j                  t        «      s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'        t)        ||«      «      } t+        | j,                  |«      |Ž 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   r©  )ÚTritonTemplateKernelc              3  ó:   •K  — | ]  }|‰j                   v –— Œ y ­wrY   )r‡  )ru  rU  Úfx_nodes     €rJ   rw  z+CSEProxy._bound_variable.<locals>.<genexpr>D	  s   øè ø€ ÒV¨1�1˜Ÿ™Ô&ÑVùs   ƒ)Úset_indirectrT  rU  c                óˆ   — t        | t        «      r| j                  S t        | t        j                  «      rt        | «      S | S rY   )r  r
  r°  r   rª  r   rº  s    rJ   Úarg_to_boundz.CSEProxy._bound_variable.<locals>.arg_to_boundM	  s2   € Ü˜a¤Ô-ØŸ8™8�OÜ ¤5§:¡:Ô.Ü& q›>Ð)à�HrL   )r»  r   r]   r   )r°  rª  Úselect_algorithmr¼  r  r1   r'  r   rû  Úinterpreterrì  r‡  r  ÚdictrR  r   Úcompute_all_boundsr«  r%  rV  r^  rw  r«  )	r…   rª   r^  r_  rª  r¼  rÁ  Ú
arg_boundsr¾  s	           @rJ   r·  zCSEProxy._bound_variable2	  s  ø€ õ
 	0Ý;ä”a—h‘hÐ 4Ô5Ü×&Ñ&Ó(Ð(ä—-‘-×,Ñ,ˆØ�>‰>˜TÒ! d§k¡k×&@Ñ&@Ð&LÜ˜dŸk™k×8Ñ8¼$Ô?Ð?Ð?Ø—;‘;×-Ñ-×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Ð?Ð?Ü×"Ñ"Ó$Ð$rL   c                ó  — t        |t        «      rt        j                  |«      }t        |t        j                  «      sJ |«       ‚|j
                  j                  dk  �r�|rt        j                  |t        j                  |t        j                  «      «      }|j
                  j                  dk\  r0t        j                  |d«      }t        j                  |||«      }n|}t        j                   «       }|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,                  ||¬«      }| j.                  j1                  |||«      }
t3        |«      ro|j
                  j                  dk\   }t        |t        j"                  «       xs |j
                  j                  |k   }| j&                  j5                  |
|||«       |
S )Nr   rN  )r°  )r  rð   r   r9  rª  r°  rB  r,   rÕ  rM  r¡   ÚlongrC  Últrô  r   rû  ÚNumberr   r'  r  rò  r  r¬  r>  r#   rD  )r…   r;  r‹   r<  r=  ÚstmrÉ  Ú
new_boundsÚ
neg_boundsÚposÚ	sympy_varÚassert_lowerÚassert_uppers                rJ   r>  zCSEProxy.indirect_indexingY	  sø  € ô �dœCÔ Ü—=‘= Ó&ˆDÜ˜$¤§
¡
Ô+Ð1¨TÓ1Ð+ð �:‰:×Ñ˜aÓÙÜ—g‘g˜c¤3§>¡>°$¼¿
¹
Ó#CÓD�à—:‘:×#Ñ# qÒ(ÜŸ™  Q›�BÜŸ)™) B¨¨SÓ1‘Cà�ô %×,Ñ,Ó.ˆJØ�z‰zœ[×0Ñ0Ó2Ò2´zÀ$ÌÏÉÔ7Uð !ŸZ™Z¬+´v°g¸rÓ*BÑB�
Ü(Ø×$Ñ$ tÑ+¨Z×-=Ñ-=ÀÑ-Dó�
ð —:‘:×#Ñ# qÒ(ØŸ*™*¤{°1´fÓ'=Ñ=�CØ!+¨cÑ!1�Jà—+‘+—/‘/×*Ñ*¨4¯;©;×+>Ñ+>ÀÈJÐ*ÓWˆCà×'Ñ'×9Ñ9¸#¸tÀUÓKˆ	Ü˜5Ô!Ø #§
¡
× 0Ñ 0°AÑ 5Ð6ˆLä)¨$´·±Ó=Ð=ò Ø—
‘
× Ñ  4Ñ'ðBˆLð �K‰K×$Ñ$ Y°°lÀLÔQØÐrL   c                ó>   — | j                   j                  ||||«      S rY   )r'  rD  rA  s        rJ   rD  zCSEProxy.check_boundsŠ	  s   € ð �{‰{×'Ñ'¨¨d°E¸5ÓAÐArL   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 r·  )r'  r  rË  r1   r  rÕ  r   r   ÚTMPr+  rÇ  rV  r±  r  )r…   rª   r=  rÇ  Úouts        rJ   rV  zCSEProxy.load�	  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Ñ%Õ Øˆ
rL   c                ól  — || j                   j                  j                  |<   | j                   j                  r{|t        j
                  j                  v r^| j                   j                  j                  |«      }|j                  «       D ]%  }|| j                   j                  j                  |<   Œ' y y y rY   )	r'  r  rÇ  rì  r1   ru   Úname_to_bufferÚ
get_outputÚget_mutations)r…   rª   r´  rn  Ú
other_names        rJ   Ú_update_store_cachezCSEProxy._update_store_cache 	  s�   € Ø,1ˆ�‰�‰×#Ñ# DÑ)Ø�;‰;×#Ò#¨´·±×0FÑ0FÑ(FØ—+‘+×*Ñ*×5Ñ5°dÓ;ˆCØ!×/Ñ/Ó1ò @�
Ø:?�—‘—‘×+Ñ+¨JÒ7ñ@ð )GÐ#rL   c                óì   — | j                   j                  j                  |«       |€| j                  ||«       |t        j
                  j                  vr| j                   j                  ||||¬«      S y )N)rI  )r'  r  rÕ  rÛ  r1   ru   r&  rW  rH  s        rJ   rW  zCSEProxy.store§	  sd   € ð 	�‰×&Ñ&×*Ñ*¨4Ô0Øˆ<Ø×$Ñ$ T¨5Ô1Ø”q—w‘w×.Ñ.Ñ.Ø—;‘;×$Ñ$ T¨5°%¸dÐ$ÓCÐCØrL   c                óä   — | j                   j                  j                  |«       | j                  ||«       |t        j
                  j                  vr| j                   j                  |||«      S y rY   )r'  r  rÕ  rÛ  r1   ru   r&  rX  rK  s       rJ   rX  zCSEProxy.store_reduction±	  sZ   € Ø�‰×&Ñ&×*Ñ*¨4Ô0Ø× Ñ   uÔ-à”q—w‘w×.Ñ.Ñ.Ø—;‘;×.Ñ.¨t°U¸EÓBÐBð /rL   c                ó|   — | j                   xj                  dz  c_        | j                   j                  ||||«      S r·  )r'  r  rT  rM  s        rJ   rT  zCSEProxy.reduction¸	  s4   € ð 	�‰×!Ò! QÑ&Õ!Ø�{‰{×$Ñ$ U¨I°~ÀuÓMÐMrL   c                ó<   — | j                   j                  |||«      S rY   )r'  rU  rQ  s       rJ   rU  zCSEProxy.scanÂ	  s   € ð �{‰{×Ñ ¨
°FÓ;Ð;rL   c                ó>   — | j                   j                  ||||«      S rY   )r'  rZ  rW  s        rJ   rZ  zCSEProxy.sortÍ	  s   € ð �{‰{×Ñ ¨°¸
ÓCÐCrL   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'  rc  r\  s           rJ   rc  zCSEProxy.bucketizeÖ	  s1   € ðL �{‰{×$Ñ$ØØØØØØØó
ð 	
rL   )r'  zKernel[Any]r¬  zOpsHandler[Any])rª   rm   r^  ztuple[Any, ...]r_  zdict[str, Any]r]   r   )rª   rm   r^  r   r_  r   r]   r»  r„  )
r;  r
  r‹   r…  r<  r^   r=  r^   r]   r†  r‡  rc  )rª   rm   r´  r
  r]   r¡  rY   re  rd  rf  rh  rj  r‹  rk  )r_   r`   ra   rª   rn  rº  r·  r>  rD  rV  rÛ  rW  rX  rT  rU  rZ  rc  r¯  r°  s   @rJ   rB  rB  ê  sÕ  ø„ Ø€Dõ-ó;.óz%%ðV Øð/àð/ð %ð/ð ð	/ð
 ð/ð 
ó/ðbBØðBØ&0ðBØ9=ðBØFJðBà	óBó
ó"@ð SWðØðØ *ðØ3>ðØFOðà	óóCðNàðNð ðNð &ð	Nð
 ;ðNð 
5óNð	<à'ð	<ð
ð	<ð (ð	<ð 
!ó	<ðDà'ðDð (ðDð ð	Dð
 ðDð 
!óDð  48Ø04ðN
àðN
ð CðN
ð &ð	N
ð
 $ðN
ð ðN
ð 1ðN
ð .ðN
ð 
÷N
rL   rB  )rI   rm   r]   r¡  rY   )
rl   rm   ró   r½   rô   r¿   rõ   rÁ   r]   r¡  )rl   úUnion[torch.device, str, None]r]   zOrderedSet[BackendFeature])rl   râ  r  rø   r]   r^   )rl   rm   r]   zOptional[SchedulingConstructor])F)rl   rm   r  r^   r]   rÁ   r¬  )r=  úSequence[sympy.Expr]r>  rã  r?  rã  r]   rœ   )rl   rm   rB  rÅ   r]   r¡  )rl   rm   r]   rÅ   )r]  rm   r^  r   r_  r   r]   r£  )r  rm   r]   r^   rd   rŽ  )r]   r   )³Ú
__future__r   r?  ÚdataclassesÚenumr~  rÉ  rF   rÎ  rŽ  ÚreÚtypingr   r   r   r   r   r	   r
   r   r   r   r   r   Útyping_extensionsr   r   r¡   Útorch.fxÚtorch._prims_commonr   Útorch.utilsr   r¸  Útorch.utils._ordered_setr   Útorch.utils._sympy.numbersr   Útorch.utils._sympy.printersr   Ú_PythonPrinterÚtorch.utils._sympy.symbolr   r   r   Útorch.utils._sympy.value_rangesr   r   rG  r   r   Údtype_propagationr   Úops_handlerr   r    Úutilsr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Úvirtualizedr,   r-   r.   r/   r0   r1   Úcollections.abcr2   r3   r4   r�   r5   r6   r7   r8   r�  r:   rž  r;   r<   r=   r2  r@   rA   r½   r  r¿   rm   r†  r­  rû  Ú_loggingÚgetArtifactLoggerr_   rD   Ú	getLoggerrÍ  rK   rN   rg   Ú	dataclassr©   r±   r¶   rº   r¼   ÚKernelArgTyperÃ   r    rÅ   rñ   rö   rø   r  r  r  r  Ú	lru_cacher  r@  rC  rI  Úbfloat16r[  Úfloat16r^   rÂ  Úfloat64Úint8Úint16r¹  r\  r¢   Úuint16r|  Úuint64rJ  ra  rc  r²  ÚcompileÚ
IGNORECASEr  r  r  r�  rÄ  ÚINT_TO_FLOATr}  r*  r,  r4  rC  rF  rK  rM  rP  r
  r½  r¿  rW  rr   ÚReductionCacheKeyrÂ  rý  r  rr  ru  rw  rB  rˆ   s   0rJ   ú<module>r	     s8  ðÞ "ã Û Û Û Û Û Û Û Û 	Û ß Ý ÷
÷ 
õ 
õ &ã ã Û Ý ?Ý )Ý /Ý -Ý Gß OÑ Oß Dç Ý :ß ;÷÷ ÷ ñ ÷ Q× Pñ ßBÑBç>Ó>Ý$ßDÑDÝ-á	�‹€BØ$ h¨yÑ&9Ð%:¸NÐ%JÑKÐØÐ2Ñ3ÐØ�s˜EŸL™LÐ(Ñ)€Jð €Fà�~‰~×/Ñ/°¸*ÓE€Ø€g×Ñ˜Ó!€ó=ô
/˜Ÿ	™	ô /ñ( �TÔ÷[ð [ó ð[ð| ×Ñ÷#ð #ó ð#ð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷=ð =ó ð=ð �l I¨wÐ8HÈ,ÐVÑW€à,.€Ð)Ó .÷3"ñ 3"ðl :<Ð Ð6Ó ;ð8 @Dð	Øðà,ðð /ðð !=ð	ð
 
óô
&�Tô 
&ð3Ø*ð3àó3ð$3Ø*ð3Ø5Cð3à	ó3óUð
 &+ð
Øð
Ø"ð
à!ó
ð €×Ñ�TÓòJó ðJðZ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‰òð>Ð Ð:ó ð,'Øð'àð'ð ð'ð ô	'÷T_Bñ _BôD%�Nô %÷S1ñ S1ðl "�r—z’zÐ";À2Ç=Â=ÔQÐ ôôa;Ð#Ð%5°zÀ#±ô a;ðH ×Ñ÷-ð -ó ð-ñ  6:ó _6ÙØ;×HÒHÙ-Øõð_6ñ Ø;×HÒHÙ/Ù-Ø õ	ð_6ñ Ø;×HÒHÙ/Ù-Ø õ	ð_6ñ$ Ø;×HÒHÙ/Ù-Ø õ	ð%_6ñ0 Ø;×HÒHÙ/Ù-Ø õ	ð1_6ñ< Ø;×HÒHÙ*Ù)Øõ	ð=_6ñL Ø;×HÒHÙ(Ù0Øõ	ðM_6ñX 	Ø;×HÒHÙ6Ù6Ù>Øõ	ðY_6ñh Ø;×HÒHÙ1Øõði_6ñr Ø;×HÒHÙ2Øõðs_6ñ| Ø;×HÒHÙ1Øõð}_6ñF Ø;×HÒHÙ2Ø õðG_6ñP Ø;×HÒHÙ%Ù8Ù$ØõðQ_6ñ^ 	Ø;×HÒHÙ&Ù%Øõ		ð__6ñj Ø;×HÒHÙ%Ù8Øõ	ðk_6ñv 	Ø;×HÒHÙ&Øõ	ðw_6ñ@ Ø;×HÒHÙ+ØõðA_6ñL %Ø;×HÒHÙ8Ù8Ø)õ	ðM_6ñX %Ø;×HÒHÙ8Ù8Ø)õ	ðY_6ñd %Ø;×HÒHÙ8Ø)õðe_6ñn %Ø;×HÒHÙ8Ø)õðo_6ñz 
Ø;×HÒHÙ'Øõ
ð{_6ñD Ø;×HÒHÙ(ØõðE_6ñN Ø;×HÒHÙSØõðO_6ñ\ ,Ø;×HÒHÙ?Ø0õð]_6ñf ,Ø;×HÒHÙ?Ø0õðg_6ñr &Ø;×HÒHÙ9Ø*õðs_6ñ| 
Ø;×HÒHÙ*Øõ
ð}_6ñF )Ø;×HÒHÙDØ-õðG_6ñP )Ø;×HÒHÙDØ-õðQ_6ñZ )Ø;×HÒHÙDØ-õð[_6ñd )Ø;×HÒHÙDØ-õðe_6ñn (Ø;×HÒHÙCØ,õðo_6ñx $1Ø;×HÒHÙLØ5õ$ðy_6ñB $1Ø;×HÒHÙLØ5õ$ðC_6ñL $1Ø;×HÒHÙLØ5õ$ðM_6ñV $1Ø;×HÒHÙLØ5õ$ðW_6ñ` 'Ø;×HÒHÙBØ+õða_6ñj (Ø;×HÒHÙCØ,õðk_6ñt (Ø;×HÒHÙCØ,õðu_6Ð Ð2ó _ôD	ô-Ð#ô -ô"�>ô ô*�Zô ð
 ×Ñ÷Nð Nó ðN÷ñ ñ
 ‹,€÷Añ A÷H
!;ñ !;ñH ˜°Ô5€ÙÐ+°;ÈÔT€áØØ�ŠØØˆk˜5 ¨cÐ!1Ñ2Ð2Ñ3ð	5ñÐôaˆ'�/ =Ð0Ñ
1ô a÷H
<ñ 
<ô\3ˆW�g˜oÑ.ô \3ð~ ×Ñ÷ð ó ðð €×Ñ�TÓóó ð÷p"ñ p"ôfz
ˆ~õ z
ùòw7s   Í
c