§
    OŠtjî§  ã            	      ó  — d dl mZ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mZ d dl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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&m'Z' ddl(m)Z) d dl*m+Z+m,Z,m-Z- dZ.dZ/ ed¦  «        Z0 G d„ dej1        ¦  «        Z2dGd„Z3 G d„ d¦  «        Z4dHd„Z5 G d„ dee0         ¦  «        Z6d„ Z7d „ Z8d!„ Z9 G d"„ d#¦  «        Z:i Z;e G d$„ d%¦  «        ¦   «         Z<d&„ Z=d'„ Z> G d(„ d)e:e6e0         ¦  «        Z?edId,„¦   «         Z@edddddddd-œdJd8„¦   «         Z@	 dKdddddddd-œdLd;„Z@ G d<„ d=¦  «        ZA G d>„ d?¦  «        ZBd@„ ZCdA„ ZD G dB„ dCe:¦  «        ZE G dD„ dEe:¦  «        ZFdF„ ZGdS )Mé    )ÚannotationsÚdivisionN)Údefaultdict)Ú	dataclass)Úcached_property)	ÚCallableÚGenericÚIterableÚOptionalÚTypeVarÚoverloadÚDictÚAnyÚTuple)ÚBaseBackend)Ú
ModuleTypeé   )Úknobsé   )Údriver)Ú_async_compile)Úfind_paths_ifÚget_iterable_pathÚtype_canonicalisation_dictÚis_namedtuple)Úget_cache_key)Úget_cache_invalidating_env_varsÚnative_specialize_implÚirztriton.languagez"triton.experimental.gluon.languageÚTc                  ó„   ‡ — e Zd ZdZdˆ fd„Zed„ ¦   «         Zd„ Zd„ Zdd	„Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚDependenciesFinderaÑ  
    This AST visitor is used to find dependencies of a JITFunction. This can
    be used to invalidate a JITFunction's hash when its source code -- or
    that of its dependencies -- changes.

    This visitor also keeps track of the global variables touched by the
    JITFunction.  When we launch the kernel, we check that these have the same
    values as they did when we ran this visitor.  If not, we raise an error (or
    otherwise we could recompile).
    ÚreturnÚNonec                ó"  •— t          ¦   «                              ¦   «          || _        t          j        |                     d¦  «        ¦  «        | _        || _        || _        h d£| _	        t          t          ddh| _        i | _        d| _        d S )Núutf-8>
   ÚintÚlenÚmaxÚminÚlistÚfloatÚprintÚrangeÚgetattrÚ
isinstanceÚcopyÚmathF)ÚsuperÚ__init__ÚnameÚhashlibÚsha256ÚencodeÚhasherÚglobalsÚ	nonlocalsÚsupported_python_builtinsÚGLUON_MODULEÚTRITON_MODULEÚsupported_modulesÚused_global_valsÚvisiting_arg_default_value)Úselfr5   r:   r;   ÚsrcÚ	__class__s        €úP/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/triton/runtime/jit.pyr4   zDependenciesFinder.__init__.   s“   ø€ Ý‰Œ×ÒÑÔÐØˆŒ	Ý”n S§Z¢Z°Ñ%8Ô%8Ñ9Ô9ˆŒð ˆŒØ"ˆŒð*
ð *
ð *
ˆÔ&õ ÝØØð	"
ˆÔð" TVˆÔà*/ˆÔ'Ð'Ð'ó    c                ó4   — | j                              ¦   «         S ©N)r9   Ú	hexdigest©rB   s    rE   ÚretzDependenciesFinder.retY   s   € àŒ{×$Ò$Ñ&Ô&Ð&rF   c                óŽ   — t          j        |j        ¦  «        rdS t          |dd¦  «        }|                     t
          ¦  «        S )NTÚ
__module__Ú )ÚinspectÚ	isbuiltinÚfuncr/   Ú
startswithr>   )rB   ÚnoderQ   Úmodules       rE   Ú_is_triton_builtinz%DependenciesFinder._is_triton_builtin]   sA   € ÝÔ˜TœYÑ'Ô'ð 	Ø�4Ý˜˜|¨RÑ0Ô0ˆØ× Ò ¥Ñ/Ô/Ð/rF   c                ó0  — t          |t          ¦  «        sJ ‚| j                             ¦   «         |j                             ¦   «         z  D ]V}|\  }}| j        |         \  }}|j        |         \  }}||k    r)t	          d|› d|› d| j        › d|j        › d|› d�¦  «        ‚ŒW| j                             |j        ¦  «         |j        }|t          t          |dd¦  «        ¦  «        z  }| j                             |                     d	¦  «        ¦  «         d S )
NúGlobal variable z has value z when compiling z, but inner kernel z has conflicting value z7 from when it was first compiled.  This is not allowed.ÚnoinlineFr&   )r0   ÚJITCallabler@   ÚkeysÚRuntimeErrorr5   Ú__name__ÚupdateÚ	cache_keyÚstrr/   r9   r8   )rB   rQ   ÚkÚvar_nameÚ_Úv1Úv2Úfunc_keys           rE   Ú_update_hashzDependenciesFinder._update_hashc   s_  € Ý˜$¥Ñ,Ô,Ð,Ð,Ð,ð Ô&×+Ò+Ñ-Ô-°Ô0E×0JÒ0JÑ0LÔ0LÑLð 	ð 	ˆAØ‰KˆH�aØÔ)¨!Ô,‰EˆB�ØÔ)¨!Ô,‰EˆB�Ø�RŠxˆxÝ"ð P xð  Pð  P¸Bð  Pð  PÐPTÔPYð  Pð  PÐnrÔn{ð  Pð  Pð  UWð  Pð  Pð  Pñô ð ð ð 	Ô×$Ò$ TÔ%:Ñ;Ô;Ð;à”>ˆØ•C�  j°%Ñ8Ô8Ñ9Ô9Ñ9ˆØŒ×Ò˜8Ÿ?š?¨7Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4rF   Nc                óR  — ddl m} |�t          |¦  «        t          u rd S t	          |dd¦  «        r!|j        D ]}|                      |¦  «         Œd S t	          |dd¦  «        rd S t	          |dd¦  «        dk    rd S t          |t          ¦  «        r|  	                    |¦  «         d S t          |¦  «        r7t          |t          ¦  «        s"t          ||¦  «        st          d	|› �¦  «        ‚| j        rd S |�-t          j        |¦  «        |f| j        |t!          |¦  «        f<   d S )
Nr   ©Ú	constexprÚ__triton_aggregate__FÚ__triton_builtin__rM   rN   ztriton.language.extra.libdevicez!Unsupported function referenced: )Úlanguage.coreri   Útyper   r/   Ú
hash_attrsÚrecord_referencer0   rY   rf   Úcallabler[   rA   r1   Údeepcopyr@   Úid)rB   ÚvalÚvar_dictr5   ri   Úattrs         rE   ro   z#DependenciesFinder.record_referenceu   sd  € Ø-Ð-Ð-Ð-Ð-Ð-ð ˆ;�$˜s™)œ)¥zÐ1Ð1ØˆFå�3Ð.°Ñ6Ô6ð 	Øœð ,ð ,�Ø×%Ò% dÑ+Ô+Ð+Ð+ØˆFå�3Ð,¨eÑ4Ô4ð 	ØˆFõ �3˜ bÑ)Ô)Ð-NÒNÐNØˆFå�c�;Ñ'Ô'ð 	Ø×Ò˜cÑ"Ô"Ð"ØˆFå�C‰=Œ=ð 	J¥¨CµÑ!6Ô!6ð 	J½zÈ#ÈyÑ?YÔ?Yð 	JÝÐHÀ3ÐHÐHÑIÔIÐIð Ô*ð 	ØˆFàÐÝ;?¼=ÈÑ;MÔ;MÈxÐ:XˆDÔ! 4­¨H©¬Ð"6Ñ7ØˆrF   c                óþ   ‡ — t          |j        ¦  «        t          j        u r|j        S |j        ‰ j        v rd S ˆ fd„} ||j        ¦  «        \  }}|j        ‰ j        v r|S ‰                      |||j        ¦  «         |S )Nc                ó    •— ‰j                              | d ¦  «        }|�	|‰j         fS ‰j                             | d ¦  «        }|�	|‰j        fS dS )N©NN)r:   Úgetr;   )r5   rs   rB   s     €rE   Úname_lookupz2DependenciesFinder.visit_Name.<locals>.name_lookup¤   sZ   ø€ Ø”,×"Ò" 4¨Ñ.Ô.ˆCØˆØ˜DœLÐ(Ð(Ø”.×$Ò$ T¨4Ñ0Ô0ˆCØˆØ˜DœNÐ*Ð*Ø�:rF   )rm   ÚctxÚastÚStorerr   Úlocal_namesr<   ro   )rB   rS   rz   rs   rt   s   `    rE   Ú
visit_NamezDependenciesFinder.visit_Nameœ   s˜   ø€ Ý�”‰>Œ>�SœYÐ&Ð&Ø”7ˆNàŒ7�dÔ&Ð&Ð&à�4ð	ð 	ð 	ð 	ð 	ð $˜ D¤GÑ,Ô,‰ˆˆXØŒ7�dÔ4Ð4Ð4ØˆJà×Ò˜c 8¨T¬WÑ5Ô5Ð5Øˆ
rF   c                ó*   ‡ — ˆ fd„|j         D ¦   «         S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )Úvisit)Ú.0ÚeltrB   s     €rE   ú
<listcomp>z2DependenciesFinder.visit_Tuple.<locals>.<listcomp>·   s#   ø€ Ð5Ð5Ð5 C�—
’
˜3‘”Ð5Ð5Ð5rF   )Úelts©rB   rS   s   ` rE   Úvisit_TuplezDependenciesFinder.visit_Tuple´   s!   ø€ ð 6Ð5Ð5Ð5¨4¬9Ð5Ñ5Ô5Ð5rF   c                óf  — |                       |j        ¦  «        }t          |t          j        ¦  «        r4|                       |j        ¦  «        }t          |t          j        ¦  «        °4t          |dd¦  «        }|�	|| j        v rd S t          ||j        ¦  «        }|                      |¦  «         |S )Nr\   rN   )	rƒ   Úvaluer0   r|   Ú	Attributer/   r?   ru   ro   )rB   rS   ÚlhsÚlhs_namerK   s        rE   Úvisit_Attributez"DependenciesFinder.visit_Attribute¹   s¤   € Ø�jŠj˜œÑ$Ô$ˆÝ˜�cœmÑ,Ô,ð 	(Ø—*’*˜SœYÑ'Ô'ˆCõ ˜�cœmÑ,Ô,ð 	(å˜3 
¨BÑ/Ô/ˆØˆ;˜( dÔ&<Ð<Ð<Ø�4Ý�c˜4œ9Ñ%Ô%ˆØ×Ò˜cÑ"Ô"Ð"Øˆ
rF   c                óf   — d„ |j         j         D ¦   «         | _        |                      |¦  «         d S )Nc                ó   — h | ]	}|j         ’Œ
S r‚   ©Úarg)r„   r“   s     rE   ú	<setcomp>z7DependenciesFinder.visit_FunctionDef.<locals>.<setcomp>Æ   s   € Ð>Ð>Ð>¨˜CœGÐ>Ð>Ð>rF   )Úargsr~   Úgeneric_visitrˆ   s     rE   Úvisit_FunctionDefz$DependenciesFinder.visit_FunctionDefÄ   s6   € à>Ð>¨t¬y¬~Ð>Ñ>Ô>ˆÔØ×Ò˜4Ñ Ô Ð Ð Ð rF   c                ó.  ‡ — ˆ fd„}t          j        |j        |j        |j        r|j        gng |j        ¦  «        D ]}‰                      |¦  «         Œ ||j        ¦  «         |j        �‰                      |j        ¦  «          ||j	        ¦  «         d S )Nc                óŠ   •— 	 ‰j         rJ ‚d‰_         | D ]}|�‰                     |¦  «         Œ	 d‰_         d S # d‰_         w xY w)NTF)rA   rƒ   )ÚdefaultsÚexprrB   s     €rE   Úvisit_defaultsz:DependenciesFinder.visit_arguments.<locals>.visit_defaultsÕ   sp   ø€ ð8ØÔ:Ð:Ð:Ð:Ø26�Ô/Ø$ð )ð )�DØÐ'ØŸ
š
 4Ñ(Ô(Ð(øð)ð 38�Ô/Ð/Ð/ø°%�Ô/Ð7Ð7Ð7Ð7s	   ƒ,9 ¹	A)
Ú	itertoolsÚchainÚposonlyargsr•   ÚvarargÚ
kwonlyargsrƒ   Úkw_defaultsÚkwargrš   )rB   rS   rœ   r“   s   `   rE   Úvisit_argumentsz"DependenciesFinder.visit_argumentsÉ   s°   ø€ ð	8ð 	8ð 	8ð 	8ð 	8õ ”? 4Ô#3°T´YÐQUÔQ\Ð@dÀÄÀÀÐbdÐfjÔfuÑvÔvð 	ð 	ˆCØ�JŠJ�s‰OŒOˆOˆOàˆ�tÔ'Ñ(Ô(Ð(àŒ:Ð!Ø�JŠJ�t”zÑ"Ô"Ð"àˆ�t”}Ñ%Ô%Ð%Ð%Ð%rF   c                óÌ   — |                       |¦  «        }t          |t          ¦  «        r| xj        t	          |¦  «        z  c_        d S | j                             |¦  «         d S rH   )rƒ   r0   r+   r~   ÚsetÚadd)rB   rS   Útargets      rE   ÚvisitAssnTargetz"DependenciesFinder.visitAssnTargeté   sd   € ð —’˜DÑ!Ô!ˆÝ�f�dÑ#Ô#ð 	)ØÐÔ¥ F¡¤Ñ+ÐÔÐÐàÔ× Ò  Ñ(Ô(Ð(Ð(Ð(rF   c                ó¾   — t          |j        ¦  «        dk    rt          d¦  «        ‚|                      |j        d         ¦  «         |                      |¦  «         d S )Nr   z2Simultaneous multiple assignment is not supported.r   )r(   ÚtargetsÚ	TypeErrorr©   r–   rˆ   s     rE   Úvisit_AssignzDependenciesFinder.visit_Assignò   s^   € ÝˆtŒ|ÑÔ Ò!Ð!õ
 ÐPÑQÔQÐQà×Ò˜Tœ\¨!œ_Ñ-Ô-Ð-ð 	×Ò˜4Ñ Ô Ð Ð Ð rF   c                ód   — |                       |j        ¦  «         |                      |¦  «         d S rH   ©r©   r¨   r–   rˆ   s     rE   Úvisit_AnnAssignz"DependenciesFinder.visit_AnnAssignÿ   ó4   € Ø×Ò˜Tœ[Ñ)Ô)Ð)ð 	×Ò˜4Ñ Ô Ð Ð Ð rF   c                ód   — |                       |j        ¦  «         |                      |¦  «         d S rH   r¯   rˆ   s     rE   Ú	visit_ForzDependenciesFinder.visit_For  r±   rF   )r#   r$   rx   )r\   rM   Ú__qualname__Ú__doc__r4   ÚpropertyrK   rU   rf   ro   r   r‰   r�   r—   r¤   r©   r­   r°   r³   Ú__classcell__©rD   s   @rE   r"   r"   "   s  ø€ € € € € ð	ð 	ð)0ð )0ð )0ð )0ð )0ð )0ðV ð'ð 'ñ „Xð'ð0ð 0ð 0ð5ð 5ð 5ð$%ð %ð %ð %ðNð ð ð06ð 6ð 6ð
	ð 	ð 	ð!ð !ð !ð
