Ë
    g^(h>  ã                   ó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    úc/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributed/fsdp/_limiter_utils.pyÚ__init__z_FreeEventQueue.__init__   s   € Ü6A×6GÑ6GÓ6IˆŒØ-.ˆÕ*ó    Ú
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#   € à�;Š;Ø—K‘K×'Ñ'Ó)ˆEØˆLØr   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚEventr   r   r   r   © r   r   r   r      sM   „ ñó/ð' %§+¡+ð '°$ó 'ð 8¨E¯K©KÑ#8ó ð˜( 5§;¡;Ñ/ô r   r   )r	   Útypingr   r!   r   r#   r   r   ú<module>r%      s   ðÛ Ý ã ÷ò r   