o
    ni7                     @   s  d Z ddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ er6ddlmZ dded	efd
dZG dd deZG dd deZG dd dZG dd dZG 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S )zmailbox.    N)TYPE_CHECKINGCallableDictListOptionalTuple)Error)wandb_internal_pb2)InterfaceShared   lengthreturnc                 C   s   d dd t| D }|S )N c                 s   s"    | ]}t tjtj V  qd S N)secretschoicestringascii_lowercasedigits).0i r   S/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/mailbox.py	<genexpr>   s    
z$_generate_address.<locals>.<genexpr>)joinrange)r   addressr   r   r   _generate_address   s   
r   c                   @      e Zd ZdZdS )MailboxErrorzGeneric Mailbox Exception.N__name__
__module____qualname____doc__r   r   r   r   r          r   c                   @   r   )ContextCancelledErrorzContext cancelled Exception.Nr    r   r   r   r   r&      r%   r&   c                   @   s   e Zd ZU ejed< ejed< ed ed< eed< ddd	Z	dd
dZ
dddZeded fddZedefddZedefddZdddZdddZdedefddZdeded fddZdS ) _MailboxWaitAll_event_lockMailboxHandle_handles_failed_handlesr   Nc                 C   s$   t  | _t  | _g | _d| _d S )Nr   )	threadingEventr(   Lockr)   r+   r,   selfr   r   r   __init__%   s   


z_MailboxWaitAll.__init__c                 C   s6   | j  | j  W d    d S 1 sw   Y  d S r   )r)   r(   setr0   r   r   r   notify+   s   "z_MailboxWaitAll.notifyhandlec                 C   s6   |j |  | j| |j j r| j  d S d S r   )_slot_set_wait_allr+   appendr(   is_setr3   r1   r5   r   r   r   _add_handle/   s
   z_MailboxWaitAll._add_handlec                 C      dd | j D S )Nc                 S   s   g | ]}|j s|qS r   )
_is_failed)r   hr   r   r   
<listcomp>9   s    z2_MailboxWaitAll.active_handles.<locals>.<listcomp>)r+   r0   r   r   r   active_handles7      z_MailboxWaitAll.active_handlesc                 C   s
   t | jS r   )lenr@   r0   r   r   r   active_handles_count;   s   
z$_MailboxWaitAll.active_handles_countc                 C      | j S r   )r,   r0   r   r   r   failed_handles_count?      z$_MailboxWaitAll.failed_handles_countc                 C   s   |   |  jd7  _d S )N   )_mark_failedr,   r:   r   r   r   _mark_handle_failedC   s   z#_MailboxWaitAll._mark_handle_failedc                 C   s    | j D ]}|j  qg | _ d S r   )r+   r6   _clear_wait_allr:   r   r   r   clear_handlesG   s   

z_MailboxWaitAll.clear_handlestimeoutc                 C      | j j|dS NrL   r(   waitr1   rL   r   r   r   _waitL      z_MailboxWaitAll._waitc                 C   s   g }| j |drD| j1 g }| jD ]}|jj r#|| || q|D ]}| j| q&| j  W d    |S 1 s?w   Y  |S rN   )	rS   r)   r+   r6   r(   r9   r8   removeclear)r1   rL   foundremove_handlesr5   r   r   r   _get_and_clearO   s    



z_MailboxWaitAll._get_and_clearr   Nr5   r*   r   N)r!   r"   r#   r-   r.   __annotations__r/   r   intr2   r4   r;   propertyr@   rC   rE   rI   rK   floatboolrS   rY   r   r   r   r   r'      s$   
 






r'   c                   @   s   e Zd ZU eej ed< ejed< ej	ed< ee
 ed< eed< eed< dedd	fd
dZde
dd	fddZdddZdedefddZdedeeej ef fddZdejdd	fddZdddZd	S )_MailboxSlot_resultr(   r)   	_wait_all_address
_abandonedr   r   Nc                 C   s0   d | _ t | _t | _|| _d | _d| _d S NF)	rb   r-   r.   r(   r/   r)   rd   rc   re   r1   r   r   r   r   r2   j   s   


z_MailboxSlot.__init__wait_allc                 C   s   | j rJ d|| _ d S )Nz1Only one caller can wait_all for a slot at a timerc   )r1   rh   r   r   r   r7   r   s   
z_MailboxSlot._set_wait_allc                 C   s
   d | _ d S r   ri   r0   r   r   r   rJ   v      
