U
    -e5.                     @   sx  d dddddgZ ddlZddlZddlZzddlZW n ek
rP   ddlZY nX ddlZdd	lm	Z	 dd
lm
Z
 ddlmZ zddlmZmZ W nF ek
r   zddlmZmZ W n ek
r   edY nX Y nX eed\ZZejj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eZG dd deZG dd deZG dd dejZdS )LockRLock	SemaphoreBoundedSemaphore	ConditionEvent    N   )context)process)util)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 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   c             	   C   s   |d krt j }| }tjdkp*|dk}tdD ]>}z t|||| 	 | }| _
W n tk
rl   Y q4X  q|q4tdtd|j  |   tjdkrdd }	t| |	 | j
jd k	rdd	lm}
 |
| j
jd
 tj| tj| j
jfdd d S )Nwin32forkd   zcannot find name for semaphorezcreated semlock with handle %sc                 S   s   | j   d S N)_semlock_after_fork)obj r   Y/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/multiprocess/synchronize.pyr   M   s    z%SemLock.__init__.<locals>._after_forkr   )register	semaphorer   )Zexitpriority)r	   Z_default_contextZget_contextZget_start_methodsysplatformrange_multiprocessingr   
_make_namer   FileExistsErrorr   debughandle_make_methodsZregister_after_forknameresource_trackerr   ZFinalize_cleanup)selfkindvaluemaxvaluectxr#   Z
unlink_nowislr   r   r   r   r   __init__8   s8    
   
zSemLock.__init__c                 C   s"   ddl m} t|  || d d S )Nr   )
unregisterr   )r$   r.   r   )r#   r.   r   r   r   r%   Z   s    zSemLock._cleanupc                 C   s   | j j| _| j j| _d S r   )r   acquirereleaser&   r   r   r   r"   `   s    
zSemLock._make_methodsc                 C   s
   | j  S r   )r   	__enter__r1   r   r   r   r2   d   s    zSemLock.__enter__c                 G   s   | j j| S r   )r   __exit__r&   argsr   r   r   r3   g   s    zSemLock.__exit__c                 C   sD   t |  | j}tjdkr,t  |j}n|j}||j|j	|j
fS )Nr   )r	   assert_spawningr   r   r   Zget_spawning_popenZduplicate_for_childr!   r'   r)   r#   )r&   r,   hr   r   r   __getstate__j   s    

zSemLock.__getstate__c                 C   s,   t jj| | _td|d   |   d S )Nz recreated blocker with handle %rr   )r   r   Z_rebuildr   r   r    r"   r&   stater   r   r   __setstate__s   s    zSemLock.__setstate__c                   C   s   dt  jd ttjf S )Nz%s-%sZ	semprefix)r
   current_process_confignextr   _randr   r   r   r   r   x   s    zSemLock._make_nameN)__name__
__module____qualname__tempfile_RandomNameSequencer?   r-   staticmethodr%   r"   r2   r3   r8   r;   r   r   r   r   r   r   4   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 j| t|t|d d S Nr*   )r   r-   	SEMAPHORESEM_VALUE_MAXr&   r(   r*   r   r   r   r-      s    zSemaphore.__init__c                 C   s
   | j  S r   )r   
_get_valuer1   r   r   r   	get_value   s    zSemaphore.get_valuec                 C   s8   z| j  }W n tk
r&   d}Y nX d| jj|f S )Nunknownz<%s(value=%s)>)r   rK   	Exception	__class__r@   r&   r(   r   r   r   __repr__   s
    
zSemaphore.__repr__N)r   )r@   rA   rB   r-   rL   rQ   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 j| t|||d d S rF   r   r-   rH   rJ   r   r   r   r-      s    zBoundedSemaphore.__init__c                 C   s>   z| j  }W n tk
r&   d}Y nX d| jj|| j jf S )NrM   z<%s(value=%s, maxvalue=%s)>)r   rK   rN   rO   r@   r)   rP   r   r   r   rQ      s    
zBoundedSemaphore.__repr__N)r   r@   rA   rB   r-   rQ   r   r   r   r   r      s   
c                   @   s   e Zd Zdd Zdd ZdS )r   c                C   s   t j| tdd|d d S Nr   rG   rR   r&   r*   r   r   r   r-      s    zLock.__init__c                 C   s   zf| j  r8t j}t jdkrd|dt j 7 }n,| j  dkrLd}n| j  dkr`d}nd}W n t	k
r~   d}Y nX d	| j
j|f S )
N
MainThread|r   Noner   SomeOtherThreadSomeOtherProcessrM   z<%s(owner=%s)>)r   _is_miner
   r<   r#   	threadingcurrent_threadrK   _countrN   rO   r@   )r&   r#   r   r   r   rQ      s    


zLock.__repr__NrS   r   r   r   r   r      s   c                   @   s   e Zd Zdd Zdd ZdS )r   c                C   s   t j| tdd|d d S rT   )r   r-   RECURSIVE_MUTEXrU   r   r   r   r-      s    zRLock.__init__c                 C   s   z|| j  rBt j}t jdkr6|dt j 7 }| j  }n8| j  dkrZd\}}n | j  dkrrd\}}nd\}}W n t	k
r   d\}}Y nX d	| j
j||f S )
NrV   rW   r   )rX   r   r   )rY   nonzero)rZ   r`   )rM   rM   <%s(%s, %s)>)r   r[   r
   r<   r#   r\   r]   r^   rK   rN   rO   r@   )r&   r#   countr   r   r   rQ      s    



zRLock.__repr__NrS   r   r   r   r   r      s   c                   @   sl   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dZdd ZdddZdS )r   Nc                C   s>   |p
|  | _|d| _|d| _|d| _|   d S Nr   )r   _lockr   _sleeping_count_woken_count_wait_semaphorer"   )r&   lockr*   r   r   r   r-      s
    zCondition.__init__c                 C   s   t |  | j| j| j| jfS r   )r	   r6   rd   re   rf   rg   r1   r   r   r   r8      s
    
 zCondition.__getstate__c                 C   s    |\| _ | _| _| _|   d S r   )rd   re   rf   rg   r"   r9   r   r   r   r;      s
    
 zCondition.__setstate__c                 C   s
   | j  S r   )rd   r2   r1   r   r   r   r2      s    zCondition.__enter__c                 G   s   | j j| S r   )rd   r3   r4   r   r   r   r3      s    zCondition.__exit__c                 C   s   | j j| _| j j| _d S r   )rd   r/   r0   r1   r   r   r   r"      s    
