???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \<                 @   s   d ddddgZ ddlZddlmZ dd	lmZ dd
lmZ ddlmZ G dd dZG dd dZ	G dd  d e	Z
G dd dZG dd de	ZG dd de	ZG dd deZdS )LockEvent	Condition	SemaphoreBoundedSemaphore    N   )compat)events)futures)	coroutinec               @   s$   e Zd Zdd Zdd Zdd ZdS )_ContextManagerc             C   s
   || _ d S )N)_lock)selflock r   %/usr/lib64/python3.6/asyncio/locks.py__init__   s    z_ContextManager.__init__c             C   s   d S )Nr   )r   r   r   r   	__enter__   s    z_ContextManager.__enter__c             G   s   z| j j  W d d | _ X d S )N)r   release)r   argsr   r   r   __exit__$   s    z_ContextManager.__exit__N)__name__
__module____qualname__r   r   r   r   r   r   r   r      s   r   c               @   sN   e Zd Zdd Zdd Zedd ZejrJdd Z	ed	d
 Z
edd ZdS )_ContextManagerMixinc             C   s   t dd S )Nz9"yield from" should be used as context manager expression)RuntimeError)r   r   r   r   r   ,   s    z_ContextManagerMixin.__enter__c             G   s   d S )Nr   )r   r   r   r   r   r   0   s    z_ContextManagerMixin.__exit__c             c   s   | j  E d H  t| S )N)acquirer   )r   r   r   r   __iter__5   s    z_ContextManagerMixin.__iter__c             c   s   | j  E d H  t| S )N)r   r   )r   r   r   r   	__await__H   s    z_ContextManagerMixin.__await__c             c   s   | j  E d H  d S )N)r   )r   r   r   r   
__aenter__M   s    z_ContextManagerMixin.__aenter__c             C   s   | j   d S )N)r   )r   exc_typeexctbr   r   r   	__aexit__T   s    z_ContextManagerMixin.__aexit__N)r   r   r   r   r   r   r   r   ZPY35r   r   r#   r   r   r   r   r   +   s   r   c                   sN   e Zd ZddddZ fddZdd Zed	d
 Zdd Zdd Z	  Z
S )r   N)loopc            C   s.   t j | _d| _|d k	r || _n
tj | _d S )NF)collectionsdeque_waiters_locked_loopr	   get_event_loop)r   r$   r   r   r   r      s
    
zLock.__init__c                sD   t  j }| jrdnd}| jr0dj|t| j}dj|dd |S )Nlockedunlockedz{},waiters:{}z	<{} [{}]>r   )super__repr__r(   r'   formatlen)r   resextra)	__class__r   r   r/      s
    
zLock.__repr__c             C   s   | j S )N)r(   )r   r   r   r   r+      s    zLock.lockedc             c   s   | j  r&tdd | jD r&d| _ dS | jj }| jj| y"z|E d H  W d | jj| X W n& tjk
r   | j s~| j	   Y nX d| _ dS )Nc             s   s   | ]}|j  V  qd S )N)	cancelled).0wr   r   r   	<genexpr>   s    zLock.acquire.<locals>.<genexpr>T)
r(   allr'   r)   create_futureappendremover
   CancelledError_wake_up_first)r   futr   r   r   r      s    
zLock.acquirec             C   s"   | j rd| _ | j  ntdd S )NFzLock is not acquired.)r(   r>   r   )r   r   r   r   r      s    
zLock.releasec             C   s>   yt t| j}W n tk
r&   d S X |j s:|jd d S )NT)nextiterr'   StopIterationdone
set_result)r   r?   r   r   r   r>      s    zLock._wake_up_first)r   r   r   r   r/   r+   r   r   r   r>   __classcell__r   r   )r4   r   r   Y   s   6c                   sN   e Zd ZddddZ fddZdd Zd	d
 Zdd Zedd Z	  Z
S )r   N)r$   c            C   s.   t j | _d| _|d k	r || _n
tj | _d S )NF)r%   r&   r'   _valuer)   r	   r*   )r   r$   r   r   r   r      s
    
zEvent.__init__c                sD   t  j }| jrdnd}| jr0dj|t| j}dj|dd |S )NsetZunsetz{},waiters:{}z	<{} [{}]>r   r-   )r.   r/   rF   r'   r0   r1   )r   r2   r3   )r4   r   r   r/      s
    
zEvent.__repr__c             C   s   | j S )N)rF   )r   r   r   r   is_set   s    zEvent.is_setc             C   s2   | j s.d| _ x | jD ]}|j s|jd qW d S )NT)rF   r'   rC   rD   )r   r?   r   r   r   rG      s
    z	Event.setc             C   s
   d| _ d S )NF)rF   )r   r   r   r   clear  s    zEvent.clearc             c   sB   | j r
