o
    ?Hh-                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ ddlmZ g dZzd dlmZ d d	lmZ W n eyK   ed
w ed\ZZejjZG dd dZG dd deZG dd deZG dd deZG dd deZG dd dZG dd dZdS )    N)time)processutil)assert_spawning   )resource_tracker)LockRLock	SemaphoreBoundedSemaphore	ConditionEvent)SemLock)
sem_unlinkzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.   c                   @   s^   e Zd Ze ZdddZedd Zdd Z	dd	 Z
d
d Zdd Zdd Zedd ZdS )r   Nc              	   C   s   d}|d u r*t dD ]}zt|||t || _W n	 ty"   Y q
w  ntdn	t|||||| _|| _td| jj	 d| j d | 
  dd }t| | t| jjd	 tj| tj| jjfd
d d S )NFd   zcannot find name for semaphorezcreated semlock with handle  and name ""c                 S   s   | j   d S N)_semlock_after_fork)obj r   i/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/joblib/externals/loky/backend/synchronize.pyr   [   s   z%SemLock.__init__.<locals>._after_forksemlockr   )exitpriority)range_SemLockr   
_make_namer   FileExistsErrornamer   debughandle_make_methodsregister_after_forkr   registerFinalize_cleanup)selfkindvaluemaxvaluer    
unlink_now_r   r   r   r   __init__A   s6   

zSemLock.__init__c              
   C   sT   z"zt |  W n	 ty   Y n
w W t| d d S W t| d d S t| d w )Nr   )r   FileNotFoundErrorr   
unregister)r    r   r   r   r'   g   s   zSemLock._cleanupc                 C      | j j| _| j j| _d S r   )r   acquirereleaser(   r   r   r   r#   r      
zSemLock._make_methodsc                 C   
   | j  S r   )r   r2   r4   r   r   r   	__enter__v      
zSemLock.__enter__c                 G   r6   r   )r   r3   r(   argsr   r   r   __exit__y   r8   zSemLock.__exit__c                 C   s&   t |  | j}|j}||j|j|jfS r   )r   r   r"   r)   r+   r    )r(   slhr   r   r   __getstate__|   s   zSemLock.__getstate__c                 C   s8   t j| | _td|d d|d  d |   d S )Nzrecreated blocker with handle r   r      r   )r   _rebuildr   r   r!   r#   r(   stater   r   r   __setstate__   s
   zSemLock.__setstate__c                   C   s   dt   dttj S )Nz/loky--)osgetpidnextr   _randr   r   r   r   r      s   zSemLock._make_namer   )__name__
__module____qualname__tempfile_RandomNameSequencerH   r.   staticmethodr'   r#   r7   r;   r>   rC   r   r   r   r   r   r   =   s    
&

r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
r
   r   c                 C   s   t | t|t d S r   )r   r.   	SEMAPHORESEM_VALUE_MAXr(   r*   r   r   r   r.         zSemaphore.__init__c                 C   s   t jdkr	td| j S )Ndarwinz#OSX does not implement sem_getvalue)sysplatformNotImplementedErrorr   
_get_valuer4   r   r   r   	get_value   s   

zSemaphore.get_valuec                 C   s<   z| j  }W n ty   d}Y nw d| jj d| dS )Nunknown<(value=)>)r   rW   	Exception	__class__rI   rQ   r   r   r   __repr__   s   zSemaphore.__repr__Nr   )rI   rJ   rK   r.   rX   r_   r   r   r   r   r
      s    