zCondition._make_methodsc                 C   sJ   z| j j | jj  }W n tk
r4   d}Y nX d| jj| j|f S )NrM   ra   )re   r   rK   rf   rN   rO   r@   rd   )r&   Znum_waitersr   r   r   rQ      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)rd   r   r[   AssertionErrorre   r0   r^   r   rf   r/   rg   )r&   timeoutrb   r+   r   r   r   wait   s    

zCondition.waitr   c                 C   s   | j j std| jdr(td| jdrN| jd}|s(tdq(d}||k rz| jdrz| j  |d7 }qR|rt	|D ]}| j  q| jdrqd S )Nzlock is not ownedFz<notify: Should not have been able to acquire _wait_semaphorez>notify: Bug in sleeping_count.acquire- res should not be Falser   r   )
rd   r   r[   ri   rg   r/   rf   re   r0   r   )r&   nresZsleepersr+   r   r   r   notify  s$    

zCondition.notifyc                 C   s   | j tjd d S )N)rl   )rn   r   maxsizer1   r   r   r   
notify_all.  s    zCondition.notify_allc                 C   st   | }|r|S |d k	r,t tdtj | }nd }d }|sp|d k	r^|t tdtj  }|dkr^qp| | | }q4|S )N	monotonicr   )getattrtimerk   )r&   	predicaterj   resultendtimewaittimer   r   r   wait_for1  s    
zCondition.wait_for)N)N)r   )N)r@   rA   rB   r-   r8   r;   r2   r3   r"   rQ   rk   rn   rp   rx   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    | | | _|d| _d S rc   )r   r   _condr   _flagrU   r   r   r   r-   I  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)ry   rz   r/   r0   r1   r   r   r   is_setM  s
    
zEvent.is_setc              	   C   s6   | j & | jd | j  | j   W 5 Q R X d S NF)ry   rz   r/   r0   rp   r1   r   r   r   setT  s    
z	Event.setc              	   C   s"   | j  | jd W 5 Q R X d S r}   )ry   rz   r/   r1   r   r   r   clearZ  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{   )ry   rz   r/   r0   rk   )r&   rj   r   r   r   rk   ^  s    
z
Event.wait)N)r@   rA   rB   r-   r|   r~   r   rk   r   r   r   r   r   G  s
   c                   @   sZ   e Zd ZdddZdd Zdd Zedd	 Zejd
d	 Zedd Z	e	jdd Z	dS )BarrierNc          	      C   sR   dd l }ddlm} ||dd }| }| |||||f d| _d| _d S )Nr   r   )BufferWrapperr+   r   )structheapr   calcsizer   r;   _stater^   )	r&   partiesactionrj   r*   r   r   wrapperZcondr   r   r   r-   p  s    zBarrier.__init__c                 C   s.   |\| _ | _| _| _| _| j d| _d S )Nr+   )_parties_action_timeoutry   _wrapperZcreate_memoryviewcast_arrayr9   r   r   r   r;   y  s
     zBarrier.__setstate__c                 C   s   | j | j| j| j| jfS r   )r   r   r   ry   r   r1   r   r   r   r8   ~  s     zBarrier.__getstate__c                 C   s
   | j d S rc   r   r1   r   r   r   r     s    zBarrier._statec                 C   s   || j d< d S rc   r   rP   r   r   r   r     s    c                 C   s
   | j d S Nr   r   r1   r   r   r   r^     s    zBarrier._countc                 C   s   || j d< d S r   r   rP   r   r   r   r^     s    )NN)
r@   rA   rB   r-   r;   r8   propertyr   setterr^   r   r   r   r   r   n  s   
	


r   )__all__r\   r   rC   Z_multiprocessr   ImportErrorrs    r	   r
   r   r   r   listr   r_   rH   rI   objectr   r   r   r   r   r   r   r   r   r   r   <module>   sD        	Mo'