&ð &ð &ð@)ð )ð )ð!ð !ð !ð!ð !ð !ð!ð !ð !ð !ð !ð !ð !rF   r"   r#   r_   c                óŠ  — dd l mc m} t          | t          ¦  «        �r|                      ¦   «         } |                      d¦  «        rH|                      d¦  «        } t          | ¦  «        } |                      d¦  «        sJ ‚d| dd …         z   S |  	                    d¦  «        rdt          | d d…         ¦  «        z   S |                      d¦  «        rdt          | dd …         ¦  «        z   S |                      d¦  «        r"t          |                      d¦  «        ¦  «        S nut          | |j
        ¦  «        rdt          | j        ¦  «        › �S t          | |j        ¦  «        r| j        } n,t          | t          ¦  «        r| j        } nt	          | ¦  «        } t!          j        |                      d	d
¦  «        | ¦  «        S )Nr   zconst ÚconstÚ*ú*kr   éÿÿÿÿztl.Ú_trN   )Útriton.language.coreÚlanguageÚcorer0   r_   ÚstriprR   ÚremoveprefixÚ_normalize_tyÚendswithÚpointer_typeÚ
element_tyÚdtyper5   rm   r\   r   ry   Úreplace)ÚtyrÁ   s     rE   rÄ   rÄ     sº  € Ø'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ý�"•cÑÔñ Ø�XŠX‰ZŒZˆØ�=Š=˜Ñ"Ô"ð 	!Ø—’ Ñ)Ô)ˆBÝ˜rÑ"Ô"ˆBØ—=’= Ñ%Ô%Ð%Ð%Ð%Ø˜"˜Q˜R˜Rœ&‘=Ð Ø�;Š;�sÑÔð 	0Ø� r¨#¨2¨#¤wÑ/Ô/Ñ/Ð/Ø�=Š=˜ÑÔð 	/Ø� r¨!¨"¨"¤vÑ.Ô.Ñ.Ð.Ø�=Š=˜ÑÔð 	9Ý  §¢°Ñ!7Ô!7Ñ8Ô8Ð8ð	9å	�B˜Ô)Ñ	*Ô	*ð Ø1•= ¤Ñ/Ô/Ð1Ð1Ð1Ý	�B˜œ
Ñ	#Ô	#ð ØŒWˆˆÝ	�B�Ñ	Ô	ð ØŒ[ˆˆå�‰WŒWˆÝ%Ô)¨"¯*ª*°T¸2Ñ*>Ô*>ÀÑCÔCÐCrF   c                  ó¸   — e Zd ZdZdd	„Zed
„ ¦   «         Zedd„¦   «         Zedd„¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zed„ ¦   «         ZdS )ÚKernelParamzBRepresents a parameter (name plus metadata) to a @jit'ed function.Únumr'   Úparamúinspect.ParameterÚdo_not_specializeÚboolÚdo_not_specialize_on_alignmentc                ó>   — || _         || _        || _        || _        d S rH   )rÍ   Ú_paramrÐ   rÒ   )rB   rÍ   rÎ   rÐ   rÒ   s        rE   r4   zKernelParam.__init__.  s&   € àˆŒØˆŒØ!2ˆÔØ.LˆÔ+Ð+Ð+rF   c                ó   — | j         j        S rH   )rÔ   r5   rJ   s    rE   r5   zKernelParam.name5  s   € àŒ{ÔÐrF   r#   r_   c                óŽ   — | j         j        r| j         j        t          j        j        k    rdS t          | j         j        ¦  «        S )NrN   )rÔ   Ú
annotationrO   Ú	ParameterÚemptyrÄ   rJ   s    rE   r×   zKernelParam.annotation9  s<   € àŒ{Ô%ð 	¨¬Ô)?Å7ÔCTÔCZÒ)ZÐ)ZØ�2Ý˜Tœ[Ô3Ñ4Ô4Ð4rF   c                óä   — | j         }|                     d¦  «        r|dd …         }n|                     d¦  «        r
|dd …         }|t          t          j        ¦   «         ¦  «        v r| j         S dS )Nr¼   r   r»   r   rN   )r×   rR   r¦   r   Úvalues)rB   Úas     rE   Úannotation_typezKernelParam.annotation_type?  sw   € àŒOˆØ�<Š<˜ÑÔð 	Ø�!�"�"”ˆAˆAØ�\Š\˜#ÑÔð 	Ø�!�"�"”ˆAØ•Õ.Ô5Ñ7Ô7Ñ8Ô8Ð8Ð8Ø”?Ð"ØˆrrF   c                ó   — d| j         v S ©Nri   )r×   rJ   s    rE   Úis_constexprzKernelParam.is_constexprJ  s   € à˜dœoÐ-Ð-rF   c                óZ   — | j         rdS d| j        v p| j                             d¦  «        S )NFrº   r¼   )rà   r×   rR   rJ   s    rE   Úis_constzKernelParam.is_constN  s4   € àÔð 	Ø�5Ø˜$œ/Ð)ÐM¨T¬_×-GÒ-GÈÑ-MÔ-MÐMrF   c                ó   — | j         j        S rH   )rÔ   ÚdefaultrJ   s    rE   rä   zKernelParam.defaultT  s   € àŒ{Ô"Ð"rF   c                ó@   — | j         j        t          j        j        k    S rH   )rÔ   rä   rO   rØ   rÙ   rJ   s    rE   Úhas_defaultzKernelParam.has_defaultX  s   € àŒ{Ô"¥gÔ&7Ô&=Ò=Ð=rF   N)rÍ   r'   rÎ   rÏ   rÐ   rÑ   rÒ   rÑ   ©r#   r_   )r\   rM   r´   rµ   r4   r   r5   r×   rÝ   rà   râ   r¶   rä   ræ   r‚   rF   rE   rÌ   rÌ   +  sü   € € € € € ØLÐLðMð Mð Mð Mð ð ð  ñ „_ð ð ð5ð 5ð 5ñ „_ð5ð
 ðð ð ñ „_ðð ð.ð .ñ „_ð.ð ðNð Nñ „_ðNð
 ð#ð #ñ „Xð#ð ð>ð >ñ „Xð>ð >ð >rF   rÌ   Fc                óF   — d}d}t          t          | |||¦  «        d         S )NFTr   )r   r   )r“   Ú
