o
    پi                     @   sh   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlZG dd dZeG dd	 d	ZdS )
    )deque)contextmanager)	dataclass)CallableDequeDictOptionalNc                   @   s4   e Zd ZdefddZedefddZdd Zd	S )
DeviceTimerreporterc                 C   s   t  | _|| _d S N)r   
_intervals	_reporter)selfr
    r   Q/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/utils/device_timer.py__init__
   s   
zDeviceTimer.__init__metadatac              	   c   sV    | j t  zd V  W | j d j|d |   d S | j d j|d |   w )N)r   )r   append_TimingIntervalcreateend_report)r   r   r   r   r   wrap   s   
zDeviceTimer.wrapc                 C   sd   t | jdkr0| jd }|j sd S | j  | jdd| d i|j t | jdksd S d S )Nr   tg     @@r   )lenr   	end_eventquerypopleftr   elapsed_timer   )r   intervalr   r   r   r      s   


zDeviceTimer._reportN)	__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r	   	   s
    r	   c                   @   sf   e Zd ZU ejjed< dZeejj ed< dZ	ee
 ed< edd Zde
fddZd	efd
dZdS )r   start_eventNr   r   c                  C   s    t jjdd} |   t| dS )NTenable_timingr$   )torchcudaEventrecordr   r'   r   r   r   r   '   s   
z_TimingInterval.createc                 C   s4   t jjdd}|  | jd u sJ || _|| _d S )NTr%   )r(   r)   r*   r+   r   r   )r   r   r   r   r   r   r   -   s
   
z_TimingInterval.endreturnc                 C   s   | j | jS r   )r$   r   r   )r   r   r   r   r   5   s   z_TimingInterval.elapsed_time)r!   r"   r#   r(   r)   r*   __annotations__r   r   r   r   staticmethodr   r   floatr   r   r   r   r   r   !   s   
 
r   )collectionsr   
contextlibr   dataclassesr   typingr   r   r   r   r(   r	   r   r   r   r   r   <module>   s    