U
    e-                     @   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 ddd	d
ddgZzd dlmZ d dlmZ W n ek
r   edY nX 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 krXt dD ]8}zt|||t || _W n tk
rF   Y qX  qjq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   j/var/www/html/assets/scripts/venv/lib/python3.8/site-packages/joblib/externals/loky/backend/synchronize.pyr   [   s    z%SemLock.__init__.<locals>._after_forksemlockr   )Zexitpriority)range_SemLockr   
_make_namer   FileExistsErrornamer   debughandle_make_methodsZregister_after_forkr   registerZFinalize_cleanup)selfkindvaluemaxvaluer   Z
unlink_now_r   r   r   r   __init__A   s<        

   zSemLock.__init__c              
   C   s:   z&zt|  W n tk
r"   Y nX W 5 t | d X d S )Nr   )r   
unregisterr   FileNotFoundError)r   r   r   r   r$   g   s
    
zSemLock._cleanupc                 C   s   | j j| _| j j| _d S r   )r   acquirereleaser%   r   r   r   r"   r   s    
zSemLock._make_methodsc                 C   s
   | j  S r   )r   r-   r/   r   r   r   	__enter__v   s    zSemLock.__enter__c                 G   s
   | j  S r   )r   r.   r%   argsr   r   r   __exit__y   s    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   Z_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_name)N)__name__
__module____qualname__tempfile_RandomNameSequencer?   r*   staticmethodr$   r"   r0   r3   r6   r:   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*      s    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_valuer/   r   r   r   	get_value   s    
zSemaphore.get_valuec                 C   s>   z| j  }W n tk
r&   d}Y nX d| jj d| dS )Nunknown<(value=)>)r   rM   	Exception	__class__r@   rH   r   r   r   __repr__   s
    
zSemaphore.__repr__N)r   )r@   rA   rB   r*   rN   rU   r   r   r   r   r
      s   
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*   rF   rH   r   r   r   r*      s    zBoundedSemaphore.__init__c                 C   sH   z| j  }W n tk
r&   d}Y nX d| jj d| d| j j dS )NrO   rP   rQ   z, maxvalue=rR   )r   rM   rS   rT   r@   r(   rH   r   r   r   rU      s    
zBoundedSemaphore.__repr__N)r   )r@   rA   rB   r*   rU   r   r   r   r   r      s   
c                       s$   e Zd Z fddZdd Z  ZS )r   c                    s   t  tdd d S Nr   )superr*   rF   r/   rT   r   r   r*      s    zLock.__init__c                 C   s   zh| j  r:t j}t jdkrf| dt j }n,| j  dkrNd}n| j  dkrbd}nd}W n t	k
r   d}Y nX d	| j
j d
| dS )N
MainThread|r   Noner   SomeOtherThreadSomeOtherProcessrO   rP   z(owner=rR   )r   _is_miner   current_processr   	threadingcurrent_threadrM   _countrS   rT   r@   )r%   r   r   r   r   rU      s    


zLock.__repr__r@   rA   rB   r*   rU   __classcell__r   r   rX   r   r      s   c                       s$   e Zd Z fddZdd Z  ZS )r	   c                    s   t  tdd d S rV   )rW   r*   RECURSIVE_MUTEXr/   rX   r   r   r*      s    zRLock.__init__c                 C   s   z~| j  rDt j}t jdkr8| dt j }| j  }n8| j  dkr\d\}}n | j  dkrtd\}}nd\}}W n t	k
r   d\}}Y nX d	| j
j d
| d| dS )NrY   rZ   r   )r[   r   r   )r\   nonzero)r]   rf   )rO   rO   rP   (, rR   )r   r^   r   r_   r   r`   ra   rb   rM   rS   rT   r@   )r%   r   countr   r   r   rU      s    



zRLock.__repr__rc   r   r   rX   r   r	      s   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   rk   rl   rm   rn   r/   r   r   r   r6      s    zCondition.__getstate__c                 C   s    |\| _ | _| _| _|   d S r   )rk   rl   rm   rn   r"   r8   r   r   r   r:     s    zCondition.__setstate__c                 C   s
   | j  S r   )rk   r0   r/   r   r   r   r0     s    zCondition.__enter__c                 G   s   | j j| S r   )rk   r3   r1   r   r   r   r3     s    zCondition.__exit__c                 C   s   | j j| _| j j| _d S r   )rk   r-   r.   r/   r   r   r   r"     s    
zCondition._make_methodsc                 C   sT   z| j j | jj  }W n tk
r4   d}Y nX d| jj d| j d| dS )NrO   rP   rg   rh   rR   )rl   r   rM   rm   rS   rT   r@   rk   )r%   Znum_waitersr   r   r   rU     s    


zCondition.__repr__c              	   C   s~   | j j std| j  | j j }t|D ]}| j   q2z| j
	d|W S | j  t|D ]}| j 	  qhX d S )Nz,must acquire() condition before using wait()T)rk   r   r^   AssertionErrorrl   r.   rb   r   rm   r-   rn   )r%   timeoutri   r)   r   r   r   wait!  s    


zCondition.waitc                 C   sv   | j j std| jdr$t| jdrF| jd}|s$tq$| jdrr| j  | j  | jd d S )Nlock is not ownedF)	rk   r   r^   rp   rn   r-   rm   rl   r.   )r%   resr   r   r   notify9  s    


zCondition.notifyc                 C   s   | j j std| jdr$t| jdrF| jd}|s$tq$d}| jdrj| j  |d7 }qJ|rt	|D ]}| j  qv| jdrqd S )Nrs   Fr   r   )
rk   r   r^   rp   rn   r-   rm   rl   r.   r   )r%   rt   Zsleepersr)   r   r   r   
notify_allJ  s    


zCondition.notify_allc                 C   s`   | }|r|S |d k	r"t  | }nd }d }|s\|d k	rJ|t   }|dkrJq\| | | }q*|S rj   )_timerr   )r%   	predicaterq   resultendtimewaittimer   r   r   wait_fora  s    

zCondition.wait_for)N)N)N)r@   rA   rB   r*   r6   r:   r0   r3   r"   rU   rr   ru   rv   r|   r   r   r   r   r      s   
		

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 rj   )r   r   _condr
   _flagr/   r   r   r   r*   z  s    zEvent.__init__c              	   C   sD   | j 4 | jdr,| j  W 5 Q R  dS W 5 Q R  dS Q R X d S NFT)r}   r~   r-   r.   r/   r   r   r   is_set~  s
    
zEvent.is_setc              	   C   s6   | j & | jd | j  | j   W 5 Q R X d S NF)r}   r~   r-   r.   rv   r/   r   r   r   set  s    
z	Event.setc              	   C   s"   | j  | jd W 5 Q R X d S r   )r}   r~   r-   r/   r   r   r   clear  s    zEvent.clearNc              	   C   sh   | j X | jdr | j  n| j | | jdrP| j  W 5 Q R  dS W 5 Q R  dS Q R X d S r   )r}   r~   r-   r.   rr   )r%   rq   r   r   r   rr     s    
z
Event.wait)N)r@   rA   rB   r*   r   r   r   rr   r   r   r   r   r   y  s
   )r<   rJ   rC   r`   _multiprocessingr   rw   multiprocessingr   r   Zmultiprocessing.contextr    r   __all__r   r   r   ImportErrorr   re   rF   rG   r
   r   r   r	   r   r   r   r   r   r   <module>   s@   
W 