o
    i{                     @   s   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 )    N)
_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   ]/home/ubuntu/veenaModal/venv/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   /      zSet.SetResult.klvc                 C      dS NTr   r!   r   r   r   r"   4   s   zSet.SetResult.from_klvNr   r   r	   r   r&   r"   r   r   r   r   	SetResult.       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'   typer4   r3   int)r   r>   r*   r   r   r   r   8   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)r4   	enumerater    r'   r   get_value_from_bytesr
   )r*   ibkr6   r   r   r   r"   B   s   

zSet.from_klvc                 C   s@   t | jd}|d |t| j7 }ttj	|}t
|S )Nr   r   )r3   r>   r   appendr   create_value_bytesr*   get_action_tr   r
   r4   r5   r   r   r   r   O   s
   
zSet.klvc                 C   s   | j |j| j< t S r   )r*   storager>   r
   r;   r   r+   r   r   r   __call__V   s   zSet.__call__c                 C      t j|S r   )r
   r;   r"   r#   r   r   r   r%   Z      zSet.decode_resultN)
r   r   r	   r;   r   r&   r"   r   rL   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   `   r   zGet.GetResult.__init__c                 C   s    t | j}t d|}t|S Nr   )r   rH   r*   r   r4   r5   r   r   r   r   c   r7   zGet.GetResult.klvc                 C   s   t | } t| S r   )r3   r   rC   rO   r   r   r   r"   h   s   
zGet.GetResult.from_klvN)r   r   r	   r   r   r&   r"   r   r   r   r   	GetResult_   s
    rQ   c                 C   s   || _ t|tstdd S )Nr=   )r>   r?   r   r'   )r   r>   r   r   r   r   m   s   
zGet.__init__c                 C   s   |  d}t|S r   )r    r   )r*   rF   r   r   r   r"   r   s   
zGet.from_klvc                 C   s&   t | jd}ttj|}t|S )Nr   )r3   r>   r   r   rI   r   r   r4   r5   r   r   r   r   w   s   zGet.klvc                 C   s   t |j| j S r   )r   rQ   rJ   r>   rK   r   r   r   rL   |   s   zGet.__call__c                 C   rM   r   )r   rQ   r"   r#   r   r   r   r%      rN   zGet.decode_resultN)
r   r   r	   rQ   r   r&   r"   r   rL   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   )rV   rS   	notifyAllwait)r   r   r   r   rL      s   

"z_BarrierImpl.__call__N)r   r   r	   r   rL   r   r   r   r   rR      s    rR   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                   @   r/   )zBarrier.BarrierResultc                 C   r0   r1   r2   r5   r   r   r   r      r7   zBarrier.BarrierResult.klvc                 C   r8   r9   r   r!   r   r   r   r"      s   zBarrier.BarrierResult.from_klvNr:   r   r   r   r   BarrierResult   r<   rZ   c                 C   s   t tjtd}t|S rP   )r   rI   r   r   r4   )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_barrierrR   rS   r   rZ   rK   r   r   r   rL      s   

zBarrier.__call__c                 C   rM   r   )r   rZ   r"   r#   r   r   r   r%      rN   zBarrier.decode_resultN)	r   r   r	   rZ   r   r&   r"   rL   r%   r   r   r   r   r      s    

r   )enumrT   cupyx.distributedr   IntEnumr   r   r-   r
   r   rR   r   r   r   r   r   <module>   s    1%