o
    X۷i                     @  s   d dl mZ d dlZd dlZd dlmZ G dd dejZG dd dZdd	 Z	G d
d dZ
G dd dZG dd dZG dd dZdS )    )annotationsN)
_klv_utilsc                   @  s   e Zd ZdZdZdZdS )Actions         N)__name__
__module____qualname__SetGetBarrier r   r   V/home/ubuntu/vllm_env/lib/python3.10/site-packages/cupyx/distributed/_store_actions.pyr   	   s    r   c                   @  s0   e Zd Zdd Zdd Zedd Zdd Zd	S )
ActionErrorc                 C  
   || _ d S N)
_exception)self	exceptionr   r   r   __init__      
zActionError.__init__c                 C  s   | j }tdt|dS )Nr   ascii)r   r   get_result_action_tstrencode)r   er   r   r   klv   s   zActionError.klvc                 C  s   t | jdNutf-8)RuntimeErrorr   decoder   r   r   r   from_klv   s   zActionError.from_klvc                 C  s   t | d S r   )r   r#   r   datar   r   r   decode_result   s   zActionError.decode_resultN)r   r	   r
   r   r   staticmethodr#   r&   r   r   r   r   r      s    
r   c              
   C  s   z-| t jkrt|}n| t jkrt|}n| t jkr"t|}ntd|  ||W S  tyC } z
t|W  Y d }~S d }~ww )Nzunknown action )r   r   r#   r   r   
ValueError	Exceptionr   )actionvaluestore
action_objr   r   r   r   execute_action   s   



r.   c                   @  F   e Zd ZG dd dZdd Zedd Zdd Zd	d
 Zdd Z	dS )r   c                   @      e Zd Zdd Zedd ZdS )zSet.SetResultc                 C      t td}td|}t|S NTr   	bytearraybytesr   r   r   vr*   r   r   r   r   1      zSet.SetResult.klvc                 C     dS NTr   r"   r   r   r   r#   6   s   zSet.SetResult.from_klvNr   r	   r
   r   r'   r#   r   r   r   r   	SetResult0       r<   c                 C  s<   || _ || _t|tstdt|tttfvrtdd S )N&Invalid type for key, only str allowedz1Invalid type for value, only int or bytes allowed)	keyr+   
isinstancer   r(   typer5   r4   int)r   r?   r+   r   r   r   r   :   s   
zSet.__init__c                 C  sd   t | } t| D ]\}}|dkr#| d | d}| |d d  }  nqtdt| }t||S )Nr   r   r   z%No separation character for key found)r5   	enumerater!   r(   r   get_value_from_bytesr   )r+   ibkr7   r   r   r   r#   D   s   

zSet.from_klvc                 C  s@   t | jd}|d |t| j7 }ttj	|}t
|S )Nr   r   )r4   r?   r   appendr   create_value_bytesr+   get_action_tr   r   r5   r6   r   r   r   r   Q   s
   
zSet.klvc                 C  s   | j |j| j< t S r   )r+   storager?   r   r<   r   r,   r   r   r   __call__X   s   zSet.__call__c                 C     t j|S r   )r   r<   r#   r$   r   r   r   r&   \      zSet.decode_resultN)
r   r	   r
   r<   r   r'   r#   r   rM   r&   r   r   r   r   r   /   s    


r   c                   @  r/   )r   c                   @  s(   e Zd Zdd Zdd Zedd ZdS )zGet.GetResultc                 C  r   r   r+   )r   r+   r   r   r   r   b   r   zGet.GetResult.__init__c                 C  s    t | j}t d|}t|S Nr   )r   rI   r+   r   r5   r6   r   r   r   r   e   r8   zGet.GetResult.klvc                 C  s   t | } t| S r   )r4   r   rD   rP   r   r   r   r#   j   s   
zGet.GetResult.from_klvN)r   r	   r
   r   r   r'   r#   r   r   r   r   	GetResulta   s
    rR   c                 C  s   || _ t|tstdd S )Nr>   )r?   r@   r   r(   )r   r?   r   r   r   r   o   s   
zGet.__init__c                 C  s   |  d}t|S r   )r!   r   )r+   rG   r   r   r   r#   t   s   
zGet.from_klvc                 C  s&   t | jd}ttj|}t|S )Nr   )r4   r?   r   r   rJ   r   r   r5   r6   r   r   r   r   y   s   zGet.klvc                 C  s   t |j| j S r   )r   rR   rK   r?   rL   r   r   r   rM   ~   s   zGet.__call__c                 C  rN   r   )r   rR   r#   r$   r   r   r   r&      rO   zGet.decode_resultN)
r   r	   r
   rR   r   r'   r#   r   rM   r&   r   r   r   r   r   `   s    
r   c                   @  s   e Zd Zdd Zdd ZdS )_BarrierImplc                 C  s   || _ t | _d S r   )_world_size	threading	Condition_cvar)r   
world_sizer   r   r   r      s   z_BarrierImpl.__init__c                 C  s   | j 5 |  jd8  _| jdkr| j   n| jdkr(| j   W d    d S W d    d S W d    d S 1 s;w   Y  d S )Nr   r   )rW   rT   	notifyAllwait)r   r   r   r   rM      s   

"z_BarrierImpl.__call__N)r   r	   r
   r   rM   r   r   r   r   rS      s    rS   c                   @  s>   e Zd ZG dd dZdd Zedd Zdd Zd	d
 ZdS )r   c                   @  r0   )zBarrier.BarrierResultc                 C  r1   r2   r3   r6   r   r   r   r      r8   zBarrier.BarrierResult.klvc                 C  r9   r:   r   r"   r   r   r   r#      s   zBarrier.BarrierResult.from_klvNr;   r   r   r   r   BarrierResult   r=   r[   c                 C  s   t tjtd}t|S rQ   )r   rJ   r   r   r5   )r   r*   r   r   r   r      s   zBarrier.klvc                 C  s   t  S r   )r   r"   r   r   r   r#      s   zBarrier.from_klvc                 C  s~   |j  |jd u rt|j|_W d    n1 sw   Y  |  |j  d |_W d    t S 1 s6w   Y  t S r   )_lock_current_barrierrS   rT   r   r[   rL   r   r   r   rM      s   

zBarrier.__call__c                 C  rN   r   )r   r[   r#   r$   r   r   r   r&      rO   zBarrier.decode_resultN)	r   r	   r
   r[   r   r'   r#   rM   r&   r   r   r   r   r      s    

r   )
__future__r   enumrU   cupyx.distributedr   IntEnumr   r   r.   r   r   rS   r   r   r   r   r   <module>   s    1%