o
    پi9                     @   sd  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ dejdefd	d
ZdejdedefddZdeej dedeej fddZdeej dedejfddZdeej dedeej fddZdeej dedejfddZdejdedeej fddZdejdedejfddZdedejdeej fddZdejdejfdd ZdS )!    N)IterableIterator)Optional)fx)auto_functionalized)
OpOverloadnodereturnc                 C   s   | j dko	| j|kS )Ncall_functionoptarget)r   r    r   S/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/compilation/fx_utils.pyis_func   s   r   r   c                 C   s   t | to| jd |kS Nr   r   r   args)r   r   r   r   r   is_auto_func   s   r   nodesc                 C   s    | D ]}|j |kr|  S qd S )N)r   r   r   r   r   r   r   find_specified_fn_maybe   s
   
r   c                 C   *   t | |}|d usJ d| d|  |S NzCould not find z
 in nodes )r   r   r   r   r   find_specified_fn      
r   c                 C   s.   | D ]}t |tr|jd |kr|  S qd S r   r   r   r   r   r   find_auto_fn_maybe&   s
   r   c                 C   r   r   )r   r   r   r   r   find_auto_fn.   r   r   idxc                 C   s2   | j D ]}t|tjr|jd |kr|  S qd S N   )usersr   operatorgetitemr   )r   r   userr   r   r   find_getitem_maybe6   s
   
r%   c                 C   r   )NzCould not find getitem z	 in node )r%   )r   r   retr   r   r   find_getitem>   r   r'   graphc                 c   sJ    | j js|jd| dE d H  |jdtdD ]}|jd | kr"|V  qd S )Nr
   r   r   )_schema
is_mutable
find_nodesr   r   )r   r(   nr   r   r   find_op_nodesE   s   r-   c                 C   s    t | jdks	J tt| jS r   )lenr!   nextiter)r   r   r   r   get_only_userQ   s   r1   )r"   collections.abcr   r   typingr   torchr   *torch._higher_order_ops.auto_functionalizer   
torch._opsr   Nodeboolr   r   r   r   r   r   intr%   r'   Graphr-   r1   r   r   r   r   <module>   s,   

"