U
    9%eEH                     @  s   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	 ej
Z
dd	 Zd
d Zdd ZG dd dZG dd dZdd ZG dd dZdS )    )annotations   )core   )torch_wrapper)ExecutionContext)	MemoryMapc                 C  sD  ddi}t | tr,tj| gfdtji|S t | trd|   krJdk rhn ntj| gfdtji|S d|   kr|dk rn ntj| gfdtji|S td|  d	ntt | trtj| gfdtj	i|S t
| r| S t | tr| S t | tr| jd
krd
S t| jS | d
kr d
S ds@td|  dt|  dd
S )zI
    Converts various Python primitive data types to PyTorch tensor.
    devicecudadtypei   l        l         l            zNonrepresentable integer .NFzcannot convert z	 of type z
 to tensor)
isinstancebooltorchtensorintint32int64RuntimeErrorfloatfloat32	is_tensorWrappedTensordebugger_constexprvalue_primitive_to_tensorAssertionErrortype)xZtensor_args r   Y/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/triton/interpreter/tl_lang.pyr      s,    






r   c                   s    fdd}|S )z
    A decorator function to harmonize function args:
        - converts primitives to PyTorch tensors
        - wraps PyTorch tensors with WrappedTensors
    c                    s,   t tdd | }t tdd |} | S )Nc                 S  s   t | S N)r   vr   r   r    <lambda>/       z0_infer_tensor.<locals>.wrapper.<locals>.<lambda>c                 S  s   t | rt| S | S r!   )r   r   r   r"   r   r   r    r$   0   r%   )tuplemap)argsnew_argsfuncr   r    wrapper.   s    z_infer_tensor.<locals>.wrapperr   r+   r,   r   r*   r    _infer_tensor(   s    r.   c                   s    fdd}|S )z
    A decorator function to unwrap WrappedTensors and debugger_constexpr before calling the function.
    Can be combined with _infer_tensor decorator to harmonize args (everything to torch tensor).
    c                    sz   | D ]}t |rtdqdd  tt | } fdd| D }| d f|dd  |}t |rvt|S |S )Nzunexpected tensor argumentc                 S  s$   t | tr| jS t | tr | jS | S r!   )r   r   r   r   r   r"   r   r   r    unwrap_tensor@   s
    

z9_tensor_operation.<locals>.wrapper.<locals>.unwrap_tensorc                   s   i | ]\}}| |qS r   r   ).0kr#   r/   r   r    
<dictcomp>H   s      z6_tensor_operation.<locals>.wrapper.<locals>.<dictcomp>r   r   )r   r   r   r&   r'   itemsr   )r(   kwargsargr)   Z
new_kwargsresultr*   r2   r    r,   <   s    z"_tensor_operation.<locals>.wrapperr   r-   r   r*   r    _tensor_operation7   s    r8   c                   @  s   e Zd Zdd ZddddZd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dd Zdd Zd"d d!ZdS )#r   c                 C  s   t |tr|j| _n|| _d S r!   r   r   r   )selfr   r   r   r    __init__Q   s    

