
    Vh>                     4    d dl Z d dlmZ d dlZ G d d      Zy)    N)Optionalc                       e Zd ZdZd	dZdej                  ddfdZdeej                     fdZ	dee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    U/home/dcms/DCMS/lib/python3.12/site-packages/torch/distributed/fsdp/_limiter_utils.py__init__z_FreeEventQueue.__init__   s    6A6G6G6I-.*    
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Eventr   r   r   r    r   r   r   r      sM    /'%++ '$ '8EKK#8 (5;;/ r   r   )r	   typingr   r!   r   r#   r   r   <module>r%      s       r   