U
    9%e$                     @   s   d dl Z d dlZd dlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZmZmZmZ e	jZi Zdd Zdd Zdd Zeedf eedf dddZG dd dZG dd dZG dd dZG dd dZdd ZdS )    N)Tuple   )language)core   )torch_wrapper)ExecutionContext)	MemoryMap)TritonLangProxyWrappedTensor_primitive_to_tensordebugger_constexprc                    s   t | |  fdd}|S )Nc                     s
    | |S N )argskwargmethodr   ]/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/triton/interpreter/interpreter.pyfun   s    zget_proxy_method.<locals>.fun)getattr)proxynamer   r   r   r   get_proxy_method   s    
r   c                 C   sj   dd t tD }|D ]N}t| |rt| |}|t|< t|rRt| |t|| qt| |t|| qd S )Nc                 S   s   g | ]}|d  dkr|qS )r   _r   ).0funcr   r   r   
<listcomp>   s      z!attach_triton.<locals>.<listcomp>)dirr
   hasattrr   tl_method_backupcallablesetattrr   )moduler   Zmethod_listr   attrr   r   r   attach_triton   s    

r%   c                 C   s"   t  D ]\}}t| || qd S r   )r    itemsr"   )r#   r   r   r   r   r   detach_triton'   s    r'   .)gridreturnc                 c   sB   t | }dd |D }ttj| }t| |D ]
}|V  q2d S )Nc                 S   s   g | ]}t |qS r   )range)r   dimr   r   r   r   /   s     z)program_ids_from_grid.<locals>.<listcomp>)reversedlist	itertoolsproductrandomshuffle)r(   Zreversed_gridZranges_for_each_dimensionZindex_combinationsZindex_combinationr   r   r   program_ids_from_grid,   s    
r2   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )DebuggerFunctionr   c                 C   s   || _ || _d S r   )r   r(   )selfr   r(   r   r   r   __init__:   s    zDebuggerFunction.__init__c                 C   s   || j jko| j j| tjkS r   )r   __annotations__lcore	constexpr)r5   r   r   r   r   _is_constexpr>   s    zDebuggerFunction._is_constexprc                 C   s2   g }| j j D ]\}}|tjkr|| q|S r   )r   r7   r&   r8   r9   append)r5   resultr   
annotationr   r   r   _get_constexprA   s
    
zDebuggerFunction._get_constexprc                    s8   |   } fdd|D }t|dks4td| d S )Nc                    s   g | ]}|   kr|qS r   )keys)r   ikwargsr   r   r   J   s      z6DebuggerFunction._assert_constexpr.<locals>.<listcomp>r   zYou must specify constexpr )r>   lenAssertionError)r5   rB   Zconstexpmissingr   rA   r   _assert_constexprH   s    z"DebuggerFunction._assert_constexprc                 K   s   t | jr| |S | jS d S r   )r!   r(   )r5   rB   r   r   r   	_get_gridM   s    

zDebuggerFunction._get_gridc                    s   j f | t fdd tt tjjj|} fdd| D }j	f |}t
|D ]2}tt||}tt| j|| tt qdd S )Nc                    sR   | \}}t |r4 |}tt j|gt jddS |rFt|S tt|S )Ncuda)ZdtypeZdevice)	torch	is_tensorZ
add_tensorr   ZtensorZint64r:   r   r   )vr   argZptr)memoryr5   r   r   convert_argX   s    


z.DebuggerFunction.__call__.<locals>.convert_argc                    s&   i | ]\}}|d kr| ||fqS ))Z	num_warpsZ
num_stagesr   r   krK   rN   r   r   
<dictcomp>b   s       z-DebuggerFunction.__call__.<locals>.<dictcomp>)rF   r	   tuplemapzipr   __code__co_varnamesr&   rG   r2   r
   r   r%   tlr'   )r5   r   rB   new_args
new_kwargsr(   Z
program_idr   r   )rN   rM   r5   r   __call__S   s    	
zDebuggerFunction.__call__N)r4   )	__name__
__module____qualname__r6   r:   r>   rF   rG   r[   r   r   r   r   r3   9   s   
r3   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	GridSelectorz%
    Entry point of the debugger
    c                 C   s*   t j}|d dks td| || _d S )Nr   2z2Triton Debugger only supports torch >= 2.0, using )rI   __version__rD   r   )r5   r   versionr   r   r   r6   q   s    zGridSelector.__init__c                 C   s   t | j|S r   r3   r   r5   r(   r   r   r   __getitem__v   s    zGridSelector.__getitem__c                 O   s   t | j||S r   rc   r5   r   rB   r   r   r   r[   y   s    zGridSelector.__call__N)r\   r]   r^   __doc__r6   re   r[   r   r   r   r   r_   l   s   r_   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )AutotuneGridSelectorc                 C   s   || _ || _d S r   )r   autotune_params)r5   r   ri   r   r   r   r6   ~   s    zAutotuneGridSelector.__init__c                 C   s   t | j| j|S r   AutotuneRunnerr   ri   rd   r   r   r   re      s    z AutotuneGridSelector.__getitem__c                 O   s   t | j| j||S r   rj   rf   r   r   r   r[      s    zAutotuneGridSelector.__call__N)r\   r]   r^   r6   re   r[   r   r   r   r   rh   }   s   rh   c                   @   s   e Zd ZdddZdd ZdS )rk   Nc                 C   s   || _ || _|| _d S r   )r   ri   r(   )r5   r   ri   r(   r   r   r   r6      s    zAutotuneRunner.__init__c                    s   t | jd dkst| jd dd  D ]b}dd  tt |} fdd| D }| jrx| j| j |||j q(| j|||j q(| jd d }| jr| j| j |||j n| j|||j d S )NZconfigsr   c                 S   s   t | rt | S | S r   )rI   rJ   clone)rK   r   r   r   rN      s    

z,AutotuneRunner.__call__.<locals>.convert_argc                    s   i | ]\}}| |qS r   r   rO   rQ   r   r   rR      s      z+AutotuneRunner.__call__.<locals>.<dictcomp>r   )	rC   ri   rD   rS   rT   r&   r(   r   rB   )r5   r   rB   configrY   rZ   Zmain_configr   rQ   r   r[      s    zAutotuneRunner.__call__)N)r\   r]   r^   r6   r[   r   r   r   r   rk      s   
rk   c                     s    fdd}|S )Nc                    s
   t |  S r   )rh   )r   kwarsr   r   wrapper   s    z&triton_debug_autotune.<locals>.wrapperr   )ro   rp   r   rn   r   triton_debug_autotune   s    rq   )r.   r0   typingr    r   rX   r   r8   r   r   Z
memory_mapr	   Ztl_langr
   r   r   r   rI   r    r   r%   r'   intr2   r3   r_   rh   rk   rq   r   r   r   r   <module>   s&   	 3