o
    پii                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 d dl
mZmZ d dlmZ e eZG dd dZG d	d
 d
eZedd ZdS )    N)contextmanager)Enumauto)AnyListOptional)BlockReqInputBlockReqType)PollBasedBarrierc                   @   sZ   e Zd ZdefddZdeee  fddZdd Z	d	d
 Z
dd Zdd ZdddZdS )SchedulerInputBlockernoopc                 C   s$   t j| _g | _|| _t|d| _d S )N)r   )_State	UNBLOCKED_state_pending_reqs_noopr
   _global_unblock_barrier)selfr    r   _/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/managers/scheduler_input_blocker.py__init__   s   zSchedulerInputBlocker.__init__	recv_reqsc                 C   sh   |d u | j ks	J | j sg }|D ]	}|| |7 }q| j }| jtjkr-|r-||  7 }| j s2|S d S N)r   _handle_recv_reqr   poll_global_arrivedr   r   GLOBAL_UNBLOCK_BARRIER_handle_arrive_unblock_barrier)r   r   output_reqsrecv_reqglobal_arrived_unblock_barrierr   r   r   handle    s   zSchedulerInputBlocker.handlec                 C   sj   t |tr$|jtjkr|   g S |jtjkr|   g S td|| j	t
jkr-|gS | j| g S )Nz	recv_req=)
isinstancer   typer	   BLOCK_execute_block_reqUNBLOCK_execute_unblock_reqNotImplementedErrorr   r   r   r   append)r   r   r   r   r   r   4   s   
z&SchedulerInputBlocker._handle_recv_reqc                 C   s    t d | jtjtjd d S )NzHandle block reqoriginaltarget)loggerinfo_change_stater   r   BLOCKEDr   r   r   r   r$   E   s   
z(SchedulerInputBlocker._execute_block_reqc                 C   s*   t d | jtjtjd | j  d S )NzHandle unblock reqr)   )r,   r-   r.   r   r/   r   r   local_arriver0   r   r   r   r&   I   s
   
z*SchedulerInputBlocker._execute_unblock_reqc                 C   sB   t dt| jd | jtjtjd g | j}| j  |S )Nz4Arrived at unblock barrier (len(self._pending_reqs)=)r)   )	r,   r-   lenr   r.   r   r   r   clear)r   r   r   r   r   r   P   s   

z4SchedulerInputBlocker._handle_arrive_unblock_barrierr*   r   r+   c                 C   s0   | j |ksJ d| j d|d||| _ d S )Nzself._state=z
 original=z target=)r   )r   r*   r+   r   r   r   r.   Y   s   &
z#SchedulerInputBlocker._change_stateN)r*   r   r+   r   )__name__
__module____qualname__boolr   r   r   r   r    r   r$   r&   r   r.   r   r   r   r   r      s    	r   c                   @   s   e Zd Ze Ze Ze ZdS )r   N)r5   r6   r7   r   r   r/   r   r   r   r   r   r   ^   s    
r   c              
   c   sB    |  ttj zd V  W |  ttj d S |  ttj w r   )
send_pyobjr   r	   r#   r%   )send_to_schedulerr   r   r   input_blocker_guard_regiond   s
   &r;   )logging
contextlibr   enumr   r   typingr   r   r   sglang.srt.managers.io_structr   r	   #sglang.srt.utils.poll_based_barrierr
   	getLoggerr5   r,   r   r   r;   r   r   r   r   <module>   s   
E