
    Phn                     8    d dl Z d dlmZmZ d dlZ G d d      Zy)    N)DequeOptionalc                       e Zd ZdZd	dZdej                  j                  ddfdZde	ej                  j                     fdZ
de	ej                  j                     fdZy)
_FreeEventQueuez
    This tracks all pending frees corresponding to inflight all-gathers. The
    queueing pattern is iterative enqueues with a single dequeue per iteration
    once the limit ``_max_num_inflight_all_gathers`` is reached.
    returnNc                 D    t        j                         | _        d| _        y )N   )collectionsdeque_queue_max_num_inflight_all_gathersselfs    pC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/distributed/fsdp/_limiter_utils.py__init__z_FreeEventQueue.__init__   s    /:/@/@/B-.*    
free_eventc                 :    | j                   j                  |       y)zEnqueues a free event.N)r   append)r   r   s     r   enqueuez_FreeEventQueue.enqueue   s    :&r   c                 h    t        | j                        | j                  k\  r| j                         S y)z0Dequeues a single event if the limit is reached.N)lenr   r   _dequeuer   s    r   dequeue_if_neededz!_FreeEventQueue.dequeue_if_needed   s(    t{{tAAA==?"r   c                 T    | j                   r| j                   j                         }|S y)z"Dequeues a free event if possible.N)r   popleft)r   events     r   r   z_FreeEventQueue._dequeue   s#    ;;KK'')ELr   )r   N)__name__
__module____qualname____doc__r   torchcudaEventr   r   r   r    r   r   r   r      s_    /'%**"2"2 't '8EJJ,<,<#= (5::#3#34 r   r   )r
   typingr   r   r"   r   r%   r   r   <module>r'      s     "  r   