specializerâ   Úaligns       rE   Úmangle_typerë   ]  s(   € Ø€HØ€EÝ!¥+¨s°H¸jÈ%ÑPÔPÐQRÔSÐSrF   c                  ó.   — e Zd ZU ded<   d„ Zd„ Zdd„ZdS )	ÚKernelInterfacer    Úrunc               óR   —  | j         t          t          j        |¦  «        |ddœ|¤ŽS )NT©ÚgridÚwarmup)rî   ÚmapÚ
MockTensorÚ
wrap_dtype)rB   rñ   r•   Úkwargss       rE   rò   zKernelInterface.warmupf  s.   € ØˆtŒxµµZÔ5JÈDÑ1QÔ1Q˜T¨$Ð\Ð\ÐU[Ð\Ð\Ð\rF   c               ó    — t          d¦  «        ‚)Nzrun not implemented)ÚNotImplementedError)rB   rñ   rò   r•   rö   s        rE   rî   zKernelInterface.runi  s   € Ý!Ð"7Ñ8Ô8Ð8rF   r#   c                ó   ‡ ‡— ˆˆ fd„S )z­
        A JIT function is launched with: fn[grid](*args, **kwargs).
        Hence JITFunction.__getitem__ returns a callable proxy that
        memorizes the grid.
        c                 ó$   •—  ‰j         | ‰ddœ|¤ŽS )NFrð   )rî   )r•   rö   rñ   rB   s     €€rE   ú<lambda>z-KernelInterface.__getitem__.<locals>.<lambda>r  s    ø€  x t¤xÈ$°TÀ%Ð'YÐ'YÐRXÐ'YÐ'Y€ rF   r‚   )rB   rñ   s   ``rE   Ú__getitem__zKernelInterface.__getitem__l  s   øø€ ð ZÐYÐYÐYÐYÐYrF   N)r#   r    )r\   rM   r´   Ú__annotations__rò   rî   rü   r‚   rF   rE   rí   rí   c  sZ   € € € € € € Ø
€F€F�Fð]ð ]ð ]ð9ð 9ð 9ðZð Zð Zð Zð Zð ZrF   rí   c           
     óŒ  — d„ |                      ¦   «         D ¦   «         }dd l}| |d„ |                     ¦   «         D ¦   «         t          |                     ¦   «         ¦  «        d„ |                     ¦   «         D ¦   «         t          |                     ¦   «         ¦  «        |j        ||j        dœ	}|                     |¦  «        }	|	S )Nc                óÚ   — i | ]h\  }}||j         j        d k    rt          |¦  «        nB|j         j        dk    r	d|j        in)|j         j        dk    rd|j        › d|j        j        › �in|“ŒiS )rÈ   ri   ÚJITFunctionÚjit_functionú:)rD   r\   r_   r‹   rT   Úfnr´   ©r„   Úkeyr‹   s      rE   ú
<dictcomp>z1serialize_specialization_data.<locals>.<dictcomp>w  s¢   € ð ð ð ñ ˆC�ð 	˜5œ?Ô3°wÒ>Ð>�S�‰ZŒZˆZØŒ?Ô# {Ò2Ð2ð FQÐRWÔR]ÐD^ÐD^àŒ?Ô# }Ò4Ð4ð :HÈEÌLÐIrÐIrÐ[`Ô[cÔ[pÐIrÐIrÐ8sÐ8sØ:?ðð ð rF   r   c                ó,   — g | ]}t          |¦  «        ‘ŒS r‚   ©r+   ©r„   Úxs     rE   r†   z1serialize_specialization_data.<locals>.<listcomp>€  s   € Ð?bÐ?bÐ?bÈAÅÀQÁÄÐ?bÐ?bÐ?brF   c                ó,   — g | ]}t          |¦  «        ‘ŒS r‚   r  r	  s     rE   r†   z1serialize_specialization_data.<locals>.<listcomp>�  s   € Ð0OÐ0OÐ0O¸Qµ°a±´Ð0OÐ0OÐ0OrF   )	r5   Ú	signatureÚconstant_keysÚconstant_valsÚ
attrs_keysÚ
attrs_valsÚoptionsr  r¨   )ÚitemsÚjsonrZ   r+   rÛ   Ú__dict__Údumps)
r5   r  Ú	constantsÚattrsr  r  r¨   r  ÚobjÚserialized_objs
             rE   Úserialize_specialization_datar  v  sÑ   € ðð ð $Ÿ/š/Ñ+Ô+ð	ñ ô €Ið €K€K€Kà 9Ð?bÐ?bÐQZ×Q_ÒQ_ÑQaÔQaÐ?bÑ?bÔ?bÝˆY×ÒÑÔÑ Ô Ð0OÐ0OÀ%Ç*Â*Á,Ä,Ð0OÑ0OÔ0OÕ_cÐdi×dpÒdpÑdrÔdrÑ_sÔ_sØÔ#¨C¸6¼?ðð €Cð
 —Z’Z ‘_”_€NØÐrF   c           
     ój  — t          | j        ¦  «        t          |¦  «        k    sJ ‚g }t          | j                             ¦   «         |¦  «        D ]î\  }}|j        r|                     d|› d�¦  «         Œ&|j        rdnd}|j        rdnd}|j        rdnd}d|› d|› d|› d|› d�	}	|j	        r{t          |j	        t          ¦  «        r|j	        dk    s|j	        dd	…         d
v rd}|r"|                     d|j	        › d|	› d�¦  «         Œ¹|                     d|j	        › d�¦  «         ŒØ|                     |	› ¦  «         Œïd„ }
dd                     t          t          |
| j                             ¦   «         ¦  «        ¦  «        dgz   ¦  «        › dd                     d„ | j                             ¦   «         D ¦   «         ¦  «        › dd                     |¦  «        › d�}d„ | j                             ¦   «         D ¦   «         }t           }||d<   ||d<   t"          |d<   t%          ||¦  «         |d         S )a2  
    Equivalent to sig.bind followed by apply_defaults. This generates a
    native Python function (using exec) which can be memoized on a per-kernel
    basis to avoid having to run these expensive functions -- which constitute
    much of the kernel launch overhead -- every time we run the kernel.
    z("constexpr", ú)ÚTrueÚFalsezspecialize_impl(backend, ú, Úu1Nr   )ÚfpÚbfFz("z",) + z[1:]z", None)c                ót   — | d         j         t          j        j        u r| d         n| d         › d| d         › �S )Nr   r   z	=default_©rä   rO   rØ   rÙ   )r
  s    rE   rû   z0create_function_from_signature.<locals>.<lambda>©  s=   € ˜A˜aœDœL­GÔ,=Ô,CÐCÐC�A�a”D�DÈAÈaÌDÐIaÐIaÐ[\Ð]^Ô[_ÐIaÐIa€ rF   z
def dynamic_func(z	**optionsz):
    params = {c                ó   — g | ]
}d |› d|› �‘ŒS )ú'z': r‚   )r„   r5   s     rE   r†   z2create_function_from_signature.<locals>.<listcomp>¬  s)   € ÐQÐQÐQ°4Ð.˜tÐ.Ð.¨Ð.Ð.ÐQÐQÐQrF   z}
    specialization = [ú,z-]
    return params, specialization, options
