
    sh>                     4    S SK r S SKJr  S SKr " S S5      rg)    N)Optionalc                       \ rS rSrSrSS jrS\R                  SS4S jrS\	\R                     4S jr
S\	\R                     4S	 jrS
rg)_FreeEventQueue   z
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                 F    [         R                  " 5       U l        SU l        g )N   )collectionsdeque_queue_max_num_inflight_all_gathersselfs    y/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/distributed/fsdp/_limiter_utils.py__init___FreeEventQueue.__init__   s    6A6G6G6I-.*    
free_eventc                 :    U R                   R                  U5        g)zEnqueues a free event.N)r   append)r   r   s     r   enqueue_FreeEventQueue.enqueue   s    :&r   c                 j    [        U R                  5      U R                  :  a  U R                  5       $ g)z0Dequeues a single event if the limit is reached.N)lenr   r   _dequeuer   s    r   dequeue_if_needed!_FreeEventQueue.dequeue_if_needed   s(    t{{tAAA==?"r   c                 ^    U R                   (       a  U R                   R                  5       nU$ g)z"Dequeues a free event if possible.N)r   popleft)r   events     r   r   _FreeEventQueue._dequeue   s#    ;;KK'')ELr   )r   r   )r   N)__name__
__module____qualname____firstlineno____doc__r   torchEventr   r   r   r   __static_attributes__ r   r   r   r      sM    /'%++ '$ '8EKK#8 (5;;/ r   r   )r
   typingr   r'   r   r*   r   r   <module>r,      s       r   