a
    &RîhZ-  ã                   @   s"  g d ¢Z 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 ddlm	Z	 zddlm
Z
mZ W n ey‚   edƒ‚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_unlinkz—This 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r°dd„ }	t | |	¡ | j
jd urðdd	lm}
 |
| j
jd
ƒ tj| tj| j
jfdd d S )NÚwin32Úforkéd   zcannot find name for semaphorezcreated semlock with handle %sc                 S   s   | j  ¡  d S ©N)Ú_semlockÚ_after_fork)Úobj© r   úC/opt/python-3.9.24/usr/lib/python3.9/multiprocessing/synchronize.pyr   G   s    z%SemLock.__init__.<locals>._after_forkr   )ÚregisterÚ	semaphorer   )Úexitpriority)r	   Ú_default_contextÚget_contextÚget_start_methodÚsysÚplatformÚrangeÚ_multiprocessingr   Ú
_make_namer   ÚFileExistsErrorr   ÚdebugÚhandleÚ_make_methodsÚregister_after_forkÚnameÚresource_trackerr   ÚFinalizeÚ_cleanup)ÚselfÚkindÚvalueÚmaxvalueÚctxr(   Ú
unlink_nowÚiÚslr   r   r   r   r   Ú__init__2   s2    
þ
ÿzSemLock.__init__c                 C   s"   ddl m} t| ƒ || dƒ d S )Nr   )Ú
unregisterr   )r)   r5   r   )r(   r5   r   r   r   r+   T   s    zSemLock._cleanupc                 C   s   | j j| _| j j| _d S r   )r   ÚacquireÚrelease©r,   r   r   r   r&   Z   s    
zSemLock._make_methodsc                 C   s
   | j  ¡ S r   )r   Ú	__enter__r8   r   r   r   r9   ^   s    zSemLock.__enter__c                 G   s   | j j|Ž S r   )r   Ú__exit__©r,   Úargsr   r   r   r:   a   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   Úget_spawning_popenÚduplicate_for_childr%   r-   r/   r(   )r,   r3   Úhr   r   r   Ú__getstate__d   s    

zSemLock.__getstate__c                 C   s,   t jj|Ž | _t d|d  ¡ |  ¡  d S )Nz recreated blocker with handle %rr   )r!   r   Ú_rebuildr   r   r$   r&   ©r,   Ústater   r   r   Ú__setstate__m   s    zSemLock.__setstate__c                   C   s   dt  ¡ jd ttjƒf S )Nz%s-%sÚ	semprefix)r
   Úcurrent_processÚ_configÚnextr   Ú_randr   r   r   r   r"   r   s    ÿzSemLock._make_nameN)Ú__name__Ú
__module__Ú__qualname__ÚtempfileÚ_RandomNameSequencerJ   r4   Ústaticmethodr+   r&   r9   r:   rA   rE   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 j| t|t|d d S ©N©r0   )r   r4   Ú	SEMAPHOREÚSEM_VALUE_MAX©r,   r.   r0   r   r   r   r4   }   s    zSemaphore.__init__c                 C   s
   | j  ¡ S r   )r   Ú
_get_valuer8   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   rV   Ú	ExceptionÚ	__class__rK   ©r,   r.   r   r   r   Ú__repr__ƒ   s
    