c                óZ   — i | ](\  }}|j         t          j        j        u¯d |› �|j         “Œ)S )Údefault_r$  )r„   r5   rÎ   s      rE   r  z2create_function_from_signature.<locals>.<dictcomp>²  sE   € ð ð ð áˆD�%ØŒ=¥Ô 1Ô 7Ð7Ð7ð 	�4ÐÐ˜5œ=à7Ð7Ð7rF   Úspecialize_implÚbackendrY   Údynamic_func)r(   Ú
parametersÚziprZ   rà   Úappendrâ   rÐ   rÒ   rÝ   r0   r_   Újoinr+   ró   r  r   rY   Úexec)ÚsigÚkparamsr+  Úspecializationr5   Úkprâ   ré   rê   rK   r“   Ú	func_bodyÚfunc_namespacer*  s                 rE   Úcreate_function_from_signaturer8  ˆ  s·  € õ ˆsŒ~ÑÔ¥# g¡,¤,Ò.Ð.Ð.Ð.à€Nå˜œ×+Ò+Ñ-Ô-¨wÑ7Ô7ð 0ð 0‰ˆˆbØŒ?ð 	0Ø×!Ò!Ð":°4Ð":Ð":Ð":Ñ;Ô;Ð;Ð;à!#¤Ð9�v�v°'ˆHØ$&Ô$8ÐD˜˜¸fˆJØ!Ô@ÐL�G�GÀfˆEØX¨dÐXÐX°hÐXÐXÀ*ÐXÐXÐPUÐXÐXÐXˆCØÔ!ð 0Ý˜bÔ0µ#Ñ6Ô6ð +ØÔ)¨TÒ1Ð1°RÔ5GÈÈÈÔ5KÈ|Ð5[Ð5[à%*˜
Øð MØ"×)Ò)Ð*R¨rÔ/AÐ*RÐ*RÈÐ*RÐ*RÐ*RÑSÔSÐSÐSð #×)Ò)Ð*K¨rÔ/AÐ*KÐ*KÐ*KÑLÔLÐLÐLà×%Ò%¨ hÑ/Ô/Ð/Ð/ð bÐ
a€CðØ—)’)�D¥ S¨#¬.×*>Ò*>Ñ*@Ô*@Ñ!AÔ!AÑBÔBÀkÀ]ÑRÑSÔSðð à—	’	ÐQÐQ¸3¼>×;NÒ;NÑ;PÔ;PÐQÑQÔQÑRÔRðð ð —x’x Ñ/Ô/ðð ð €Iðð àœ>×/Ò/Ñ1Ô1ðñ ô €Nõ -€OØ(7€NÐ$Ñ%Ø '€N�9ÑÝ$/€N�=Ñ!õ 	ˆ�NÑ#Ô#Ð#ð ˜.Ô)Ð)rF   c                ó$   — | j         › d| j        › �S )Nú.)rM   r´   ©r  s    rE   Úget_full_namer<  Ä  s   € ØŒmÐ/Ð/˜bœoÐ/Ð/Ð/rF   c                  óˆ   — e Zd Zd„ Zd„ Zedd„¦   «         Zd„ Zd„ Zed„ ¦   «         Z	dd„Z
d„ Zd„ Zd„ Z eee¬¦  «        ZdS )rY   c                ó–  — || _         t          j        |¦  «        | _        	 t          j        |¦  «        \  | _        | _        n"# t          $ r}t          d¦  «        |‚d }~ww xY wt          |¦  «        | _	        t          j        ¦   «         | _        t          j        d                     | j        ¦  «        ¦  «        }|t!          j        d|t           j        ¦  «                             ¦   «         d …         }|| _        d | _        i | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        d S )Nz1@jit functions should be defined in a Python filerN   z^def\s+\w+\s*\()r  rO   r  ÚgetsourcelinesÚraw_srcÚstarting_line_numberÚOSErrorÚ
ValueErrorr<  Ú_fn_nameÚ	threadingÚRLockÚ
_hash_lockÚtextwrapÚdedentr0  ÚreÚsearchÚ	MULTILINEÚstartÚ_srcÚhashr@   rµ   r\   r´   Ú__globals__rM   )rB   r  ÚerC   s       rE   r4   zJITCallable.__init__Ê  s,  € ØˆŒÝ Ô*¨2Ñ.Ô.ˆŒð	YÝ6=Ô6LÈRÑ6PÔ6PÑ3ˆDŒL˜$Ô3Ð3øÝð 	Yð 	Yð 	YÝÐPÑQÔQÐWXÐXøøøøð	Yøøøå% bÑ)Ô)ˆŒÝ#œ/Ñ+Ô+ˆŒõ Œo˜bŸgšg d¤lÑ3Ô3Ñ4Ô4ˆØ•"”)Ð.°µR´\ÑBÔB×HÒHÑJÔJÐKÐKÔLˆØˆŒ	ØˆŒ	ð TVˆÔð ”zˆŒØœˆŒØœOˆÔØœ>ˆÔØœ-ˆŒˆˆs   ¢!A Á
A#ÁAÁA#c                ó’   — | j         }|j        €| j        S d„ t          |j        j        |j        ¦  «        D ¦   «         }| j        |z  S )Nc                ó$   — i | ]\  }}||j         “ŒS r‚   )Úcell_contents)r„   r5   Úcells      rE   r  z1JITCallable.get_capture_scope.<locals>.<dictcomp>ð  s!   € ÐmÐmÐm±*°$¸�T˜4Ô-ÐmÐmÐmrF   )r  Ú__closure__rP  r.  Ú__code__Úco_freevars)rB   r  r;   s      rE   Úget_capture_scopezJITCallable.get_capture_scopeì  sN   € ØŒWˆØŒ>Ð!ØÔ#Ð#ØmÐmÅÀBÄKÔD[Ð]_Ô]kÑ@lÔ@lÐmÑmÔmˆ	ØÔ )Ñ+Ð+rF   r#   r_   c                ó4  ‡— | j         5  | j        �| j        cd d d ¦  «         S d| j        › �| _        t          j        | j        ¦  «        j        }t          | j        | j        || j	        ¬¦  «        }| 
                    |                      ¦   «         ¦  «         |j        t          | j        ¦  «        z   | _        t          t!          |j                             ¦   «         ¦  «        ¦  «        | _        ddlmŠ | xj        t          ˆfd„| j                             ¦   «         D ¦   «         ¦  «        z  c_        t+          j        | j                             d¦  «        ¦  «                             ¦   «         | _        d d d ¦  «         n# 1 swxY w Y   | j        S )Nz
recursion:)r5   r:   r;   rC   r   rh   c                óJ   •— g | ]\  \  }}\  }}t          |‰¦  «        ¯||f‘Œ S r‚   )r0   )r„   r5   rb   rs   ri   s       €rE   r†   z)JITCallable.cache_key.<locals>.<listcomp>  sH   ø€ ð =ð =ð =Ù"5¡) 4¨©X¨c°1Ý!+¨C°Ñ!;Ô!;ð=˜t S˜kð =ð =ð =rF   r&   )rG  rO  rD  rO   Úgetclosurevarsr  r;   r"   rP  rC   rƒ   ÚparserK   r_   rA  ÚdictÚsortedr@   r  r¿   ri   r6   r7   r8   rI   )rB   r;   Údependencies_finderri   s      @rE   r^   zJITCallable.cache_keyó  sü  ø€ ð Œ_ð 	Nð 	NØŒyÐ$Ø”yð	Nð 	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð
 5 T¤]Ð4Ð4ˆDŒIÝÔ.¨t¬wÑ7Ô7ÔAˆIÝ"4¸$¼-ÐQUÔQaÐmvØ9=¼ð#Cñ #Cô #CÐà×%Ò% d§j¢j¡l¤lÑ3Ô3Ð3Ø+Ô/µ#°dÔ6OÑ2PÔ2PÑPˆDŒIÝ$(­Ð0CÔ0T×0ZÒ0ZÑ0\Ô0\Ñ)]Ô)]Ñ$^Ô$^ˆDÔ!à6Ð6Ð6Ð6Ð6Ð6ØˆIŒI�ð =ð =ð =ð =Ø9=Ô9N×9TÒ9TÑ9VÔ9Vð=ñ =ô =ñ >ô >ñ >ˆIŒIõ  œ t¤y×'7Ò'7¸Ñ'@Ô'@ÑAÔA×KÒKÑMÔMˆDŒIð#	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð$ ŒyÐs   ‰F¤EFÆFÆFc                ó*   — t          | j        ¦  «        S rH   )rO  r^   rJ   s    rE   Ú__hash__zJITCallable.__hash__
  s   € Ý�D”NÑ#Ô#Ð#rF   c                óò   — t          j        | j        ¦  «        }t          |t           j        ¦  «        sJ ‚t          |j        ¦  «        dk    sJ ‚t          |j        d         t           j        ¦  «        sJ ‚|S )Nr   r   )r|   r]  rN  r0   ÚModuler(   ÚbodyÚFunctionDef)rB   Útrees     rE   r]  zJITCallable.parse  sg   € ÝŒy˜œÑ#Ô#ˆÝ˜$¥¤
Ñ+Ô+Ð+Ð+Ð+Ý�4”9‰~Œ~ Ò"Ð"Ð"Ð"Ý˜$œ) Aœ,­¬Ñ8Ô8Ð8Ð8Ð8ØˆrF   c                ó$   — ddl m}  || ¦  «        S )Nr   )Úconstexpr_type)r¿   ri  )rB   ri  s     rE   rm   zJITCallable.type  s$   € à7Ð7Ð7Ð7Ð7Ð7Øˆ~˜dÑ#Ô#Ð#rF   Úhandlesúlist[ir.value]r$   c                ó   — d S rH   r‚   )rB   rj  s     rE   Ú_flatten_irzJITCallable._flatten_ir  s   € ØˆrF   c                ó"   — d| _         || _        dS )a"  
        The only method allowed to modify src.
        Bypasses the __setattr__ restriction by calling super().__setattr__ directly.

        Note that it is the callers responsibility to make sure any triton functions that call this function have the `.hash` value reset to None.
        N)rO  rN  )rB   Únew_srcs     rE   Ú_unsafe_update_srczJITCallable._unsafe_update_src  s   € ð ˆŒ	ØˆŒ	ˆ	ˆ	rF   c                ó    — t          d¦  «        ‚)NzqCannot set attribute 'src' directly. Use '_unsafe_update_src()' and manually clear `.hash` of all callersinstead.)ÚAttributeErrorrJ   s    rE   Ú_set_srczJITCallable._set_src)  s   € Ýð (ñ )ô )ð 	)rF   c                ó   — | j         S rH   )rN  rJ   s    rE   Ú_get_srczJITCallable._get_src.  s
   € ØŒyÐrF   )ÚfgetÚfsetNrç   )rj  rk  r#   r$   )r\   rM   r´   r4   rY  r¶   r^   rb  r]  rm   rm  rp  rs  ru  rC   r‚   rF   rE   rY   rY   È  sÝ   € € € € € ð (ð  (ð  (ðD,ð ,ð ,ð ðð ð ñ „Xðð,$ð $ð $ðð ð ð ð$ð $ñ „Xð$ðð ð ð ðð ð ð)ð )ð )ð
ð ð ð ˆ(˜ xÐ
0Ñ
0Ô
0€C€C€CrF   rY   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚJitFunctionInfor   rT   r_   r5   r   r  N)r\   rM   r´   rý   r‚   rF   rE   ry  ry  7  s3   € € € € € € àÐÐÑØ€I€I�IØÐÐÑÐÐrF   ry  c                óÜ   ‡— t          |¦  «        t          |¦  «        f}|                      |d ¦  «        }|�|S ˆfd„Št           ‰|¦  «        ¦  «        t          |¦  «        z   }|| |<   |S )Nc                ó4  •— t          | t          ¦  «        rˆfd„| D ¦   «         S t          | ¦  «        rˆfd„| D ¦   «         } | j        |Ž S t          | t          ¦  «        rt	          ˆfd„| D ¦   «         ¦  «        S t          | t
          ¦  «        r| j        S | S )Nc                ó&   •— g | ]} ‰|¦  «        ‘ŒS r‚   r‚   ©r„   r“   Úreplace_callabless     €rE   r†   z@compute_cache_key.<locals>.replace_callables.<locals>.<listcomp>G  s%   ø€ Ð:Ð:Ð:¨sÐ%Ð% cÑ*Ô*Ð:Ð:Ð:rF   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r‚   r‚   r}  s     €rE   r†   z@compute_cache_key.<locals>.replace_callables.<locals>.<listcomp>I  s%   ø€ Ð=Ð=Ð=°#Ð(Ð(¨Ñ-Ô-Ð=Ð=Ð=rF   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S rH   r‚   r}  s     €rE   ú	<genexpr>z?compute_cache_key.<locals>.replace_callables.<locals>.<genexpr>L  s/   øè è € Ð?Ð?°CÐ*Ð*¨3Ñ/Ô/Ð?Ð?Ð?Ð?Ð?Ð?rF   )r0   r+   r   rD   ÚtuplerY   r^   )r  Úresultsr~  s     €rE   r~  z,compute_cache_key.<locals>.replace_callablesE  s»   ø€ Ý�c�4Ñ Ô ð 	!Ø:Ð:Ð:Ð:°cÐ:Ñ:Ô:Ð:Ý˜3ÑÔð 	!Ø=Ð=Ð=Ð=¸Ð=Ñ=Ô=ˆGØ �3”= 'Ð*Ð*Ý˜�UÑ#Ô#ð 	!ÝÐ?Ð?Ð?Ð?¸3Ð?Ñ?Ô?Ñ?Ô?Ð?Ý˜�[Ñ)Ô)ð 	!Ø”=Ð Øˆ
