o
    ^Zh-                     @   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   X/var/www/auris/lib/python3.10/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   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   r.   r0   r   r   r   	__enter__v      
zSemLock.__enter__c                 G   r2   r   )r   r/   r%   argsr   r   r   __exit__y   r4   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_namer   )__name__
__module____qualname__tempfile_RandomNameSequencerC   r*   staticmethodr$   r"   r3   r7   r:   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*         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_valuer0   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   rR   	Exception	__class__rD   rL   r   r   r   __repr__   s   zSemaphore.__repr__Nr   )rD   rE   rF   r*   rS   rZ   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*   rJ   rL   r   r   r   r*      rM   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 )NrT   rU   rV   z, maxvalue=rW   )r   rR   rX   rY   rD   r(   rL   r   r   r   rZ      s   zBoundedSemaphore.__repr__Nr[   )rD   rE   rF   r*   rZ   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*   rJ   r0   rY   r   r   r*      rM   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SomeOtherProcessrT   rU   z(owner=rW   )r   _is_miner   current_processr   	threadingcurrent_threadrR   _countrX   rY   rD   )r%   r   r   r   r   rZ      s    

zLock.__repr__rD   rE   rF   r*   rZ   __classcell__r   r   r`   r   r          r   c                       r\   )r	   c                    r]   r^   )r_   r*   RECURSIVE_MUTEXr0   r`   r   r   r*      rM   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 )Nra   rb   r   )rc   r   r   )rd   nonzero)re   ro   )rT   rT   rU   (, rW   )r   rf   r   rg   r   rh   ri   rj   rR   rX   rY   rD   )r%   r   countr   r   r   rZ      s    



zRLock.__repr__rk   r   r   r`   r   r	      rm   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   rt   ru   rv   rw   r0   r   r   r   r:      s   zCondition.__getstate__c                 C   s    |\| _ | _| _| _|   d S r   )rt   ru   rv   rw   r"   r<   r   r   r   r>     s   zCondition.__setstate__c                 C   r2   r   )rt   r3   r0   r   r   r   r3     r4   zCondition.__enter__c                 G   s   | j j| S r   )rt   r7   r5   r   r   r   r7     s   zCondition.__exit__c                 C   r-   r   )rt   r.   r/   r0   r   r   r   r"     r1   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 )NrT   rU   rp   rq   rW   )ru   r   rR   rv   rX   rY   rD   rt   )r%   Znum_waitersr   r   r   rZ     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)
rt   r   rf   ru   r/   rj   r   rw   r.   rv   )r%   timeoutrr   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)rt   r   rf   rw   r.   rv   ru   r/   )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   )	rt   r   rf   rw   r.   rv   ru   r/   r   )r%   r|   Z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 rs   )_timerz   )r%   	predicatery   resultendtimewaittimer   r   r   wait_fora  s"   

zCondition.wait_forr   )rD   rE   rF   r*   r:   r>   r3   r7   r"   rZ   rz   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 rs   )r   r   _condr
   _flagr0   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   r.   r/   r0   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   r.   r/   r~   r0   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   r.   r0   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   r.   r/   rz   )r%   ry   r   r   r   rz     s   
	$z
Event.waitr   )rD   rE   rF   r*   r   r   r   rz   r   r   r   r   r   y  s    r   )r@   rO   rG   rh   _multiprocessingr   r   multiprocessingr   r   Zmultiprocessing.contextr    r   __all__r   r   r   ImportErrorr   rn   rJ   rK   r
   r   r   r	   r   r   r   r   r   r   <module>   s8   W 