zdebugger_constexpr.__init__strreturnc                 C  s   dt | j d S )Nzdebugger_constexpr())r<   r   r:   r   r   r    __str__W   s    zdebugger_constexpr.__str__r   c                 C  s   | j S r!   r   r@   r   r   r    	__index__Z   s    zdebugger_constexpr.__index__c                 C  s
   t | jS r!   )r   r   r@   r   r   r    __bool__]   s    zdebugger_constexpr.__bool__c                 C  s   t |tr|jn|}| j|kS r!   r9   r:   otherr   r   r    __ge__`   s    zdebugger_constexpr.__ge__c                 C  s   t |tr|jn|}| j|kS r!   r9   rE   r   r   r    __gt__d   s    zdebugger_constexpr.__gt__c                 C  s   t |tr|jn|}| j|kS r!   r9   rE   r   r   r    __le__h   s    zdebugger_constexpr.__le__c                 C  s   t |tr|jn|}| j|k S r!   r9   rE   r   r   r    __lt__l   s    zdebugger_constexpr.__lt__c                 C  s   t |tr|jn|}| j|kS r!   r9   rE   r   r   r    __eq__p   s    zdebugger_constexpr.__eq__c                 C  s   t |tr|jn|}| j|B S r!   r9   rE   r   r   r    __or__t   s    zdebugger_constexpr.__or__c                 C  s   t |tr|jn|}| j|B S r!   r9   rE   r   r   r    __ror__x   s    zdebugger_constexpr.__ror__c                 C  s   t |tr|jn|}| j|@ S r!   r9   rE   r   r   r    __and__|   s    zdebugger_constexpr.__and__c                 C  s   t |tr|jn|}| j|@ S r!   r9   rE   r   r   r    __rand__   s    zdebugger_constexpr.__rand__FNc                 C  sJ   |t jfkrt}n*|t jkr"t}n|t jfkr4t}ntdt|| jS )Nzdtype not supported in debugger)	r   r   r   r   Zfloat64r   
ValueErrorr   r   )r:   r   bitcastZ_builderZret_tyr   r   r    to   s    
zdebugger_constexpr.to)FN)__name__
__module____qualname__r;   rA   rC   rD   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rR   r   r   r   r    r   P   s   r   c                   @  s4  e Zd Zdd ZddddZdddd	Zd
dddZedd Ze	e
dd Ze	e
dd Ze	e
dd Ze	e
dd Ze	e
dd Ze	e
dd Ze	e
dd Ze	e
dd Ze	e
dd  Ze	e
d!d" Ze	e
d#d$ Ze	e
d%d& Ze	e
d'd( Ze	e
d)d* Ze	e
d+d, Ze	e
d-d. Ze	e
d/d0 Ze	e
d1d2 Ze	e
d3d4 Ze	e
d5d6 Ze	e
d7d8 Ze	e
d9d: Z e	e
d;d< Z!e	e
d=d> Z"e	e
d?d@ Z#e	e
dAdB Z$e	e
dCdD Z%e	e
dEdF Z&e	e
dGdH Z'e
dIdJ Z(e
dOdLdMZ)dNS )Pr   c                 C  s
   || _ d S r!   r   )r:   r   r   r   r    r;      s    zWrappedTensor.__init__r   r=   c                 C  s
   | j  S r!   )r   itemr@   r   r   r    rC      s    zWrappedTensor.__index__r<   c                 C  s   dt | j S )NZwrapped_)r<   r   r@   r   r   r    rA      s    zWrappedTensor.__str__r   c                 C  s   t | jdk S )NT)r   allr   rW   r@   r   r   r    rD      s    zWrappedTensor.__bool__c                 C  s   | j jS r!   )r   r   r@   r   r   r    r      s    zWrappedTensor.dtypec                 C  s   t | j|S r!   )r   addr   rE   r   r   r    __add__   s    zWrappedTensor.__add__c                 C  s
   |  |S r!   )rZ   rE   r   r   r    __radd__   s    zWrappedTensor.__radd__c                 C  s   t | j|S r!   r   subr   rE   r   r   r    __sub__   s    zWrappedTensor.__sub__c                 C  s   t || jS r!   r\   rE   r   r   r    __rsub__   s    zWrappedTensor.__rsub__c                 C  s   t | j|S r!   )r   mulr   rE   r   r   r    __mul__   s    zWrappedTensor.__mul__c                 C  s
   |  |S r!   )ra   rE   r   r   r    __rmul__   s    zWrappedTensor.__rmul__c                 C  s   t | j|S r!   r   divr   rE   r   r   r    __truediv__   s    zWrappedTensor.__truediv__c                 C  s   t || jS r!   rc   rE   r   r   r    __rtruediv__   s    zWrappedTensor.__rtruediv__c                 C  s   t | j|S r!   r   Zfloor_divider   rE   r   r   r    __floordiv__   s    zWrappedTensor.__floordiv__c                 C  s   t || jS r!   rg   rE   r   r   r    __rfloordiv__   s    zWrappedTensor.__rfloordiv__c                 C  s   t | j|S r!   r   	remainderr   rE   r   r   r    __mod__   s    zWrappedTensor.__mod__c                 C  s   t || jS r!   rj   rE   r   r   r    __rmod__   s    zWrappedTensor.__rmod__c                 C  s   | j  S r!   rV   r@   r   r   r    __neg__   s    zWrappedTensor.__neg__c                 C  s   | j  S r!   rV   r@   r   r   r    
__invert__   s    zWrappedTensor.__invert__c                 C  s   t | j|S r!   )r   bitwise_andr   rE   r   r   r    rN      s    zWrappedTensor.__and__c                 C  s   t | j|S r!   )r   
bitwise_orr   rE   r   r   r    rL      s    zWrappedTensor.__or__c                 C  s   t | j|S r!   )r   bitwise_xorr   rE   r   r   r    __xor__   s    zWrappedTensor.__xor__c                 C  s   t | j|S r!   )r   Zbitwise_left_shiftr   rE   r   r   r    
__lshift__   s    zWrappedTensor.__lshift__c                 C  s   t | j|S r!   )r   Zbitwise_right_shiftr   rE   r   r   r    
__rshift__   s    zWrappedTensor.__rshift__c                 C  s
   | j |kS r!   rV   rE   r   r   r    rH      s    zWrappedTensor.__gt__c                 C  s
   || j kS r!   rV   rE   r   r   r    __rgt__  s    zWrappedTensor.__rgt__c                 C  s
   | j |kS r!   rV   rE   r   r   r    rG   
  s    zWrappedTensor.__ge__c                 C  s
   || j kS r!   rV   rE   r   r   r    __rge__  s    zWrappedTensor.__rge__c                 C  s
   | j |k S r!   rV   rE   r   r   r    rJ     s    zWrappedTensor.__lt__c                 C  s
   || j k S r!   rV   rE   r   r   r    __rlt__  s    zWrappedTensor.__rlt__c                 C  s
   | j |kS r!   rV   rE   r   r   r    rI     s    zWrappedTensor.__le__c                 C  s
   || j kS r!   rV   rE   r   r   r    __rle__#  s    zWrappedTensor.__rle__c                 C  s   t | j|S r!   r   equalr   rE   r   r   r    rK   (  s    zWrappedTensor.__eq__c                 C  s   t | j| S r!   rz   rE   r   r   r    __ne__-  s    zWrappedTensor.__ne__c                 C  s   | j |S r!   )r   __getitem__)r:   Zslicesr   r   r    r}   2  s    zWrappedTensor.__getitem__Fc                 C  s   | j |S r!   )r   rR   )r:   r   rQ   r   r   r    rR   C  s    zWrappedTensor.toN)F)*rS   rT   rU   r;   rC   rA   rD   propertyr   r.   r8   rZ   r[   r^   r_   ra   rb   re   rf   rh   ri   rl   rm   rn   ro   rN   rL   rs   rt   ru   rH   rv   rG   rw   rJ   rx   rI   ry   rK   r|   r}   rR   r   r   r   r    r      s   

r   c                 C  s   t | tr| jS | S r!   r9   r"   r   r   r    _constexpr_to_valueM  s    
r   c                   @  s  e Zd ZU ded< ded< dddddZedvdddddZedwdddddZedd Zedd Z	edd Z
edd ZedxddZedd Zedd  Zed!d" Zed#d$ Zedyd&d'Zed(d) Zedzd*d+Zed{d,d-Zed|d.d/Zed}d0d1Zed~d2d3Zedd4d5Zedd6d7Zed8d9 Zed:d; Zedd<d=Zed>d? Zed@dA ZedBdC ZedDdE Z edFdG Z!edHdI Z"edJdK Z#edLdM Z$edNdO Z%edPdQ Z&edRdS Z'edTdU Z(edVdW Z)edXdY Z*edZd[ Z+ed\d] Z,edd^d_Z-ed`da Z.edbdc Z/eddde Z0eddfdgZ1edhdi Z2eddjdkZ3edldm Z4eddndoZ5edpdq Z6eddrdsZ7eddtduZ8dS )TritonLangProxyr   _memory_mapr   _context)
memory_mapcontextc                 C  s   || _ || _d S r!   )r   r   )r:   r   r   r   r   r    r;   W  s    zTritonLangProxy.__init__N         Fztorch.Tensor)pointermaskc                 C  s   | j |||S r!   )r   load)r:   r   r   rF   Zcache_modifierZeviction_policyZvolatiler   r   r    r   b  s    
zTritonLangProxy.load)r   r   c                 C  s   | j |||S r!   )r   store)r:   r   r   r   r   r   r    r   n  s    zTritonLangProxy.storec                 C  s0   |t | jjk sttj| jj| gtjddS Nr
   r   r	   )lenr   