rF   )r‚  r_   ry   )Úkernel_key_cacher4  r  r  r^   r~  s        @rE   Úcompute_cache_keyr…  >  sŒ   ø€ Ý�Ñ Ô ¥# g¡,¤,Ð
/€CØ ×$Ò$ S¨$Ñ/Ô/€IØÐØÐð
ð 
ð 
ð 
ð 
õ Ð%Ð% nÑ5Ô5Ñ6Ô6½¸W¹¼ÑE€IØ%Ð�SÑØÐrF   c                óœ   — t          | t          ¦  «        s| S t          | ¦  «        D ]\  }}t          |¦  «        | |<   Œt	          | ¦  «        S rH   )r0   r+   Ú	enumerateÚconvert_to_tuple_if_listr‚  )ÚitemÚiÚnested_values      rE   rˆ  rˆ  V  sS   € å�d�DÑ!Ô!ð Øˆõ % T™?œ?ð 9ð 9‰ˆˆ<Ý*¨<Ñ8Ô8ˆˆQ‰ˆå�‰;Œ;ÐrF   c                  óh   ‡ — e Zd Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd	„ Z		 	 dˆ fd„	Z
d„ Zd„ Zd„ Zd„ Zˆ xZS )r   c                ó   — dS )NFr‚   rJ   s    rE   Úis_gluonzJITFunction.is_gluond  s   € ØˆurF   r#   úbool | Nonec
                ó
  — |sd S | j         j        }
| j         j        }d                     d„ t	          | j        |d         ¦  «        D ¦   «         ¦  «        }|
› d|j        › d|j        › d|j        › d|j	        › d|j
        › d	|› d
�}t          | j         ¦  «        }t          ||||d         |||¦  «        }||||j        |j        |j        |j	        |j
        |j        |||	dœ} |||t          ||
| ¦  «        d|i|¥|	d¬¦  «        S )Nr  c                ó,   — g | ]\  }}|j         › d |› �‘ŒS )z: ©r5   )r„   rÎ   rÊ   s      rE   r†   z*JITFunction._call_hook.<locals>.<listcomp>x  s,   € Ð_Ð_Ð_¹¸À %¤*Ð4Ð4°Ð4Ð4Ð_Ð_Ð_rF   r   z[num_warps=z, num_ctas=z, num_stages=z, enable_fp_fusion=z, launch_cooperative_grid=ú](r  r   )r  Údevicer  Ú	num_warpsÚnum_ctasÚ
num_stagesÚenable_fp_fusionÚlaunch_cooperative_gridÚextern_libsÚconfigsÚspecialization_dataÚ	is_warmupr  F)r  Úreprr  ÚcompileÚis_manual_warmupÚalready_compiled)r  r´   rM   r0  r.  Úparamsr•  r–  r—  r˜  r™  r<  r  rš  ry  )rB   Úhookr  r  r¨   r”  r  r  r›  r�  r5   rT   Ú	arg_reprsrž  Ú	full_namerœ  rö   s                    rE   Ú
_call_hookzJITFunction._call_hookg  s«  € ð ð 	Ø�4àŒwÔ#ˆØ”Ô#ˆØ—I’IÐ_Ð_ÅcÈ$Ì+ÐWZÐ[\ÔW]ÑF^ÔF^Ð_Ñ_Ô_Ñ`Ô`ˆ	Øð  kð  k 7Ô#4ð  kð  kÀÔAQð  kð  kÐ`gÔ`rð  kð  kð  HOô  H`ð  kð  kð  |Cô  |[ð  kð  kð  _hð  kð  kð  kˆÝ! $¤'Ñ*Ô*ˆ	å;¸IÀyÐR[Ð]dÐefÔ]gÐipÐruØ<BñDô DÐð #ØØ"Ø Ô*ØÔ(Ø!Ô,Ø 'Ô 8Ø'.Ô'FØ"Ô.ØØ#6Ø"ð
ð 
ˆð ˆtØØÝ˜v t¨TÑ2Ô2Ø˜CÐ* 6Ð*Ø&Ø"ð
ñ 
ô 
ð 	
rF   c                ó\   — t          |¦  «        sJ ‚| j                             |¦  «         dS )z�
        Add a hook that will be executed prior to the execution of run
        function with args and kwargs passed into the kernel
        N)rp   Úpre_run_hooksr/  )rB   r£  s     rE   Úadd_pre_run_hookzJITFunction.add_pre_run_hook—  s2   € õ
 ˜‰~Œ~ÐÐˆ~ØÔ×!Ò! $Ñ'Ô'Ð'Ð'Ð'rF   c                óÚ   — ddl m}m}m}m} t
          j                             ¦   «         } ||¦  «        }|| _        || _        || _        t          | j	        | j
        |¦  «        }i i |||fS )z1
        Precompute as much as possible.
        r   )ÚCompiledKernelrŸ  Ú	ASTSourceÚmake_backend)Úcompilerr«  rŸ  r¬  r­  r   ÚactiveÚget_current_targetr8  r  r¢  )rB   r«  rŸ  r¬  r­  r¨   r+  Úbinders           rE   Úcreate_binderzJITFunction.create_binderŸ  s‡   € ð 	PÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÝ”×1Ò1Ñ3Ô3ˆØ�,˜vÑ&Ô&ˆØ,ˆÔØˆŒØ"ˆŒÝ/°´ÀÄÈWÑUÔUˆØ�2�v˜w¨Ð.Ð.rF   c                óÞ  ‡‡‡— ‰                      |¦  «        }d„ | j        D ¦   «         }d„ |D ¦   «         }d„ t          ||¦  «        D ¦   «         }d|vs
