o
    h$                     @   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deedf deedf f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    | i |S N )argskwargmethodr   T/var/www/html/ai/venv/lib/python3.10/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 ]'}t| |r2t| |}|t|< t|r)t| |t|| qt| |t|| qd S )Nc                 S   s   g | ]
}|d  dkr|qS )r   _r   ).0funcr   r   r   
<listcomp>       z!attach_triton.<locals>.<listcomp>)dirr
   hasattrr   tl_method_backupcallablesetattrr   )moduler   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   sD    t | }dd |D }ttj| }t| |D ]}|V  qd 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*   reversed_gridranges_for_each_dimensionindex_combinationsindex_combinationr   r   r   program_ids_from_grid,   s   
r8   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      || _ || _d S r   )r   r*   )selfr   r*   r   r   r   __init__:      
zDebuggerFunction.__init__c                 C   s   || j jv o| j j| tju S r   )r   __annotations__lcore	constexpr)r<   r   r   r   r   _is_constexpr>   s   zDebuggerFunction._is_constexprc                 C   s2   g }| j j D ]\}}|tju r|| q|S r   )r   r?   r(   r@   rA   append)r<   resultr   
annotationr   r   r   _get_constexprA   s   

zDebuggerFunction._get_constexprc                    s8   |   } fdd|D }t|dksJ d| d S )Nc                    s   g | ]
}|   vr|qS r   )keys)r   ikwargsr   r   r   J   r   z6DebuggerFunction._assert_constexpr.<locals>.<listcomp>r   zYou must specify constexpr )rF   len)r<   rJ   constexpmissingr   rI   r   _assert_constexprH   s   z"DebuggerFunction._assert_constexprc                 K   s   t | jr
| |S | jS r   )r"   r*   )r<   rJ   r   r   r   	_get_gridM   s   

zDebuggerFunction._get_gridc                    s   j di | t fdd tt tjjj|} fdd| D }j	di |}t
|D ]}tt||}tt| j|i | tt q6d S )Nc                    sR   | \}}t |r |}tt j|gt jddS |r#t|S tt|S )Ncuda)dtypedevice)	torch	is_tensor
add_tensorr   tensorint64rB   r   r   )vr   argptr)memoryr<   r   r   convert_argX   s   


z.DebuggerFunction.__call__.<locals>.convert_argc                    s&   i | ]\}}|d vr| ||fqS ))	num_warps
num_stagesr   r   krX   r\   r   r   
<dictcomp>b   s   & z-DebuggerFunction.__call__.<locals>.<dictcomp>r   )rN   r	   tuplemapzipr   __code__co_varnamesr(   rO   r8   r
   r   r'   tlr)   )r<   r   rJ   new_args
new_kwargsr*   
program_idr   r   )r\   r[   r<   r   __call__S   s   	

zDebuggerFunction.__call__N)r:   )	__name__
__module____qualname__r=   rB   rF   rN   rO   rl   r   r   r   r   r9   9   s    
r9   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J d| || _d S )Nr   2z2Triton Debugger only supports torch >= 2.0, using )rS   __version__r   )r<   r   versionr   r   r   r=   q   s   
zGridSelector.__init__c                 C   s   t | j|S r   r9   r   r<   r*   r   r   r   __getitem__v   s   zGridSelector.__getitem__c                 O   s   t | j|i |S r   rt   r<   r   rJ   r   r   r   rl   y   s   zGridSelector.__call__N)rm   rn   ro   __doc__r=   rv   rl   r   r   r   r   rp   l   s
    rp   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )AutotuneGridSelectorc                 C   r;   r   )r   autotune_params)r<   r   rz   r   r   r   r=   ~   r>   zAutotuneGridSelector.__init__c                 C   s   t | j| j|S r   AutotuneRunnerr   rz   ru   r   r   r   rv      s   z AutotuneGridSelector.__getitem__c                 O   s   t | j| j|i |S r   r{   rw   r   r   r   rl      s   zAutotuneGridSelector.__call__N)rm   rn   ro   r=   rv   rl   r   r   r   r   ry   }   s    ry   c                   @   s   e Zd ZdddZdd ZdS )r|   Nc                 C   s   || _ || _|| _d S r   )r   rz   r*   )r<   r   rz   r*   r   r   r   r=      s   
zAutotuneRunner.__init__c                    s   t | jd dksJ | jd dd  D ]5}dd  tt |} fdd| D }| jr>| j| j |i ||j q| j|i ||j q| jd d }| jrd| j| j |i ||j d S | j|i ||j d S )Nconfigsr   c                 S   s   t | r
t | S | S r   )rS   rT   clone)rX   r   r   r   r\      s   

z,AutotuneRunner.__call__.<locals>.convert_argc                    s   i | ]	\}}| |qS r   r   r_   ra   r   r   rb      s    z+AutotuneRunner.__call__.<locals>.<dictcomp>r   )rK   rz   rc   rd   r(   r*   r   rJ   )r<   r   rJ   configri   rj   main_configr   ra   r   rl      s    zAutotuneRunner.__call__r   )rm   rn   ro   r=   rl   r   r   r   r   r|      s    
r|   c                     s    fdd}|S )Nc                    s
   t |  S r   )ry   )r   kwarsr   r   wrapper   s   
z&triton_debug_autotune.<locals>.wrapperr   )r   r   r   r   r   triton_debug_autotune   s   r   )r0   r2   typingr    r   rh   r   r@   r   r   
memory_mapr	   tl_langr
   r   r   r   rS   r!   r   r'   r)   intr8   r9   rp   ry   r|   r   r   r   r   r   <module>   s(    	"3