zSemaphore.__repr__N)r   )rK   rL   rM   r4   rW   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 j| t|||d d S rQ   ©r   r4   rS   rU   r   r   r   r4      s    zBoundedSemaphore.__init__c                 C   s<   z| j  ¡ }W n ty$   d}Y n0 d| jj|| j jf S )NrX   z<%s(value=%s, maxvalue=%s)>)r   rV   rY   rZ   rK   r/   r[   r   r   r   r\   “   s    
ÿzBoundedSemaphore.__repr__N)r   ©rK   rL   rM   r4   r\   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   rR   r]   ©r,   r0   r   r   r   r4   ¡   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ÚSomeOtherProcessrX   z<%s(owner=%s)>)r   Ú_is_miner
   rG   r(   Ú	threadingÚcurrent_threadrV   Ú_countrY   rZ   rK   )r,   r(   r   r   r   r\   ¤   s    


zLock.__repr__Nr^   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 r_   )r   r4   ÚRECURSIVE_MUTEXr`   r   r   r   r4   º   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 )
Nra   rb   r   )rc   r   r   )rd   Únonzero)re   rk   )rX   rX   ú<%s(%s, %s)>)r   rf   r
   rG   r(   rg   rh   ri   rV   rY   rZ   rK   )r,   r(   Úcountr   r   r   r\   ½   s    



zRLock.__repr__Nr^   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,   Úlockr0   r   r   r   r4   Ô   s
    zCondition.__init__c                 C   s   t  | ¡ | j| j| j| jfS r   )r	   r=   ro   rp   rq   rr   r8   r   r   r   rA   Û   s    
ÿzCondition.__getstate__c                 C   s    |\| _ | _| _| _|  ¡  d S r   )ro   rp   rq   rr   r&   rC   r   r   r   rE   à   s    ÿ
zCondition.__setstate__c                 C   s
   | j  ¡ S r   )ro   r9   r8   r   r   r   r9   å   s    zCondition.__enter__c                 G   s   | j j|Ž S r   )ro   r:   r;   r   r   r   r:   è   s    zCondition.__exit__c                 C   s   | j j| _| j j| _d S r   )ro   r6   r7   r8   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 )NrX   rl   )rp   r   rV   rq   rY   rZ   rK   ro   )r,   Únum_waitersr   r   r   r\   ï   s    

ÿ
zCondition.__repr__c              	   C   sœ   | j  ¡  | jj ¡ }t|ƒD ]}| j ¡  qzD| j d|¡W | j ¡  t|ƒD ]}| j ¡  qPS ]}| j ¡  qbn$| j ¡  t|ƒD ]}| j ¡  q†0 d S )NT)	rp   r7   ro   r   ri   r    rr   r6   rq   )r,   Útimeoutrm   r2   r   r   r   Úwait÷   s     

ù ü
zCondition.waitr   c                 C   st   | j  d¡r| j d¡}q d}||k rF| j d¡rF| j ¡  |d7 }q|rpt|ƒD ]}| j  ¡  qR| j d¡rpqbd S )NFr   r   )rq   r6   rp   rr   r7   r    )r,   ÚnÚresÚsleepersr2   r   r   r   Únotify  s    

zCondition.notifyc                 C   s   | j tjd d S )N)rw   )rz   r   Úmaxsizer8   r   r   r   Ú
notify_all(  s    zCondition.notify_allc                 C   sd   |ƒ }|r|S |d ur$t  ¡ | }nd }d }|s`|d urN|t  ¡  }|dkrNq`|  |¡ |ƒ }q,|S rn   )ÚtimeÚ	monotonicrv   )r,   Ú	predicateru   ÚresultÚendtimeÚwaittimer   r   r   Úwait_for+  s    
zCondition.wait_for)N)N)r   )N)rK   rL   rM   r4   rA   rE   r9   r:   r&   r\   rv   rz   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    |  | ¡ ¡| _| d¡| _d S rn   )r   r   Ú_condr   Ú_flagr`   r   r   r   r4   C  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)r„   r…   r6   r7   r8   r   r   r   Úis_setG  s
    
zEvent.is_setc                 C   sJ   | j 0 | j d¡ | j ¡  | j  ¡  W d   ƒ n1 s<0    Y  d S ©NF)r„   r…   r6   r7   r|   r8   r   r   r   ÚsetN  s    
z	Event.setc                 C   s6   | j  | j d¡ W d   ƒ n1 s(0    Y  d S rˆ   )r„   r…   r6   r8   r   r   r   ÚclearT  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 r†   )r„   r…   r6   r7   rv   )r,   ru   r   r   r   rv   X  s    
z
Event.wait)N)rK   rL   rM   r4   r‡   r‰   rŠ   rv   r   r   r   r   r   A  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   )ÚBufferWrapperr2   r   )ÚstructÚheaprŒ   Úcalcsizer   rE   Ú_stateri   )	r,   ÚpartiesÚactionru   r0   r   rŒ   ÚwrapperÚcondr   r   r   r4   j  s    zBarrier.__init__c                 C   s.   |\| _ | _| _| _| _| j ¡  d¡| _d S )Nr2   )Ú_partiesÚ_actionÚ_timeoutr„   Ú_wrapperÚcreate_memoryviewÚcastÚ_arrayrC   r   r   r   rE   s  s    ÿzBarrier.__setstate__c                 C   s   | j | j| j| j| jfS r   )r•   r–   r—   r„   r˜   r8   r   r   r   rA   x  s    ÿzBarrier.__getstate__c                 C   s
   | j d S rn   ©r›   r8   r   r   r   r   |  s    zBarrier._statec                 C   s   || j d< d S rn   rœ   r[   r   r   r   r   €  s    c                 C   s
   | j d S ©Nr   rœ   r8   r   r   r   ri   „  s    zBarrier._countc                 C   s   || j d< d S r   rœ   r[   r   r   r   ri   ˆ  s    )NN)
rK   rL   rM   r4   rE   rA   Úpropertyr   Úsetterri   r   r   r   r   r‹   h  s   
	


r‹   )Ú__all__rg   r   rN   r!   r}   Ú r	   r
   r   r   r   ÚImportErrorÚlistr    rj   rS   rT   Úobjectr   r   r   r   r   r   r‹   r   r   r   r   Ú<module>
   s,   	Mo'