program_idr   r   r   r   r:   axisr   r   r    r   r  s    zTritonLangProxy.program_idc                 C  s0   |t | jjk sttj| jj| gtjddS r   )r   r   Zprogram_sizer   r   r   r   r   r   r   r    num_programsw  s    zTritonLangProxy.num_programsc                 C  s   t j||t jddS )Nr
   )startendr   r	   )r   aranger   )r:   r   r   r   r   r    r   |  s    zTritonLangProxy.arangec                 C  s   t |D ]J\}}t|ts*td| dt|jtstd| dt|j dqdd |D }t|tjr|	 r~t
j}n^| rt
j}nN| rt
j}n>| rt
j}n.| rt
j}n| rt
j}ntd| t
j||dd	S )
NzShape element z must have type `constexpr`z1 must have type `constexpr[int]`, got `constexpr[]c                 S  s   g | ]
}|j qS r   rB   )r0   r   r   r   r    
<listcomp>  s     z)TritonLangProxy.zeros.<locals>.<listcomp>zUnsupported dtype r
   )sizer   r	   )	enumerater   r   	TypeErrorr   r   r   lcorer   Zis_fp32r   r   Zis_fp16float16Zis_bf16Zbfloat16Zis_int32r   Zis_int16Zint16Zis_int8Zint8zeros)r:   shaper   idr   r   r    r     s*    
zTritonLangProxy.zerosc                 C  s   |d krt j}t d S r!   )r   r   NotImplementedError)r:   inputscaleshiftZnbitZdst_tyr   r   r    
dequantize  s    zTritonLangProxy.dequantizec                 C  s
   t  d S r!   r   )r:   r   rF   r   r   r    	broadcast  s    zTritonLangProxy.broadcastc                 C  s
   t  d S r!   r   r:   r   r   r   r   r    broadcast_to  s    zTritonLangProxy.broadcast_toc                 C  s
   t  d S r!   r   r   r   r   r    cat  s    zTritonLangProxy.catc                 C  s
   t  d S r!   r   r   r   r   r    reshape  s    zTritonLangProxy.reshapeTc                 C  s2   |j |j kst|r|j}|r$|j}tj||dS )N)r   rF   )r   r   Tr   matmul)r:   r   rF   Ztrans_aZtrans_bZ
allow_tf32r   r   r    dot  s    zTritonLangProxy.dotc                 C  sl   | j |d d}t|tjs0tj|g|jdd}t|tjsPtj|g|jdd}||krh| j ||d  |S )Nr   r
   r   )r   r   r   r   ZTensorr   r   r   )r:   r   cmpvalstoredr   r   r    
atomic_cas  s    zTritonLangProxy.atomic_casc                 C  sB   t |trtj|gtjdd}| j||d}| j||| |S )Nr
   r   r   )r   r   r   r   r   r   r   r   )r:   r   r   r   r   r   r   r    atomic_xchg  s
    
zTritonLangProxy.atomic_xchgc                 C  s,   | j ||d}|| }| j ||| |S Nr   )r   r   r   r:   r   r   r   r   r7   r   r   r    
atomic_add  s    zTritonLangProxy.atomic_addc                 C  s0   | j ||d}t||}| j ||| |S r   )r   r   r   maximumr   r   r   r   r    
atomic_max  s    zTritonLangProxy.atomic_maxc                 C  s0   | j ||d}t||}| j ||| |S r   )r   r   r   minimumr   r   r   r   r    
atomic_min  s    zTritonLangProxy.atomic_minc                 C  s0   | j ||d}t||}| j ||| |S Nr   )r   r   r   rp   r   r   r   r   r    
atomic_and  s    zTritonLangProxy.atomic_andc                 C  s0   | j ||d}t||}| j ||| |S r   )r   r   r   rq   r   r   r   r   r    	atomic_or  s    zTritonLangProxy.atomic_orc                 C  s0   | j ||d}t||}| j ||| |S r   )r   r   r   rr   r   r   r   r   r    
atomic_xor  s    zTritonLangProxy.atomic_xorc                 C  s&   t |}t |}t |}t|||S r!   )r   r   where)r:   	conditionr   yr   r   r    r     s    zTritonLangProxy.wherec                 C  s
   t  d S r!   r   r:   r   r   r   r   r    umulhi  s    zTritonLangProxy.umulhic                 C  s
   t  d S r!   r   )r:   r   r   ieee_roundingr   r   r    fdiv  s    zTritonLangProxy.fdivc                 C  s
   t |S r!   )r   expr:   r   r   r   r    r     s    zTritonLangProxy.expc                 C  s
   t |S r!   )r   logr   r   r   r    r   	  s    zTritonLangProxy.logc                 C  s
   t |S r!   )r   cosr   r   r   r    r     s    zTritonLangProxy.cosc                 C  s
   t |S r!   )r   sinr   r   r   r    r     s    zTritonLangProxy.sinc                 C  s
   t |S r!   )r   sqrtr   r   r   r    r     s    zTritonLangProxy.sqrtc                 C  s
   t  d S r!   r   r@   r   r   r    globaltimer  s    zTritonLangProxy.globaltimerc                 C  s
   t  d S r!   r   r@   r   r   r    clock  s    zTritonLangProxy.clockc                 C  s
   t  d S r!   r   r@   r   r   r    debug_barrier!  s    zTritonLangProxy.debug_barrierc                 C  s   |S r!   r   r:   r   valuesr   r   r    multiple_of%  s    zTritonLangProxy.multiple_ofc                 C  s   |S r!   r   r   r   r   r    max_contiguous)  s    zTritonLangProxy.max_contiguousc                 C  s   |S r!   r   r   r   r   r    max_constancy-  s    zTritonLangProxy.max_constancyc                 C  s
   t |S r!   )r   absr   r   r   r    r   1  s    zTritonLangProxy.absc                 C  s   || d | S )Nr   r   )r:   r   rd   r   r   r    cdiv5  s    zTritonLangProxy.cdivc                 C  s<   t |trtj|dd}t |tr0tj|dd}t||S )Nr
   )r	   )r   r   r   r   r   r   r   r   r    r   9  s
    

zTritonLangProxy.minimumc                 C  s   t ||S r!   )r   r   r   r   r   r    r   A  s    zTritonLangProxy.maximumc                 C  s
   t  d S r!   r   r   r   r   r    sigmoidE  s    zTritonLangProxy.sigmoidc                 C  s
   t  d S r!   r   )r:   r   r   r   r   r    softmaxI  s    zTritonLangProxy.softmaxc                 C  s
   t  d S r!   r   r   r   r   r    ravelM  s    zTritonLangProxy.ravelc                 C  s
   t  d S r!   r   )r:   r   jZsize_iZsize_jZsize_gr   r   r    	swizzle2dQ  s    zTritonLangProxy.swizzle2dc                 C  s
   t  d S r!   r   )r:   r   r   r   r    
zeros_likeU  s    zTritonLangProxy.zeros_likec                 C  s"   |d krt |S t j||djS N)dim)r   maxr   r:   r   r   r   r   r    r   Y  s    
zTritonLangProxy.maxc                 C  s
   t  d S r!   r   r   r   r   r    argmax_  s    zTritonLangProxy.argmaxc                 C  s"   |d krt |S t j||djS r   )r   minr   r   r   r   r    r   c  s    
zTritonLangProxy.minc                 C  s
   t  d S r!   r   r   r   r   r    argmini  s    zTritonLangProxy.argminc                 C  s    |d krt |S t j||dS r   )r   sumr   r   r   r    r   m  s    
zTritonLangProxy.sumc                 C  s
   t  d S r!   r   r   r   r   r    xor_sums  s    zTritonLangProxy.xor_sumc                 C  s    |d krt |S t j||dS r   )r   cumsumr   r   r   r    r   w  s    
zTritonLangProxy.cumsumc                 C  s    |d krt |S t j||dS r   )r   cumprodr   r   r   r    r   }  s    
zTritonLangProxy.cumprod)Nr   r   r   F)N)N)FFT)N)N)N)N)N)N)N)F)F)N)N)N)N)N)9rS   rT   rU   __annotations__r;   r8   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   S  s   
     

































r   N)
__future__r   languager   r   r   r   r   r   r   r   r   r.   r8   r   r   r   r   r   r   r   r    <module>   s   @ >