z_MailboxSlot._clear_wait_allrL   c                 C   rM   rN   rP   rR   r   r   r   rS   y   rT   z_MailboxSlot._waitc                 C   sT   d }| j |dr#| j | j}| j  W d    n1 sw   Y  | j}||fS rN   )rS   r)   rb   r(   rV   re   )r1   rL   rW   	abandonedr   r   r   rY   |   s   z_MailboxSlot._get_and_clearresultc                 C   sN   | j  || _| j  W d    n1 sw   Y  | jr%| j  d S d S r   )r)   rb   r(   r3   rc   r4   r1   rl   r   r   r   _deliver   s   z_MailboxSlot._deliverc                 C   sN   d| _ | j | j  W d    n1 sw   Y  | jr%| j  d S d S NT)re   r)   r(   r3   rc   r4   r0   r   r   r   _notify_abandon   s   z_MailboxSlot._notify_abandonrZ   )r!   r"   r#   r   pbResultr\   r-   r.   r/   r'   strr`   r2   r7   rJ   r_   rS   r   rY   rn   rp   r   r   r   r   ra   b   s   
 


 	ra   c                   @   sv   e Zd ZU eej ed< ed ed< dddZdejddfd	d
Zdeej fddZ	ded fddZ
dddZdS )MailboxProberb   r*   _handler   Nc                 C   s   d | _ d | _d S r   )ru   rb   r0   r   r   r   r2         
zMailboxProbe.__init__rl   c                 C   
   || _ d S r   rb   rm   r   r   r   set_probe_result   rj   zMailboxProbe.set_probe_resultc                 C   rD   r   rx   r0   r   r   r   get_probe_result      zMailboxProbe.get_probe_resultc                 C   rD   r   ru   r0   r   r   r   get_mailbox_handle   r{   zMailboxProbe.get_mailbox_handler5   c                 C   rw   r   r|   r:   r   r   r   set_mailbox_handle   rj   zMailboxProbe.set_mailbox_handlerZ   r[   )r!   r"   r#   r   rq   rr   r\   r2   ry   rz   r}   r~   r   r   r   r   rt      s   
 
rt   c                   @   s   e Zd ZU eed< ded< ee ed< eed< ddd	Ze	defd
dZ
deddfddZdeddfddZdee fddZdddZe	defddZdS )MailboxProgress_percent_doner*   ru   _probe_handles_stoppedr   Nc                 C   s   || _ d| _g | _d| _d S )N        F)ru   r   r   r   )r1   ru   r   r   r   r2      s   
zMailboxProgress.__init__c                 C   rD   r   r   r0   r   r   r   percent_done   rF   zMailboxProgress.percent_doner   c                 C   rw   r   r   )r1   r   r   r   r   set_percent_done   rj   z MailboxProgress.set_percent_doneprobe_handlec                 C      | j | d S r   )r   r8   )r1   r   r   r   r   add_probe_handle      z MailboxProgress.add_probe_handlec                 C   rD   r   )r   r0   r   r   r   get_probe_handles   r{   z!MailboxProgress.get_probe_handlesc                 C   
   d| _ d S ro   r   r0   r   r   r   	wait_stop   rj   zMailboxProgress.wait_stopc                 C   rD   r   r   r0   r   r   r   _is_stopped   rF   zMailboxProgress._is_stopped)ru   r*   r   NrZ   )r!   r"   r#   r_   r\   r   rt   r`   r2   r^   r   r   r   r   r   r   r   r   r   r   r      s   
 

r   c                   @   sH   e Zd ZU ee ed< dddZdeddfddZdee fd	d
ZdS )MailboxProgressAll_progress_handlesr   Nc                 C   s
   g | _ d S r   r   r0   r   r   r   r2      rj   zMailboxProgressAll.__init__progress_handlec                 C   r   r   )r   r8   )r1   r   r   r   r   add_progress_handle   r   z&MailboxProgressAll.add_progress_handlec                 C   r<   )Nc                 S   s   g | ]}|j js|qS r   )ru   r=   )r   phr   r   r   r?      s    z;MailboxProgressAll.get_progress_handles.<locals>.<listcomp>r   r0   r   r   r   get_progress_handles   rA   z'MailboxProgressAll.get_progress_handlesrZ   )	r!   r"   r#   r   r   r\   r2   r   r   r   r   r   r   r      s
   
 
r   c                   @   s^  e Zd ZU ded< eed< eeegdf  ed< eeegdf  ed< ed ed< e	ed	< e	ed
< dddeddfddZ
deegdf ddfddZdeegdf ddfddZdefddZddddddedeeegdf  deeegdf  de	de	deej fddZd,d d!Zd,d"d#Zd,d$d%Zede	fd&d'Zd,d(d)Zedefd*d+ZdS )-r*   Mailbox_mailboxr6   N	_on_probe_on_progressr
   