J d¦   «         ‚d|vs
J d¦   «         ‚d|vs
J d	¦   «         ‚|D ]!}	|	|j        vr|	|vrt	          d
|	z  ¦  «        ‚Œ"t          |d„ ¦  «        }
ˆfd„|
D ¦   «         }
d„ |D ¦   «         Št          ‰d„ ¦  «        }ˆˆfd„|D ¦   «         }|||
|fS )Nc                ó   — g | ]	}|j         ‘Œ
S r‚   r’  r	  s     rE   r†   z*JITFunction._pack_args.<locals>.<listcomp>°  s   € Ð/Ð/Ð/˜a�1”6Ð/Ð/Ð/rF   c                ó   — g | ]
}|d          ‘ŒS )r   r‚   r	  s     rE   r†   z*JITFunction._pack_args.<locals>.<listcomp>±  s   € Ð0Ð0Ð0˜A�1�Q”4Ð0Ð0Ð0rF   c                ó   — i | ]\  }}||“Œ	S r‚   r‚   )r„   r`   Úvs      rE   r  z*JITFunction._pack_args.<locals>.<dictcomp>²  s   € Ð>Ð>Ð>™f˜q !�Q˜Ð>Ð>Ð>rF   Údevice_typez=device_type option is deprecated; current target will be usedr”  z8device option is deprecated; current device will be usedÚstreamz8stream option is deprecated; current stream will be usedz2Keyword argument %s was specified but unrecognisedc                ó   — |dk    S rß   r‚   )rb   rs   s     rE   rû   z(JITFunction._pack_args.<locals>.<lambda>»  s   € ¸3À+Ò;M€ rF   c           	     óp   •— i | ]2}|t          t          ‰                     ¦   «         ¦  «        |¦  «        “Œ3S r‚   )r   r+   rÛ   )r„   ÚpathÚ
bound_argss     €rE   r  z*JITFunction._pack_args.<locals>.<dictcomp>¼  s;   ø€ ÐfÐfÐfÐSW�dÕ-­d°:×3DÒ3DÑ3FÔ3FÑ.GÔ.GÈÑNÔNÐfÐfÐfrF   c                ó:   — g | ]}|d          dk    rdn|d         ‘ŒS )r   ri   rN   r   r‚   r	  s     rE   r†   z*JITFunction._pack_args.<locals>.<listcomp>¾  s.   € ÐPÐPÐP¸A˜!˜Aœ$ +Ò-Ð-�B�B°1°Q´4ÐPÐPÐPrF   c                ó,   — t          |t          ¦  «        S rH   )r0   r_   )rb   r
  s     rE   rû   z(JITFunction._pack_args.<locals>.<lambda>¿  s   € µZÀÅ3Ñ5GÔ5G€ rF   c           	     óX   •— i | ]&}|‰                      t          ‰|¦  «        ¦  «        “Œ'S r‚   )Ú
parse_attrr   )r„   r`   Úattrvalsr+  s     €€rE   r  z*JITFunction._pack_args.<locals>.<dictcomp>À  s4   ø€ ÐVÐVÐVÈ1��G×&Ò&Õ'8¸À1Ñ'EÔ'EÑFÔFÐVÐVÐVrF   )Úparse_optionsr¢  r.  r  ÚKeyErrorr   )rB   r+  rö   r½  r4  r  ÚsigkeysÚsigvalsr  r`   Ú
constexprsr  rÂ  s    ` `        @rE   Ú
_pack_argszJITFunction._pack_args¬  si  øøø€ à×'Ò'¨Ñ/Ô/ˆà/Ð/ 4¤;Ð/Ñ/Ô/ˆØ0Ð0 Ð0Ñ0Ô0ˆØ>Ð>­¨G°WÑ(=Ô(=Ð>Ñ>Ô>ˆ	à FÐ*Ð*Ð*Ð,kÑ*Ô*Ð*Ø˜vÐ%Ð%Ð%Ð'aÑ%Ô%Ð%Ø˜vÐ%Ð%Ð%Ð'aÑ%Ô%Ð%Øð 	Yð 	YˆAØ˜Ô(Ð(Ð(¨Q°gÐ-=Ð-=ÝÐSÐVWÑWÑXÔXÐXøå" 7Ð,MÐ,MÑNÔNˆ
ØfÐfÐfÐfÐ[eÐfÑfÔfˆ
àPÐPÀÐPÑPÔPˆÝ˜hÐ(GÐ(GÑHÔHˆØVÐVÐVÐVÐVÐPUÐVÑVÔVˆà˜	 :¨uÐ4Ð4rF   c               ó(  — |                      d| j        ¦  «        pt          j        j        |d<   t          j        j        |d<   t          j                             ¦   «         }t          j         	                    |¦  «        }| j
        D ]
} ||i |¤Ž Œ| j        |         \  }}	}
}} ||i |¤Ž\  }}}t          j        j        �:t          j                             ¦   «         \  }}|                     d|› d�¦  «         t          |	||¦  «        }|                      |d ¦  «        }|€=|                      |||||¦  «        \  }}}}|                      |||||||¦  «        }|€d S t#          ¦   «         }| j                             ¦   «         D ]?\  \  }}\  }}|                      ||¦  «        x}|k    rt)          d|› d|› d|› �¦  «        ‚Œ@|sÆ|€J ‚t+          |¦  «        r ||¦  «        }t-          |¦  «        }|d         }|d	k    r|d	         nd	}|d
k    r|d
         nd	}  |j        ||g|                     ¦   «         ¢R Ž }! |j        ||| ||j        |j        |!t          j        j        t          j        j        g	|                     ¦   «         ¢R Ž  |S )NÚdebugÚinstrumentation_modez("custom_pipeline", r  rW   z1 has changed since we compiled this kernel, from z to r   r   r   )ry   rÊ  r   ÚruntimeÚcompilationrË  r   r¯  Úget_current_deviceÚget_current_streamr¨  Údevice_cachesÚadd_stages_inspection_hookr/  r…  rÈ  Ú_do_compileÚobjectr@   r  r[   rp   r(   Úlaunch_metadatarÛ   rî   ÚfunctionÚpacked_metadataÚlaunch_enter_hookÚlaunch_exit_hook)"rB   rñ   rò   r•   rö   r”  r¹  r£  Úkernel_cacher„  r¨   r+  r±  r½  r4  r  Úinspect_stages_keyÚinspect_stages_hashr  Úkernelr  rÇ  r  Únot_presentr5   rb   rs   Úglobals_dictÚnewValÚ	grid_sizeÚgrid_0Úgrid_1Úgrid_2rÔ  s"                                     rE   rî   zJITFunction.runÄ  s  € Ø Ÿ*š* W¨d¬jÑ9Ô9ÐP½U¼]Ô=Pˆˆw‰Ý).Ô):Ô)OˆÐ%Ñ&õ ”×1Ò1Ñ3Ô3ˆÝ”×1Ò1°&Ñ9Ô9ˆð Ô&ð 	"ð 	"ˆDØˆD�$Ð!˜&Ð!Ð!Ð!Ð!àBFÔBTÐU[ÔB\Ñ?ˆÐ&¨°¸ð /5¨f°dÐ.E¸fÐ.EÐ.EÑ+ˆ
�N Gõ Œ=Ô3Ð?Ý6;´m×6^Ò6^Ñ6`Ô6`Ñ3ÐÐ 3Ø×!Ò!Ð"OÐ9LÐ"OÐ"OÐ"OÑPÔPÐPåÐ 0°.À'ÑJÔJˆØ×!Ò! # tÑ,Ô,ˆð ˆ>Ø48·O²OÀGÈVÐU_ÐaoØDKñ5Mô 5MÑ1ˆG�Y 
¨Eð ×%Ò% c¨9°f¸jÈ'ÐSXÐZ`ÑaÔaˆFØˆ~Ø�tõ ‘h”hˆØ.2Ô.C×.IÒ.IÑ.KÔ.Kð 	qð 	qÑ*‰IˆT�1Ñ*˜˜\Ø&×*Ò*¨4°Ñ=Ô=Ð=�À#ÒEÐEÝ"Øo tÐoÐoÐ^aÐoÐoÐgmÐoÐoñqô qð qð Fð ð 	nàÐ#Ð#Ð#Ý˜‰~Œ~ð (Ø�t˜JÑ'Ô'�Ý˜D™	œ	ˆIØ˜!”WˆFØ )¨A¢ �T˜!”W�W°1ˆFØ )¨A¢ �T˜!”W�W°1ˆFà4˜fÔ4°T¸6ÐXÀJ×DUÒDUÑDWÔDWÐXÐXÐXˆOØˆFŒJ�v˜v v¨v°v´ÈÔH^Ð`oÝ”}Ô6½¼Ô8VðnØYc×YjÒYjÑYlÔYlðnð nð nð nàˆrF   c                óH   — | j         €| j        n|                       |¦  «        S rH   )Ú_reprrD  )rB   rb   s     rE   rž  zJITFunction.reprý  s   € Ø $¤
Ð 2ˆtŒ}ˆ}¸¿
º
À1¹¼ÐErF   Nc	           	     ó¶  •— |r|ng }|r|ng }t          ¦   «                              |¦  «         |j        | _        || _        || _        || _        || _        || _        | t          | j        › d| j
        j        › �<   g | _        t          | j        j                             ¦   «         ¦  «        D ]I\  }	}
|	|v p|
j        |v }|	|v p|
j        |v }| j                             t'          |	|
||¦  «        ¦  «         ŒJt)          | j        ¦  «        | _        d | _        || _        || _        d„ | j        D ¦   «         | _        d„ | j        D ¦   «         | _        g | _        d S )Nr  c                ó   — g | ]	}|j         ‘Œ
S r‚   r’  ©r„   Úps     rE   r†   z(JITFunction.__init__.<locals>.<listcomp>   s   € Ð6Ð6Ð6 Q˜!œ&Ð6Ð6Ð6rF   c                ó*   — g | ]}|j         ¯	|j        ‘ŒS r‚   )rà   rÍ   rè  s     rE   r†   z(JITFunction.__init__.<locals>.<listcomp>!  s!   € ÐHÐHÐH Q¸¼ÐH˜1œ5ÐHÐHÐHrF   )r3   r4   rM   rT   ÚversionrÐ   rÒ   rå  rÔ  Ú_triton_jit_function_registryr  r´   r¢  r‡  r  r-  rÛ   r5   r/  rÌ   r   r²  rÐ  rÜ  rÊ  rX   Ú	arg_namesrÇ  r¨  )rB   r  rë  rÐ   rÒ   rÊ  rX   rž  rÔ  rŠ  rÎ   ÚdnsÚdns_oarD   s                €rE   r4   zJITFunction.__init__   s…  ø€ à1BÐJÐ-Ð-ÈÐØKiÐ)qÐ)GÐ)GÐoqÐ&å‰Œ×Ò˜ÑÔÐØ”mˆŒØˆŒØ!2ˆÔØ.LˆÔ+ØˆŒ
Ø.ˆÔàQUÕ%¨¬Ð&MÐ&M°t´wÔ7KÐ&MÐ&MÑNàˆŒÝ! $¤.Ô";×"BÒ"BÑ"DÔ"DÑEÔEð 	Cð 	C‰HˆAˆuØÐ(Ð(ÐK¨E¬JÐ:KÐ,KˆCØÐ8Ð8Ðh¸E¼JÐJhÐ<hˆFØŒK×Ò�{¨1¨e°S¸&ÑAÔAÑBÔBÐBÐBõ )¨Ô);Ñ<Ô<ˆÔð ˆŒØˆŒ
Ø ˆŒð 7Ð6¨$¬+Ð6Ñ6Ô6ˆŒØHÐH¨$¬+ÐHÑHÔHˆŒð  ˆÔÐÐrF   c           	     ób  ‡‡— dd l }dd lmŠ t          j                             ¦   «         }|                     |¦  «        }|d         | j        k    r t          d|d         › d| j        › �¦  «        ‚t          t          |d         ¦  «        }|d         }| j        |         \  }}}}	}|d         }
|j        |
k    rt          d|
› d|› �¦  «        ‚ˆfd„Šˆfd	„t          ||¦  «        D ¦   «         }t          t          |d
         ¦  «        }|d         }t          t          ||¦  «        ¦  «        }d„ |d                              ¦   «         D ¦   «         }d„ |d                              ¦   «         D ¦   «         }|d         }|	                     |¦  «        }|                      ||||||d¬¦  «        S )Nr   r5   zSpecialization data is for z but trying to preload for r  r  r¨   c                ó8  •— ‰j                              | ¦  «        r‰                      | ¦  «        S t          | t          ¦  «        rTd| v r‰                     | d         ¦  «        S d| v r1| d         }|t
          v rt
          |         S t          d|› d�¦  «        ‚| S )Nri   r  zUnable to resolve JITFunction z for preload)rÈ   Úis_dtyper0   r^  ri   rì  r[   )r‹   Újf_keyÚtls     €rE   Ú_decode_constantz-JITFunction.preload.<locals>._decode_constant7  s«   ø€ ØŒx× Ò  Ñ'Ô'ð 'Ø—x’x ‘”Ð&Ý˜%¥Ñ&Ô&ð ^Ø %Ð'Ð'ØŸ<š<¨¨kÔ(:Ñ;Ô;Ð;Ø! UÐ*Ð*Ø" >Ô2�FØÕ!>Ð>Ð>Ý<¸VÔDÐDÝ&Ð'\ÈÐ'\Ð'\Ð'\Ñ]Ô]Ð]ØˆLrF   c                ó.   •— i | ]\  }}| ‰|¦  «        “ŒS r‚   r‚   )r„   r  r‹   rõ  s      €rE   r  z'JITFunction.preload.<locals>.<dictcomp>D  s+   ø€ ÐgÐgÐg±z°s¸E�cÐ+Ð+¨EÑ2Ô2ÐgÐgÐgrF   r  r  c                ó4   — i | ]\  }}|t          |¦  «        “ŒS r‚   )rˆ  r  s      rE   r  z'JITFunction.preload.<locals>.<dictcomp>J  s'   € ÐrÐrÐr¹j¸cÀ5�SÕ2°5Ñ9Ô9ÐrÐrÐrrF   r  c                ób   — i | ],\  }}|t          |t          ¦  «        rt          |¦  «        n|“Œ-S r‚   )r0   r+   r‚  r  s      rE   r  z'JITFunction.preload.<locals>.<dictcomp>K  sG   € ð 
