
    ȅi                     (    S SK r S SKr " S S5      rg)    Nc                       \ rS rSrSrSS jrS\R                  SS4S jrS\R                  S-  4S jr	S\R                  S-  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    _/home/james-whalen/.local/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   __static_attributes__ r   r   r   r      sM    /'%++ '$ '5;;#5 %++, r   r   )r	   r&   r   r)   r   r   <module>r*      s      r   