_interface
_keepalive_failedmailboxslotr   c                 C   s.   || _ || _d | _d | _d | _d| _d| _d S rf   )r   r6   r   r   r   r   r   )r1   r   r   r   r   r   r2      s   
zMailboxHandle.__init__on_probec                 C   rw   r   )r   )r1   r   r   r   r   	add_probe   rj   zMailboxHandle.add_probeon_progressc                 C   rw   r   )r   )r1   r   r   r   r   add_progress   rj   zMailboxHandle.add_progressc                 C      t  S r   time	monotonicr0   r   r   r   _time      zMailboxHandle._timeTF)r   r   releasecancelrL   r   r   c                C   sX  d }d }d }|   }	d}
d}d}|dkrt||}|p| j}|r%t| d}|p)| j}|r6t }|r6|| 	 | jrF| jrF| j	 rFt
d| jj|d\}}|ra|r`|r`|r`|d	 || n;|rdn8|   }|dkrs||	| krsn)|r{|r{|| |r|r|dkrt||	 | d}
||
 || |jrnd}q7|s|r|   |r|   |S )
Nr   Fg      ?r   r|   Ttransport failedrO   d   )r   minr   r   r   rt   r   r   r   _transport_keepalive_failedr   r6   rY   r   r   _cancel_release)r1   rL   r   r   r   r   r   r   rW   
start_timer   progress_sentwait_timeoutrk   nowr   r   r   rQ      sb   	







zMailboxHandle.waitc                 C   s    | j }| jr| j| d S d S r   )r   r   publish_cancel)r1   mailbox_slotr   r   r   r   5  s   zMailboxHandle._cancelc                 C   s   | j | j d S r   )r   _release_slotr   r0   r   r   r   r   :     zMailboxHandle._releasec                 C   s   | j   |   d S r   )r6   rp   r   r0   r   r   r   abandon=  s   
zMailboxHandle.abandonc                 C   rD   r   r   r0   r   r   r   r=   A  rF   zMailboxHandle._is_failedc                 C   r   ro   r   r0   r   r   r   rH   E  rj   zMailboxHandle._mark_failedc                 C   s   | j jS r   )r6   rd   r0   r   r   r   r   H  s   zMailboxHandle.addressrZ   )r!   r"   r#   r\   ra   r   r   rt   r   r`   r2   r   r   r_   r   rq   rr   rQ   r   r   r   r^   r=   rH   rs   r   r   r   r   r   r*      sJ   
 	

@


r*   c                   @   s  e Zd ZU eeef ed< eed< d'ddZd'ddZ	dd	d
de
dedeeegdf  dedeej f
ddZdefddZdddee
 dedeeegdf  defddZdejddfddZdefddZdeddfddZde
fd d!Zd"ejd#d$de
fd%d&ZdS )(r   _slotsr   r   Nc                 C   s   i | _ d| _d S rf   )r   r   r0   r   r   r   r2   Q  rv   zMailbox.__init__c                 C   r   ro   )r   r0   r   r   r   enable_keepaliveU  rj   zMailbox.enable_keepaliveF)r   r   r5   rL   r   r   c                C   s   |j |||dS )N)rL   r   r   )rQ   )r1   r5   rL   r   r   r   r   r   rQ   X  s   zMailbox.waitc                 C   r   r   r   r0   r   r   r   r   b  r   zMailbox._time)on_progress_allhandlesr   c                C   s>  d }|rt  }t }|D ]!}|| |r-|jr-t|d}|jr(t }|| || q| 	 }	|j
dkr| jr]|jD ]}|jsCq=|j rM|| q=|j
s]|jr\|  tdn=|jdd |r|r| D ]}| D ]}|jr|jjr|j| qqqk|| | 	 }
|dkr|
|	| krn|j
dks7|j
dkS )Nr|   r   r   rG   rO   )r   r'   r;   r   r   r   rt   r   r   r   rC   r   r@   r   r   rI   rE   rK   r   rY   r   r   ru   )r1   r   rL   r   progress_all_handlerh   r5   r   r   r   r   r   r   r   rh   e  sX   










'zMailbox.wait_allrl   c                 C   s*   |j j}| j|}|sd S || d S r   )controlr   r   getrn   )r1   rl   r   r   r   r   r   deliver  s
   zMailbox.deliverc                 C   s   t  }t|d}|| j|< |S )N)r   )r   ra   r   )r1   r   r   r   r   r   _allocate_slot  s   

zMailbox._allocate_slotr   c                 C   s   | j |d  d S r   )r   poprg   r   r   r   r     r   zMailbox._release_slotc                 C   s   |   }t| |d}|S )N)r   r   )r   r*   )r1   r   r5   r   r   r   
get_handle  s   zMailbox.get_handlerecord	interfacer
   c                 C   sT   |   }||_| j|_|j|j_z|| W n ty#   |   w |	  |S r   )
r   r   r   r   r   r   _publish	Exception_transport_mark_failed_transport_mark_success)r1   r   r   r5   r   r   r   _deliver_record  s   
zMailbox._deliver_recordrZ   )r!   r"   r#   r   rs   ra   r\   r`   r2   r   r*   r_   r   r   r   rq   rr   rQ   r   r   r   rh   r   r   r   r   Recordr   r   r   r   r   r   M  sP   
 




Ar   )r   )r$   r   r   r-   r   typingr   r   r   r   r   r   wandb.errorsr   wandb.protor	   rq   $wandb.sdk.interface.interface_sharedr
   r]   rs   r   r   r&   r'   ra   rt   r   r   r*   r   r   r   r   r   <module>   s(     C4!s