ð 
ð 
á��Uð ¥¨Eµ4Ñ!8Ô!8ÐC•�u‘”�¸eð
ð 
ð 
rF   r  r  T)rò   )r  Útriton.languagerÀ   r   r¯  rÎ  ÚloadsrD  r[   ró   r‚  rÐ  r  r.  r^  r  rÃ  rÒ  )rB   rœ  r  r”  Údeserialized_objr  r  rb   r¨   r+  Údeserialized_targetrÇ  r  r  r  r  r  r  rõ  rô  s                     @@rE   ÚpreloadzJITFunction.preload&  s  øø€ ØˆˆˆØ$Ð$Ð$Ð$Ð$Ð$Ý”×1Ò1Ñ3Ô3ˆØŸ:š:Ð&9Ñ:Ô:ÐØ˜FÔ# t¤}Ò4Ð4ÝØrÐ.>¸vÔ.FÐrÐrÐcgÔcpÐrÐrñtô tð tå�EÐ#3°OÔ#DÑEÔEˆØ(¨Ô9ˆØ#'Ô#5°fÔ#=Ñ ˆˆ1ˆf�g˜qØ.¨xÔ8Ðð Œ?Ð1Ò1Ð1ÝÐuÐ=PÐuÐuÐmsÐuÐuÑvÔvÐvð	ð 	ð 	ð 	ð 	ð hÐgÐgÐgÅSÈÐXeÑEfÔEfÐgÑgÔgˆ
Ý�Ð 0°Ô >Ñ?Ô?ˆ
Ø% lÔ3ˆ
Ý•S˜ ZÑ0Ô0Ñ1Ô1ˆð sÐrÐL\Ð]hÔLi×LoÒLoÑLqÔLqÐrÑrÔrˆ	ð
ð 
à.¨yÔ9×?Ò?ÑAÔAð
ñ 
ô 
ˆð ˜uÔ%ˆØ×'Ò'¨Ñ0Ô0ˆØ×ÒØØØØØØØð  ñ 
ô 
ð 	
rF   c                óX  ‡ ‡‡‡‡‡‡‡‡‡‡‡— ‰ j         ‰         \  Š}Š}	}‰                      t          j        j        ‰‰‰‰‰‰‰g‰¦	  «	        rd S ‰                      ‰ ‰‰‰¦  «        Št          j                             ¦   «         }
|
�Tt          ¦   «         Št          ‰|	‰‰¦  «        }ˆˆˆ ˆˆfd„}ˆˆˆˆˆˆˆ ˆˆˆf
d„}|
                     |||¦  «        }|‰‰<   nO‰                      ‰‰‰j        ¬¦  «        }|‰‰<   ‰                      t          j        j        ‰‰‰‰‰‰‰g‰¦	  «	         |S )Nc                 ó@   •— ‰                      ‰‰‰j        ‰ ¬¦  «        S )N)r¨   r  Ú	_env_vars)rŸ  r  )Úenv_varsr  rB   rC   r¨   s   €€€€€rE   Úasync_compilez.JITFunction._do_compile.<locals>.async_compilei  s!   ø€ Ø—|’| C°ÀÔ@PÐ\d�|ÑeÔeÐerF   c                ól   •
— | ‰‰<   ‰                      t          j        j        ‰‰‰	‰‰‰‰g‰
¦	  «	         d S rH   )r¦  r   rÌ  Újit_post_compile_hook)rÜ  r  rÇ  r”  rÙ  r  r  rB   r  r¨   rò   s    €€€€€€€€€€rE   Úfinalize_compilez1JITFunction._do_compile.<locals>.finalize_compilel  sJ   ø€ Ø$*�˜SÑ!Ø—’¥¤Ô CÀSÈ)ÐU[Ð]cÐeoØ '¨%¨°&ñ:ô :ð :ð :ð :rF   )r¨   r  )rÐ  r¦  r   rÌ  Újit_cache_hookr¬  r   Úactive_modery   r   r   ÚsubmitrŸ  r  r  )rB   r  r  r”  rÇ  r  r  rò   rb   r+  Ú
async_moder^   r  r  rÜ  r  rÙ  rC   r¨   s   ````````       @@@@rE   rÒ  zJITFunction._do_compile[  s¯  øøøøøøøøøøøø€ Ø.2Ô.@ÀÔ.HÑ+ˆ�a˜ ¨!à�?Š?�5œ=Ô7¸¸iÈÐQWÐYcÐelÐotÐnuØ!ñ#ô #ð 	à�4Ø�nŠn˜T 9¨j¸%Ñ@Ô@ˆå#Ô/×3Ò3Ñ5Ô5ˆ
ØÐ!å6Ñ8Ô8ˆHÝ% c¨7°G¸XÑFÔFˆIðfð fð fð fð fð fð fð fð fð:ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð
  ×&Ò& y°-ÐAQÑRÔRˆFØ &ˆL˜ÑÐà—\’\ #¨f¸gÔ>N�\ÑOÔOˆFØ &ˆL˜ÑØ�OŠO�EœMÔ?ÀÀiÐQWÐY_ÐakÐmtØ"˜G Vñ-ô -ð -àˆrF   c                ó    — t          d¦  «        ‚)Nz:Cannot call @triton.jit'd outside of the scope of a kernel)r[   ©rB   r•   rö   s      rE   Ú__call__zJITFunction.__call__z  s   € ÝÐWÑXÔXÐXrF   c                ó2   — d| j         › d| j        j        › d�S )NzJITFunction(r  r  )rT   r  r´   rJ   s    rE   Ú__repr__zJITFunction.__repr__}  s"   € ØC˜dœkÐCÐC¨D¬GÔ,@ÐCÐCÐCÐCrF   )r#   r�  )NNNNNNN)r\   rM   r´   rŽ  r¦  r©  r²  rÈ  rî   rž  r4   rý  rÒ  r  r  r·   r¸   s   @rE   r   r   b  s  ø€ € € € € ðð ð ð.
ð .
ð .
ð .
ð`(ð (ð (ð/ð /ð /ð5ð 5ð 5ð07ð 7ð 7ðrFð Fð Fð mqØ;?ð$ ð $ ð $ ð $ ð $ ð $ ðL3
ð 3
ð 3
ðjð ð ð>Yð Yð YðDð Dð Dð Dð Dð Dð DrF   r   r  úJITFunction[T]c                ó   — d S rH   r‚   r;  s    rE   Újitr  †  s   € à€CrF   ©rë  rž  rÔ  rÐ   rÒ   rÊ  rX   rž  úOptional[Callable]rÔ  rÐ   úOptional[Iterable[int | str]]rÒ   rÊ  úOptional[bool]rX   úCallable[[T], JITFunction[T]]c                ó   — d S rH   r‚   r  s          rE   r  r  ‹  s	   € ð €CrF   úOptional[T]úKernelInterface[T]c               óF   ‡‡‡‡‡‡‡— dˆˆˆˆˆˆˆfd„}| � || ¦  «        S |S )a<  
    Decorator for JIT-compiling a function using the Triton compiler.

    :note: When a jit'd function is called, arguments are
        implicitly converted to pointers if they have a :code:`.data_ptr()` method
        and a `.dtype` attribute.

    :note: This function will be compiled and run on the GPU. It will only have access to:

           * python primitives,
           * builtins within the triton package,
           * arguments to this function,
           * other jit'd functions

    :param fn: the function to be jit-compiled
    :type fn: Callable
    r  r    r#   r  c           
     ó¨   •— t          | ¦  «        sJ ‚t          j        j        rddlm}  || ‰‰‰‰‰‰‰¬¦  «        S t          | ‰‰‰‰‰‰‰¬¦  «        S )Nr   )ÚInterpretedFunction)rë  rÐ   rÒ   rÊ  rX   rž  rÔ  )rp   r   rÌ  Ú	interpretÚinterpreterr  r   )	r  r  rÊ  rÐ   rÒ   rÔ  rX   rž  rë  s	     €€€€€€€rE   Ú	decoratorzjit.<locals>.decorator¶  s—   ø€ Ý˜‰|Œ|ÐÐˆ|ÝŒ=Ô"ð 	Ø8Ð8Ð8Ð8Ð8Ð8Ø&Ð& r°7ÐN_ØFdÐlqØ08¸tÐUdðfñ fô fð fõ ØØØ"3Ø/MØØ!ØØ /ð	ñ 	ô 	ð 	rF   N©r  r    r#   r  r‚   )	r  rë  rž  rÔ  rÐ   rÒ   rÊ  rX   r  s	    ``````` rE   r  r  ™  sb   øøøøøøø€ ð:ð ð ð ð ð ð ð ð ð ð ð ð& 
€~Øˆy˜‰}Œ}Ðð ÐrF   c                  ób   — e Zd ZdZed„ ¦   «         Zdd„Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	dS )	rô   zr
    Can be used in place of real tensors when calling:
        kernel.warmup(MockTensor(torch.float32), ...)
    c                óZ   — | j         j        dk    r| j        dk    rt          | ¦  «        S | S )NrÈ   Útorch)rD   r\   rM   rô   r’   s    rE   rõ   zMockTensor.wrap_dtypeÛ  s/   € àŒ=Ô! WÒ,Ð,°´À7Ò1JÐ1JÝ˜c‘?”?Ð"Øˆ
rF   Nc                ó,   — |€dg}|| _         || _        d S )Nr   )rÈ   Úshape)rB   rÈ   r%  s      rE   r4   zMockTensor.__init__á  s    € Øˆ=Ø�CˆEØˆŒ
ØˆŒ
ˆ
ˆ
rF   c                ó    — dg}| j         dd …         D ] }|                     |d         |z  ¦  «         Œ!t          t          |¦  «        ¦  «        S )Nr   r½   )r%  r/  r‚  Úreversed)rB   ÚstridesÚsizes      rE   ÚstridezMockTensor.strideç  sV   € Ø�#ˆØ”J˜q˜r˜r”Nð 	/ð 	/ˆDØ�NŠN˜7 2œ;¨Ñ-Ñ.Ô.Ð.Ð.Ý•X˜gÑ&Ô&Ñ'Ô'Ð'rF   c                 ó   — dS ©Nr   r‚   r‚   rF   rE   Údata_ptrzMockTensor.data_ptrí  ó   € àˆqrF   c                 ó   — dS r,  r‚   r‚   rF   rE   Ú	ptr_rangezMockTensor.ptr_rangeñ  r.  rF   rH   )
r\   rM   r´   rµ   Ústaticmethodrõ   r4   r*  r-  r0  r‚   rF   rE   rô   rô   Õ  s’   € € € € € ðð ð
 ðð ñ „\ðð