dS | jj }| jj| z|E d H  dS | jj| X d S )NT)rF   r)   r:   r'   r;   r<   )r   r?   r   r   r   wait  s    

z
Event.wait)r   r   r   r   r/   rH   rG   rI   r   rJ   rE   r   r   )r4   r   r      s   	c                   sV   e Zd ZdddddZ fddZedd Zed	d
 ZdddZdd Z	  Z
S )r   N)r$   c            C   sp   |d k	r|| _ n
tj | _ |d kr0t| j d}n|j | j k	rDtd|| _|j| _|j| _|j| _t	j
 | _d S )N)r$   z"loop argument must agree with lock)r)   r	   r*   r   
ValueErrorr   r+   r   r   r%   r&   r'   )r   r   r$   r   r   r   r   +  s    
zCondition.__init__c                sF   t  j }| j rdnd}| jr2dj|t| j}dj|dd |S )Nr+   r,   z{},waiters:{}z	<{} [{}]>r   r-   )r.   r/   r+   r'   r0   r1   )r   r2   r3   )r4   r   r   r/   >  s
    
zCondition.__repr__c             c   s   | j  std| j  z8| jj }| jj| z|E d H  dS | jj| X W d d}x4y| j E d H  P W qX t	j
k
r   d}Y qXX qXW |rt	j
X d S )Nzcannot wait on un-acquired lockTF)r+   r   r   r)   r:   r'   r;   r<   r   r
   r=   )r   r?   r5   r   r   r   rJ   E  s&    

zCondition.waitc             c   s(   | }x|s"| j  E d H  | }qW |S )N)rJ   )r   Z	predicateresultr   r   r   wait_fork  s
    
zCondition.wait_forr   c             C   sL   | j  stdd}x2| jD ](}||kr*P |j s|d7 }|jd qW d S )Nz!cannot notify on un-acquired lockr   r   F)r+   r   r'   rC   rD   )r   nidxr?   r   r   r   notifyy  s    zCondition.notifyc             C   s   | j t| j d S )N)rP   r1   r'   )r   r   r   r   
notify_all  s    zCondition.notify_all)N)r   )r   r   r   r   r/   r   rJ   rM   rP   rQ   rE   r   r   )r4   r   r   !  s   
&
c                   sP   e Zd ZdddddZ fddZdd	 Zd
d Zedd Zdd Z	  Z
S )r   r   N)r$   c            C   s>   |dk rt d|| _tj | _|d k	r0|| _n
tj | _d S )Nr   z$Semaphore initial value must be >= 0)rK   rF   r%   r&   r'   r)   r	   r*   )r   valuer$   r   r   r   r     s    
zSemaphore.__init__c                sN   t  j }| j rdn
dj| j}| jr:dj|t| j}dj|dd |S )Nr+   zunlocked,value:{}z{},waiters:{}z	<{} [{}]>r   r-   )r.   r/   r+   r0   rF   r'   r1   )r   r2   r3   )r4   r   r   r/     s    
zSemaphore.__repr__c             C   s0   x*| j r*| j j }|j s|jd  d S qW d S )N)r'   popleftrC   rD   )r   Zwaiterr   r   r   _wake_up_next  s
    

zSemaphore._wake_up_nextc             C   s
   | j dkS )Nr   )rF   )r   r   r   r   r+     s    zSemaphore.lockedc          	   c   sz   xf| j dkrf| jj }| jj| y|E d H  W q   |j  | j dkr\|j  r\| j   Y qX qW |  j d8  _ dS )Nr   r   T)rF   r)   r:   r'   r;   Zcancelr5   rT   )r   r?   r   r   r   r     s    

zSemaphore.acquirec             C   s   |  j d7  _ | j  d S )Nr   )rF   rT   )r   r   r   r   r     s    zSemaphore.release)r   )r   r   r   r   r/   rT   r+   r   r   r   rE   r   r   )r4   r   r     s   
c                   s0   e Zd Zddd fddZ fddZ  ZS )	r   r   N)r$   c               s   || _ t j||d d S )N)r$   )_bound_valuer.   r   )r   rR   r$   )r4   r   r   r     s    zBoundedSemaphore.__init__c                s"   | j | jkrtdt j  d S )Nz(BoundedSemaphore released too many times)rF   rU   rK   r.   r   )r   )r4   r   r   r     s    zBoundedSemaphore.release)r   )r   r   r   r   r   rE   r   r   )r4   r   r     s   )__all__r%    r   r	   r
   Z
coroutinesr   r   r   r   r   r   r   r   r   r   r   r   <module>   s   . ByM