a
    ze,                     @   s   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 zd dl	m
Z
 W n ey^   dZ
Y n0 g dZzd dl	mZ W n" ey   G dd	 d	eZY n0 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Ze
du reZ
dS )    N)deque)heappushheappop)	monotonic)SimpleQueue)EmptyFullQueuePriorityQueue	LifoQueuer   )r   c                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r   r   /usr/lib/python3.9/queue.pyr      s   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   r   c                   @   s   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dZ	d"ddZ
dd Zdd Zdd Zdd Zdd Zdd ZeejZdS )#r	   r   c                 C   sN   || _ | | t | _t| j| _t| j| _t| j| _d| _	d S Nr   )
maxsize_init	threadingLockmutex	Condition	not_emptynot_fullall_tasks_doneunfinished_tasksselfr   r   r   r   __init__"   s    

zQueue.__init__c                 C   s\   | j B | jd }|dkr4|dk r*td| j   || _W d    n1 sN0    Y  d S )N   r   z!task_done() called too many times)r   r   
ValueError
notify_all)r   
unfinishedr   r   r   	task_done9   s    

zQueue.task_donec                 C   s<   | j " | jr| j   qW d    n1 s.0    Y  d S N)r   r   waitr   r   r   r   joinO   s    	z
Queue.joinc                 C   s2   | j  |  W  d    S 1 s$0    Y  d S r%   r   _qsizer'   r   r   r   qsize\   s    zQueue.qsizec                 C   s4   | j  |   W  d    S 1 s&0    Y  d S r%   r)   r'   r   r   r   emptya   s    zQueue.emptyc                 C   sH   | j . d| j  k o |  kn  W  d    S 1 s:0    Y  d S r   )r   r   r*   r'   r   r   r   fullo   s    z
Queue.fullTNc                 C   s   | j  | jdkr|s*|  | jkrtnr|d u rN|  | jkr| j   q2nN|dk r`tdn<t | }|  | jkr|t  }|dkrt| j | qj| | |  jd7  _| j	
  W d    n1 s0    Y  d S )Nr   ''timeout' must be a non-negative number        r    )r   r   r*   r   r&   r!   time_putr   r   notify)r   itemblocktimeoutendtime	remainingr   r   r   putz   s&    




z	Queue.putc                 C   s   | j  |s|  stnf|d u r8|  s| j   q"nH|dk rJtdn6t | }|  s|t  }|dkrrt| j | qT|  }| j  |W  d    S 1 s0    Y  d S )Nr   r.   r/   )	r   r*   r   r&   r!   r0   _getr   r2   )r   r4   r5   r6   r7   r3   r   r   r   get   s$    



z	Queue.getc                 C   s   | j |ddS NF)r4   r8   r   r3   r   r   r   
put_nowait   s    zQueue.put_nowaitc                 C   s   | j ddS r;   r:   r'   r   r   r   
get_nowait   s    zQueue.get_nowaitc                 C   s   t  | _d S r%   )r   queuer   r   r   r   r      s    zQueue._initc                 C   s
   t | jS r%   lenrA   r'   r   r   r   r*      s    zQueue._qsizec                 C   s   | j | d S r%   rA   appendr=   r   r   r   r1      s    z
Queue._putc                 C   s
   | j  S r%   )rA   popleftr'   r   r   r   r9      s    z
Queue._get)r   )TN)TN)r   r   r   r   r$   r(   r+   r,   r-   r8   r:   r>   r@   r   r*   r1   r9   classmethodtypesGenericAlias__class_getitem__r   r   r   r   r	      s   

 
r	   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r
   c                 C   s
   g | _ d S r%   rA   r   r   r   r   r      s    zPriorityQueue._initc                 C   s
   t | jS r%   rB   r'   r   r   r   r*      s    zPriorityQueue._qsizec                 C   s   t | j| d S r%   )r   rA   r=   r   r   r   r1      s    zPriorityQueue._putc                 C   s
   t | jS r%   )r   rA   r'   r   r   r   r9      s    zPriorityQueue._getNr   r   r   r   r*   r1   r9   r   r   r   r   r
      s   r
   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C   s
   g | _ d S r%   rK   r   r   r   r   r      s    zLifoQueue._initc                 C   s
   t | jS r%   rB   r'   r   r   r   r*      s    zLifoQueue._qsizec                 C   s   | j | d S r%   rD   r=   r   r   r   r1      s    zLifoQueue._putc                 C   s
   | j  S r%   )rA   popr'   r   r   r   r9      s    zLifoQueue._getNrL   r   r   r   r   r      s   r   c                   @   sR   e Zd Zdd ZdddZdddZd	d
 Zdd Zdd Zdd Z	e
ejZdS )_PySimpleQueuec                 C   s   t  | _td| _d S r   )r   _queuer   	Semaphore_countr'   r   r   r   r     s    z_PySimpleQueue.__init__TNc                 C   s   | j | | j  d S r%   )rO   rE   rQ   release)r   r3   r4   r5   r   r   r   r8     s    z_PySimpleQueue.putc                 C   s4   |d ur|dk rt d| j||s*t| j S )Nr   r.   )r!   rQ   acquirer   rO   rF   )r   r4   r5   r   r   r   r:     s
    z_PySimpleQueue.getc                 C   s   | j |ddS r;   r<   r=   r   r   r   r>   *  s    z_PySimpleQueue.put_nowaitc                 C   s   | j ddS r;   r?   r'   r   r   r   r@   2  s    z_PySimpleQueue.get_nowaitc                 C   s   t | jdkS r   rC   rO   r'   r   r   r   r,   :  s    z_PySimpleQueue.emptyc                 C   s
   t | jS r%   rT   r'   r   r   r   r+   >  s    z_PySimpleQueue.qsize)TN)TN)r   r   r   r   r8   r:   r>   r@   r,   r+   rG   rH   rI   rJ   r   r   r   r   rN     s   

	
rN   )r   rH   collectionsr   heapqr   r   r0   r   rO   r   ImportError__all__r   	Exceptionr   r	   r
   r   rN   r   r   r   r   <module>   s*   
 DC