a
    5gh5.                     @   sj  g d Z ddlZddlZddlZzddlZW n eyF   ddlZY n0 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 nB ey   zddlmZmZ W n ey   edY n0 Y n0 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 u rt j }| }tjdkp*|dk}tdD ]<}z t|||| 	 | }| _
W n tyj   Y q40  qzq4tdtd|j  |   tjdkrdd }	t| |	 | j
jd u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   h/mounts/lovelace/software/anaconda3/envs/metaDMG/lib/python3.9/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   s2    

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   s6   z| j  }W n ty$   d}Y n0 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   
r   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y$   d}Y n0 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   
r   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	y|   d}Y n0 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   r   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	y   d\}}Y n0 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   r   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   sH   z| j j | jj  }W n ty2   d}Y n0 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J d| j  | j j }t|D ]}| j   q2zD| jd|W | j	  t|D ]}| j   qdS ]}| j   qvn$| j	  t|D ]}| j   q0 d S )Nz,must acquire() condition before using wait()T)
rd   r   r[   re   r0   r^   r   rg   r/   rf   )r&   timeoutrb   r+   r   r   r   wait   s&    

 
zCondition.waitr   c                 C   s   | j j sJ d| jdr(J d| jdrN| jd}|s(J 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[   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)rk   )rm   r   maxsizer1   r   r   r   
notify_all.  s    zCondition.notify_allc                 C   st   | }|r|S |d ur,t tdtj | }nd }d }|sp|d ur^|t tdtj  }|dkr^qp| | | }q4|S )N	monotonicr   )getattrtimerj   )r&   	predicateri   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   rj   rm   ro   rw   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    | | | _|d| _d S rc   )r   r   _condr   _flagrU   r   r   r   r-   I  s    zEvent.__init__c                 C   sR   | j 8 | jdr.| j  W d    dS W d    dS 1 sD0    Y  d S NFT)rx   ry   r/   r0   r1   r   r   r   is_setM  s
    
zEvent.is_setc                 C   sJ   | j 0 | jd | j  | j   W d    n1 s<0    Y  d S NF)rx   ry   r/   r0   ro   r1   r   r   r   setT  s    
z	Event.setc                 C   s6   | j  | jd W d    n1 s(0    Y  d S r|   )rx   ry   r/   r1   r   r   r   clearZ  s    zEvent.clearNc                 C   sv   | j \ | jdr | j  n| j | | jdrR| j  W d    dS W d    dS 1 sh0    Y  d S rz   )rx   ry   r/   r0   rj   )r&   ri   r   r   r   rj   ^  s    
z
Event.wait)N)r@   rA   rB   r-   r{   r}   r~   rj   r   r   r   r   r   G  s
   r   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actionri   r*   r   r   wrapperZcondr   r   r   r-   p  s    zBarrier.__init__c                 C   s.   |\| _ | _| _| _| _| j d| _d S )Nr+   )_parties_action_timeoutrx   _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   rx   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   ImportErrorrr    r	   r
   r   r   r   listr   r_   rH   rI   objectr   r   r   r   r   r   r   r   r   r   r   <module>
   s8   	Mo'