ð ð ð ð(ð (ð (ð ðð ñ „\ðð ðð ñ „\ðð ð rF   rô   c                  óL   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ ZdS )ÚTensorWrapperc                ót   — || _         || _        |j        | _        |j        | _        | j        j        | _        d S rH   )rÈ   ÚbaseÚdatar”  r%  )rB   r5  rÈ   s      rE   r4   zTensorWrapper.__init__ø  s1   € ØˆŒ
ØˆŒ	Ø”IˆŒ	Ø”kˆŒØ”Y”_ˆŒ
ˆ
ˆ
rF   c                ó4   — | j                              ¦   «         S rH   )r5  r-  rJ   s    rE   r-  zTensorWrapper.data_ptrÿ  s   € ØŒy×!Ò!Ñ#Ô#Ð#rF   c                ó    —  | j         j        |Ž S rH   )r5  r*  )rB   r•   s     rE   r*  zTensorWrapper.stride  s   € ØˆtŒyÔ Ð&Ð&rF   r#   r_   c                ó(   — d| j         › d| j        › d�S )NzTensorWrapper[r“  r  )rÈ   r5  rJ   s    rE   Ú__str__zTensorWrapper.__str__  s   € Ø: ¤
Ð:Ð:¨d¬iÐ:Ð:Ð:Ð:rF   c                ó4   — | j                              ¦   «         S rH   )r5  Úelement_sizerJ   s    rE   r<  zTensorWrapper.element_size  s   € ØŒy×%Ò%Ñ'Ô'Ð'rF   c                óZ   — t          | j                             ¦   «         | j        ¦  «        S rH   )r3  r5  ÚcpurÈ   rJ   s    rE   r>  zTensorWrapper.cpu  s   € Ý˜TœYŸ]š]™_œ_¨d¬jÑ9Ô9Ð9rF   c                óD   — | j                              |j         ¦  «         d S rH   )r5  Úcopy_)rB   Úothers     rE   r@  zTensorWrapper.copy_  s   € ØŒ	�Š˜œ
Ñ#Ô#Ð#Ð#Ð#rF   c                óZ   — t          | j                             ¦   «         | j        ¦  «        S rH   )r3  r5  ÚclonerÈ   rJ   s    rE   rC  zTensorWrapper.clone  s    € Ý˜TœYŸ_š_Ñ.Ô.°´
Ñ;Ô;Ð;rF   c                ó\   — t          | j                             |¦  «        | j        ¦  «        S rH   )r3  r5  ÚtorÈ   )rB   r”  s     rE   rE  zTensorWrapper.to  s"   € Ý˜TœYŸ\š\¨&Ñ1Ô1°4´:Ñ>Ô>Ð>rF   c                ó\   — t          | j                             |¦  «        | j        ¦  «        S rH   )r3  r5  Ú	new_emptyrÈ   )rB   Úsizess     rE   rG  zTensorWrapper.new_empty  s$   € Ý˜TœY×0Ò0°Ñ7Ô7¸¼ÑDÔDÐDrF   Nrç   )r\   rM   r´   r4   r-  r*  r:  r<  r>  r@  rC  rE  rG  r‚   rF   rE   r3  r3  ö  s´   € € € € € ð%ð %ð %ð$ð $ð $ð'ð 'ð 'ð;ð ;ð ;ð ;ð(ð (ð (ð:ð :ð :ð$ð $ð $ð<ð <ð <ð?ð ?ð ?ðEð Eð Eð Eð ErF   r3  c                ó  — t          | t          ¦  «        r,|| j        j        k    r| j        S t          | j        |¦  «        S t	          | d¦  «        rt          | |¦  «        S t          dt          | ¦  «        › d�¦  «        ‚)Nr-  zCannot reinterpret a r:  )r0   r3  r5  rÈ   Úhasattrr¬   rm   )ÚtensorrÈ   s     rE   ÚreinterpretrL    s„   € Ý�&�-Ñ(Ô(ð AØ�F”KÔ%Ò%Ð%à”;Ðõ ! ¤¨eÑ4Ô4Ð4Ý	�˜Ñ	$Ô	$ð Aå˜V UÑ+Ô+Ð+åÐ?µ°V±´Ð?Ð?Ð?Ñ@Ô@Ð@rF   c                ó0  — | }t          |t          ¦  «        s|j        }t          |t          ¦  «        ¯|j        j        j        }|j        }t          |j        ¦  «        D ]3\  }}|                     ¦   «          	                    d¦  «        r||z  } nŒ4||fS )Nzdef )
r0   rY   r  rW  Úco_filenamerA  r‡  r@  rÂ   rR   )r  Úbase_fnÚ	file_nameÚ
begin_lineÚidxÚlines         rE   Úget_jit_fn_file_linerT  *  s§   € Ø€GÝ˜¥+Ñ.Ô.ð Ø”*ˆõ ˜¥+Ñ.Ô.ð à”
Ô#Ô/€IØÔ-€Jõ ˜wœÑ/Ô/ð ð ‰	ˆˆTØ�:Š:‰<Œ<×"Ò" 6Ñ*Ô*ð 	Ø˜#ÑˆJØˆEð	ð �jÐ Ð rF   c                  ó0   — e Zd Zd„ Zed„ ¦   «         Zd„ ZdS )ÚBoundConstexprFunctionc                ó"   — || _         || _        d S rH   )Ú__self__Ú__func__)rB   Úinstancer  s      rE   r4   zBoundConstexprFunction.__init__>  s   € Ø ˆŒØˆŒˆˆrF   c                ó   — | j         j        S rH   )rY  r^   rJ   s    rE   r^   z BoundConstexprFunction.cache_keyB  s   € àŒ}Ô&Ð&rF   c                ó.   —  | j         | j        g|¢R i |¤ŽS rH   )rY  rX  r  s      rE   r  zBoundConstexprFunction.__call__F  s&   € ØˆtŒ}˜Tœ]Ð<¨TÐ<Ð<Ð<°VÐ<Ð<Ð<rF   N)r\   rM   r´   r4   r¶   r^   r  r‚   rF   rE   rV  rV  <  sM   € € € € € ðð ð ð ð'ð 'ñ „Xð'ð=ð =ð =ð =ð =rF   rV  c                  ó0   ‡ — e Zd Zˆ fd„Zd„ Zddœd„Zˆ xZS )ÚConstexprFunctionc                óJ   •— t          ¦   «                              |¦  «         d S rH   )r3   r4   )rB   r  rD   s     €rE   r4   zConstexprFunction.__init__L  s!   ø€ Ý‰Œ×Ò˜ÑÔÐÐÐrF   c                ó*   — |�t          || ¦  «        S | S rH   )rV  )rB   r  Úobjclasss      rE   Ú__get__zConstexprFunction.__get__O  s   € àˆ?Ý)¨#¨tÑ4Ô4Ð4ØˆrF   N)Ú	_semanticc               óÎ   ‡— ddl mŠm} ˆfd„|D ¦   «         }ˆfd„|                     ¦   «         D ¦   «         } | j        |i |¤Ž}|€|S t
          j        j        r|S  ||¦  «        S )Nr   )Ú_unwrap_if_constexprri   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r‚   r‚   )r„   r
  re  s     €rE   r†   z.ConstexprFunction.__call__.<locals>.<listcomp>X  s%   ø€ Ð6Ð6Ð6¨AÐ$Ð$ QÑ'Ô'Ð6Ð6Ð6rF   c                ó.   •— i | ]\  }}| ‰|¦  «        “ŒS r‚   r‚   )r„   r`   r·  re  s      €rE   r  z.ConstexprFunction.__call__.<locals>.<dictcomp>Y  s+   ø€ ÐJÐJÐJ±°!°Q�!Ð)Ð)¨!Ñ,Ô,ÐJÐJÐJrF   )r¿   re  ri   r  r  r   rÌ  r  )rB   rc  r•   rö   ri   Úresre  s         @rE   r  zConstexprFunction.__call__U  sš   ø€ ØHÐHÐHÐHÐHÐHÐHÐHà6Ð6Ð6Ð6°Ð6Ñ6Ô6ˆØJÐJÐJÐJ¸6¿<º<¹>¼>ÐJÑJÔJˆð ˆdŒg�tÐ&˜vÐ&Ð&ˆàÐàˆJõ Œ=Ô"ð 	ØˆJØˆy˜‰~Œ~ÐrF   )r\   rM   r´   r4   rb  r  r·   r¸   s   @rE   r^  r^  J  se   ø€ € € € € ðð ð ð ð ðð ð ð )-ð ð ð ð ð ð ð ð ð rF   r^  c                ó    — t          | ¦  «        S )z©
    Wraps an arbitrary Python function so that it can be called at
    compile-time on constexpr arguments in a Triton function and
    returns a constexpr result.
    )r^  r;  s    rE   Úconstexpr_functionrj  h  s   € õ ˜RÑ Ô Ð rF   rç   )Fr   )rž  r  rÔ  r  rÐ   r  rÒ   r  rÊ  r  rX   r  r#   r  rH   )r  r  rž  r  rÔ  r  rÐ   r  rÒ   r  rÊ  r  rX   r  r#   r  )HÚ
__future__r   r   r|   r1   r6   rO   r�   rE  rJ  rH  Úcollectionsr   Údataclassesr   Ú	functoolsr   Útypingr   r	   r
   r   r   r   r   r   r   Útriton.backendsr   Útypesr   rN   r   r   r   Ú_utilsr   r   r   r   Úcacher   Útriton._C.libtritonr   r   r   r>   r=   r    ÚNodeVisitorr"   rÄ   rÌ   rë   rí   r  r8  r<  rY   rì  ry  r…  rˆ  r   r  rô   r3  rL  rT  rV  r^  rj  r‚   rF   rE   ú<module>rv     sð  ðØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ø ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ø  Ð  Ð  Ð  Ð  Ð  Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [à!€Ø3€à€GˆC�L„L€ðg!ð g!ð g!ð g!ð g!˜œñ g!ô g!ð g!ð^Dð Dð Dð Dð4/>ð />ð />ð />ð />ñ />ô />ð />ðdTð Tð Tð TðZð Zð Zð Zð Z�g˜a”jñ Zô Zð Zð&ð ð ð$9*ð 9*ð 9*ðx0ð 0ð 0ði1ð i1ð i1ð i1ð i1ñ i1ô i1ð i1ðX !#Ð ð ðð ð ð ð ñ ô ñ „ððð ð ð0	ð 	ð 	ð\Dð \Dð \Dð \Dð \D�+˜¨qÔ1ñ \Dô \Dð \DðH	 
ðð ð ñ 
„ðð 
ð Ø#Ø*.Ø7;ØDHØ Ø#ð
ð 
ð 
ð 
ð 
ñ 
„ð
ð ð4ð Ø#Ø*.Ø7;ØDHØ Ø#ð4ð 4ð 4ð 4ð 4ð 4ðxð ð ð ð ñ ô ð ðB"Eð "Eð "Eð "Eð "Eñ "Eô "Eð "EðJAð Að Að!ð !ð !ð$=ð =ð =ð =ð =˜[ñ =ô =ð =ðð ð ð ð ˜ñ ô ð ð<!ð !ð !ð !ð !rF   