r
   c                   @   s   e Zd ZdddZdd ZdS )r   r   c                 C   s   t | t|| d S r   )r   r.   rO   rQ   r   r   r   r.      rR   zBoundedSemaphore.__init__c                 C   sF   z| j  }W n ty   d}Y nw d| jj d| d| j j dS )NrY   rZ   r[   z, maxvalue=r\   )r   rW   r]   r^   rI   r+   rQ   r   r   r   r_      s   zBoundedSemaphore.__repr__Nr`   )rI   rJ   rK   r.   r_   r   r   r   r   r      s    
r   c                       $   e Zd Z fddZdd Z  ZS )r   c                       t  tdd d S Nr   )superr.   rO   r4   r^   r   r   r.      rR   zLock.__init__c                 C   s   z4| j  rt j}t jdkr| dt j }n| j  dkr'd}n| j  dkr1d}nd}W n t	y?   d}Y nw d	| j
j d
| dS )N
MainThread|r   Noner   SomeOtherThreadSomeOtherProcessrY   rZ   z(owner=r\   )r   _is_miner   current_processr    	threadingcurrent_threadrW   _countr]   r^   rI   )r(   r    r   r   r   r_      s    

zLock.__repr__rI   rJ   rK   r.   r_   __classcell__r   r   re   r   r          r   c                       ra   )r	   c                    rb   rc   )rd   r.   RECURSIVE_MUTEXr4   re   r   r   r.      rR   zRLock.__init__c                 C   s   z?| j  r"t j}t jdkr| dt j }| j  }n| j  dkr.d\}}n| j  dkr:d\}}nd\}}W n t	yL   d\}}Y nw d	| j
j d
| d| dS )Nrf   rg   r   )rh   r   r   )ri   nonzero)rj   rt   )rY   rY   rZ   (, r\   )r   rk   r   rl   r    rm   rn   ro   rW   r]   r^   rI   )r(   r    countr   r   r   r_      s    



zRLock.__repr__rp   r   r   re   r   r	      rr   r	   c                   @   sj   e Zd Zd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d Zdd ZdddZdS )r   Nc                 C   s6   |pt  | _td| _td| _td| _|   d S Nr   )r	   _lockr
   _sleeping_count_woken_count_wait_semaphorer#   )r(   lockr   r   r   r.      s
   


zCondition.__init__c                 C   s   t |  | j| j| j| jfS r   )r   ry   rz   r{   r|   r4   r   r   r   r>      s   zCondition.__getstate__c                 C   s    |\| _ | _| _| _|   d S r   )ry   rz   r{   r|   r#   rA   r   r   r   rC     s   zCondition.__setstate__c                 C   r6   r   )ry   r7   r4   r   r   r   r7     r8   zCondition.__enter__c                 G   s   | j j| S r   )ry   r;   r9   r   r   r   r;     s   zCondition.__exit__c                 C   r1   r   )ry   r2   r3   r4   r   r   r   r#     r5   zCondition._make_methodsc                 C   sR   z| j j | jj  }W n ty   d}Y nw d| jj d| j d| dS )NrY   rZ   ru   rv   r\   )rz   r   rW   r{   r]   r^   rI   ry   )r(   num_waitersr   r   r   r_     s   

zCondition.__repr__c              	   C   s   | j j s
J d| j  | j j }t|D ]}| j   qz| jd|W | j	  t|D ]}| j   q2S | j	  t|D ]}| j   qDw )Nz,must acquire() condition before using wait()T)
ry   r   rk   rz   r3   ro   r   r|   r2   r{   )r(   timeoutrw   r-   r   r   r   wait!  s$   



zCondition.waitc                 C   s   | j j s
J d| jdrJ | jdr(| jd}|s"J | jds| jdr@| j  | j  | jd d S d S )Nlock is not ownedF)ry   r   rk   r|   r2   r{   rz   r3   )r(   resr   r   r   notify9  s   

zCondition.notifyc                 C   s   | j j s
J d| jdrJ | jdr(| jd}|s"J | jdsd}| jdr?| j  |d7 }| jds0|r\t|D ]}| j  qE| jdr^	 | jdsSd S d S d S )Nr   Fr   r   )	ry   r   rk   r|   r2   r{   rz   r3   r   )r(   r   sleepersr-   r   r   r   
notify_allJ  s&   
zCondition.notify_allc                 C   sf   | }|r|S |d urt  | }nd }d }|s1|d ur'|t   }|dkr'	 |S | | | }|r|S rx   )_timer   )r(   	predicater   resultendtimewaittimer   r   r   wait_fora  s"   

zCondition.wait_forr   )rI   rJ   rK   r.   r>   rC   r7   r;   r#   r_   r   r   r   r   r   r   r   r   r      s    
		

r   c                   @   s6   e Z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 | _td| _d S rx   )r   r   _condr
   _flagr4   r   r   r   r.   z  s   zEvent.__init__c                 C   sV   | j  | jdr| j  	 W d    dS 	 W d    dS 1 s$w   Y  d S NFT)r   r   r2   r3   r4   r   r   r   is_set~  s   
$zEvent.is_setc                 C   sL   | j  | jd | j  | j   W d    d S 1 sw   Y  d S NF)r   r   r2   r3   r   r4   r   r   r   set  s
   
"z	Event.setc                 C   s8   | j  | jd W d    d S 1 sw   Y  d S r   )r   r   r2   r4   r   r   r   clear  s   "zEvent.clearNc                 C   sz   | j 0 | jdr| j  n| j | | jdr*| j  	 W d    dS 	 W d    dS 1 s6w   Y  d S r   )r   r   r2   r3   r   )r(   r   r   r   r   r     s   
	$z
Event.waitr   )rI   rJ   rK   r.   r   r   r   r   r   r   r   r   r   y  s    r   )rE   rT   rL   rm   _multiprocessingr   r   multiprocessingr   r   multiprocessing.contextr    r   __all__r   r   r   ImportErrorr   rs   rO   rP   r
   r   r   r	   r   r   r   r   r   r   <module>   s8   W 